aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2020-02-14 16:40:07 -0800
committerMarge Bot <[email protected]>2020-05-01 19:00:02 +0000
commit07fb925ad82f2b61cbdd239956c16e752c64e05d (patch)
tree3d5417be00ba01d216eea0c8268fed7a7e40ac97
parent3dbde891118af0c64a16c729be5b551447aaae18 (diff)
iris: Flush any current work in iris_fence_await before adding deps
Receiving a fence_server_sync (iris_fence_await) means that any future work needs to wait for the fence. But previous work doesn't need to. So flush it now, to avoid delaying it arbitrarily. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3802>
-rw-r--r--src/gallium/drivers/iris/iris_fence.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/gallium/drivers/iris/iris_fence.c b/src/gallium/drivers/iris/iris_fence.c
index c43c892bb87..ff280599060 100644
--- a/src/gallium/drivers/iris/iris_fence.c
+++ b/src/gallium/drivers/iris/iris_fence.c
@@ -213,6 +213,9 @@ iris_fence_await(struct pipe_context *ctx,
{
struct iris_context *ice = (struct iris_context *)ctx;
+ /* Flush any current work in our context as it doesn't need to wait
+ * for this fence. Any future work in our context must wait.
+ */
for (unsigned b = 0; b < IRIS_BATCH_COUNT; b++) {
struct iris_batch *batch = &ice->batches[b];
@@ -222,6 +225,7 @@ iris_fence_await(struct pipe_context *ctx,
if (iris_seqno_signaled(seqno))
continue;
+ iris_batch_flush(batch);
iris_batch_add_syncobj(batch, seqno->syncobj, I915_EXEC_FENCE_WAIT);
}
}