From ef2e29f3b51c9ad3fb566c5907e153791b6762f7 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 3 Mar 2021 13:00:55 -0500 Subject: [PATCH] zink: no-op read access buffer barriers if existing access exists for earlier stage only the earliest stage should be applied for these barriers, so we can skip ones where the existing access is earlier Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_context.c | 7 ++++--- 1 file 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