diff options
author | Eric Anholt <eric@anholt.net> | 2008-09-23 15:53:29 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2008-09-23 15:53:29 -0700 |
commit | d533da2db873942b3f8676a754b8be3c9718bedf (patch) | |
tree | aa326f3695f183647598c1567d2b6475490d9b05 /src/mesa/drivers/dri/i965/brw_draw.c | |
parent | 4b038e24b0960e10d6ab8e360f2558d9c2730d99 (diff) | |
download | external_mesa3d-d533da2db873942b3f8676a754b8be3c9718bedf.zip external_mesa3d-d533da2db873942b3f8676a754b8be3c9718bedf.tar.gz external_mesa3d-d533da2db873942b3f8676a754b8be3c9718bedf.tar.bz2 |
i965: Cope with batch getting flushed in the middle of batchbuffer emits.
This isn't required for GEM (at least, yet), but the check_aperture code
for non-GEM results in batch getting flushed during emit. brw_state_upload
restarts state emits, but a bunch of the state emit functions were assuming
that they would be called exactly once, after prepare and before new_batch.
Bug #17179.
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_draw.c')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_draw.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_draw.c b/src/mesa/drivers/dri/i965/brw_draw.c index 542639a..9a353fc 100644 --- a/src/mesa/drivers/dri/i965/brw_draw.c +++ b/src/mesa/drivers/dri/i965/brw_draw.c @@ -156,11 +156,13 @@ static void brw_emit_prim( struct brw_context *brw, static void brw_merge_inputs( struct brw_context *brw, const struct gl_client_array *arrays[]) { - struct brw_vertex_element *inputs = brw->vb.inputs; struct brw_vertex_info old = brw->vb.info; GLuint i; - memset(inputs, 0, sizeof(*inputs)); + for (i = 0; i < VERT_ATTRIB_MAX; i++) + dri_bo_unreference(brw->vb.inputs[i].bo); + + memset(&brw->vb.inputs, 0, sizeof(brw->vb.inputs)); memset(&brw->vb.info, 0, sizeof(brw->vb.info)); for (i = 0; i < VERT_ATTRIB_MAX; i++) { @@ -171,7 +173,8 @@ static void brw_merge_inputs( struct brw_context *brw, if (arrays[i]->StrideB != 0) brw->vb.info.varying |= 1 << i; - brw->vb.info.sizes[i/16] |= (inputs[i].glarray->Size - 1) << ((i%16) * 2); + brw->vb.info.sizes[i/16] |= (brw->vb.inputs[i].glarray->Size - 1) << + ((i%16) * 2); } } |