问题描述
我一直在关注(非常棒的)nvpro 光线追踪教程,并对使用 layout(binding = 0,set = 1)
绑定 CameraProperties 统一缓冲区的方式有疑问 - 我理解绑定 = 0,但为什么设置 = 1 ?
教程说“set = 1
是因为它是传递给 pipelineLayoutCreateInfo.setPSetLayouts
的第二个描述符集”,但是当我查看 Hellovulkan::createGraphicsPipeline()
时,我看到布局计数是 1 ,这是使用 m_descSetLayout
(绑定相机统一缓冲区的内容)的地方。我错过了什么?
教程的相关部分是here。
谢谢!
解决方法
参见第 7.1 章:
std::vector<vk::DescriptorSetLayout> rtDescSetLayouts = {m_rtDescSetLayout,m_descSetLayout};
pipelineLayoutCreateInfo.setSetLayoutCount(static_cast<uint32_t>(rtDescSetLayouts.size()));
pipelineLayoutCreateInfo.setPSetLayouts(rtDescSetLayouts.data());
管道布局包含两个描述符集布局,m_rtDescSetLayout
用于索引 0(集合 0)处的加速结构,m_descSetLayout
用于索引 1(集合 1)中的屏幕描述符。在 Vulkan 中,该集合自动从管道布局创建信息中的描述符集布局索引派生而来。