Hello all!
I recently plugged in old TNT2 (nv05) card and started to playing with it.
This hardware can do quads and triangles, but not lines or points .... So, i
need to emulate them.
utah-glx has some code exactly for this generation of hardware:
http://utah-glx.cvs.sourceforge.net/viewvc/utah-glx/glx-xf3/servGL/hwglx/nv/riva_prim.c?revision=1.11&view=markup
I tried to cook up something like this for current nouveau driver, but nearly
failed.
Lack of hardware PolygonOffset support lead me into
src/mesa/tnl_dd/t_dd_tritmp.h , used in many drivers. Currently, it can only
DE-compose triangles, but can (or better - should) it be abjusted for
creating additional vertex info (2->4, 1->4) ?
Should one still use this file in modern world? On non-hw-tcl capable hw .....
diff --git a/src/mesa/drivers/dri/nouveau/nv04_render.c b/src/mesa/drivers/dri/nouveau/nv04_render.c
index b5943d9..ce6bf98 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_render.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_render.c
@@ -148,11 +148,128 @@ swtnl_reset_stipple(GLcontext *ctx)
static void
swtnl_points(GLcontext *ctx, GLuint first, GLuint last)
{
+GLfloat pointSize;
+
+pointSize = ctx->Point.Size * 0.75;
+
+
+#if 0
+ BEGIN_PRIMITIVE(4);
+ OUT_VERTEX(first);
+ OUT_VERTEX(last);
+ OUT_VERTEX(first);
+ OUT_VERTEX(last);
+ END_PRIMITIVE(0x320210);
+#endif
}
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_VERTEX(v1);
+ OUT_VERTEX(v1);
+ OUT_VERTEX(v2);
+ OUT_VERTEX(v2);
+ END_PRIMITIVE(0x320210);
}
static void
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev