Files
XCEngine/engine/src/RHI/D3D12/D3D12ShaderResourceView.cpp

45 lines
1.4 KiB
C++

#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