Module: Mesa
Branch: main
Commit: 03f049f49730b8b1268f2975fc34ac2b1f9a4ef9
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=03f049f49730b8b1268f2975fc34ac2b1f9a4ef9

Author: Mike Blumenkrantz <michael.blumenkra...@gmail.com>
Date:   Mon Jan  8 09:51:31 2024 -0500

zink: always force flushes when originating from api frontend

flags=0 is used for e.g., glFenceSync, which apps use to insert sync points
to determine when all prior work has completed. eliding these flushes into 
no-ops
is fine for all scenarios except when the last op was a present, in which
case the no-op (previous) fence will not sync as expected for the present and
graphical artifacts will result

in the future, this may be changed back to the previous behavior if/when 
presentation
gains timeline semaphore capabilities by providing the last timeline id
as a fence instead of the last batch

fixes #10386

cc: mesa-stable

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26935>

---

 src/gallium/drivers/zink/zink_context.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/zink/zink_context.c 
b/src/gallium/drivers/zink/zink_context.c
index f483613ee79..aa8291e935a 100644
--- a/src/gallium/drivers/zink/zink_context.c
+++ b/src/gallium/drivers/zink/zink_context.c
@@ -3863,7 +3863,8 @@ zink_flush(struct pipe_context *pctx,
       }
    }
 
-   if (!batch->has_work) {
+   /* TODO: if swapchains gain timeline semaphore semantics, `flags` can be 
eliminated and no-op fence can return timeline id */
+   if (!batch->has_work && flags) {
        if (pfence) {
           /* reuse last fence */
           fence = ctx->last_fence;

Reply via email to