[Mesa-dev] [PATCH v2 1/7] mesa/vbo: Add draw_id field to struct _mesa_prim

Kristian Høgsberg krh at bitplanet.net
Wed Dec 16 15:47:05 PST 2015


From: Kristian Høgsberg Kristensen <krh at bitplanet.net>

The drivers will need this for passing in gl_DrawIDARB. For indirect
multidraw calls, we get the prim array and prim[i].draw_id == i and is
redundant. But for non-indirect calls, we get one primitive at a time
and need the draw_id field.

Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
---
 src/mesa/vbo/vbo.h            | 1 +
 src/mesa/vbo/vbo_exec_array.c | 4 ++++
 2 files changed, 5 insertions(+)

diff --git a/src/mesa/vbo/vbo.h b/src/mesa/vbo/vbo.h
index 00e843c..cef3b8c 100644
--- a/src/mesa/vbo/vbo.h
+++ b/src/mesa/vbo/vbo.h
@@ -58,6 +58,7 @@ struct _mesa_prim {
    GLint basevertex;
    GLuint num_instances;
    GLuint base_instance;
+   GLuint draw_id;
 
    GLsizeiptr indirect_offset;
 };
diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c
index e27fdd9..502b288 100644
--- a/src/mesa/vbo/vbo_exec_array.c
+++ b/src/mesa/vbo/vbo_exec_array.c
@@ -1341,6 +1341,7 @@ vbo_validated_multidrawelements(struct gl_context *ctx, GLenum mode,
 	 prim[i].indexed = 1;
          prim[i].num_instances = 1;
          prim[i].base_instance = 0;
+         prim[i].draw_id = i;
          prim[i].is_indirect = 0;
 	 if (basevertex != NULL)
 	    prim[i].basevertex = basevertex[i];
@@ -1371,6 +1372,7 @@ vbo_validated_multidrawelements(struct gl_context *ctx, GLenum mode,
 	 prim[0].indexed = 1;
          prim[0].num_instances = 1;
          prim[0].base_instance = 0;
+         prim[0].draw_id = i;
          prim[0].is_indirect = 0;
 	 if (basevertex != NULL)
 	    prim[0].basevertex = basevertex[i];
@@ -1598,6 +1600,7 @@ vbo_validated_multidrawarraysindirect(struct gl_context *ctx,
       prim[i].mode = mode;
       prim[i].indirect_offset = offset;
       prim[i].is_indirect = 1;
+      prim[i].draw_id = i;
    }
 
    check_buffers_are_unmapped(exec->array.inputs);
@@ -1684,6 +1687,7 @@ vbo_validated_multidrawelementsindirect(struct gl_context *ctx,
       prim[i].indexed = 1;
       prim[i].indirect_offset = offset;
       prim[i].is_indirect = 1;
+      prim[i].draw_id = i;
    }
 
    check_buffers_are_unmapped(exec->array.inputs);
-- 
2.5.0



More information about the mesa-dev mailing list