summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/zink/zink_context.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c
index 1f1cfa8d569..c9406e85db7 100644
--- a/src/gallium/drivers/zink/zink_context.c
+++ b/src/gallium/drivers/zink/zink_context.c
@@ -2202,9 +2202,10 @@ zink_resource_buffer_needs_barrier(struct zink_resource *res, VkAccessFlags flag
return true;
if (!pipeline)
pipeline = pipeline_access_stage(flags);
- return (res->access_stage & pipeline) != pipeline || (res->access & flags) != flags ||
- zink_resource_access_is_write(res->access) ||
- zink_resource_access_is_write(flags);
+ return zink_resource_access_is_write(res->access) ||
+ zink_resource_access_is_write(flags) ||
+ ((res->access_stage & pipeline) != pipeline && !(res->access_stage & (pipeline - 1))) ||
+ (res->access & flags) != flags;
}
ALWAYS_INLINE static bool