diff options
author | Kenneth Graunke <[email protected]> | 2020-02-14 16:40:07 -0800 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-05-01 19:00:02 +0000 |
commit | 07fb925ad82f2b61cbdd239956c16e752c64e05d (patch) | |
tree | 3d5417be00ba01d216eea0c8268fed7a7e40ac97 | |
parent | 3dbde891118af0c64a16c729be5b551447aaae18 (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.c | 4 |
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); } } |