On 12/21/2011 01:39 PM, Paul Berry wrote: > Although i965 gen6 does not yet support ARB_transform_feedback2 or > NV_transform_feedback2, it needs to support pause/resume functionality > so that meta-ops will work correctly. > --- > src/mesa/drivers/dri/i965/brw_draw.c | 3 ++- > src/mesa/drivers/dri/i965/brw_gs.c | 3 ++- > src/mesa/drivers/dri/i965/gen6_sol.c | 3 ++- > 3 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 082bb9a..93f27d7 100644 > --- a/src/mesa/drivers/dri/i965/brw_draw.c > +++ b/src/mesa/drivers/dri/i965/brw_draw.c > @@ -389,7 +389,8 @@ brw_update_primitive_count(struct brw_context *brw, > { > uint32_t count = count_tessellated_primitives(prim); > brw->sol.primitives_generated += count; > - if (brw->intel.ctx.TransformFeedback.CurrentObject->Active) { > + if (brw->intel.ctx.TransformFeedback.CurrentObject->Active && > + !brw->intel.ctx.TransformFeedback.CurrentObject->Paused) { > /* Update brw->sol.svbi_0_max_index to reflect the amount by which the > * hardware is going to increment SVBI 0 when this drawing operation > * occurs. This is necessary because the kernel does not (yet) save > and > diff --git a/src/mesa/drivers/dri/i965/brw_gs.c > b/src/mesa/drivers/dri/i965/brw_gs.c > index 886bf98..850d7b4 100644 > --- a/src/mesa/drivers/dri/i965/brw_gs.c > +++ b/src/mesa/drivers/dri/i965/brw_gs.c > @@ -183,7 +183,8 @@ static void populate_key( struct brw_context *brw, > } else if (intel->gen == 6) { > /* On Gen6, GS is used for transform feedback. */ > /* _NEW_TRANSFORM_FEEDBACK */ > - if (ctx->TransformFeedback.CurrentObject->Active) { > + if (ctx->TransformFeedback.CurrentObject->Active && > + !ctx->TransformFeedback.CurrentObject->Paused) { > const struct gl_shader_program *shaderprog = > ctx->Shader.CurrentVertexProgram; > const struct gl_transform_feedback_info *linked_xfb_info =
Nevermind, I answered my own question. I was wondering if Paused needed to be in the key, and how you got updates about it changing. But no, putting it in the key would be bizarre, and the _NEW_TRANSFORM_FEEDBACK dirty bit covers this. For the whole series: Reviewed-by: Kenneth Graunke <kenn...@whitecape.org> > diff --git a/src/mesa/drivers/dri/i965/gen6_sol.c > b/src/mesa/drivers/dri/i965/gen6_sol.c > index 5d11481..32f56d3 100644 > --- a/src/mesa/drivers/dri/i965/gen6_sol.c > +++ b/src/mesa/drivers/dri/i965/gen6_sol.c > @@ -47,7 +47,8 @@ gen6_update_sol_surfaces(struct brw_context *brw) > > for (i = 0; i < BRW_MAX_SOL_BINDINGS; ++i) { > const int surf_index = SURF_INDEX_SOL_BINDING(i); > - if (xfb_obj->Active && i < linked_xfb_info->NumOutputs) { > + if (xfb_obj->Active && !xfb_obj->Paused && > + i < linked_xfb_info->NumOutputs) { > unsigned buffer = linked_xfb_info->Outputs[i].OutputBuffer; > unsigned buffer_offset = > xfb_obj->Offset[buffer] / 4 + _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev