diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 2bd688e8..44822c7c 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -98,6 +98,10 @@ add_library(XCEngine STATIC include/XCEngine/RHI/D3D12/D3D12SwapChain.h include/XCEngine/RHI/D3D12/D3D12Fence.h include/XCEngine/RHI/D3D12/D3D12Screenshot.h + include/XCEngine/RHI/D3D12/D3D12RenderTargetView.h + include/XCEngine/RHI/D3D12/D3D12DepthStencilView.h + include/XCEngine/RHI/D3D12/D3D12ShaderResourceView.h + include/XCEngine/RHI/D3D12/D3D12ConstantBufferView.h src/RHI/D3D12Device.cpp src/RHI/D3D12CommandQueue.cpp src/RHI/D3D12CommandAllocator.cpp @@ -112,6 +116,10 @@ add_library(XCEngine STATIC src/RHI/D3D12SwapChain.cpp src/RHI/D3D12Fence.cpp src/RHI/D3D12Screenshot.cpp + src/RHI/D3D12RenderTargetView.cpp + src/RHI/D3D12DepthStencilView.cpp + src/RHI/D3D12ShaderResourceView.cpp + src/RHI/D3D12ConstantBufferView.cpp ) target_include_directories(XCEngine PUBLIC diff --git a/engine/include/XCEngine/RHI/D3D12/D3D12ConstantBufferView.h b/engine/include/XCEngine/RHI/D3D12/D3D12ConstantBufferView.h new file mode 100644 index 00000000..be626986 --- /dev/null +++ b/engine/include/XCEngine/RHI/D3D12/D3D12ConstantBufferView.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include + +using Microsoft::WRL::ComPtr; + +namespace XCEngine { +namespace RHI { + +class D3D12ConstantBufferView { +public: + D3D12ConstantBufferView(); + ~D3D12ConstantBufferView(); + + void Initialize(ID3D12Device* device, ID3D12Resource* buffer, const D3D12_CONSTANT_BUFFER_VIEW_DESC* desc = nullptr); + void Shutdown(); + + D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandle() const { return m_handle; } + +private: + D3D12_CPU_DESCRIPTOR_HANDLE m_handle; + ID3D12Resource* m_resource; +}; + +} // namespace RHI +} // namespace XCEngine diff --git a/engine/include/XCEngine/RHI/D3D12/D3D12DepthStencilView.h b/engine/include/XCEngine/RHI/D3D12/D3D12DepthStencilView.h new file mode 100644 index 00000000..6e365e8f --- /dev/null +++ b/engine/include/XCEngine/RHI/D3D12/D3D12DepthStencilView.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include + +using Microsoft::WRL::ComPtr; + +namespace XCEngine { +namespace RHI { + +class D3D12DepthStencilView { +public: + D3D12DepthStencilView(); + ~D3D12DepthStencilView(); + + void Initialize(ID3D12Device* device, ID3D12Resource* resource, const D3D12_DEPTH_STENCIL_VIEW_DESC* desc = nullptr); + void Shutdown(); + + D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandle() const { return m_handle; } + +private: + D3D12_CPU_DESCRIPTOR_HANDLE m_handle; + ID3D12Resource* m_resource; +}; + +} // namespace RHI +} // namespace XCEngine diff --git a/engine/include/XCEngine/RHI/D3D12/D3D12RenderTargetView.h b/engine/include/XCEngine/RHI/D3D12/D3D12RenderTargetView.h new file mode 100644 index 00000000..07b6587a --- /dev/null +++ b/engine/include/XCEngine/RHI/D3D12/D3D12RenderTargetView.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include + +using Microsoft::WRL::ComPtr; + +namespace XCEngine { +namespace RHI { + +class D3D12RenderTargetView { +public: + D3D12RenderTargetView(); + ~D3D12RenderTargetView(); + + void Initialize(ID3D12Device* device, ID3D12Resource* resource, const D3D12_RENDER_TARGET_VIEW_DESC* desc = nullptr); + void Shutdown(); + + D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandle() const { return m_handle; } + +private: + D3D12_CPU_DESCRIPTOR_HANDLE m_handle; + ID3D12Resource* m_resource; +}; + +} // namespace RHI +} // namespace XCEngine diff --git a/engine/include/XCEngine/RHI/D3D12/D3D12ShaderResourceView.h b/engine/include/XCEngine/RHI/D3D12/D3D12ShaderResourceView.h new file mode 100644 index 00000000..5720d8b7 --- /dev/null +++ b/engine/include/XCEngine/RHI/D3D12/D3D12ShaderResourceView.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include + +using Microsoft::WRL::ComPtr; + +namespace XCEngine { +namespace RHI { + +class D3D12ShaderResourceView { +public: + D3D12ShaderResourceView(); + ~D3D12ShaderResourceView(); + + void Initialize(ID3D12Device* device, ID3D12Resource* resource, const D3D12_SHADER_RESOURCE_VIEW_DESC* desc = nullptr); + void Shutdown(); + + D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandle() const { return m_handle; } + +private: + D3D12_CPU_DESCRIPTOR_HANDLE m_handle; + ID3D12Resource* m_resource; +}; + +} // namespace RHI +} // namespace XCEngine diff --git a/engine/src/RHI/D3D12ConstantBufferView.cpp b/engine/src/RHI/D3D12ConstantBufferView.cpp new file mode 100644 index 00000000..e367fa35 --- /dev/null +++ b/engine/src/RHI/D3D12ConstantBufferView.cpp @@ -0,0 +1,35 @@ +#include "XCEngine/RHI/D3D12/D3D12ConstantBufferView.h" + +namespace XCEngine { +namespace RHI { + +D3D12ConstantBufferView::D3D12ConstantBufferView() + : m_handle({0}) + , m_resource(nullptr) { +} + +D3D12ConstantBufferView::~D3D12ConstantBufferView() { + Shutdown(); +} + +void D3D12ConstantBufferView::Initialize(ID3D12Device* device, ID3D12Resource* buffer, const D3D12_CONSTANT_BUFFER_VIEW_DESC* desc) { + m_resource = buffer; + m_handle = {}; + + if (desc) { + device->CreateConstantBufferView(desc, m_handle); + } else { + D3D12_CONSTANT_BUFFER_VIEW_DESC cbvDesc = {}; + cbvDesc.BufferLocation = buffer->GetGPUVirtualAddress(); + cbvDesc.SizeInBytes = static_cast(buffer->GetDesc().Width); + device->CreateConstantBufferView(&cbvDesc, m_handle); + } +} + +void D3D12ConstantBufferView::Shutdown() { + m_handle = {}; + m_resource = nullptr; +} + +} // namespace RHI +} // namespace XCEngine diff --git a/engine/src/RHI/D3D12DepthStencilView.cpp b/engine/src/RHI/D3D12DepthStencilView.cpp new file mode 100644 index 00000000..ab3e8bf6 --- /dev/null +++ b/engine/src/RHI/D3D12DepthStencilView.cpp @@ -0,0 +1,27 @@ +#include "XCEngine/RHI/D3D12/D3D12DepthStencilView.h" + +namespace XCEngine { +namespace RHI { + +D3D12DepthStencilView::D3D12DepthStencilView() + : m_handle({0}) + , m_resource(nullptr) { +} + +D3D12DepthStencilView::~D3D12DepthStencilView() { + Shutdown(); +} + +void D3D12DepthStencilView::Initialize(ID3D12Device* device, ID3D12Resource* resource, const D3D12_DEPTH_STENCIL_VIEW_DESC* desc) { + m_resource = resource; + m_handle = {}; + device->CreateDepthStencilView(resource, desc, m_handle); +} + +void D3D12DepthStencilView::Shutdown() { + m_handle = {}; + m_resource = nullptr; +} + +} // namespace RHI +} // namespace XCEngine diff --git a/engine/src/RHI/D3D12RenderTargetView.cpp b/engine/src/RHI/D3D12RenderTargetView.cpp new file mode 100644 index 00000000..797d39b3 --- /dev/null +++ b/engine/src/RHI/D3D12RenderTargetView.cpp @@ -0,0 +1,27 @@ +#include "XCEngine/RHI/D3D12/D3D12RenderTargetView.h" + +namespace XCEngine { +namespace RHI { + +D3D12RenderTargetView::D3D12RenderTargetView() + : m_handle({0}) + , m_resource(nullptr) { +} + +D3D12RenderTargetView::~D3D12RenderTargetView() { + Shutdown(); +} + +void D3D12RenderTargetView::Initialize(ID3D12Device* device, ID3D12Resource* resource, const D3D12_RENDER_TARGET_VIEW_DESC* desc) { + m_resource = resource; + m_handle = {}; + device->CreateRenderTargetView(resource, desc, m_handle); +} + +void D3D12RenderTargetView::Shutdown() { + m_handle = {}; + m_resource = nullptr; +} + +} // namespace RHI +} // namespace XCEngine diff --git a/engine/src/RHI/D3D12ShaderResourceView.cpp b/engine/src/RHI/D3D12ShaderResourceView.cpp new file mode 100644 index 00000000..fa90fb87 --- /dev/null +++ b/engine/src/RHI/D3D12ShaderResourceView.cpp @@ -0,0 +1,27 @@ +#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::Shutdown() { + m_handle = {}; + m_resource = nullptr; +} + +} // namespace RHI +} // namespace XCEngine