From 3abbab4ad559df77f18d2b2f520f584773c2a7fa Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Thu, 11 Jan 2024 02:50:16 +0100
Subject: [PATCH] Initial commit to add submodules and cmake configs

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 .gitmodules                                   |  9 +++++
 modules/shader_compiler/CMakeLists.txt        | 10 ++++++
 modules/shader_compiler/config/Murmur3.cmake  |  9 +++++
 .../config/SPIRV-Headers.cmake                |  9 +++++
 modules/shader_compiler/config/Shady.cmake    | 12 +++++++
 .../include/vkcv/shader/ShadyCompiler.hpp     | 32 +++++++++++++++++
 modules/shader_compiler/lib/SPIRV-Headers     |  1 +
 modules/shader_compiler/lib/murmur3           |  1 +
 modules/shader_compiler/lib/shady             |  1 +
 .../src/vkcv/shader/ShadyCompiler.cpp         | 34 +++++++++++++++++++
 10 files changed, 118 insertions(+)
 create mode 100644 modules/shader_compiler/config/Murmur3.cmake
 create mode 100644 modules/shader_compiler/config/SPIRV-Headers.cmake
 create mode 100644 modules/shader_compiler/config/Shady.cmake
 create mode 100644 modules/shader_compiler/include/vkcv/shader/ShadyCompiler.hpp
 create mode 160000 modules/shader_compiler/lib/SPIRV-Headers
 create mode 160000 modules/shader_compiler/lib/murmur3
 create mode 160000 modules/shader_compiler/lib/shady
 create mode 100644 modules/shader_compiler/src/vkcv/shader/ShadyCompiler.cpp

diff --git a/.gitmodules b/.gitmodules
index 668c9087..10aee941 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -70,3 +70,12 @@
 	path = modules/asset_loader/lib/wuffs-mirror-release-c
 	url = https://github.com/google/wuffs-mirror-release-c.git
 	branch = main
+[submodule "modules/shader_compiler/lib/shady"]
+	path = modules/shader_compiler/lib/shady
+	url = https://github.com/TheJackiMonster/shady.git
+[submodule "modules/shader_compiler/lib/SPIRV-Headers"]
+	path = modules/shader_compiler/lib/SPIRV-Headers
+	url = https://github.com/KhronosGroup/SPIRV-Headers.git
+[submodule "modules/shader_compiler/lib/murmur3"]
+	path = modules/shader_compiler/lib/murmur3
+	url = https://github.com/PeterScott/murmur3.git
diff --git a/modules/shader_compiler/CMakeLists.txt b/modules/shader_compiler/CMakeLists.txt
index bd85c7d8..35b31192 100644
--- a/modules/shader_compiler/CMakeLists.txt
+++ b/modules/shader_compiler/CMakeLists.txt
@@ -21,6 +21,9 @@ set(vkcv_shader_compiler_sources
 		
 		${vkcv_shader_compiler_include}/vkcv/shader/HLSLCompiler.hpp
 		${vkcv_shader_compiler_source}/vkcv/shader/HLSLCompiler.cpp
+
+		${vkcv_shader_compiler_include}/vkcv/shader/ShadyCompiler.hpp
+		${vkcv_shader_compiler_source}/vkcv/shader/ShadyCompiler.cpp
 )
 
 filter_headers(vkcv_shader_compiler_sources ${vkcv_shader_compiler_include} vkcv_shader_compiler_headers)
