diff --git a/include/vkcv/ShaderProgram.hpp b/include/vkcv/ShaderProgram.hpp index 53e75aba696f9da3fd1d60bdd70e657675571427..0a8470a9d13c3531d24887ca4905e795c95de8e6 100644 --- a/include/vkcv/ShaderProgram.hpp +++ b/include/vkcv/ShaderProgram.hpp @@ -10,7 +10,7 @@ #include <iostream> #include <filesystem> #include <vulkan/vulkan.hpp> -#include <spirv_glsl.hpp> +#include <spirv_cross.hpp> namespace vkcv { diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp index 3c3f91de9ac1c4490859559db2bca5bdd089ecfa..84fe7b74c7b231ae3ac7273dbc6e0c6601d3c03f 100644 --- a/projects/first_triangle/src/main.cpp +++ b/projects/first_triangle/src/main.cpp @@ -72,6 +72,8 @@ int main(int argc, const char** argv) { vkcv::ShaderProgram triangleShaderProgram{}; triangleShaderProgram.addShader(vkcv::ShaderStage::VERTEX, std::filesystem::path("shaders/vert.spv")); triangleShaderProgram.addShader(vkcv::ShaderStage::FRAGMENT, std::filesystem::path("shaders/frag.spv")); + triangleShaderProgram.reflectShader(vkcv::ShaderStage::VERTEX); + triangleShaderProgram.reflectShader(vkcv::ShaderStage::FRAGMENT); const vkcv::PipelineConfig trianglePipelineDefinition(triangleShaderProgram, windowWidth, windowHeight, trianglePass); vkcv::PipelineHandle trianglePipeline = core.createGraphicsPipeline(trianglePipelineDefinition); diff --git a/src/vkcv/ShaderProgram.cpp b/src/vkcv/ShaderProgram.cpp index e5569e0024b8735c093a546177a3634ef6d372bc..fce6ea35c4b20b310dd05fd888d38e82c32becb8 100644 --- a/src/vkcv/ShaderProgram.cpp +++ b/src/vkcv/ShaderProgram.cpp @@ -62,7 +62,25 @@ namespace vkcv { void ShaderProgram::reflectShader(ShaderStage shaderStage) const { - auto shaderCode = m_Shaders.at(shaderStage).shaderCode; - //TODO + auto shaderCodeChar = m_Shaders.at(shaderStage).shaderCode; + std::vector<uint32_t> shaderCode; //convert from char to uint 32. Is this the best way? Prob not. + + for (uint32_t i = 0; i < shaderCodeChar.size(); i++) { + shaderCode.push_back((uint32_t) shaderCodeChar[i]); + } + + //spirv_cross::Compiler comp(move(shaderCode)); + + /* + spirv_cross::ShaderResources resources = comp.get_shader_resources(); + + //testprint + for (auto &u : resources.uniform_buffers) + { + uint32_t set = comp.get_decoration(u.id, spv::DecorationDescriptorSet); + uint32_t binding = comp.get_decoration(u.id, spv::DecorationBinding); + std::cout << 'Found UBO ' << &u << ' at set = ' << set << ', binding = ' << binding << std::endl; + } + */ } }