Add D3D12Types.h with Types to D3D12 native type mappings

This commit is contained in:
2026-03-15 20:28:03 +08:00
parent eab95df004
commit 3e6388c221

View File

@@ -0,0 +1,108 @@
#pragma once
#include <d3d12.h>
#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<D3D12_RESOURCE_DIMENSION>(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<DXGI_FORMAT>(desc.format);
d3d12Desc.SampleDesc.Count = desc.sampleCount;
d3d12Desc.SampleDesc.Quality = desc.sampleQuality;
d3d12Desc.Flags = static_cast<D3D12_RESOURCE_FLAGS>(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<D3D12_RESOURCE_FLAGS>(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<D3D12_DESCRIPTOR_HEAP_TYPE>(desc.heapType);
d3d12Desc.Flags = static_cast<D3D12_DESCRIPTOR_HEAP_FLAGS>(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<D3D12_COMMAND_LIST_TYPE>(desc.queueType);
d3d12Desc.Priority = desc.priority;
d3d12Desc.Flags = static_cast<D3D12_COMMAND_QUEUE_FLAGS>(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