From 3e6388c221fe3e0abb464e3b4fd77c4b2b7d6db1 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Sun, 15 Mar 2026 20:28:03 +0800 Subject: [PATCH] Add D3D12Types.h with Types to D3D12 native type mappings --- .../include/XCEngine/RHI/D3D12/D3D12Types.h | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 engine/include/XCEngine/RHI/D3D12/D3D12Types.h diff --git a/engine/include/XCEngine/RHI/D3D12/D3D12Types.h b/engine/include/XCEngine/RHI/D3D12/D3D12Types.h new file mode 100644 index 00000000..571b7d3a --- /dev/null +++ b/engine/include/XCEngine/RHI/D3D12/D3D12Types.h @@ -0,0 +1,108 @@ +#pragma once + +#include + +#include "../Types.h" + +namespace XCEngine { +namespace RHI { + +inline D3D12_VIEWPORT ToD3D12(const Viewport& vp) { + D3D12_VIEWPORT d3d12Vp = {}; + d3d12Vp.TopLeftX = vp.topLeftX; + d3d12Vp.TopLeftY = vp.topLeftY; + d3d12Vp.Width = vp.width; + d3d12Vp.Height = vp.height; + d3d12Vp.MinDepth = vp.minDepth; + d3d12Vp.MaxDepth = vp.maxDepth; + return d3d12Vp; +} + +inline D3D12_RECT ToD3D12(const Rect& rect) { + D3D12_RECT d3d12Rect = {}; + d3d12Rect.left = rect.left; + d3d12Rect.top = rect.top; + d3d12Rect.right = rect.right; + d3d12Rect.bottom = rect.bottom; + return d3d12Rect; +} + +inline D3D12_CLEAR_VALUE ToD3D12(const ClearValue& clearValue, D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE) { + D3D12_CLEAR_VALUE d3d12ClearValue = {}; + d3d12ClearValue.Format = DXGI_FORMAT_UNKNOWN; + d3d12ClearValue.Flags = flags; + d3d12ClearValue.Color[0] = clearValue.color.r; + d3d12ClearValue.Color[1] = clearValue.color.g; + d3d12ClearValue.Color[2] = clearValue.color.b; + d3d12ClearValue.Color[3] = clearValue.color.a; + return d3d12ClearValue; +} + +inline D3D12_CLEAR_VALUE ToD3D12DepthStencil(const ClearValue& clearValue, DXGI_FORMAT format) { + D3D12_CLEAR_VALUE d3d12ClearValue = {}; + d3d12ClearValue.Format = format; + d3d12ClearValue.DepthStencil.Depth = clearValue.depth; + d3d12ClearValue.DepthStencil.Stencil = clearValue.stencil; + return d3d12ClearValue; +} + +inline D3D12_RESOURCE_DESC ToD3D12(const TextureDesc& desc) { + D3D12_RESOURCE_DESC d3d12Desc = {}; + d3d12Desc.Dimension = static_cast(desc.textureType); + d3d12Desc.Width = desc.width; + d3d12Desc.Height = desc.height; + d3d12Desc.DepthOrArraySize = desc.arraySize > 0 ? desc.arraySize : desc.depth; + d3d12Desc.MipLevels = desc.mipLevels; + d3d12Desc.Format = static_cast(desc.format); + d3d12Desc.SampleDesc.Count = desc.sampleCount; + d3d12Desc.SampleDesc.Quality = desc.sampleQuality; + d3d12Desc.Flags = static_cast(desc.flags); + d3d12Desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN; + return d3d12Desc; +} + +inline D3D12_RESOURCE_DESC ToD3D12(const BufferDesc& desc) { + D3D12_RESOURCE_DESC d3d12Desc = {}; + d3d12Desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER; + d3d12Desc.Width = desc.size; + d3d12Desc.Height = 1; + d3d12Desc.DepthOrArraySize = 1; + d3d12Desc.MipLevels = 1; + d3d12Desc.Format = DXGI_FORMAT_UNKNOWN; + d3d12Desc.SampleDesc.Count = 1; + d3d12Desc.SampleDesc.Quality = 0; + d3d12Desc.Flags = static_cast(desc.flags); + d3d12Desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR; + return d3d12Desc; +} + +inline D3D12_DESCRIPTOR_HEAP_DESC ToD3D12(const DescriptorHeapDesc& desc) { + D3D12_DESCRIPTOR_HEAP_DESC d3d12Desc = {}; + d3d12Desc.NumDescriptors = desc.descriptorCount; + d3d12Desc.Type = static_cast(desc.heapType); + d3d12Desc.Flags = static_cast(desc.flags); + d3d12Desc.NodeMask = desc.nodeMask; + return d3d12Desc; +} + +inline D3D12_COMMAND_QUEUE_DESC ToD3D12(const CommandQueueDesc& desc) { + D3D12_COMMAND_QUEUE_DESC d3d12Desc = {}; + d3d12Desc.Type = static_cast(desc.queueType); + d3d12Desc.Priority = desc.priority; + d3d12Desc.Flags = static_cast(desc.flags); + d3d12Desc.NodeMask = desc.nodeMask; + return d3d12Desc; +} + +inline D3D12_HEAP_PROPERTIES ToD3D12HeapProperties(D3D12_HEAP_TYPE heapType, UINT nodeMask = 0) { + D3D12_HEAP_PROPERTIES heapProps = {}; + heapProps.Type = heapType; + heapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN; + heapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN; + heapProps.CreationNodeMask = nodeMask; + heapProps.VisibleNodeMask = nodeMask; + return heapProps; +} + +} // namespace RHI +} // namespace XCEngine