From e800d8d38a2fb9659375fcc2571f77e192b282cf Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Sat, 13 Jan 2024 06:06:27 +0100
Subject: [PATCH] Fix linking errors and double free issues

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 modules/shader_compiler/config/Shady.cmake               | 7 ++++++-
 modules/shader_compiler/lib/shady                        | 2 +-
 modules/shader_compiler/src/vkcv/shader/LLVMCompiler.cpp | 9 ++++-----
 .../shader_compiler/src/vkcv/shader/ShadyCompiler.cpp    | 2 --
 modules/shader_compiler/src/vkcv/shader/SlimCompiler.cpp | 9 ++++-----
 projects/first_triangle/src/main.cpp                     | 3 ++-
 6 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/modules/shader_compiler/config/Shady.cmake b/modules/shader_compiler/config/Shady.cmake
index 92dd334d..88e1f7b3 100644
--- a/modules/shader_compiler/config/Shady.cmake
+++ b/modules/shader_compiler/config/Shady.cmake
@@ -7,6 +7,11 @@ if (${shady_status})
 
 	add_subdirectory(${vkcv_shader_compiler_lib}/shady)
 	
-	list(APPEND vkcv_shader_compiler_libraries shady)
+	if (vkcv_build_attribute EQUAL "SHARED")
+		list(APPEND vkcv_shader_compiler_libraries shady runtime)
+	else ()
+		list(APPEND vkcv_shader_compiler_libraries common driver)
+	endif ()
+
 	list(APPEND vkcv_shader_compiler_includes ${vkcv_shader_compiler_lib}/shady/include)
 endif ()
diff --git a/modules/shader_compiler/lib/shady b/modules/shader_compiler/lib/shady
index 2e72e345..0a92cf7f 160000
--- a/modules/shader_compiler/lib/shady
+++ b/modules/shader_compiler/lib/shady
@@ -1 +1 @@
-Subproject commit 2e72e345035166d7fd2a0b94610cfc8fd603155b
+Subproject commit 0a92cf7ff4081d21db0724a8e66ab868b878df7d
diff --git a/modules/shader_compiler/src/vkcv/shader/LLVMCompiler.cpp b/modules/shader_compiler/src/vkcv/shader/LLVMCompiler.cpp
index 04435ae6..c53904d4 100644
--- a/modules/shader_compiler/src/vkcv/shader/LLVMCompiler.cpp
+++ b/modules/shader_compiler/src/vkcv/shader/LLVMCompiler.cpp
@@ -4,7 +4,9 @@
 #include <vkcv/File.hpp>
 #include <vkcv/Logger.hpp>
 
-#include <shady/driver.h>
+extern "C" {
+	#include <shady/driver.h>
+}
 
 namespace vkcv::shader {
 
@@ -87,10 +89,7 @@ namespace vkcv::shader {
 			return false;
 		}
 
-		bool result = shadyCompileModule(module, shaderStage, shaderSource, compiled, includePath);
-
-		destroy_module(module);
-		return result;
+		return shadyCompileModule(module, shaderStage, shaderSource, compiled, includePath);
 	}
 
     bool LLVMCompiler::compileSource(ShaderStage shaderStage,
diff --git a/modules/shader_compiler/src/vkcv/shader/ShadyCompiler.cpp b/modules/shader_compiler/src/vkcv/shader/ShadyCompiler.cpp
index 13319e22..6168fcfa 100644
--- a/modules/shader_compiler/src/vkcv/shader/ShadyCompiler.cpp
+++ b/modules/shader_compiler/src/vkcv/shader/ShadyCompiler.cpp
@@ -4,8 +4,6 @@
 #include <vkcv/File.hpp>
 #include <vkcv/Logger.hpp>
 
-#include <shady/driver.h>
-
 namespace vkcv::shader {
 	
 	ShadyCompiler::ShadyCompiler()
diff --git a/modules/shader_compiler/src/vkcv/shader/SlimCompiler.cpp b/modules/shader_compiler/src/vkcv/shader/SlimCompiler.cpp
index 940ae700..475d867b 100644
--- a/modules/shader_compiler/src/vkcv/shader/SlimCompiler.cpp
+++ b/modules/shader_compiler/src/vkcv/shader/SlimCompiler.cpp
@@ -4,7 +4,9 @@
 #include <vkcv/File.hpp>
 #include <vkcv/Logger.hpp>
 
-#include <shady/driver.h>
+extern "C" {
+	#include <shady/driver.h>
+}
 
 namespace vkcv::shader {
 
@@ -87,10 +89,7 @@ namespace vkcv::shader {
 			return false;
 		}
 
-		bool result = shadyCompileModule(module, shaderStage, shaderSource, compiled, includePath);
-
-		destroy_module(module);
-		return result;
+		return shadyCompileModule(module, shaderStage, shaderSource, compiled, includePath);
 	}
 
     bool SlimCompiler::compileSource(ShaderStage shaderStage,
diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp
index aae046da..995c6aa3 100644
--- a/projects/first_triangle/src/main.cpp
+++ b/projects/first_triangle/src/main.cpp
@@ -2,6 +2,7 @@
 #include <vkcv/Core.hpp>
 #include <vkcv/Pass.hpp>
 #include <GLFW/glfw3.h>
+#include <vkcv/ShaderProgram.hpp>
 #include <vkcv/camera/CameraManager.hpp>
 #include <vkcv/shader/GLSLCompiler.hpp>
 
@@ -38,7 +39,7 @@ int main(int argc, const char** argv) {
 	vkcv::shader::GLSLCompiler compiler;
 	
 	compiler.compileProgram(triangleShaderProgram, {
-		{vkcv::ShaderStage::VERTEX, "shaders/shader.vert"},
+		{ vkcv::ShaderStage::VERTEX, "shaders/shader.vert" },
 		{ vkcv::ShaderStage::FRAGMENT, "shaders/shader.frag" }
 	}, nullptr);
 
-- 
GitLab