From 07fb925ad82f2b61cbdd239956c16e752c64e05d Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Fri, 14 Feb 2020 16:40:07 -0800 Subject: [PATCH] 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: --- src/gallium/drivers/iris/iris_fence.c | 4 ++++ 1 file changed, 4 insertions(+) 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); } } -- 2.30.2