我有一个粒子系统,首先运行计算着色器并更新所有属性,然后将这些属性用作顶点着色器中的vao输入。
现在,我需要在这些阶段之间设置一个障碍,但是我不确定该怎么做,无论我尝试什么,都会遇到一些错误。
目前,我有这样的管道障碍:
VkMemoryBarrier memoryBarrier; memoryBarrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER; memoryBarrier.pNext = nullptr; memoryBarrier.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT; memoryBarrier.dstAccessMask = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT; vkCmdPipelineBarrier(commandBuffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_PIPELINE_STAGE_VERTEX_INPUT_B
我使用此依赖关系创建渲染过程:
VkSubpassDependency computeDependency; computeDependency.srcSubpass = 0; computeDependency.dstSubpass = 0; computeDependency.srcStageMask = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT; computeDependency.dstStageMask = VK_PIPELINE_STAGE_VERTEX_INPUT_BIT; computeDependency.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT; computeDependency.dstAccessMask = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT; computeDependency.dependencyFlags = 0;
但是,这在我收到此错误时不起作用:验证层:依赖项1指定了一个源阶段掩码,该掩码包含源子通道0使用的不在GRAPHICS管道中的阶段。Vulkan规范指出:对于pDependencies的任何元素,如果srcSubpass不是VK_SUBPASS_EXTERNAL,该依赖项的srcStageMask成员中包含的所有阶段标志必须是源子阶段的pipeBindPoint成员所标识的管道所支持的管道阶段(https://www.khronos.org/registry/vulkan/ specs / 1.1-extensions / html / vkspec.html#VUID-VkRenderPassCreateInfo-pDependencies-00837)