fixup packet setup - still hangs
authorDave Airlie <airlied@linux.ie>
Sun, 17 Jun 2007 04:47:09 +0000 (14:47 +1000)
committerDave Airlie <airlied@linux.ie>
Sun, 17 Jun 2007 04:47:09 +0000 (14:47 +1000)
src/mesa/drivers/dri/r300/r300_emit.h
src/mesa/drivers/dri/r300/r300_render.c
src/mesa/drivers/dri/r300/r300_swtcl.c

index 2f79ee3a23a0c51b677ea1a32414ab7777f5007a..ce7279bbef47365c379bc7e075bacd7b2378262c 100644 (file)
@@ -225,5 +225,7 @@ void r300UseArrays(GLcontext * ctx);
 #endif
 
 extern void r300ReleaseArrays(GLcontext * ctx);
+extern int r300PrimitiveType(r300ContextPtr rmesa, int prim);
+extern int r300NumVerts(r300ContextPtr rmesa, int num_verts, int prim);
 
 #endif
index 7770cbbacb528db32e4ca0ca8a360c3307659120..7d97245281f99f52637186a951dbda41ddf8ae23 100644 (file)
@@ -79,7 +79,7 @@ extern int future_hw_tcl_on;
 /**
  * \brief Convert a OpenGL primitive type into a R300 primitive type.
  */
-static int r300PrimitiveType(r300ContextPtr rmesa, GLcontext * ctx, int prim)
+int r300PrimitiveType(r300ContextPtr rmesa, int prim)
 {
        switch (prim & PRIM_MODE_MASK) {
        case GL_POINTS:
@@ -119,7 +119,7 @@ static int r300PrimitiveType(r300ContextPtr rmesa, GLcontext * ctx, int prim)
        }
 }
 
-static int r300NumVerts(r300ContextPtr rmesa, int num_verts, int prim)
+int r300NumVerts(r300ContextPtr rmesa, int num_verts, int prim)
 {
        int verts_off = 0;
 
@@ -261,7 +261,7 @@ static void r300RunRenderPrimitive(r300ContextPtr rmesa, GLcontext * ctx,
        TNLcontext *tnl = TNL_CONTEXT(ctx);
        struct vertex_buffer *vb = &tnl->vb;
 
-       type = r300PrimitiveType(rmesa, ctx, prim);
+       type = r300PrimitiveType(rmesa, prim);
        num_verts = r300NumVerts(rmesa, end - start, prim);
 
        if (type < 0 || num_verts <= 0)
index 7a3ddcd503f268f4e738dd70b3b656ec4c54b04a..f724a8e6f855b8e4ce1c95da6e639a10faacf11a 100644 (file)
@@ -637,15 +637,15 @@ void r300EmitVertexAOS(r300ContextPtr rmesa, GLuint vertex_size, GLuint offset)
        int cmd_reserved = 0;
        int cmd_written = 0;
 
-  drm_radeon_cmd_header_t *cmd = NULL;
-  if (1)//RADEON_DEBUG & DEBUG_VERTS)
-      fprintf(stderr, "%s:  vertex_size %d, offset 0x%x \n",
-             __FUNCTION__, vertex_size, offset);
-
-  start_packet3(CP_PACKET3(R300_PACKET3_3D_LOAD_VBPNTR, 2), 2);
-  e32(1);
-  e32(vertex_size | (vertex_size << 8));
-  e32(offset);
+       drm_radeon_cmd_header_t *cmd = NULL;
+       if (1)//RADEON_DEBUG & DEBUG_VERTS)
+         fprintf(stderr, "%s:  vertex_size %d, offset 0x%x \n",
+                 __FUNCTION__, vertex_size, offset);
+       
+       start_packet3(CP_PACKET3(R300_PACKET3_3D_LOAD_VBPNTR, 2), 2);
+       e32(1);
+       e32(vertex_size | (vertex_size << 8));
+       e32(offset);
 }
 
 void r300EmitVbufPrim(r300ContextPtr rmesa, GLuint primitive, GLuint vertex_nr)
@@ -653,10 +653,13 @@ void r300EmitVbufPrim(r300ContextPtr rmesa, GLuint primitive, GLuint vertex_nr)
 
        int cmd_reserved = 0;
        int cmd_written = 0;
+       int type, num_verts;
+       drm_radeon_cmd_header_t *cmd = NULL;
 
-  drm_radeon_cmd_header_t *cmd = NULL;
-  r300EmitState(rmesa);
-  
-  start_packet3(CP_PACKET3(R300_PACKET3_3D_DRAW_VBUF_2, 0), 0);
-  e32(R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_LIST | (vertex_nr << 16) | primitive);
+       type = r300PrimitiveType(rmesa, primitive);
+       num_verts = r300NumVerts(rmesa, vertex_nr, primitive);
+       r300EmitState(rmesa);
+       
+       start_packet3(CP_PACKET3(R300_PACKET3_3D_DRAW_VBUF_2, 0), 0);
+       e32(R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_LIST | (num_verts << 16) | type);
 }