From 0014c32fa5948ea027bed556a0f1abf9d0d5c86c Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Mon, 16 Mar 2026 15:41:30 +0800 Subject: [PATCH] Remove IRHIDevice inheritance from D3D12Device - D3D12Device no longer inherits from IRHIDevice interface - Removed interface factory methods (CreateCommandQueue, CreateCommandList, etc.) - Keep concrete D3D12-specific methods (Initialize, Shutdown, GetDevice, etc.) - This is the first step to decouple RHI abstraction from D3D12 backend --- .../include/XCEngine/RHI/D3D12/D3D12Device.h | 44 ++++---- engine/src/RHI/D3D12/D3D12Device.cpp | 104 ------------------ 2 files changed, 22 insertions(+), 126 deletions(-) diff --git a/engine/include/XCEngine/RHI/D3D12/D3D12Device.h b/engine/include/XCEngine/RHI/D3D12/D3D12Device.h index 83f99b8c..1a5ee478 100644 --- a/engine/include/XCEngine/RHI/D3D12/D3D12Device.h +++ b/engine/include/XCEngine/RHI/D3D12/D3D12Device.h @@ -44,7 +44,7 @@ struct AdapterInfo { bool isSoftware; }; -class D3D12Device : public IRHIDevice { +class D3D12Device { public: D3D12Device(); ~D3D12Device(); @@ -65,29 +65,29 @@ public: void SetDeviceRemoved() { m_isDeviceRemoved = true; } bool IsDeviceRemoved() const { return m_isDeviceRemoved; } - // IRHIDevice implementation - ICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc) override; - ICommandList* CreateCommandList(const CommandListDesc& desc) override; - ICommandAllocator* CreateCommandAllocator(const CommandAllocatorDesc& desc) override; - IFence* CreateFence(const FenceDesc& desc) override; - IDescriptorHeap* CreateDescriptorHeap(const DescriptorHeapDesc& desc) override; - IQueryHeap* CreateQueryHeap(const QueryHeapDesc& desc) override; - IRootSignature* CreateRootSignature(const RootSignatureDesc& desc) override; - IPipelineState* CreatePipelineState(const PipelineStateDesc& desc) override; - ISampler* CreateSampler(const SamplerDesc& desc) override; - ITexture* CreateTexture(const TextureDesc& desc) override; - IBuffer* CreateBuffer(const BufferDesc& desc) override; - ISwapChain* CreateSwapChain(const SwapChainDesc& desc) override; - IShader* CompileShader(const ShaderCompileDesc& desc) override; + // Factory methods + ICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc); + ICommandList* CreateCommandList(const CommandListDesc& desc); + ICommandAllocator* CreateCommandAllocator(const CommandAllocatorDesc& desc); + IFence* CreateFence(const FenceDesc& desc); + IDescriptorHeap* CreateDescriptorHeap(const DescriptorHeapDesc& desc); + IQueryHeap* CreateQueryHeap(const QueryHeapDesc& desc); + IRootSignature* CreateRootSignature(const RootSignatureDesc& desc); + IPipelineState* CreatePipelineState(const PipelineStateDesc& desc); + ISampler* CreateSampler(const SamplerDesc& desc); + ITexture* CreateTexture(const TextureDesc& desc); + IBuffer* CreateBuffer(const BufferDesc& desc); + ISwapChain* CreateSwapChain(const SwapChainDesc& desc); + IShader* CompileShader(const ShaderCompileDesc& desc); - IRenderTargetView* CreateRenderTargetView(IBuffer* resource, const RenderTargetViewDesc& desc) override; - IDepthStencilView* CreateDepthStencilView(IBuffer* resource, const DepthStencilViewDesc& desc) override; - IShaderResourceView* CreateShaderResourceView(IBuffer* resource, const ShaderResourceViewDesc& desc) override; - IUnorderedAccessView* CreateUnorderedAccessView(IBuffer* resource, const UnorderedAccessViewDesc& desc) override; - IConstantBufferView* CreateConstantBufferView(IBuffer* resource, const ConstantBufferViewDesc& desc) override; + IRenderTargetView* CreateRenderTargetView(IBuffer* resource, const RenderTargetViewDesc& desc); + IDepthStencilView* CreateDepthStencilView(IBuffer* resource, const DepthStencilViewDesc& desc); + IShaderResourceView* CreateShaderResourceView(IBuffer* resource, const ShaderResourceViewDesc& desc); + IUnorderedAccessView* CreateUnorderedAccessView(IBuffer* resource, const UnorderedAccessViewDesc& desc); + IConstantBufferView* CreateConstantBufferView(IBuffer* resource, const ConstantBufferViewDesc& desc); - void GetDeviceInfo(DeviceInfo& info) const override; - void* GetNativeHandle() const override; + void GetDeviceInfo(DeviceInfo& info) const; + void* GetNativeHandle() const; private: bool CreateDXGIFactory(bool enableDebugLayer); diff --git a/engine/src/RHI/D3D12/D3D12Device.cpp b/engine/src/RHI/D3D12/D3D12Device.cpp index e3744508..96c850a8 100644 --- a/engine/src/RHI/D3D12/D3D12Device.cpp +++ b/engine/src/RHI/D3D12/D3D12Device.cpp @@ -187,110 +187,6 @@ UINT D3D12Device::GetDescriptorHandleIncrementSize(DescriptorHeapType type) cons return m_device->GetDescriptorHandleIncrementSize(ToD3D12(type)); } -ICommandQueue* D3D12Device::CreateCommandQueue(const CommandQueueDesc& desc) { - D3D12CommandQueue* queue = new D3D12CommandQueue(); - queue->Initialize(m_device.Get(), static_cast(desc.queueType)); - return reinterpret_cast(queue); -} - -ICommandList* D3D12Device::CreateCommandList(const CommandListDesc& desc) { - D3D12CommandList* commandList = new D3D12CommandList(); - D3D12CommandAllocator* allocator = new D3D12CommandAllocator(); - allocator->Initialize(m_device.Get(), static_cast(desc.commandListType)); - commandList->Initialize(m_device.Get(), static_cast(desc.commandListType), allocator->GetCommandAllocator()); - return reinterpret_cast(commandList); -} - -ICommandAllocator* D3D12Device::CreateCommandAllocator(const CommandAllocatorDesc& desc) { - D3D12CommandAllocator* allocator = new D3D12CommandAllocator(); - allocator->Initialize(m_device.Get(), static_cast(desc.commandListType)); - return reinterpret_cast(allocator); -} - -IFence* D3D12Device::CreateFence(const FenceDesc& desc) { - D3D12Fence* fence = new D3D12Fence(); - fence->Initialize(m_device.Get(), desc.initialValue); - return reinterpret_cast(fence); -} - -IDescriptorHeap* D3D12Device::CreateDescriptorHeap(const DescriptorHeapDesc& desc) { - D3D12DescriptorHeap* heap = new D3D12DescriptorHeap(); - heap->Initialize(m_device.Get(), static_cast(desc.heapType), desc.descriptorCount); - return reinterpret_cast(heap); -} - -IQueryHeap* D3D12Device::CreateQueryHeap(const QueryHeapDesc& desc) { - D3D12QueryHeap* heap = new D3D12QueryHeap(); - heap->Initialize(m_device.Get(), static_cast(desc.queryType), desc.count); - return reinterpret_cast(heap); -} - -IRootSignature* D3D12Device::CreateRootSignature(const RootSignatureDesc& desc) { - D3D12RootSignature* signature = new D3D12RootSignature(); - signature->Initialize(m_device.Get(), *reinterpret_cast(desc.pBlob)); - return reinterpret_cast(signature); -} - -IPipelineState* D3D12Device::CreatePipelineState(const PipelineStateDesc& desc) { - D3D12PipelineState* pso = new D3D12PipelineState(); - pso->Initialize(m_device.Get(), *reinterpret_cast(desc.pBlob)); - return reinterpret_cast(pso); -} - -ISampler* D3D12Device::CreateSampler(const SamplerDesc& desc) { - D3D12Sampler* sampler = new D3D12Sampler(); - sampler->Initialize(m_device.Get(), *reinterpret_cast(&desc)); - return reinterpret_cast(sampler); -} - -ITexture* D3D12Device::CreateTexture(const TextureDesc& desc) { - D3D12Texture* texture = new D3D12Texture(); - return reinterpret_cast(texture); -} - -IBuffer* D3D12Device::CreateBuffer(const BufferDesc& desc) { - D3D12Buffer* buffer = new D3D12Buffer(); - return reinterpret_cast(buffer); -} - -ISwapChain* D3D12Device::CreateSwapChain(const SwapChainDesc& desc) { - D3D12SwapChain* swapChain = new D3D12SwapChain(); - return reinterpret_cast(swapChain); -} - -IShader* D3D12Device::CompileShader(const ShaderCompileDesc& desc) { - D3D12Shader* shader = new D3D12Shader(); - std::string entryPoint(desc.entryPoint.begin(), desc.entryPoint.end()); - std::string profile(desc.profile.begin(), desc.profile.end()); - shader->CompileFromFile(desc.fileName.c_str(), entryPoint.c_str(), profile.c_str()); - return reinterpret_cast(shader); -} - -IRenderTargetView* D3D12Device::CreateRenderTargetView(IBuffer* resource, const RenderTargetViewDesc& desc) { - D3D12RenderTargetView* rtv = new D3D12RenderTargetView(); - return reinterpret_cast(rtv); -} - -IDepthStencilView* D3D12Device::CreateDepthStencilView(IBuffer* resource, const DepthStencilViewDesc& desc) { - D3D12DepthStencilView* dsv = new D3D12DepthStencilView(); - return reinterpret_cast(dsv); -} - -IShaderResourceView* D3D12Device::CreateShaderResourceView(IBuffer* resource, const ShaderResourceViewDesc& desc) { - D3D12ShaderResourceView* srv = new D3D12ShaderResourceView(); - return reinterpret_cast(srv); -} - -IUnorderedAccessView* D3D12Device::CreateUnorderedAccessView(IBuffer* resource, const UnorderedAccessViewDesc& desc) { - D3D12UnorderedAccessView* uav = new D3D12UnorderedAccessView(); - return reinterpret_cast(uav); -} - -IConstantBufferView* D3D12Device::CreateConstantBufferView(IBuffer* resource, const ConstantBufferViewDesc& desc) { - D3D12ConstantBufferView* cbv = new D3D12ConstantBufferView(); - return reinterpret_cast(cbv); -} - void D3D12Device::GetDeviceInfo(DeviceInfo& info) const { info = m_deviceInfo; }