diff options
| author | iwubcode <iwubcode@users.noreply.github.com> | 2025-09-27 00:24:05 -0500 |
|---|---|---|
| committer | iwubcode <iwubcode@users.noreply.github.com> | 2025-10-26 22:47:23 -0500 |
| commit | 96fe6a157549761c37dd65e28f76938b4934a997 (patch) | |
| tree | 956918d0c680e84941b6dc5dee410d0416f90dda /Source/Core/VideoBackends/Vulkan/ShaderCompiler.cpp | |
| parent | ba2acb872c294a7a01f8d24cd2a8cd9f4ec6f73a (diff) | |
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 |
