Skip to content

Instantly share code, notes, and snippets.

@xenobrain
Last active January 3, 2022 18:44
Show Gist options
  • Save xenobrain/7c28be85f6054de870a56cc8a09f44b8 to your computer and use it in GitHub Desktop.
Save xenobrain/7c28be85f6054de870a56cc8a09f44b8 to your computer and use it in GitHub Desktop.
glslang create shader
auto static create_shader(vk::raii::Device const& device, vk::ArrayProxy<char const* const> shader_source, vk::ShaderStageFlagBits const& shader_stage) -> vk::raii::ShaderModule {
auto const& stage = [&shader_stage]() {
switch (shader_stage) {
default: throw std::runtime_error("Unknown shader stage");
case vk::ShaderStageFlagBits::eVertex: return EShLangVertex;
case vk::ShaderStageFlagBits::eCompute: return EShLangCompute;
case vk::ShaderStageFlagBits::eFragment: return EShLangFragment;
}
}();
auto constexpr messages = static_cast<EShMessages>(EShMsgSpvRules | EShMsgVulkanRules);
auto constexpr limits = TBuiltInResource{
32, 6, 32, 32, 64, 4096, 64, 32, 80, 32, 4096, 32, 128, 8, 16, 16, 15, -8, 7, 8, 65535, 65535, 65535,
1024, 1024, 64, 1024, 16, 8, 8, 1, 60, 64, 64, 128, 128, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 16, 256, 1024,
1024, 64, 128, 128, 16, 1024, 4096, 128, 128, 16, 1024, 120, 32, 64, 16, 0, 0, 0, 0, 8, 8, 1, 0, 0, 0,
0, 1, 1, 16384, 4, 64, 8, 8, 4, 256, 512, 32, 1, 1, 32, 1, 1, 4, 1,
{true, true, true, true, true, true, true, true, true}
};
auto shader = glslang::TShader{stage};
shader.setStrings(shader_source.data(), static_cast<int>(shader_source.size()));
if (!shader.parse(&limits, 110, false, messages))
throw std::runtime_error(std::string{shader.getInfoLog()} + std::string{shader.getInfoDebugLog()});
auto program = glslang::TProgram{};
program.addShader(&shader);
if (!program.link(messages))
throw std::runtime_error(std::string{shader.getInfoLog()} + std::string{shader.getInfoDebugLog()});
auto spv = std::vector<unsigned int>{};
glslang::GlslangToSpv(*program.getIntermediate(stage), spv);
return {device, {{}, spv}};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment