diff --git a/.gitmodules b/.gitmodules index b44e47387fc30a41c3f5c8d09b5ad525b354f233..323286b592292b798a8b6ca03dde3651dd36239e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "lib/glfw"] path = lib/glfw url = https://github.com/glfw/glfw.git +[submodule "lib/SPIRV-Cross"] + path = lib/SPIRV-Cross + url = https://github.com/KhronosGroup/SPIRV-Cross.git diff --git a/config/Libraries.cmake b/config/Libraries.cmake index 13667936dd100be91ab43b73e6774e7db3da876c..e04aa3575a34632eb75c929bf4640305cd93e298 100644 --- a/config/Libraries.cmake +++ b/config/Libraries.cmake @@ -16,6 +16,7 @@ set(vkcv_config_msg " - Library: ") # load dependencies via separate cmake file include(${vkcv_config_lib}/GLFW.cmake) # glfw-x11 / glfw-wayland # libglfw3-dev include(${vkcv_config_lib}/Vulkan.cmake) # vulkan-intel / vulkan-radeon / nvidia # libvulkan-dev +include(${vkcv_config_lib}/SPIRV_Cross.cmake) # SPIRV-Cross # libspirv_cross_c_shared # cleanup of compiler flags if (vkcv_flags) diff --git a/config/lib/SPIRV_Cross.cmake b/config/lib/SPIRV_Cross.cmake new file mode 100644 index 0000000000000000000000000000000000000000..2c06dabeb6bd46c53a5c05c32b27425c5ed7f812 --- /dev/null +++ b/config/lib/SPIRV_Cross.cmake @@ -0,0 +1,17 @@ +find_package(spirv_cross_c_shared QUIET) + +if (spirv-cross_FOUND) + list(APPEND vkcv_libraries spirv_cross_c_shared) + + message(${vkcv_config_msg} " SPIRV Cross - ") +else() + if (EXISTS "${vkcv_lib_path}/SPIRV-Cross") + add_subdirectory(${vkcv_lib}/SPIRV-Cross) + + list(APPEND vkcv_libraries spirv_cross_c_shared) + + message(${vkcv_config_msg} " SPIRV Cross - ") + else() + message(WARNING "SPIRV-Cross is required..! Update the submodules!") + endif () +endif () \ No newline at end of file diff --git a/include/vkcv/ShaderProgram.hpp b/include/vkcv/ShaderProgram.hpp index 172e906fca457c6245855639275054514958b69d..53e75aba696f9da3fd1d60bdd70e657675571427 100644 --- a/include/vkcv/ShaderProgram.hpp +++ b/include/vkcv/ShaderProgram.hpp @@ -10,6 +10,7 @@ #include <iostream> #include <filesystem> #include <vulkan/vulkan.hpp> +#include <spirv_glsl.hpp> namespace vkcv { @@ -53,6 +54,8 @@ namespace vkcv { bool existsShader(ShaderStage shaderStage) const; + void reflectShader(ShaderStage shaderStage) const; + private: std::unordered_map<ShaderStage, Shader> m_Shaders; diff --git a/lib/SPIRV-Cross b/lib/SPIRV-Cross new file mode 160000 index 0000000000000000000000000000000000000000..ff61890722a91e97c44940494be5b6eed0d5ff5b --- /dev/null +++ b/lib/SPIRV-Cross @@ -0,0 +1 @@ +Subproject commit ff61890722a91e97c44940494be5b6eed0d5ff5b diff --git a/src/vkcv/ShaderProgram.cpp b/src/vkcv/ShaderProgram.cpp index 87ccdefbfec0b4891d3152d30aa6c9f6c8c0d5ea..e5569e0024b8735c093a546177a3634ef6d372bc 100644 --- a/src/vkcv/ShaderProgram.cpp +++ b/src/vkcv/ShaderProgram.cpp @@ -59,4 +59,10 @@ namespace vkcv { else return true; } + + void ShaderProgram::reflectShader(ShaderStage shaderStage) const + { + auto shaderCode = m_Shaders.at(shaderStage).shaderCode; + //TODO + } }