diff options
| author | JMC47 <JMC4789@gmail.com> | 2025-11-02 13:17:28 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-02 13:17:28 -0500 |
| commit | 1d9c743ef793d88b53d31bb31079435c9a2b8e5f (patch) | |
| tree | 688446cbc0c2d68d5369f7f1f1d824e3833c1ca2 /Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp | |
| parent | 8a0a8bb8745008b43e7efe44f2b271c187fc6048 (diff) | |
| parent | 96fe6a157549761c37dd65e28f76938b4934a997 (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.cpp | 24 |
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 |
