#include "XCEngine/RHI/D3D12/D3D12ShaderResourceView.h" namespace XCEngine { namespace RHI { D3D12ShaderResourceView::D3D12ShaderResourceView() : m_handle({0}) , m_resource(nullptr) { } D3D12ShaderResourceView::~D3D12ShaderResourceView() { Shutdown(); } void D3D12ShaderResourceView::Initialize(ID3D12Device* device, ID3D12Resource* resource, const D3D12_SHADER_RESOURCE_VIEW_DESC* desc) { m_resource = resource; m_handle = {}; device->CreateShaderResourceView(resource, desc, m_handle); } void D3D12ShaderResourceView::InitializeAt(ID3D12Device* device, ID3D12Resource* resource, D3D12_CPU_DESCRIPTOR_HANDLE handle, const D3D12_SHADER_RESOURCE_VIEW_DESC* desc) { m_resource = resource; m_handle = handle; device->CreateShaderResourceView(resource, desc, m_handle); } void D3D12ShaderResourceView::Shutdown() { m_handle = {}; 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