【Vulkan】シェーダリフレクションで手動バインディングから解放されたい

10319 ワード

シェーダとC++間のバインディングを手作業で一致させるのは大変つらい気持ちになります。

こんな感じ。

sample.rgen
#version 460
#extension GL_EXT_ray_tracing : enable
layout(binding = 0, set = 0) uniform accelerationStructureEXT topLevelAS;
layout(binding = 1, set = 0, rgba8) uniform image2D inputImage;

void main()
{
}
sample.cpp
std::vector<vk::DescriptorSetLayoutBinding> bindings{
  { 0, vk::DescriptorType::eAccelerationStructureKHR, 
    1, vk::ShaderStageFlagBits::eRaygenKHR},
  { 1, vk::DescriptorType::eStorageImage, 
    1, vk::ShaderStageFlagBits::eRaygenKHR},
};

なのでSPIRV-Crossを使って、シェーダからバインディング情報を取得しましょう。