subpass

使用官方的5.4.4建一个第一人称射击的游戏,开启vulkandebugsync后会报很多Validation错误:

LogVulkanRHI: Warning: *** [Error:Validation(SYNC-HAZARD-WRITE-AFTER-WRITE)] Validation Error: [ SYNC-HAZARD-WRITE-AFTER-WRITE ] Object 0: handle = 0xa9a3bc00000004de, type = VK_OBJECT_TYPE_IMAGE_VIEW; | MessageID = 0x5c0ec5d6 | vkCmdDrawIndexed: Hazard WRITE_AFTER_WRITE for VkImageView 0xa9a3bc00000004de in VkCommandBuffer 0x70e0a16620, Subpass #2, and stencil part of pDepthStencilAttachment. Access info (usage: SYNC_LATE_FRAGMENT_TESTS_DEPTH_STENCIL_ATTACHMENT_WRITE, prior_usage: SYNC_IMAGE_LAYOUT_TRANSITION, write_barriers: SYNC_FRAGMENT_SHADER_INPUT_ATTACHMENT_READ, command: vkCmdNextSubpass, seq_no: 40, subcmd: 1,renderpass: VkRenderPass 0x3fdf9f00000003e4, reset_no: 87).

<br/>

请问如何解决这个问题,可能导致一些设备上渲染出现问题,详细的LOG见附件

Steps to Reproduce

使用官方的5.4.4建一个第一人称射击的游戏,需要开启vulkandebugsync,需要确保这里进去了:

[Image Removed]

Hi,

我试了一下,如果不开RenderDoc,我好像看不到这个error,但是开了RenderDoc,就会用RenderDoc的Validation,他会报这个错。

请问你是开了RenderDoc吗?

没有开RDC,需要这里调成4:

[Image Removed]然后这个值调成0:

r.Vulkan.UniqueValidationMessages

Hi 你好,

这个问题我可以复现,试过把第1个和第2个subpass的依赖改成下面的样子应该可以消除这个报错。不过我也不确定这是属于虚报还是的确有问题,因为没有发现渲染出什么问题,后续我会跟硬件厂商求证一下,有后续消息我会再这里回复。

SubpassDep.srcSubpass = 1; SubpassDep.dstSubpass = 2; SubpassDep.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; SubpassDep.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; SubpassDep.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; SubpassDep.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT;