From 636f81319b12f7739e70409e74435ff93087e8b2 Mon Sep 17 00:00:00 2001 From: Leonie Franken <lfranken@uni-koblenz.de> Date: Mon, 24 May 2021 19:26:24 +0200 Subject: [PATCH] [#36][Propose] Add SPIRV-Cross Library globally --- .gitmodules | 3 +++ config/Libraries.cmake | 1 + config/lib/SPIRV_Cross.cmake | 17 +++++++++++++++++ include/vkcv/ShaderProgram.hpp | 3 +++ lib/SPIRV-Cross | 1 + src/vkcv/ShaderProgram.cpp | 6 ++++++ 6 files changed, 31 insertions(+) create mode 100644 config/lib/SPIRV_Cross.cmake create mode 160000 lib/SPIRV-Cross diff --git a/.gitmodules b/.gitmodules index b44e4738..323286b5 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 13667936..e04aa357 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 00000000..2c06dabe --- /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 172e906f..53e75aba 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 00000000..ff618907 --- /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 87ccdefb..e5569e00 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 + } } -- GitLab