diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2014-08-07 20:07:25 -0700 |
---|---|---|
committer | Kenneth Graunke <kenneth@whitecape.org> | 2014-09-10 11:05:08 -0700 |
commit | c89306983c07e5a88c0d636267e5ccf263cb4213 (patch) | |
tree | 9676dcfe56350b71c96d1cdb8b09fb8a3042fcf6 /src/mesa/drivers/dri/i965/brw_draw.c | |
parent | 9975792abd8be891bbe7245cb1d5c347dff65465 (diff) | |
download | external_mesa3d-c89306983c07e5a88c0d636267e5ccf263cb4213.zip external_mesa3d-c89306983c07e5a88c0d636267e5ccf263cb4213.tar.gz external_mesa3d-c89306983c07e5a88c0d636267e5ccf263cb4213.tar.bz2 |
i965: Calculate start/base_vertex_location after preparing vertices.
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.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c index 0fa7b6b..c2866d0 100644 --- a/src/mesa/drivers/dri/i965/brw_draw.c +++ b/src/mesa/drivers/dri/i965/brw_draw.c @@ -176,26 +176,19 @@ static void brw_emit_prim(struct brw_context *brw, { int verts_per_instance; int vertex_access_type; - int start_vertex_location; - int base_vertex_location; int indirect_flag; DBG("PRIM: %s %d %d\n", _mesa_lookup_enum_by_nr(prim->mode), prim->start, prim->count); - start_vertex_location = prim->start; - base_vertex_location = prim->basevertex; if (prim->indexed) { vertex_access_type = brw->gen >= 7 ? GEN7_3DPRIM_VERTEXBUFFER_ACCESS_RANDOM : GEN4_3DPRIM_VERTEXBUFFER_ACCESS_RANDOM; - start_vertex_location += brw->ib.start_vertex_offset; - base_vertex_location += brw->vb.start_vertex_bias; } else { vertex_access_type = brw->gen >= 7 ? GEN7_3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL : GEN4_3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL; - start_vertex_location += brw->vb.start_vertex_bias; } /* We only need to trim the primitive count on pre-Gen6. */ @@ -270,10 +263,10 @@ static void brw_emit_prim(struct brw_context *brw, vertex_access_type); } OUT_BATCH(verts_per_instance); - OUT_BATCH(start_vertex_location); + OUT_BATCH(brw->draw.start_vertex_location); OUT_BATCH(prim->num_instances); OUT_BATCH(prim->base_instance); - OUT_BATCH(base_vertex_location); + OUT_BATCH(brw->draw.base_vertex_location); ADVANCE_BATCH(); /* Only used on Sandybridge; harmless to set elsewhere. */ @@ -436,12 +429,18 @@ static bool brw_try_draw_prims( struct gl_context *ctx, brw_merge_inputs(brw, arrays); } } + + brw->draw.indexed = prims[i].indexed; + brw->draw.start_vertex_location = prims[i].start; + brw->draw.base_vertex_location = prims[i].basevertex; + if (brw->gen < 6) brw_set_prim(brw, &prims[i]); else gen6_set_prim(brw, &prims[i]); retry: + /* Note that before the loop, brw->state.dirty.brw was set to != 0, and * that the state updated in the loop outside of this block is that in * *_set_prim or intel_batchbuffer_flush(), which only impacts |