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