diff options
author | Kenneth Graunke <[email protected]> | 2014-08-07 20:31:39 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2014-09-10 11:05:08 -0700 |
commit | fdbabf22e183d478cd076215052fa877b125629b (patch) | |
tree | b6f1989aa1497b08453be05a16c4e52ea842cdda /src/mesa/drivers/dri/i965/brw_draw.c | |
parent | c89306983c07e5a88c0d636267e5ccf263cb4213 (diff) |
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 <[email protected]>
Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_draw.c')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_draw.c | 14 |
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 c2866d0dacc..efa85dec540 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 |