summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2025-11-02 13:17:28 -0500
committerGitHub <noreply@github.com>2025-11-02 13:17:28 -0500
commit1d9c743ef793d88b53d31bb31079435c9a2b8e5f (patch)
tree688446cbc0c2d68d5369f7f1f1d824e3833c1ca2 /Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp
parent8a0a8bb8745008b43e7efe44f2b271c187fc6048 (diff)
parent96fe6a157549761c37dd65e28f76938b4934a997 (diff)
Merge pull request #13975 from iwubcode/shader_includes
VideoBackends / VideoCommon: add support for specifying include files in shader code
Diffstat (limited to 'Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp')
-rw-r--r--Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp b/Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp
index 86826f7280..13dbe0e0b7 100644
--- a/Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp
+++ b/Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp
@@ -8,6 +8,7 @@
#include "VideoBackends/Vulkan/VulkanContext.h"
#include "VideoCommon/DriverDetails.h"
+#include "VideoCommon/ShaderCompileUtils.h"
#include "VideoCommon/Spirv.h"
namespace Vulkan::ShaderCompiler
@@ -21,6 +22,9 @@ namespace Vulkan::ShaderCompiler
static const char SHADER_HEADER[] = R"(
// Target GLSL 4.5.
#version 450 core
+
+ #extension GL_ARB_shading_language_include : enable
+
#define ATTRIBUTE_LOCATION(x) layout(location = x)
#define FRAGMENT_OUTPUT_LOCATION(x) layout(location = x)
#define FRAGMENT_OUTPUT_LOCATION_INDEXED(x, y) layout(location = x, index = y)
@@ -121,27 +125,31 @@ static glslang::EShTargetLanguageVersion GetLanguageVersion()
return glslang::EShTargetSpv_1_0;
}
-std::optional<SPIRVCodeVector> CompileVertexShader(std::string_view source_code)
+std::optional<SPIRVCodeVector> CompileVertexShader(std::string_view source_code,
+ VideoCommon::ShaderIncluder* shader_includer)
{
return SPIRV::CompileVertexShader(GetShaderCode(source_code, SHADER_HEADER), APIType::Vulkan,
- GetLanguageVersion());
+ GetLanguageVersion(), shader_includer);
}
-std::optional<SPIRVCodeVector> CompileGeometryShader(std::string_view source_code)
+std::optional<SPIRVCodeVector> CompileGeometryShader(std::string_view source_code,
+ VideoCommon::ShaderIncluder* shader_includer)
{
return SPIRV::CompileGeometryShader(GetShaderCode(source_code, SHADER_HEADER), APIType::Vulkan,
- GetLanguageVersion());
+ GetLanguageVersion(), shader_includer);
}
-std::optional<SPIRVCodeVector> CompileFragmentShader(std::string_view source_code)
+std::optional<SPIRVCodeVector> CompileFragmentShader(std::string_view source_code,
+ VideoCommon::ShaderIncluder* shader_includer)
{
return SPIRV::CompileFragmentShader(GetShaderCode(source_code, SHADER_HEADER), APIType::Vulkan,
- GetLanguageVersion());
+ GetLanguageVersion(), shader_includer);
}
-std::optional<SPIRVCodeVector> CompileComputeShader(std::string_view source_code)
+std::optional<SPIRVCodeVector> CompileComputeShader(std::string_view source_code,
+ VideoCommon::ShaderIncluder* shader_includer)
{
return SPIRV::CompileComputeShader(GetShaderCode(source_code, COMPUTE_SHADER_HEADER),
- APIType::Vulkan, GetLanguageVersion());
+ APIType::Vulkan, GetLanguageVersion(), shader_includer);
}
} // namespace Vulkan::ShaderCompiler