summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2016-09-08 14:01:15 -0700
committerEric Anholt <[email protected]>2016-09-14 06:08:03 +0100
commit0ef1b32ebbcf9ad6316021a1059ba7d6a65b9588 (patch)
tree6129e29fd478e74f1ec6ae95ee690fdcaa64b120
parenta2014c2eb9e03301b2f472adf2d46915579e4512 (diff)
vc4: Move bin CL trailer to job_submit() time.
To implement job shuffling, I want to be able to call submit() on specific jobs, turning vc4_flush() into the context's flush-all-jobs hook.
-rw-r--r--src/gallium/drivers/vc4/vc4_context.c11
-rw-r--r--src/gallium/drivers/vc4/vc4_job.c14
2 files changed, 14 insertions, 11 deletions
diff --git a/src/gallium/drivers/vc4/vc4_context.c b/src/gallium/drivers/vc4/vc4_context.c
index a85554a43dd..8b174f3e6b1 100644
--- a/src/gallium/drivers/vc4/vc4_context.c
+++ b/src/gallium/drivers/vc4/vc4_context.c
@@ -56,17 +56,6 @@ vc4_flush(struct pipe_context *pctx)
return;
}
- /* Increment the semaphore indicating that binning is done and
- * unblocking the render thread. Note that this doesn't act until the
- * FLUSH completes.
- */
- cl_ensure_space(&vc4->bcl, 8);
- struct vc4_cl_out *bcl = cl_start(&vc4->bcl);
- cl_u8(&bcl, VC4_PACKET_INCREMENT_SEMAPHORE);
- /* The FLUSH caps all of our bin lists with a VC4_PACKET_RETURN. */
- cl_u8(&bcl, VC4_PACKET_FLUSH);
- cl_end(&vc4->bcl, bcl);
-
if (cbuf && (vc4->resolve & PIPE_CLEAR_COLOR0)) {
pipe_surface_reference(&vc4->color_write,
cbuf->texture->nr_samples > 1 ?
diff --git a/src/gallium/drivers/vc4/vc4_job.c b/src/gallium/drivers/vc4/vc4_job.c
index 41660f6ac4d..d8c11154e91 100644
--- a/src/gallium/drivers/vc4/vc4_job.c
+++ b/src/gallium/drivers/vc4/vc4_job.c
@@ -175,6 +175,20 @@ vc4_job_submit(struct vc4_context *vc4)
vc4_dump_cl(vc4->bcl.base, cl_offset(&vc4->bcl), false);
}
+ if (cl_offset(&vc4->bcl) > 0) {
+ /* Increment the semaphore indicating that binning is done and
+ * unblocking the render thread. Note that this doesn't act
+ * until the FLUSH completes.
+ */
+ cl_ensure_space(&vc4->bcl, 8);
+ struct vc4_cl_out *bcl = cl_start(&vc4->bcl);
+ cl_u8(&bcl, VC4_PACKET_INCREMENT_SEMAPHORE);
+ /* The FLUSH caps all of our bin lists with a
+ * VC4_PACKET_RETURN.
+ */
+ cl_u8(&bcl, VC4_PACKET_FLUSH);
+ cl_end(&vc4->bcl, bcl);
+ }
struct drm_vc4_submit_cl submit;
memset(&submit, 0, sizeof(submit));