diff --git a/src/mesa/drivers/dri/nouveau/nv04_render.c b/src/mesa/drivers/dri/nouveau/nv04_render.c index b5943d9..371bed0 100644 --- a/src/mesa/drivers/dri/nouveau/nv04_render.c +++ b/src/mesa/drivers/dri/nouveau/nv04_render.c @@ -153,6 +153,110 @@ swtnl_points(GLcontext *ctx, GLuint first, GLuint last) static void swtnl_line(GLcontext *ctx, GLuint v1, GLuint v2) { +#if 1 +typedef unsigned int U032; + +typedef struct +{ + float ScreenX; + float ScreenY; + float ScreenZ; + float EyeM; + U032 Color; + U032 Specular; + float TextureS; + float TextureT; +} NV_HW_Vertex; + + + + GLfloat LineWidth; + GLfloat dx, dy, z, z1; + GLfloat x1,x2,y1,y2; + NV_HW_Vertex vertex_four[4]; + + + GLfloat pos_tmp1[4]; /*x,y,z,w */ + GLfloat pos_tmp2[4]; /*x,y,z,w */ + + LineWidth = ctx->Line.Width * 0.5F; + + /* + * Get line extents. + */ + + x1 = ((float *) _tnl_get_vertex( ctx, v1 ))[0]; + x2 = ((float *) _tnl_get_vertex( ctx, v2 ))[0]; + y1 = ((float *) _tnl_get_vertex( ctx, v1 ))[1]; + y2 = ((float *) _tnl_get_vertex( ctx, v2 ))[1]; + +/* +* Determine major and minor axis. +*/ + + dx = x2 - x1; dy = y2 - y1; + if (fabs(dx) > fabs(dy)) + { + dy = LineWidth; + dx = 0.0F; + } + else + { + dx = LineWidth; + dy = 0.0F; + } + + // z = ((float *) _tnl_get_vertex( ctx, v1 ))[2] + ctx->LineOffset; + + +/* Populate NV_HW_vertex */ + vertex_four[0].ScreenX = x1 - dx; + vertex_four[0].ScreenY = y1 - dy; + vertex_four[0].ScreenZ = ((float *) _tnl_get_vertex( ctx, v1 ))[2]; + vertex_four[0].EyeM = ((float *) _tnl_get_vertex( ctx, v1 ))[3]; + vertex_four[0].Color = ((unsigned int *) _tnl_get_vertex( ctx, v1 ))[4]; + vertex_four[0].Specular = ((unsigned int *) _tnl_get_vertex( ctx, v1 ))[5]; + vertex_four[0].TextureS = ((float *) _tnl_get_vertex( ctx, v1 ))[6]; + vertex_four[0].TextureT = ((float *) _tnl_get_vertex( ctx, v1 ))[7]; + + vertex_four[1].ScreenX = x1 + dx; + vertex_four[1].ScreenY = y1 + dy; + vertex_four[0].ScreenZ = ((float *) _tnl_get_vertex( ctx, v1 ))[2]; + vertex_four[0].EyeM = ((float *) _tnl_get_vertex( ctx, v1 ))[3]; + vertex_four[0].Color = ((unsigned int *) _tnl_get_vertex( ctx, v1 ))[4]; + vertex_four[0].Specular = ((unsigned int *) _tnl_get_vertex( ctx, v1 ))[5]; + vertex_four[0].TextureS = ((float *) _tnl_get_vertex( ctx, v1 ))[6]; + vertex_four[0].TextureT = ((float *) _tnl_get_vertex( ctx, v1 ))[7]; + + vertex_four[2].ScreenX = x2 + dx; + vertex_four[2].ScreenY = y2 + dy; + vertex_four[0].ScreenZ = ((float *) _tnl_get_vertex( ctx, v2 ))[2]; + vertex_four[0].EyeM = ((float *) _tnl_get_vertex( ctx, v2 ))[3]; + vertex_four[0].Color = ((unsigned int *) _tnl_get_vertex( ctx, v2 ))[4]; + vertex_four[0].Specular = ((unsigned int *) _tnl_get_vertex( ctx, v2 ))[5]; + vertex_four[0].TextureS = ((float *) _tnl_get_vertex( ctx, v2 ))[6]; + vertex_four[0].TextureT = ((float *) _tnl_get_vertex( ctx, v2 ))[7]; + + vertex_four[3].ScreenX = x2 - dx; + vertex_four[3].ScreenY = y2 - dy; + vertex_four[0].ScreenZ = ((float *) _tnl_get_vertex( ctx, v2 ))[2]; + vertex_four[0].EyeM = ((float *) _tnl_get_vertex( ctx, v2 ))[3]; + vertex_four[0].Color = ((unsigned int *) _tnl_get_vertex( ctx, v2 ))[4]; + vertex_four[0].Specular = ((unsigned int *) _tnl_get_vertex( ctx, v2 ))[5]; + vertex_four[0].TextureS = ((float *) _tnl_get_vertex( ctx, v2 ))[6]; + vertex_four[0].TextureT = ((float *) _tnl_get_vertex( ctx, v2 ))[7]; + + + + +#endif + BEGIN_PRIMITIVE(4); + OUT_RINGp(chan, &vertex_four[0], vertex_len); + OUT_RINGp(chan, &vertex_four[1], vertex_len); + OUT_RINGp(chan, &vertex_four[2], vertex_len); + OUT_RINGp(chan, &vertex_four[3], vertex_len); + END_PRIMITIVE(0x320210); + } static void