diff options
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/v3d/v3d_context.h | 3 | ||||
-rw-r--r-- | src/gallium/drivers/v3d/v3dx_emit.c | 8 | ||||
-rw-r--r-- | src/gallium/drivers/v3d/v3dx_job.c | 7 |
3 files changed, 8 insertions, 10 deletions
diff --git a/src/gallium/drivers/v3d/v3d_context.h b/src/gallium/drivers/v3d/v3d_context.h index f6720e2ca93..20f357ae4a8 100644 --- a/src/gallium/drivers/v3d/v3d_context.h +++ b/src/gallium/drivers/v3d/v3d_context.h @@ -308,8 +308,7 @@ struct v3d_job { bool oq_enabled; /** - * Set when a packet enabling TF on all further primitives has been - * emitted. + * Set if a packet enabling TF has been emitted in the job (V3D 4.x). */ bool tf_enabled; diff --git a/src/gallium/drivers/v3d/v3dx_emit.c b/src/gallium/drivers/v3d/v3dx_emit.c index 537dd1ff9ae..50f9f60477d 100644 --- a/src/gallium/drivers/v3d/v3dx_emit.c +++ b/src/gallium/drivers/v3d/v3dx_emit.c @@ -701,13 +701,14 @@ v3dX(emit_state)(struct pipe_context *pctx) v3d->prog.bind_vs->tf_specs); #if V3D_VERSION >= 40 - job->tf_enabled = (v3d->prog.bind_vs->num_tf_specs != 0 && + bool tf_enabled = (v3d->prog.bind_vs->num_tf_specs != 0 && v3d->active_queries); + job->tf_enabled |= tf_enabled; cl_emit(&job->bcl, TRANSFORM_FEEDBACK_SPECS, tfe) { tfe.number_of_16_bit_output_data_specs_following = v3d->prog.bind_vs->num_tf_specs; - tfe.enable = job->tf_enabled; + tfe.enable = tf_enabled; }; #else /* V3D_VERSION < 40 */ cl_emit(&job->bcl, TRANSFORM_FEEDBACK_ENABLE, tfe) { @@ -720,12 +721,11 @@ v3dX(emit_state)(struct pipe_context *pctx) for (int i = 0; i < v3d->prog.bind_vs->num_tf_specs; i++) { cl_emit_prepacked(&job->bcl, &tf_specs[i]); } - } else if (job->tf_enabled) { + } else { #if V3D_VERSION >= 40 cl_emit(&job->bcl, TRANSFORM_FEEDBACK_SPECS, tfe) { tfe.enable = false; }; - job->tf_enabled = false; #endif /* V3D_VERSION >= 40 */ } } diff --git a/src/gallium/drivers/v3d/v3dx_job.c b/src/gallium/drivers/v3d/v3dx_job.c index d87dcea8c49..e0bd71fcf77 100644 --- a/src/gallium/drivers/v3d/v3dx_job.c +++ b/src/gallium/drivers/v3d/v3dx_job.c @@ -47,10 +47,9 @@ void v3dX(bcl_epilogue)(struct v3d_context *v3d, struct v3d_job *job) cl_emit(&job->bcl, OCCLUSION_QUERY_COUNTER, counter); } - /* Disable TF at the end of the CL, so that the next job to be - * run doesn't start out trying to write TF primitives. On - * V3D 3.x, it's only the TF primitive mode that triggers TF - * writes. + /* Disable TF at the end of the CL, so that the TF block + * cleans up and finishes before it gets reset by the next + * frame's tile binning mode cfg packet. (SWVC5-718). */ #if V3D_VERSION >= 41 if (job->tf_enabled) { |