summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/brw_draw.c
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2014-08-07 20:31:39 -0700
committerKenneth Graunke <kenneth@whitecape.org>2014-09-10 11:05:08 -0700
commitfdbabf22e183d478cd076215052fa877b125629b (patch)
treeb6f1989aa1497b08453be05a16c4e52ea842cdda /src/mesa/drivers/dri/i965/brw_draw.c
parentc89306983c07e5a88c0d636267e5ccf263cb4213 (diff)
downloadexternal_mesa3d-fdbabf22e183d478cd076215052fa877b125629b.zip
external_mesa3d-fdbabf22e183d478cd076215052fa877b125629b.tar.gz
external_mesa3d-fdbabf22e183d478cd076215052fa877b125629b.tar.bz2
i965: Make gl_BaseVertex available in a buffer object.
This will be used for GL_ARB_shader_draw_parameters, as well as fixing gl_VertexID, which is supposed to include gl_BaseVertex's value. For indirect draws, we simply point at the indirect buffer; for normal draws, we upload the value via the upload buffer. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_draw.c')
-rw-r--r--src/mesa/drivers/dri/i965/brw_draw.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c
index c2866d0..efa85de 100644
--- a/src/mesa/drivers/dri/i965/brw_draw.c
+++ b/src/mesa/drivers/dri/i965/brw_draw.c
@@ -434,6 +434,20 @@ static bool brw_try_draw_prims( struct gl_context *ctx,
brw->draw.start_vertex_location = prims[i].start;
brw->draw.base_vertex_location = prims[i].basevertex;
+ if (prims[i].is_indirect) {
+ /* Point draw_params_bo at the indirect buffer. */
+ brw->draw.draw_params_bo =
+ intel_buffer_object(ctx->DrawIndirectBuffer)->buffer;
+ brw->draw.draw_params_offset =
+ prims[i].indirect_offset + (prims[i].indexed ? 12 : 8);
+ } else {
+ /* Set draw_params_bo to NULL so brw_prepare_vertices knows it
+ * has to upload gl_BaseVertex and such if they're needed.
+ */
+ brw->draw.draw_params_bo = NULL;
+ brw->draw.draw_params_offset = 0;
+ }
+
if (brw->gen < 6)
brw_set_prim(brw, &prims[i]);
else