From 7b35bc8486edb3605876e16ee794bee8c7077bcf Mon Sep 17 00:00:00 2001 From: assiduous Date: Mon, 1 Mar 2021 21:32:11 -0800 Subject: RunTimeResourceArray: added constant buffers --- Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp | 9 +++++---- .../GraphicsEngineD3DBase/include/D3DShaderResourceLoader.hpp | 9 +++++++++ Graphics/ShaderTools/src/DXCompiler.cpp | 7 ++++++- 3 files changed, 20 insertions(+), 5 deletions(-) (limited to 'Graphics') diff --git a/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp index d6dff734..549f7065 100644 --- a/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp +++ b/Graphics/GraphicsEngineD3D12/src/PipelineStateD3D12Impl.cpp @@ -634,6 +634,11 @@ void PipelineStateD3D12Impl::InitRootSignature(const PipelineStateCreateInfo& Cr "Compile the shader using SM5.1+ or change the resource layout to use only one space."); } +#ifdef DILIGENT_DEVELOPMENT + // Validate resources before remapping + DvpValidateShaderResources(pShader, pLocalRootSig); +#endif + CComPtr pBlob; if (IsDXILBytecode(pBytecode->GetBufferPointer(), pBytecode->GetBufferSize())) { @@ -652,10 +657,6 @@ void PipelineStateD3D12Impl::InitRootSignature(const PipelineStateCreateInfo& Cr LOG_ERROR_AND_THROW("Failed to remap resource bindings in shader '", pShader->GetDesc().Name, "'."); } pBytecode = pBlob; - -#ifdef DILIGENT_DEVELOPMENT - DvpValidateShaderResources(pShader, pLocalRootSig); -#endif } } } diff --git a/Graphics/GraphicsEngineD3DBase/include/D3DShaderResourceLoader.hpp b/Graphics/GraphicsEngineD3DBase/include/D3DShaderResourceLoader.hpp index 1bd4678d..d5cf7e6e 100644 --- a/Graphics/GraphicsEngineD3DBase/include/D3DShaderResourceLoader.hpp +++ b/Graphics/GraphicsEngineD3DBase/include/D3DShaderResourceLoader.hpp @@ -102,6 +102,15 @@ void LoadD3DShaderResources(TShaderReflection* pShaderReflection, SkipCount = 1; UINT BindCount = BindingDesc.BindCount; + if (BindCount == UINT_MAX) + { + // For some reason + // Texture2D g_Textures[] + // produces BindCount == 0, but + // ConstantBuffer g_ConstantBuffers[] + // produces BindCount == UINT_MAX + BindCount = 0; + } // Handle arrays // For shader models 5_0 and before, every resource array element is enumerated individually. diff --git a/Graphics/ShaderTools/src/DXCompiler.cpp b/Graphics/ShaderTools/src/DXCompiler.cpp index fb2e82e0..681c7cb0 100644 --- a/Graphics/ShaderTools/src/DXCompiler.cpp +++ b/Graphics/ShaderTools/src/DXCompiler.cpp @@ -831,7 +831,12 @@ bool DXCompilerImpl::RemapResourceBindings(const TResourceBindingMap& ResourceMa { NameAndBinding.second.SrcBindPoint = ResDesc.BindPoint; NameAndBinding.second.SrcSpace = ResDesc.Space; - VERIFY_EXPR(ResDesc.BindCount == 0 || NameAndBinding.second.ArraySize >= ResDesc.BindCount); + // For some reason + // Texture2D g_Textures[] + // produces BindCount == 0, but + // ConstantBuffer g_ConstantBuffers[] + // produces BindCount == UINT_MAX + VERIFY_EXPR(ResDesc.BindCount == 0 || ResDesc.BindCount == UINT_MAX || NameAndBinding.second.ArraySize >= ResDesc.BindCount); switch (ResDesc.Type) { -- cgit v1.2.3