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

Author: Mike Blumenkrantz <[email protected]>
Date:   Mon Sep 13 14:25:43 2021 -0400

zink: unset src access in barriers if there's no src pipeline stages

this is a partial barrier, so having access of any kind is invalid

VUID-vkCmdPipelineBarrier-srcAccessMask-02815(ERROR / SPEC): msgNum: 618171435 
- Validation Error: [ VUID-vkCmdPipelineBarrier-srcAccessMask-02815 ] Object 0: 
handle = 0x2834530, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 
0x24d88c2b | vkCmdPipelineBarrier(): .pImageMemoryBarriers[0].srcAccessMask bit 
VK_ACCESS_TRANSFER_READ_BIT is not supported by stage mask 
(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT). The Vulkan spec states: The srcAccessMask 
member of each element of pMemoryBarriers must only include access flags that 
are supported by one or more of the pipeline stages in srcStageMask, as 
specified in the table of supported access types 
(https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-vkCmdPipelineBarrier-srcAccessMask-02815)
    Objects: 1
        [0] 0x2834530, type: 6, name: NULL
zink DEBUG: ERR: 'Validation Error: [ 
VUID-vkCmdPipelineBarrier-srcAccessMask-02815 ] Object 0: handle = 0x2834530, 
type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x24d88c2b | 
vkCmdPipelineBarrier(): .pImageMemoryBarriers[0].srcAccessMask bit 
VK_ACCESS_TRANSFER_READ_BIT is not supported by stage mask 
(VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT). The Vulkan spec states: The srcAccessMask 
member of each element of pMemoryBarriers must only include access flags that 
are supported by one or more of the pipeline stages in srcStageMask, as 
specified in the table of supported access types 
(https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VUID-vkCmdPipelineBarrier-srcAccessMask-02815)'

Reviewed-by: Dave Airlie <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12845>

---

 src/gallium/drivers/zink/zink_context.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/gallium/drivers/zink/zink_context.c 
b/src/gallium/drivers/zink/zink_context.c
index d00c47de64d..86886c5f52d 100644
--- a/src/gallium/drivers/zink/zink_context.c
+++ b/src/gallium/drivers/zink/zink_context.c
@@ -2365,6 +2365,8 @@ zink_resource_image_barrier(struct zink_context *ctx, 
struct zink_resource *res,
    /* only barrier if we're changing layout or doing something besides read -> 
read */
    VkCommandBuffer cmdbuf = get_cmdbuf(ctx, res);
    assert(new_layout);
+   if (!res->obj->access_stage)
+      imb.srcAccessMask = 0;
    if (res->obj->needs_zs_evaluate)
       imb.pNext = &res->obj->zs_evaluate;
    res->obj->needs_zs_evaluate = false;
@@ -2468,6 +2470,8 @@ zink_resource_buffer_barrier(struct zink_context *ctx, 
struct zink_resource *res
    bmb.pNext = NULL;
    bmb.srcAccessMask = res->obj->access;
    bmb.dstAccessMask = flags;
+   if (!res->obj->access_stage)
+      bmb.srcAccessMask = 0;
    VkCommandBuffer cmdbuf = get_cmdbuf(ctx, res);
    /* only barrier if we're changing layout or doing something besides read -> 
read */
    VKCTX(CmdPipelineBarrier)(

Reply via email to