@@ -33,9 +36,16 @@ set_target_properties(vkcv_shader_compiler PROPERTIES PUBLIC_HEADER "${vkcv_shad
 set(vkcv_shader_compiler_lib lib)
 set(vkcv_shader_compiler_lib_path ${PROJECT_SOURCE_DIR}/${vkcv_shader_compiler_lib})
 
+# Load SPIRV-Headers
+include(config/SPIRV-Headers.cmake)
+
 # Check and load GLSLANG
 include(config/GLSLANG.cmake)
 
+# Check and load Shady (with murmur3)
+include(config/Murmur3.cmake)
+include(config/Shady.cmake)
+
 # link the required libraries to the module
 target_link_libraries(vkcv_shader_compiler ${vkcv_shader_compiler_libraries} vkcv)
 
diff --git a/modules/shader_compiler/config/Murmur3.cmake b/modules/shader_compiler/config/Murmur3.cmake
new file mode 100644
index 00000000..d220b52c
--- /dev/null
+++ b/modules/shader_compiler/config/Murmur3.cmake
@@ -0,0 +1,9 @@
+
+use_git_submodule("${vkcv_shader_compiler_lib_path}/murmur3" murmur3_status)
+
+if (${murmur3_status})
+    add_library(murmur3 STATIC ${vkcv_shader_compiler_lib}/murmur3/murmur3.c)
+
+    target_include_directories(murmur3 INTERFACE ${vkcv_shader_compiler_lib}/murmur3)
+    set_target_properties(murmur3 PROPERTIES POSITION_INDEPENDENT_CODE ON)
+endif ()
diff --git a/modules/shader_compiler/config/SPIRV-Headers.cmake b/modules/shader_compiler/config/SPIRV-Headers.cmake
new file mode 100644
index 00000000..b5f47dbe
--- /dev/null
+++ b/modules/shader_compiler/config/SPIRV-Headers.cmake
@@ -0,0 +1,9 @@
+
+use_git_submodule("${vkcv_shader_compiler_lib_path}/SPIRV-Headers" spriv_headers_status)
+
+if (${spriv_headers_status})
+	add_subdirectory(${vkcv_shader_compiler_lib}/SPIRV-Headers)
+	
+	list(APPEND vkcv_shader_compiler_libraries SPIRV-Headers)
+	list(APPEND vkcv_shader_compiler_includes ${vkcv_shader_compiler_lib}/SPIRV-Headers/include)
+endif ()
diff --git a/modules/shader_compiler/config/Shady.cmake b/modules/shader_compiler/config/Shady.cmake
new file mode 100644
index 00000000..92dd334d
--- /dev/null
+++ b/modules/shader_compiler/config/Shady.cmake
@@ -0,0 +1,12 @@
+
+use_git_submodule("${vkcv_shader_compiler_lib_path}/shady" shady_status)
+
+if (${shady_status})
+    set(EXTERNAL_SPIRV_HEADERS ON CACHE INTERNAL "")
+    set(EXTERNAL_MURMUR3 ON CACHE INTERNAL "")
+
+	add_subdirectory(${vkcv_shader_compiler_lib}/shady)
+	
+	list(APPEND vkcv_shader_compiler_libraries shady)
+	list(APPEND vkcv_shader_compiler_includes ${vkcv_shader_compiler_lib}/shady/include)
+endif ()
diff --git a/modules/shader_compiler/include/vkcv/shader/ShadyCompiler.hpp b/modules/shader_compiler/include/vkcv/shader/ShadyCompiler.hpp
new file mode 100644
index 00000000..eee66a26
--- /dev/null
+++ b/modules/shader_compiler/include/vkcv/shader/ShadyCompiler.hpp
@@ -0,0 +1,32 @@
+#pragma once
+
+#include <filesystem>
+
+#include <vkcv/ShaderStage.hpp>
+#include "Compiler.hpp"
+
+namespace vkcv::shader {
+
+    class ShadyCompiler : public Compiler {
+    public:
+        ShadyCompiler();
+
+        ShadyCompiler(const ShadyCompiler& other);
+
+        ShadyCompiler(ShadyCompiler&& other) = default;
+
+        ~ShadyCompiler();
+
+        ShadyCompiler& operator=(const ShadyCompiler& other);
+
+        ShadyCompiler& operator=(ShadyCompiler&& other) = default;
+
+        void compile(ShaderStage shaderStage,
+					 const std::filesystem::path& shaderPath,
+					 const ShaderCompiledFunction& compiled,
+					 const std::filesystem::path& includePath = "",
+					 bool update = false) override;
+
+    }
+
+}
diff --git a/modules/shader_compiler/lib/SPIRV-Headers b/modules/shader_compiler/lib/SPIRV-Headers
new file mode 160000
index 00000000..bdd1b2ab
--- /dev/null
+++ b/modules/shader_compiler/lib/SPIRV-Headers
@@ -0,0 +1 @@
+Subproject commit bdd1b2ab1f03e616047bbcf8971157dccd50c792
diff --git a/modules/shader_compiler/lib/murmur3 b/modules/shader_compiler/lib/murmur3
new file mode 160000
index 00000000..dae94be0
--- /dev/null
+++ b/modules/shader_compiler/lib/murmur3
@@ -0,0 +1 @@
+Subproject commit dae94be0c0f54a399d23ea6cbe54bca5a4e93ce4
diff --git a/modules/shader_compiler/lib/shady b/modules/shader_compiler/lib/shady
new file mode 160000
index 00000000..6ab5f5fc
--- /dev/null
+++ b/modules/shader_compiler/lib/shady
@@ -0,0 +1 @@
+Subproject commit 6ab5f5fc520de70e6f19d1e7312a70aea71020fd
diff --git a/modules/shader_compiler/src/vkcv/shader/ShadyCompiler.cpp b/modules/shader_compiler/src/vkcv/shader/ShadyCompiler.cpp
new file mode 100644
index 00000000..e582bb29
--- /dev/null
+++ b/modules/shader_compiler/src/vkcv/shader/ShadyCompiler.cpp
@@ -0,0 +1,34 @@
+
+#include "vkcv/shader/ShadyCompiler.hpp"
+
+#include <vkcv/File.hpp>
+#include <vkcv/Logger.hpp>
+
+namespace vkcv::shader {
+	
+	ShadyCompiler::ShadyCompiler() : Compiler() {
+		// TODO
+	}
+	
+	ShadyCompiler::ShadyCompiler(const ShadyCompiler &other) : Compiler(other) {
+		// TODO
+	}
+	
+	ShadyCompiler::~ShadyCompiler() {
+		// TODO
+	}
+	
+	ShadyCompiler &ShadyCompiler::operator=(const ShadyCompiler &other) {
+		// TODO
+		return *this;
+	}
+	
+	void ShadyCompiler::compile(ShaderStage shaderStage,
+								  const std::filesystem::path &shaderPath,
+								  const ShaderCompiledFunction &compiled,
+								  const std::filesystem::path &includePath,
+								  bool update) {
+		// TODO
+	}
+	
+}
-- 
GitLab