diff options
Diffstat (limited to 'Graphics/GLSLTools')
| -rw-r--r-- | Graphics/GLSLTools/include/SPIRVShaderResources.hpp | 5 | ||||
| -rw-r--r-- | Graphics/GLSLTools/src/SPIRVShaderResources.cpp | 17 |
2 files changed, 16 insertions, 6 deletions
diff --git a/Graphics/GLSLTools/include/SPIRVShaderResources.hpp b/Graphics/GLSLTools/include/SPIRVShaderResources.hpp index addd3e1b..96e778a0 100644 --- a/Graphics/GLSLTools/include/SPIRVShaderResources.hpp +++ b/Graphics/GLSLTools/include/SPIRVShaderResources.hpp @@ -328,6 +328,8 @@ public: // clang-format on + bool IsHLSLSource() const { return m_IsHLSLSource; } + private: void Initialize(IMemoryAllocator& Allocator, const ResourceCounters& Counters, @@ -386,6 +388,9 @@ private: OffsetType m_NumShaderStageInputs = 0; SHADER_TYPE m_ShaderType = SHADER_TYPE_UNKNOWN; + + // Inidicates if the shader was compiled from HLSL source. + bool m_IsHLSLSource = false; }; } // namespace Diligent diff --git a/Graphics/GLSLTools/src/SPIRVShaderResources.cpp b/Graphics/GLSLTools/src/SPIRVShaderResources.cpp index 6fd96ddf..46705ace 100644 --- a/Graphics/GLSLTools/src/SPIRVShaderResources.cpp +++ b/Graphics/GLSLTools/src/SPIRVShaderResources.cpp @@ -213,7 +213,8 @@ SPIRVShaderResources::SPIRVShaderResources(IMemoryAllocator& Allocator, // https://github.com/KhronosGroup/SPIRV-Cross/wiki/Reflection-API-user-guide diligent_spirv_cross::Parser parser(move(spirv_binary)); parser.parse(); - auto ParsedIRSource = parser.get_parsed_ir().source; + const auto ParsedIRSource = parser.get_parsed_ir().source; + m_IsHLSLSource = ParsedIRSource.hlsl; diligent_spirv_cross::Compiler Compiler(std::move(parser.get_parsed_ir())); spv::ExecutionModel ExecutionModel = ShaderTypeToExecutionModel(shaderDesc.ShaderType); @@ -270,7 +271,7 @@ SPIRVShaderResources::SPIRVShaderResources(IMemoryAllocator& Allocator, Uint32 NumShaderStageInputs = 0; - if (resources.stage_inputs.empty()) + if (!m_IsHLSLSource || resources.stage_inputs.empty()) LoadShaderStageInputs = false; if (LoadShaderStageInputs) { @@ -302,10 +303,14 @@ SPIRVShaderResources::SPIRVShaderResources(IMemoryAllocator& Allocator, else { LoadShaderStageInputs = false; - LOG_WARNING_MESSAGE("SPIRV byte code of shader '", shaderDesc.Name, "' does not use SPV_GOOGLE_hlsl_functionality1 extension. " - "As a result, it is not possible to get semantics of shader inputs and map them to proper locations. " - "The shader will still work correctly if all attributes are declared in ascending order without any gaps. " - "Enable SPV_GOOGLE_hlsl_functionality1 in your compiler to allow proper mapping of vertex shader inputs."); + if (m_IsHLSLSource) + { + LOG_WARNING_MESSAGE("SPIRV byte code of shader '", shaderDesc.Name, + "' does not use SPV_GOOGLE_hlsl_functionality1 extension. " + "As a result, it is not possible to get semantics of shader inputs and map them to proper locations. " + "The shader will still work correctly if all attributes are declared in ascending order without any gaps. " + "Enable SPV_GOOGLE_hlsl_functionality1 in your compiler to allow proper mapping of vertex shader inputs."); + } } } |
