aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/v3d/v3d_context.h3
-rw-r--r--src/gallium/drivers/v3d/v3dx_emit.c8
-rw-r--r--src/gallium/drivers/v3d/v3dx_job.c7
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) {