From 3bb266bfc21f635b46fec4effdecbd305c87e7b1 Mon Sep 17 00:00:00 2001 From: assiduous Date: Fri, 17 Jul 2020 14:47:09 -0700 Subject: Vk backend: disabled warning about missing SPV_GOOGLE_hlsl_functionality1 extension when SPIRV is not compiled from HLSL plus few improvements to handling SPIRV created from HLSL --- Graphics/GLSLTools/include/SPIRVShaderResources.hpp | 5 +++++ Graphics/GLSLTools/src/SPIRVShaderResources.cpp | 17 +++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) (limited to 'Graphics/GLSLTools') 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."); + } } } -- cgit v1.2.3