I965: fix bug#9625-get the correct PV for quardstrip
authorXiang, Haihao <haihao.xiang@intel.com>
Wed, 17 Jan 2007 02:39:50 +0000 (10:39 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Wed, 17 Jan 2007 02:39:50 +0000 (10:39 +0800)
The order of vertices in payload for quardstrip is (0, 1, 3, 2),
so the PV for quardstrip is c->reg.vertex[2].

src/mesa/drivers/dri/i965/brw_gs.c
src/mesa/drivers/dri/i965/brw_gs.h
src/mesa/drivers/dri/i965/brw_gs_emit.c

index 9066e42252d9906b5b37bb555fc6e7be7be97359..73263a5fff4ba2ca7b76c54973f184cb605a203b 100644 (file)
@@ -82,6 +82,9 @@ static void compile_gs_prog( struct brw_context *brw,
    case GL_QUADS:
       brw_gs_quads( &c ); 
       break;
+   case GL_QUAD_STRIP:
+      brw_gs_quad_strip( &c );
+      break;
    case GL_LINE_LOOP:
       brw_gs_lines( &c );
       break;
@@ -145,7 +148,7 @@ static const GLenum gs_prim[GL_POLYGON+1] = {
    GL_TRIANGLES,
    GL_TRIANGLES,
    GL_QUADS,
-   GL_QUADS,
+   GL_QUAD_STRIP,
    GL_TRIANGLES
 };
 
index f9aa71d91997d7084d3047a8e69430ad8def0adc..29a4e80ce1be4b242b57940b15250568a8acdd2e 100644 (file)
@@ -67,6 +67,7 @@ struct brw_gs_compile {
 #define ATTR_SIZE  (4*4)
 
 void brw_gs_quads( struct brw_gs_compile *c );
+void brw_gs_quad_strip( struct brw_gs_compile *c );
 void brw_gs_tris( struct brw_gs_compile *c );
 void brw_gs_lines( struct brw_gs_compile *c );
 void brw_gs_points( struct brw_gs_compile *c );
index e4eed36a46421c7ab3ce6d95b0c28cb10c85ba87..9abb94d82ed5d3bbb0be1e90cc00a59066067504 100644 (file)
@@ -116,6 +116,16 @@ void brw_gs_quads( struct brw_gs_compile *c )
    brw_gs_emit_vue(c, c->reg.vertex[2], 1, ((_3DPRIM_POLYGON << 2) | R02_PRIM_END));
 }
 
+void brw_gs_quad_strip( struct brw_gs_compile *c )
+{
+   brw_gs_alloc_regs(c, 4);
+   
+   brw_gs_emit_vue(c, c->reg.vertex[2], 0, ((_3DPRIM_POLYGON << 2) | R02_PRIM_START));
+   brw_gs_emit_vue(c, c->reg.vertex[3], 0, (_3DPRIM_POLYGON << 2));
+   brw_gs_emit_vue(c, c->reg.vertex[0], 0, (_3DPRIM_POLYGON << 2)); 
+   brw_gs_emit_vue(c, c->reg.vertex[1], 1, ((_3DPRIM_POLYGON << 2) | R02_PRIM_END));
+}
+
 void brw_gs_tris( struct brw_gs_compile *c )
 {
    brw_gs_alloc_regs(c, 3);