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

问题描述 投票:0回答:1

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

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

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

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

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

谢谢!

graphics vulkan compute-shader
1个回答
0
投票

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

没有计算着色器根本没有用户定义的输入,也没有输出,因此包含连续的计算着色器的管道无法进行通信。每个调度操作都执行一个计算着色器阶段,仅此而已。

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

© www.soinside.com 2019 - 2024. All rights reserved.