From 2a5fc4f0d4e66e8834cfe3f3b202886d64f4543c Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Sun, 15 Mar 2026 20:31:37 +0800 Subject: [PATCH] Add GetDescriptorHandleIncrementSize to D3D12Device and update main.cpp to use wrapper --- engine/include/XCEngine/RHI/D3D12/D3D12Buffer.h | 2 ++ engine/include/XCEngine/RHI/D3D12/D3D12Device.h | 2 ++ engine/src/RHI/D3D12Buffer.cpp | 8 ++++++++ engine/src/RHI/D3D12Device.cpp | 4 ++++ tests/D3D12/main.cpp | 6 +++--- 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/engine/include/XCEngine/RHI/D3D12/D3D12Buffer.h b/engine/include/XCEngine/RHI/D3D12/D3D12Buffer.h index 8f14d4a3..ce134dea 100644 --- a/engine/include/XCEngine/RHI/D3D12/D3D12Buffer.h +++ b/engine/include/XCEngine/RHI/D3D12/D3D12Buffer.h @@ -27,6 +27,8 @@ public: uint64_t GetSize() const { return GetDesc().Width; } D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress() const { return m_resource->GetGPUVirtualAddress(); } + void UpdateData(const void* data, uint64_t size); + private: ComPtr m_resource; }; diff --git a/engine/include/XCEngine/RHI/D3D12/D3D12Device.h b/engine/include/XCEngine/RHI/D3D12/D3D12Device.h index 1dedce4e..1ac36c3e 100644 --- a/engine/include/XCEngine/RHI/D3D12/D3D12Device.h +++ b/engine/include/XCEngine/RHI/D3D12/D3D12Device.h @@ -51,6 +51,8 @@ public: std::vector EnumerateAdapters(); + UINT GetDescriptorHandleIncrementSize(DescriptorHeapType type) const; + bool CheckFeatureSupport(D3D12_FEATURE feature, void* featureSupportData, uint32_t featureSupportDataSize); void SetDeviceRemoved() { m_isDeviceRemoved = true; } diff --git a/engine/src/RHI/D3D12Buffer.cpp b/engine/src/RHI/D3D12Buffer.cpp index c8b378ea..170a8c9d 100644 --- a/engine/src/RHI/D3D12Buffer.cpp +++ b/engine/src/RHI/D3D12Buffer.cpp @@ -147,5 +147,13 @@ void D3D12Buffer::Shutdown() { m_resource.Reset(); } +void D3D12Buffer::UpdateData(const void* data, uint64_t size) { + D3D12_RANGE range = { 0, static_cast(size) }; + unsigned char* pBuffer = nullptr; + m_resource->Map(0, &range, reinterpret_cast(&pBuffer)); + memcpy(pBuffer, data, static_cast(size)); + m_resource->Unmap(0, nullptr); +} + } // namespace RHI } // namespace XCEngine diff --git a/engine/src/RHI/D3D12Device.cpp b/engine/src/RHI/D3D12Device.cpp index d0b18b7a..b4db49f5 100644 --- a/engine/src/RHI/D3D12Device.cpp +++ b/engine/src/RHI/D3D12Device.cpp @@ -165,5 +165,9 @@ std::vector D3D12Device::EnumerateAdapters() { return adapters; } +UINT D3D12Device::GetDescriptorHandleIncrementSize(DescriptorHeapType type) const { + return m_device->GetDescriptorHandleIncrementSize(ToD3D12(type)); +} + } // namespace RHI } // namespace XCEngine diff --git a/tests/D3D12/main.cpp b/tests/D3D12/main.cpp index 5634ed3c..5c2ba90f 100644 --- a/tests/D3D12/main.cpp +++ b/tests/D3D12/main.cpp @@ -407,13 +407,13 @@ bool InitD3D12(HWND inHWND, int inWidth, int inHeight) { d3dDescriptorHeapDescRTV.NumDescriptors = 2; d3dDescriptorHeapDescRTV.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV; gSwapChainRTVHeap.Initialize(device, XCEngine::RHI::DescriptorHeapType::RTV, 2); - gRTVDescriptorSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV); + gRTVDescriptorSize = gDevice.GetDescriptorHandleIncrementSize(XCEngine::RHI::DescriptorHeapType::RTV); D3D12_DESCRIPTOR_HEAP_DESC d3dDescriptorHeapDescDSV = {}; d3dDescriptorHeapDescDSV.NumDescriptors = 1; d3dDescriptorHeapDescDSV.Type = D3D12_DESCRIPTOR_HEAP_TYPE_DSV; gSwapChainDSVHeap.Initialize(device, XCEngine::RHI::DescriptorHeapType::DSV, 1); - gDSVDescriptorSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_DSV); + gDSVDescriptorSize = gDevice.GetDescriptorHandleIncrementSize(XCEngine::RHI::DescriptorHeapType::DSV); D3D12_CPU_DESCRIPTOR_HANDLE rtvHeapStart = gSwapChainRTVHeap.GetCPUDescriptorHandleForHeapStart(); for (int i = 0; i < 2; i++) { @@ -667,7 +667,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine D3D12_CPU_DESCRIPTOR_HANDLE srvHeapPtr = srvHeap.GetCPUDescriptorHandleForHeapStart(); gTextureSRV.InitializeAt(d3dDevice, texture, srvHeapPtr, &srvDesc); - srvHeapPtr.ptr += d3dDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); + srvHeapPtr.ptr += gDevice.GetDescriptorHandleIncrementSize(XCEngine::RHI::DescriptorHeapType::CBV_SRV_UAV); EndCommandList(); WaitForCompletionOfCommandList();