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