diff --git a/engine/include/XCEngine/RHI/D3D12/D3D12ShaderResourceView.h b/engine/include/XCEngine/RHI/D3D12/D3D12ShaderResourceView.h index a3262b8f..beeeb5ed 100644 --- a/engine/include/XCEngine/RHI/D3D12/D3D12ShaderResourceView.h +++ b/engine/include/XCEngine/RHI/D3D12/D3D12ShaderResourceView.h @@ -3,6 +3,9 @@ #include #include +#include "../Enums.h" +#include "D3D12Enum.h" + using Microsoft::WRL::ComPtr; namespace XCEngine { @@ -19,6 +22,8 @@ public: D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandle() const { return m_handle; } + static D3D12_SHADER_RESOURCE_VIEW_DESC CreateDesc(Format format, D3D12_SRV_DIMENSION dimension = D3D12_SRV_DIMENSION_TEXTURE2D, uint32_t mipLevels = 1); + private: D3D12_CPU_DESCRIPTOR_HANDLE m_handle; ID3D12Resource* m_resource; diff --git a/engine/src/RHI/D3D12/D3D12ShaderResourceView.cpp b/engine/src/RHI/D3D12/D3D12ShaderResourceView.cpp index 8ca3a725..9ab1b849 100644 --- a/engine/src/RHI/D3D12/D3D12ShaderResourceView.cpp +++ b/engine/src/RHI/D3D12/D3D12ShaderResourceView.cpp @@ -29,5 +29,16 @@ void D3D12ShaderResourceView::Shutdown() { m_resource = nullptr; } +D3D12_SHADER_RESOURCE_VIEW_DESC D3D12ShaderResourceView::CreateDesc(Format format, D3D12_SRV_DIMENSION dimension, uint32_t mipLevels) { + D3D12_SHADER_RESOURCE_VIEW_DESC desc = {}; + desc.Format = ToD3D12(format); + desc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING; + desc.ViewDimension = dimension; + if (dimension == D3D12_SRV_DIMENSION_TEXTURE2D) { + desc.Texture2D.MipLevels = mipLevels; + } + return desc; +} + } // namespace RHI } // namespace XCEngine