forked from void-linux/void-packages
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
By ericonr: add patch to fix flickering with many qt applications. Closes: void-linux#35345 [via git-merge-pr]
- Loading branch information
1 parent
3977b26
commit ad540f2
Showing
4 changed files
with
78 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
74 changes: 74 additions & 0 deletions
74
srcpkgs/mesa/patches/cd51e701177cf01c5590f59071ac1256b396d1b0.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
From cd51e701177cf01c5590f59071ac1256b396d1b0 Mon Sep 17 00:00:00 2001 | ||
From: Paulo Zanoni <paulo.r.zanoni@intel.com> | ||
Date: Mon, 10 Jan 2022 17:18:05 -0800 | ||
Subject: [PATCH] iris: implement inter-context busy-tracking | ||
|
||
Previously, no buffers were ever marked as EXEC_OBJECT_ASYNC so the | ||
Kernel would ensure dependency tracking for us. After we implemented | ||
explicit busy tracking in commit 89a34cb8450a, only the external | ||
objects kept relying on the Kernel's implicit tracking and Iris did | ||
inter-batch busy tracking, meaning we lost inter-screen and | ||
inter-context synchronization. This seemed fine to me since, as far as | ||
I understood, it is the duty of the application to synchronize itself | ||
against multiple screens and contexts. | ||
|
||
The problem here is that applications were actually relying on the old | ||
behavior where the Kernel guarantees synchronization, so 89a34cb8450a | ||
can be seen as a regression. This commit addresses the inter-context | ||
synchronization case. | ||
|
||
Cc: mesa-stable | ||
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5731 | ||
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5812 | ||
Fixes: 89a34cb8450a ("iris: switch to explicit busy tracking") | ||
Tested-by: Konstantin Kharlamov <hi-angel@yandex.ru> | ||
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> | ||
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> | ||
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14783> | ||
--- | ||
.pick_status.json | 2 +- | ||
src/gallium/drivers/iris/iris_batch.c | 8 ++++++++ | ||
2 files changed, 9 insertions(+), 1 deletion(-) | ||
|
||
diff --git a/.pick_status.json b/.pick_status.json | ||
index d325da5ae33..e831bd32b72 100644 | ||
--- a/.pick_status.json | ||
+++ b/.pick_status.json | ||
@@ -742,7 +742,7 @@ | ||
"description": "iris: implement inter-context busy-tracking", | ||
"nominated": true, | ||
"nomination_type": 1, | ||
- "resolution": 0, | ||
+ "resolution": 1, | ||
"main_sha": null, | ||
"because_sha": "89a34cb8450a6fdaceb0e537613871fa86d93132" | ||
}, | ||
diff --git a/src/gallium/drivers/iris/iris_batch.c b/src/gallium/drivers/iris/iris_batch.c | ||
index ef0fa147d38..90103449bf1 100644 | ||
--- a/src/gallium/drivers/iris/iris_batch.c | ||
+++ b/src/gallium/drivers/iris/iris_batch.c | ||
@@ -717,6 +717,12 @@ update_bo_syncobjs(struct iris_batch *batch, struct iris_bo *bo, bool write) | ||
move_syncobj_to_batch(batch, &deps->write_syncobjs[other_batch_idx], | ||
I915_EXEC_FENCE_WAIT); | ||
|
||
+ /* If it's being written by our screen, wait on it too. This is relevant | ||
+ * when there are multiple contexts on the same screen. */ | ||
+ if (deps->write_syncobjs[batch_idx]) | ||
+ move_syncobj_to_batch(batch, &deps->write_syncobjs[batch_idx], | ||
+ I915_EXEC_FENCE_WAIT); | ||
+ | ||
struct iris_syncobj *batch_syncobj = iris_batch_get_signal_syncobj(batch); | ||
|
||
if (write) { | ||
@@ -729,6 +735,8 @@ update_bo_syncobjs(struct iris_batch *batch, struct iris_bo *bo, bool write) | ||
|
||
move_syncobj_to_batch(batch, &deps->read_syncobjs[other_batch_idx], | ||
I915_EXEC_FENCE_WAIT); | ||
+ move_syncobj_to_batch(batch, &deps->read_syncobjs[batch_idx], | ||
+ I915_EXEC_FENCE_WAIT); | ||
|
||
} else { | ||
/* If we're reading, replace the other read from our batch index. */ | ||
-- | ||
GitLab | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters