diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2020-05-17 17:08:00 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2020-05-17 17:08:00 +0000 |
| commit | 6c0ed372bfb1f9094422c4a46f0c6baef65c4898 (patch) | |
| tree | c831629824c2844bc96d387dbc054bce339da2c8 /Graphics/GLSLTools | |
| parent | MathLib test: added matrix equality tests (to cover https://github.com/Dilige... (diff) | |
| download | DiligentCore-6c0ed372bfb1f9094422c4a46f0c6baef65c4898.tar.gz DiligentCore-6c0ed372bfb1f9094422c4a46f0c6baef65c4898.zip | |
Unified shader type defines for all backends
Diffstat (limited to 'Graphics/GLSLTools')
| -rw-r--r-- | Graphics/GLSLTools/src/GLSLSourceBuilder.cpp | 48 | ||||
| -rw-r--r-- | Graphics/GLSLTools/src/SPIRVUtils.cpp | 19 |
2 files changed, 46 insertions, 21 deletions
diff --git a/Graphics/GLSLTools/src/GLSLSourceBuilder.cpp b/Graphics/GLSLTools/src/GLSLSourceBuilder.cpp index abb63d4f..e6824641 100644 --- a/Graphics/GLSLTools/src/GLSLSourceBuilder.cpp +++ b/Graphics/GLSLTools/src/GLSLSourceBuilder.cpp @@ -37,6 +37,38 @@ namespace Diligent { +const char* GetShaderTypeDefines(SHADER_TYPE Type) +{ + switch (Type) + { + case SHADER_TYPE_VERTEX: + return "#define VERTEX_SHADER 1\n"; + + case SHADER_TYPE_PIXEL: + return "#define FRAGMENT_SHADER 1\n" + "#define PIXEL_SHADER 1\n"; + + case SHADER_TYPE_GEOMETRY: + return "#define GEOMETRY_SHADER 1\n"; + + case SHADER_TYPE_HULL: + return "#define TESS_CONTROL_SHADER 1\n" + "#define HULL_SHADER 1\n"; + + case SHADER_TYPE_DOMAIN: + return "#define TESS_EVALUATION_SHADER 1\n" + "#define DOMAIN_SHADER 1\n"; + break; + + case SHADER_TYPE_COMPUTE: + return "#define COMPUTE_SHADER 1\n"; + + default: + UNEXPECTED("Unexpected shader type"); + return nullptr; + } +} + String BuildGLSLSourceString(const ShaderCreateInfo& CreationAttribs, const DeviceCaps& deviceCaps, TargetGLSLCompiler TargetCompiler, @@ -252,20 +284,8 @@ String BuildGLSLSourceString(const ShaderCreateInfo& CreationAttribs, "#define gl_InstanceID gl_InstanceIndex\n"); } - const Char* ShaderTypeDefine = nullptr; - switch (ShaderType) - { - // clang-format off - case SHADER_TYPE_VERTEX: ShaderTypeDefine = "#define VERTEX_SHADER\n"; break; - case SHADER_TYPE_PIXEL: ShaderTypeDefine = "#define FRAGMENT_SHADER\n"; break; - case SHADER_TYPE_GEOMETRY: ShaderTypeDefine = "#define GEOMETRY_SHADER\n"; break; - case SHADER_TYPE_HULL: ShaderTypeDefine = "#define TESS_CONTROL_SHADER\n"; break; - case SHADER_TYPE_DOMAIN: ShaderTypeDefine = "#define TESS_EVALUATION_SHADER\n"; break; - case SHADER_TYPE_COMPUTE: ShaderTypeDefine = "#define COMPUTE_SHADER\n"; break; - default: UNEXPECTED("Shader type is not specified"); - // clang-format on - } - GLSLSource += ShaderTypeDefine; + if (const auto* ShaderTypeDefine = GetShaderTypeDefines(ShaderType)) + GLSLSource += ShaderTypeDefine; if (ExtraDefinitions != nullptr) { diff --git a/Graphics/GLSLTools/src/SPIRVUtils.cpp b/Graphics/GLSLTools/src/SPIRVUtils.cpp index e5009884..4da444e4 100644 --- a/Graphics/GLSLTools/src/SPIRVUtils.cpp +++ b/Graphics/GLSLTools/src/SPIRVUtils.cpp @@ -44,14 +44,19 @@ #include "spirv-tools/optimizer.hpp" +// clang-format off static const char g_HLSLDefinitions[] = - { +{ #include "../../GraphicsEngineD3DBase/include/HLSLDefinitions_inc.fxh" }; +// clang-format on namespace Diligent { +// Implemented in GLSLSourceBuilder.cpp +const char* GetShaderTypeDefines(SHADER_TYPE Type); + void InitializeGlslang() { glslang::InitializeProcess(); @@ -467,7 +472,10 @@ std::vector<unsigned int> HLSLtoSPIRV(const ShaderCreateInfo& Attribs, IDataBlob SourceCodeLen = static_cast<int>(pFileData->GetSize()); } - std::string Defines; + std::string Defines = g_HLSLDefinitions; + if (const auto* ShaderTypeDefine = GetShaderTypeDefines(Attribs.Desc.ShaderType)) + Defines += ShaderTypeDefine; + if (Attribs.Macros != nullptr) { Defines = g_HLSLDefinitions; @@ -482,12 +490,9 @@ std::vector<unsigned int> HLSLtoSPIRV(const ShaderCreateInfo& Attribs, IDataBlob Defines += "\n"; ++pMacro; } - Shader.setPreamble(Defines.c_str()); - } - else - { - Shader.setPreamble(g_HLSLDefinitions); } + Shader.setPreamble(Defines.c_str()); + const char* ShaderStrings[] = {SourceCode}; const int ShaderStringLenghts[] = {SourceCodeLen}; const char* Names[] = {Attribs.FilePath != nullptr ? Attribs.FilePath : ""}; |
