我该如何使用两个计算着色器创建Vulkan图形管线

3
我正在尝试制作一个模拟程序,需要进行两次计算才能渲染。我目前已经有了一个能够计算基本物理的计算管线和一个图形管线。我想添加第二个计算着色器来在第一个计算着色器之后运行。
首先,Vulkan中是否可以有两个连续的计算着色器?
我尝试了几种不同的方法来获取第二个计算着色器。我认为最有希望的方法是调用vkCreateComputePipelines时,传入VkComputePipelineCreateInfo和VkPipeline的数组,并将createInfoCount更改为2。根据文档,这个createInfoCount似乎是指createInfo和管线的数量,这让我们相信可以有多个管线,但这会导致程序崩溃。对于单个计算着色器,我直接传递createInfo和管线的地址而不是长度-1的数组。将createInfo更改为数组没有问题,但只要我尝试将管线参数更改为指向数组(即使数组中只有一个管线),就会导致程序崩溃。是否有标志或参数需要调整才能允许创建多个管线?
另一种方法是向VkComputePipelineCreateInfo添加多个computeShaderStageInfo,然后只有一个createInfo和一个计算管线。但与VkGraphicsPipelineCreateInfo不同的是,它似乎只允许有一个阶段,而不是一组阶段。
我还尝试为第二个计算着色器创建第二个VkCommandBuffer。我能够将描述符集绑定到两个命令缓冲区,但只有最后一个分派的命令缓冲区才会运行。

2
是的,您可以拥有任意数量的管线对象,无论是通过单个vkCreate*Pipelines调用还是多个调用。至于您的问题,请不要用散文描述您的代码。请直接在此处发布您的代码。 - krOoze
1个回答

3

首先,在Vulkan中是否可以有两个连续的计算着色器?

不可以。计算着色器没有用户定义的输入和任何输出,因此一个包含连续计算着色器的管线无法直接通信。每个调度操作执行单个计算着色器阶段,就是这样。

如果你想要两个连续的计算着色器,你需要两个使用不同计算着色器的管线,并适当使用同步原语使它们能够通信。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接