小编Mar*_*rvg的帖子

Vulkan:一个管道和多个描述符集?

我正在尝试创建一个带有布局的单个管道,它需要两个绑定,一个动态 UBO 和一个图像/采样器绑定。我希望每个绑定都来自一个单独的描述符集,所以我会为每个绘制调用绑定两个描述符集。一个描述符集用于每个对象的纹理,另一个用于动态 UBO(在对象之间共享)。我希望能够在渲染部分做这样的事情:


commandBuffer.bindPipeline(vk::PipelineBindPoint::eGraphics, pipeline);

for (int ii = 0; ii < mActiveQuads; ii++)
{
    uint32_t dynamicOffset = ii * static_cast<uint32_t>(dynamicAlignment);

    // bind texture for this quad
    commandBuffer.bindDescriptorSets(vk::PipelineBindPoint::eGraphics, sharedPipelineLayout, 0, 1,
            &swapResources[current_buffer].textureDescriptors[ii], 1, &dynamicOffset);

    // draw the dynamic UBO with offset for this quad
    commandBuffer.bindDescriptorSets(vk::PipelineBindPoint::eGraphics, sharedPipelineLayout, 0, 1,
                &swapResources[current_buffer].quadDescriptor, 1, &dynamicOffset);

    commandBuffer.draw(2 * 3, 1, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用。首先,我不确定我是否了解有关描述符集和管道布局的所有内容,以了解我的操作是否被允许。这甚至有意义吗?我可以创建一个具有 2 个绑定布局的管道,但是创建每个描述符来填充每个绑定中的一个,然后为该管道的每个绘制调用绑定两个描述符?

如果允许的话。这就是我创建管道和描述符的方式:

vk::DescriptorSetLayoutBinding const layout_bindings[2] = { vk::DescriptorSetLayoutBinding()
        .setBinding(0)
        .setDescriptorType(vk::DescriptorType::eUniformBufferDynamic)
        .setDescriptorCount(1)
        .setStageFlags(vk::ShaderStageFlagBits::eVertex)
        .setPImmutableSamplers(nullptr),
        vk::DescriptorSetLayoutBinding()
        .setBinding(1)
        .setDescriptorType(vk::DescriptorType::eCombinedImageSampler)
        .setDescriptorCount(1)//texture_count)
        .setStageFlags(vk::ShaderStageFlagBits::eFragment)
        .setPImmutableSamplers(nullptr) …
Run Code Online (Sandbox Code Playgroud)

pipeline descriptor vulkan

3
推荐指数
1
解决办法
2546
查看次数

标签 统计

descriptor ×1

pipeline ×1

vulkan ×1