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)(
