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

我正在尝试进行一个包含渲染之前两个计算步骤的仿真。我目前正在研究计算基本物理的计算管道,然后是图形管道。我希望能够添加第二个要在其后运行的计算着色器。

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

我尝试了一些不同的尝试来获取第二个计算着色器。我认为最有前途的方法是在调用vkCreateComputePipelines时,传入VkComputePipelineCreateInfo和VkPipeline的数组,并将createInfoCount更改为2。根据文档,似乎createInfoCount引用了createInfo和管道的数量,导致我们认为可能有多个管道,但这会导致崩溃。仅使用一个计算着色器,而不是传入长度为1的数组,而是直接传入createInfo和管道的地址。将createInfo更改为数组可以很好地工作,但是一旦我尝试更改管道参数以指向数组(即使该数组中只有一个管道),就会导致崩溃。是否需要调整标志或参数以允许创建多个管道?

我们考虑的另一种方法是将多个computeShaderStageInfo添加到VkComputePipelineCreateInfo,然后只有一个createInfo和一个计算管道。但是,与VkGraphicsPipelineCreateInfo不同,它似乎只允许一个阶段,而不是一个阶段数组。

我还尝试为第二个计算着色器创建第二个VkCommandBuffer。我能够将描述符集绑定到两个命令缓冲区,但是只运行最后一个调度的缓冲区。

dianxinwad 回答:如何使用两个计算着色器创建Vulkan图形管道

  

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

不。计算着色器根本没有用户定义的输入,也没有输出,因此包含连续的计算着色器的管道之间没有直接的通信方式。每个调度操作都执行一个计算着色器阶段,就这样。

如果要使用两个连续的计算着色器,则需要两个具有不同计算着色器的管道,并在它们之间使用适当的同步原语,以便它们可以进行通信。

本文链接:https://www.f2er.com/2982665.html

大家都在问