From fedbe3fdf4637ba1cb06d5aa121a8ccc23b78d97 Mon Sep 17 00:00:00 2001 From: assiduous Date: Wed, 24 Feb 2021 19:34:36 -0800 Subject: PipelineResourceSignatureD3D12Impl: added bound buffer view mode validation --- Graphics/GraphicsEngineD3DBase/CMakeLists.txt | 2 +- .../include/ShaderVariableD3D.hpp | 84 +++++++++++++ .../include/ShaderVariableD3DBase.hpp | 138 --------------------- 3 files changed, 85 insertions(+), 139 deletions(-) create mode 100644 Graphics/GraphicsEngineD3DBase/include/ShaderVariableD3D.hpp delete mode 100644 Graphics/GraphicsEngineD3DBase/include/ShaderVariableD3DBase.hpp (limited to 'Graphics/GraphicsEngineD3DBase') diff --git a/Graphics/GraphicsEngineD3DBase/CMakeLists.txt b/Graphics/GraphicsEngineD3DBase/CMakeLists.txt index 36e0c01a..c438debb 100644 --- a/Graphics/GraphicsEngineD3DBase/CMakeLists.txt +++ b/Graphics/GraphicsEngineD3DBase/CMakeLists.txt @@ -14,7 +14,7 @@ set(INCLUDE include/RenderDeviceD3DBase.hpp include/ShaderD3DBase.hpp include/ShaderResources.hpp - include/ShaderVariableD3DBase.hpp + include/ShaderVariableD3D.hpp include/SwapChainD3DBase.hpp ) diff --git a/Graphics/GraphicsEngineD3DBase/include/ShaderVariableD3D.hpp b/Graphics/GraphicsEngineD3DBase/include/ShaderVariableD3D.hpp new file mode 100644 index 00000000..289b9f65 --- /dev/null +++ b/Graphics/GraphicsEngineD3DBase/include/ShaderVariableD3D.hpp @@ -0,0 +1,84 @@ +/* + * Copyright 2019-2021 Diligent Graphics LLC + * Copyright 2015-2019 Egor Yusov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * In no event and under no legal theory, whether in tort (including negligence), + * contract, or otherwise, unless required by applicable law (such as deliberate + * and grossly negligent acts) or agreed to in writing, shall any Contributor be + * liable for any damages, including any direct, indirect, special, incidental, + * or consequential damages of any character arising as a result of this License or + * out of the use or inability to use the software (including but not limited to damages + * for loss of goodwill, work stoppage, computer failure or malfunction, or any and + * all other commercial damages or losses), even if such Contributor has been advised + * of the possibility of such damages. + */ + +#pragma once + + +/// \file + +namespace Diligent +{ + +template +bool VerifyBufferViewModeD3D(BufferViewImplType* pViewD3D, const D3DShaderResourceAttribs& Attribs, const char* ShaderName) +{ + if (pViewD3D == nullptr) + return true; + + const auto& ViewDesc = pViewD3D->GetDesc(); + const auto& BuffDesc = pViewD3D->GetBuffer()->GetDesc(); + + auto LogBufferBindingError = [&](const char* Msg) // + { + LOG_ERROR_MESSAGE("Buffer view '", ViewDesc.Name, "' of buffer '", BuffDesc.Name, + "' bound to shader variable '", Attribs.Name, "' in shader '", ShaderName, "' is invalid: ", Msg); + }; + + switch (Attribs.GetInputType()) + { + case D3D_SIT_TEXTURE: + case D3D_SIT_UAV_RWTYPED: + if (BuffDesc.Mode != BUFFER_MODE_FORMATTED || ViewDesc.Format.ValueType == VT_UNDEFINED) + { + LogBufferBindingError("formatted buffer view is expected."); + return false; + } + break; + + case D3D_SIT_STRUCTURED: + case D3D_SIT_UAV_RWSTRUCTURED: + if (BuffDesc.Mode != BUFFER_MODE_STRUCTURED) + { + LogBufferBindingError("structured buffer view is expected."); + return false; + } + break; + + case D3D_SIT_BYTEADDRESS: + case D3D_SIT_UAV_RWBYTEADDRESS: + if (BuffDesc.Mode != BUFFER_MODE_RAW) + { + LogBufferBindingError("raw buffer view is expected."); + return false; + } + break; + } + + return true; +} + +} // namespace Diligent diff --git a/Graphics/GraphicsEngineD3DBase/include/ShaderVariableD3DBase.hpp b/Graphics/GraphicsEngineD3DBase/include/ShaderVariableD3DBase.hpp deleted file mode 100644 index 1734588b..00000000 --- a/Graphics/GraphicsEngineD3DBase/include/ShaderVariableD3DBase.hpp +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright 2019-2021 Diligent Graphics LLC - * Copyright 2015-2019 Egor Yusov - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * In no event and under no legal theory, whether in tort (including negligence), - * contract, or otherwise, unless required by applicable law (such as deliberate - * and grossly negligent acts) or agreed to in writing, shall any Contributor be - * liable for any damages, including any direct, indirect, special, incidental, - * or consequential damages of any character arising as a result of this License or - * out of the use or inability to use the software (including but not limited to damages - * for loss of goodwill, work stoppage, computer failure or malfunction, or any and - * all other commercial damages or losses), even if such Contributor has been advised - * of the possibility of such damages. - */ - -#pragma once - -#include "ShaderResourceVariableBase.hpp" -#include "ShaderResourceVariableD3D.h" - -/// \file -/// Declaration of Diligent::ShaderVariableD3DBase class - -namespace Diligent -{ - -struct D3DVariableIDComparator -{ - bool operator()(const INTERFACE_ID& IID) const - { - return IID == IID_ShaderResourceVariableD3D || IID == IID_ShaderResourceVariable || IID == IID_Unknown; - } -}; - -template -struct ShaderVariableD3DBase : public ShaderVariableBase -{ - using TBase = ShaderVariableBase; - - ShaderVariableD3DBase(TShaderResourceLayout& ParentResLayout, - const D3DShaderResourceAttribs& Attribs, - SHADER_RESOURCE_VARIABLE_TYPE VariableType) : - // clang-format off - TBase {ParentResLayout}, - m_Attribs {Attribs }, - m_VariableType {VariableType } - // clang-format on - { - } - - virtual SHADER_RESOURCE_VARIABLE_TYPE DILIGENT_CALL_TYPE GetType() const override final - { - return m_VariableType; - } - - virtual void DILIGENT_CALL_TYPE GetResourceDesc(ShaderResourceDesc& ResourceDesc) const override final - { - ResourceDesc = GetHLSLResourceDesc(); - } - - virtual HLSLShaderResourceDesc DILIGENT_CALL_TYPE GetHLSLResourceDesc() const override final - { - return m_Attribs.GetHLSLResourceDesc(); - } - - virtual Uint32 DILIGENT_CALL_TYPE GetIndex() const override final - { - return m_ParentResLayout.GetVariableIndex(*this); - } - - const D3DShaderResourceAttribs& m_Attribs; - -protected: - const SHADER_RESOURCE_VARIABLE_TYPE m_VariableType; -}; - - -template -bool VerifyBufferViewModeD3D(BufferViewImplType* pViewD3D11, const D3DShaderResourceAttribs& Attribs, const char* ShaderName) -{ - if (pViewD3D11 == nullptr) - return true; - - const auto& ViewDesc = pViewD3D11->GetDesc(); - const auto& BuffDesc = pViewD3D11->GetBuffer()->GetDesc(); - - auto LogBufferBindingError = [&](const char* Msg) // - { - LOG_ERROR_MESSAGE("Error binding buffer view '", ViewDesc.Name, "' of buffer '", BuffDesc.Name, - "' to shader variable '", Attribs.Name, "' in shader '", ShaderName, "': ", Msg); - }; - - switch (Attribs.GetInputType()) - { - case D3D_SIT_TEXTURE: - case D3D_SIT_UAV_RWTYPED: - if (BuffDesc.Mode != BUFFER_MODE_FORMATTED || ViewDesc.Format.ValueType == VT_UNDEFINED) - { - LogBufferBindingError("formatted buffer view is expected."); - return false; - } - break; - - case D3D_SIT_STRUCTURED: - case D3D_SIT_UAV_RWSTRUCTURED: - if (BuffDesc.Mode != BUFFER_MODE_STRUCTURED) - { - LogBufferBindingError("structured buffer view is expected."); - return false; - } - break; - - case D3D_SIT_BYTEADDRESS: - case D3D_SIT_UAV_RWBYTEADDRESS: - if (BuffDesc.Mode != BUFFER_MODE_RAW) - { - LogBufferBindingError("raw buffer view is expected."); - return false; - } - break; - } - - return true; -} - -} // namespace Diligent -- cgit v1.2.3