This time it renders progs/demos/bounce and progs/samples/sphere correctly.
From 1848ef2fc2b25a49e555c5f23694b9df590756b2 Mon Sep 17 00:00:00 2001
From: Andrew Randrianasulu <rand...@mail.ru>
Date: Tue, 9 Mar 2010 06:24:16 +0000
Subject: [PATCH 1/2] nouveau/nv04: very primitive line/point render

---
 src/mesa/drivers/dri/nouveau/nv04_render.c |  156 ++++++++++++++++++++++++++++
 1 files changed, 156 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/nouveau/nv04_render.c b/src/mesa/drivers/dri/nouveau/nv04_render.c
index b5943d9..633fbb1 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_render.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_render.c
@@ -36,6 +36,18 @@
 
 #define NUM_VERTEX_ATTRS 6
 
+typedef struct
+{
+	        float ScreenX;
+	        float ScreenY;
+	        float ScreenZ;
+	        float EyeM;
+	        unsigned int Color;
+	        unsigned int Specular;
+	        float TextureS;
+	        float TextureT;
+} NV_HW_Vertex;
+
 static void
 swtnl_update_viewport(GLcontext *ctx)
 {
@@ -148,11 +160,155 @@ swtnl_reset_stipple(GLcontext *ctx)
 static void
 swtnl_points(GLcontext *ctx, GLuint first, GLuint last)
 {
+	int i;
+
+	GLfloat pointSize = ctx->Point.Size * 0.5; // was 0.75
+	GLfloat dx, dy, z, z1;
+	GLfloat x,y;
+	NV_HW_Vertex vertex_four[4];
+
+
+for (i=first;i<=last;i++)
+    {
+
+
+	x =  ((float *) _tnl_get_vertex( ctx, i ))[0];
+	y =  ((float *) _tnl_get_vertex( ctx, i ))[1];
+
+/* Populate NV_HW_vertex */
+	vertex_four[0].ScreenX = x - pointSize; 
+	vertex_four[0].ScreenY = y + pointSize;
+	vertex_four[0].ScreenZ = ((float *) _tnl_get_vertex( ctx, i ))[2];
+	vertex_four[0].EyeM = ((float *) _tnl_get_vertex( ctx, i ))[3];
+	vertex_four[0].Color = ((unsigned int *) _tnl_get_vertex( ctx, i ))[4];
+	vertex_four[0].Specular = ((unsigned int *) _tnl_get_vertex( ctx, i ))[5];
+	vertex_four[0].TextureS = ((float *) _tnl_get_vertex( ctx, i ))[6];
+	vertex_four[0].TextureT = ((float *) _tnl_get_vertex( ctx, i ))[7];
+	
+	vertex_four[1].ScreenX = x - pointSize; 
+	vertex_four[1].ScreenY = y - pointSize;
+	vertex_four[1].ScreenZ = ((float *) _tnl_get_vertex( ctx, i ))[2];
+	vertex_four[1].EyeM = ((float *) _tnl_get_vertex( ctx, i ))[3];
+	vertex_four[1].Color = ((unsigned int *) _tnl_get_vertex( ctx, i ))[4];
+	vertex_four[1].Specular = ((unsigned int *) _tnl_get_vertex( ctx, i ))[5];
+	vertex_four[1].TextureS = ((float *) _tnl_get_vertex( ctx, i ))[6];
+	vertex_four[1].TextureT = ((float *) _tnl_get_vertex( ctx, i ))[7];
+
+	vertex_four[2].ScreenX = x + pointSize; 
+	vertex_four[2].ScreenY = y - pointSize;
+	vertex_four[2].ScreenZ = ((float *) _tnl_get_vertex( ctx, i ))[2];
+	vertex_four[2].EyeM = ((float *) _tnl_get_vertex( ctx, i ))[3];
+	vertex_four[2].Color = ((unsigned int *) _tnl_get_vertex( ctx, i ))[4];
+	vertex_four[2].Specular = ((unsigned int *) _tnl_get_vertex( ctx, i ))[5];
+	vertex_four[2].TextureS = ((float *) _tnl_get_vertex( ctx, i ))[6];
+	vertex_four[2].TextureT = ((float *) _tnl_get_vertex( ctx, i ))[7];
+
+	vertex_four[3].ScreenX = x + pointSize; 
+	vertex_four[3].ScreenY = y + pointSize;
+	vertex_four[3].ScreenZ = ((float *) _tnl_get_vertex( ctx, i ))[2];
+	vertex_four[3].EyeM = ((float *) _tnl_get_vertex( ctx, i ))[3];
+	vertex_four[3].Color = ((unsigned int *) _tnl_get_vertex( ctx, i ))[4];
+	vertex_four[3].Specular = ((unsigned int *) _tnl_get_vertex( ctx, i ))[5];
+	vertex_four[3].TextureS = ((float *) _tnl_get_vertex( ctx, i ))[6];
+	vertex_four[3].TextureT = ((float *) _tnl_get_vertex( ctx, i ))[7];
+
+
+	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
 swtnl_line(GLcontext *ctx, GLuint v1, GLuint v2)
 {
+	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[1].ScreenZ = ((float *) _tnl_get_vertex( ctx, v1 ))[2];
+	vertex_four[1].EyeM = ((float *) _tnl_get_vertex( ctx, v1 ))[3];
+	vertex_four[1].Color = ((unsigned int *) _tnl_get_vertex( ctx, v1 ))[4];
+	vertex_four[1].Specular = ((unsigned int *) _tnl_get_vertex( ctx, v1 ))[5];
+	vertex_four[1].TextureS = ((float *) _tnl_get_vertex( ctx, v1 ))[6];
+	vertex_four[1].TextureT = ((float *) _tnl_get_vertex( ctx, v1 ))[7];
+
+	vertex_four[2].ScreenX = x2 + dx; 
+	vertex_four[2].ScreenY = y2 + dy;
+	vertex_four[2].ScreenZ = ((float *) _tnl_get_vertex( ctx, v2 ))[2];
+	vertex_four[2].EyeM = ((float *) _tnl_get_vertex( ctx, v2 ))[3];
+	vertex_four[2].Color = ((unsigned int *) _tnl_get_vertex( ctx, v2 ))[4];
+	vertex_four[2].Specular = ((unsigned int *) _tnl_get_vertex( ctx, v2 ))[5];
+	vertex_four[2].TextureS = ((float *) _tnl_get_vertex( ctx, v2 ))[6];
+	vertex_four[2].TextureT = ((float *) _tnl_get_vertex( ctx, v2 ))[7];
+
+	vertex_four[3].ScreenX = x2 - dx; 
+	vertex_four[3].ScreenY = y2 - dy;
+	vertex_four[3].ScreenZ = ((float *) _tnl_get_vertex( ctx, v2 ))[2];
+	vertex_four[3].EyeM = ((float *) _tnl_get_vertex( ctx, v2 ))[3];
+	vertex_four[3].Color = ((unsigned int *) _tnl_get_vertex( ctx, v2 ))[4];
+	vertex_four[3].Specular = ((unsigned int *) _tnl_get_vertex( ctx, v2 ))[5];
+	vertex_four[3].TextureS = ((float *) _tnl_get_vertex( ctx, v2 ))[6];
+	vertex_four[3].TextureT = ((float *) _tnl_get_vertex( ctx, v2 ))[7];
+
+
+	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
-- 
1.6.5.4

From cd13cef14e83cc08a5688d84402dfacb55d39634 Mon Sep 17 00:00:00 2001
From: Andrew Randrianasulu <rand...@mail.ru>
Date: Tue, 9 Mar 2010 07:00:10 +0000
Subject: [PATCH 2/2] nouveau/nv04: small cleanup + fix for lines, uses nv05's vertex cache feature

---
 src/mesa/drivers/dri/nouveau/nv04_render.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/nouveau/nv04_render.c b/src/mesa/drivers/dri/nouveau/nv04_render.c
index 633fbb1..b1fce55 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_render.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_render.c
@@ -163,7 +163,6 @@ swtnl_points(GLcontext *ctx, GLuint first, GLuint last)
 	int i;
 
 	GLfloat pointSize = ctx->Point.Size * 0.5; // was 0.75
-	GLfloat dx, dy, z, z1;
 	GLfloat x,y;
 	NV_HW_Vertex vertex_four[4];
 
@@ -301,14 +300,13 @@ swtnl_line(GLcontext *ctx, GLuint v1, GLuint v2)
 	vertex_four[3].TextureS = ((float *) _tnl_get_vertex( ctx, v2 ))[6];
 	vertex_four[3].TextureT = ((float *) _tnl_get_vertex( ctx, v2 ))[7];
 
-
 	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);
-
+	END_PRIMITIVE(0x210320);
+	END_PRIMITIVE(0x120230);
 }
 
 static void
-- 
1.6.5.4

------------------------------------------------------------------------------
Download Intel&#174; 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

Reply via email to