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

Author: Mike Blumenkrantz <[email protected]>
Date:   Mon Mar 27 09:19:38 2023 -0400

zink: break out a src region barrier check for reuse

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

---

 src/gallium/drivers/zink/zink_context.c | 8 +++++++-
 src/gallium/drivers/zink/zink_context.h | 2 ++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/zink/zink_context.c 
b/src/gallium/drivers/zink/zink_context.c
index ce11a443d3a..c0410fae6b1 100644
--- a/src/gallium/drivers/zink/zink_context.c
+++ b/src/gallium/drivers/zink/zink_context.c
@@ -3935,6 +3935,12 @@ zink_check_unordered_transfer_access(struct 
zink_resource *res, unsigned level,
    return non_transfer_write || transfer_clobber;
 }
 
+bool
+zink_check_valid_buffer_src_access(struct zink_context *ctx, struct 
zink_resource *res, unsigned offset, unsigned size)
+{
+   return res->obj->access && util_ranges_intersect(&res->valid_buffer_range, 
offset, offset + size) && !unordered_res_exec(ctx, res, false);
+}
+
 void
 zink_resource_image_transfer_dst_barrier(struct zink_context *ctx, struct 
zink_resource *res, unsigned level, const struct pipe_box *box)
 {
@@ -4896,7 +4902,7 @@ zink_copy_buffer(struct zink_context *ctx, struct 
zink_resource *dst, struct zin
 
    struct pipe_box box = {(int)src_offset, 0, 0, (int)size, 0, 0};
    /* must barrier if something wrote the valid buffer range */
-   bool valid_write = src->obj->access && 
util_ranges_intersect(&src->valid_buffer_range, src_offset, src_offset + size) 
&& !unordered_res_exec(ctx, src, false);
+   bool valid_write = zink_check_valid_buffer_src_access(ctx, src, src_offset, 
size);
    bool unordered_src = !valid_write && 
!zink_check_unordered_transfer_access(src, 0, &box);
    zink_screen(ctx->base.screen)->buffer_barrier(ctx, src, 
VK_ACCESS_TRANSFER_READ_BIT, 0);
    bool unordered_dst = zink_resource_buffer_transfer_dst_barrier(ctx, dst, 
dst_offset, size);
diff --git a/src/gallium/drivers/zink/zink_context.h 
b/src/gallium/drivers/zink/zink_context.h
index 7ad99a5856a..d29296fccdf 100644
--- a/src/gallium/drivers/zink/zink_context.h
+++ b/src/gallium/drivers/zink/zink_context.h
@@ -123,6 +123,8 @@ void
 zink_resource_image_barrier2(struct zink_context *ctx, struct zink_resource 
*res, VkImageLayout new_layout, VkAccessFlags flags, VkPipelineStageFlags 
pipeline);
 bool
 zink_check_unordered_transfer_access(struct zink_resource *res, unsigned 
level, const struct pipe_box *box);
+bool
+zink_check_valid_buffer_src_access(struct zink_context *ctx, struct 
zink_resource *res, unsigned offset, unsigned size);
 void
 zink_resource_image_transfer_dst_barrier(struct zink_context *ctx, struct 
zink_resource *res, unsigned level, const struct pipe_box *box);
 bool

Reply via email to