Vulkan中该内存访问屏障配置是否无法发挥作用?
Vulkan子通道依赖中
VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT与内存访问掩码的作用疑问 在某Vulkan示例中,作者将dstStageMask设为VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,dstAccessMask设为VK_ACCESS_MEMORY_READ_BIT。根据此前的认知,访问掩码标志仅明确作用于指定的管线阶段标志,而非逻辑上更早的所有阶段——例如,若为片段着色器阶段设置内存读取访问掩码(缓存失效),该掩码不会作用于顶点着色器或顶点输入阶段,必须分别指定这两个阶段标志。
基于此,我认为上述配置不会产生任何效果,因为访问掩码仅作用于“BOTTOM_OF_PIPE”阶段,而非“逻辑上更早的阶段”。以下是Sascha Willem多重采样示例中的代码:
dependencies[0].srcSubpass = VK_SUBPASS_EXTERNAL; dependencies[0].dstSubpass = 0; dependencies[0].srcStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; dependencies[0].dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; dependencies[0].srcAccessMask = VK_ACCESS_MEMORY_READ_BIT; dependencies[0].dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; dependencies[0].dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT; dependencies[1].srcSubpass = 0; dependencies[1].dstSubpass = VK_SUBPASS_EXTERNAL; dependencies[1].srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; dependencies[1].dstStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; dependencies[1].srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; dependencies[1].dstAccessMask = VK_ACCESS_MEMORY_READ_BIT; dependencies[1].dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT;
Vulkan规范中相关描述如下:
将特定管线阶段纳入命令的第一个同步范围时,会隐式将逻辑上更早的管线阶段纳入同步范围。同理,第二个同步范围会包含逻辑上更晚的管线阶段。
但需注意,访问范围不受此影响——仅精确指定的阶段才会被视为各访问范围的一部分。
内容的提问来源于stack exchange,提问作者Zebrafish
相关产品推荐
相关产品推荐

