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
This commit is contained in:
@@ -44,7 +44,7 @@ struct AdapterInfo {
|
|||||||
bool isSoftware;
|
bool isSoftware;
|
||||||
};
|
};
|
||||||
|
|
||||||
class D3D12Device : public IRHIDevice {
|
class D3D12Device {
|
||||||
public:
|
public:
|
||||||
D3D12Device();
|
D3D12Device();
|
||||||
~D3D12Device();
|
~D3D12Device();
|
||||||
@@ -65,29 +65,29 @@ public:
|
|||||||
void SetDeviceRemoved() { m_isDeviceRemoved = true; }
|
void SetDeviceRemoved() { m_isDeviceRemoved = true; }
|
||||||
bool IsDeviceRemoved() const { return m_isDeviceRemoved; }
|
bool IsDeviceRemoved() const { return m_isDeviceRemoved; }
|
||||||
|
|
||||||
// IRHIDevice implementation
|
// Factory methods
|
||||||
ICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc) override;
|
ICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc);
|
||||||
ICommandList* CreateCommandList(const CommandListDesc& desc) override;
|
ICommandList* CreateCommandList(const CommandListDesc& desc);
|
||||||
ICommandAllocator* CreateCommandAllocator(const CommandAllocatorDesc& desc) override;
|
ICommandAllocator* CreateCommandAllocator(const CommandAllocatorDesc& desc);
|
||||||
IFence* CreateFence(const FenceDesc& desc) override;
|
IFence* CreateFence(const FenceDesc& desc);
|
||||||
IDescriptorHeap* CreateDescriptorHeap(const DescriptorHeapDesc& desc) override;
|
IDescriptorHeap* CreateDescriptorHeap(const DescriptorHeapDesc& desc);
|
||||||
IQueryHeap* CreateQueryHeap(const QueryHeapDesc& desc) override;
|
IQueryHeap* CreateQueryHeap(const QueryHeapDesc& desc);
|
||||||
IRootSignature* CreateRootSignature(const RootSignatureDesc& desc) override;
|
IRootSignature* CreateRootSignature(const RootSignatureDesc& desc);
|
||||||
IPipelineState* CreatePipelineState(const PipelineStateDesc& desc) override;
|
IPipelineState* CreatePipelineState(const PipelineStateDesc& desc);
|
||||||
ISampler* CreateSampler(const SamplerDesc& desc) override;
|
ISampler* CreateSampler(const SamplerDesc& desc);
|
||||||
ITexture* CreateTexture(const TextureDesc& desc) override;
|
ITexture* CreateTexture(const TextureDesc& desc);
|
||||||
IBuffer* CreateBuffer(const BufferDesc& desc) override;
|
IBuffer* CreateBuffer(const BufferDesc& desc);
|
||||||
ISwapChain* CreateSwapChain(const SwapChainDesc& desc) override;
|
ISwapChain* CreateSwapChain(const SwapChainDesc& desc);
|
||||||
IShader* CompileShader(const ShaderCompileDesc& desc) override;
|
IShader* CompileShader(const ShaderCompileDesc& desc);
|
||||||
|
|
||||||
IRenderTargetView* CreateRenderTargetView(IBuffer* resource, const RenderTargetViewDesc& desc) override;
|
IRenderTargetView* CreateRenderTargetView(IBuffer* resource, const RenderTargetViewDesc& desc);
|
||||||
IDepthStencilView* CreateDepthStencilView(IBuffer* resource, const DepthStencilViewDesc& desc) override;
|
IDepthStencilView* CreateDepthStencilView(IBuffer* resource, const DepthStencilViewDesc& desc);
|
||||||
IShaderResourceView* CreateShaderResourceView(IBuffer* resource, const ShaderResourceViewDesc& desc) override;
|
IShaderResourceView* CreateShaderResourceView(IBuffer* resource, const ShaderResourceViewDesc& desc);
|
||||||
IUnorderedAccessView* CreateUnorderedAccessView(IBuffer* resource, const UnorderedAccessViewDesc& desc) override;
|
IUnorderedAccessView* CreateUnorderedAccessView(IBuffer* resource, const UnorderedAccessViewDesc& desc);
|
||||||
IConstantBufferView* CreateConstantBufferView(IBuffer* resource, const ConstantBufferViewDesc& desc) override;
|
IConstantBufferView* CreateConstantBufferView(IBuffer* resource, const ConstantBufferViewDesc& desc);
|
||||||
|
|
||||||
void GetDeviceInfo(DeviceInfo& info) const override;
|
void GetDeviceInfo(DeviceInfo& info) const;
|
||||||
void* GetNativeHandle() const override;
|
void* GetNativeHandle() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool CreateDXGIFactory(bool enableDebugLayer);
|
bool CreateDXGIFactory(bool enableDebugLayer);
|
||||||
|
|||||||
@@ -187,110 +187,6 @@ UINT D3D12Device::GetDescriptorHandleIncrementSize(DescriptorHeapType type) cons
|
|||||||
return m_device->GetDescriptorHandleIncrementSize(ToD3D12(type));
|
return m_device->GetDescriptorHandleIncrementSize(ToD3D12(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
ICommandQueue* D3D12Device::CreateCommandQueue(const CommandQueueDesc& desc) {
|
|
||||||
D3D12CommandQueue* queue = new D3D12CommandQueue();
|
|
||||||
queue->Initialize(m_device.Get(), static_cast<CommandQueueType>(desc.queueType));
|
|
||||||
return reinterpret_cast<ICommandQueue*>(queue);
|
|
||||||
}
|
|
||||||
|
|
||||||
ICommandList* D3D12Device::CreateCommandList(const CommandListDesc& desc) {
|
|
||||||
D3D12CommandList* commandList = new D3D12CommandList();
|
|
||||||
D3D12CommandAllocator* allocator = new D3D12CommandAllocator();
|
|
||||||
allocator->Initialize(m_device.Get(), static_cast<CommandQueueType>(desc.commandListType));
|
|
||||||
commandList->Initialize(m_device.Get(), static_cast<CommandQueueType>(desc.commandListType), allocator->GetCommandAllocator());
|
|
||||||
return reinterpret_cast<ICommandList*>(commandList);
|
|
||||||
}
|
|
||||||
|
|
||||||
ICommandAllocator* D3D12Device::CreateCommandAllocator(const CommandAllocatorDesc& desc) {
|
|
||||||
D3D12CommandAllocator* allocator = new D3D12CommandAllocator();
|
|
||||||
allocator->Initialize(m_device.Get(), static_cast<CommandQueueType>(desc.commandListType));
|
|
||||||
return reinterpret_cast<ICommandAllocator*>(allocator);
|
|
||||||
}
|
|
||||||
|
|
||||||
IFence* D3D12Device::CreateFence(const FenceDesc& desc) {
|
|
||||||
D3D12Fence* fence = new D3D12Fence();
|
|
||||||
fence->Initialize(m_device.Get(), desc.initialValue);
|
|
||||||
return reinterpret_cast<IFence*>(fence);
|
|
||||||
}
|
|
||||||
|
|
||||||
IDescriptorHeap* D3D12Device::CreateDescriptorHeap(const DescriptorHeapDesc& desc) {
|
|
||||||
D3D12DescriptorHeap* heap = new D3D12DescriptorHeap();
|
|
||||||
heap->Initialize(m_device.Get(), static_cast<DescriptorHeapType>(desc.heapType), desc.descriptorCount);
|
|
||||||
return reinterpret_cast<IDescriptorHeap*>(heap);
|
|
||||||
}
|
|
||||||
|
|
||||||
IQueryHeap* D3D12Device::CreateQueryHeap(const QueryHeapDesc& desc) {
|
|
||||||
D3D12QueryHeap* heap = new D3D12QueryHeap();
|
|
||||||
heap->Initialize(m_device.Get(), static_cast<QueryType>(desc.queryType), desc.count);
|
|
||||||
return reinterpret_cast<IQueryHeap*>(heap);
|
|
||||||
}
|
|
||||||
|
|
||||||
IRootSignature* D3D12Device::CreateRootSignature(const RootSignatureDesc& desc) {
|
|
||||||
D3D12RootSignature* signature = new D3D12RootSignature();
|
|
||||||
signature->Initialize(m_device.Get(), *reinterpret_cast<const D3D12_ROOT_SIGNATURE_DESC*>(desc.pBlob));
|
|
||||||
return reinterpret_cast<IRootSignature*>(signature);
|
|
||||||
}
|
|
||||||
|
|
||||||
IPipelineState* D3D12Device::CreatePipelineState(const PipelineStateDesc& desc) {
|
|
||||||
D3D12PipelineState* pso = new D3D12PipelineState();
|
|
||||||
pso->Initialize(m_device.Get(), *reinterpret_cast<const D3D12_GRAPHICS_PIPELINE_STATE_DESC*>(desc.pBlob));
|
|
||||||
return reinterpret_cast<IPipelineState*>(pso);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISampler* D3D12Device::CreateSampler(const SamplerDesc& desc) {
|
|
||||||
D3D12Sampler* sampler = new D3D12Sampler();
|
|
||||||
sampler->Initialize(m_device.Get(), *reinterpret_cast<const D3D12_SAMPLER_DESC*>(&desc));
|
|
||||||
return reinterpret_cast<ISampler*>(sampler);
|
|
||||||
}
|
|
||||||
|
|
||||||
ITexture* D3D12Device::CreateTexture(const TextureDesc& desc) {
|
|
||||||
D3D12Texture* texture = new D3D12Texture();
|
|
||||||
return reinterpret_cast<ITexture*>(texture);
|
|
||||||
}
|
|
||||||
|
|
||||||
IBuffer* D3D12Device::CreateBuffer(const BufferDesc& desc) {
|
|
||||||
D3D12Buffer* buffer = new D3D12Buffer();
|
|
||||||
return reinterpret_cast<IBuffer*>(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISwapChain* D3D12Device::CreateSwapChain(const SwapChainDesc& desc) {
|
|
||||||
D3D12SwapChain* swapChain = new D3D12SwapChain();
|
|
||||||
return reinterpret_cast<ISwapChain*>(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<IShader*>(shader);
|
|
||||||
}
|
|
||||||
|
|
||||||
IRenderTargetView* D3D12Device::CreateRenderTargetView(IBuffer* resource, const RenderTargetViewDesc& desc) {
|
|
||||||
D3D12RenderTargetView* rtv = new D3D12RenderTargetView();
|
|
||||||
return reinterpret_cast<IRenderTargetView*>(rtv);
|
|
||||||
}
|
|
||||||
|
|
||||||
IDepthStencilView* D3D12Device::CreateDepthStencilView(IBuffer* resource, const DepthStencilViewDesc& desc) {
|
|
||||||
D3D12DepthStencilView* dsv = new D3D12DepthStencilView();
|
|
||||||
return reinterpret_cast<IDepthStencilView*>(dsv);
|
|
||||||
}
|
|
||||||
|
|
||||||
IShaderResourceView* D3D12Device::CreateShaderResourceView(IBuffer* resource, const ShaderResourceViewDesc& desc) {
|
|
||||||
D3D12ShaderResourceView* srv = new D3D12ShaderResourceView();
|
|
||||||
return reinterpret_cast<IShaderResourceView*>(srv);
|
|
||||||
}
|
|
||||||
|
|
||||||
IUnorderedAccessView* D3D12Device::CreateUnorderedAccessView(IBuffer* resource, const UnorderedAccessViewDesc& desc) {
|
|
||||||
D3D12UnorderedAccessView* uav = new D3D12UnorderedAccessView();
|
|
||||||
return reinterpret_cast<IUnorderedAccessView*>(uav);
|
|
||||||
}
|
|
||||||
|
|
||||||
IConstantBufferView* D3D12Device::CreateConstantBufferView(IBuffer* resource, const ConstantBufferViewDesc& desc) {
|
|
||||||
D3D12ConstantBufferView* cbv = new D3D12ConstantBufferView();
|
|
||||||
return reinterpret_cast<IConstantBufferView*>(cbv);
|
|
||||||
}
|
|
||||||
|
|
||||||
void D3D12Device::GetDeviceInfo(DeviceInfo& info) const {
|
void D3D12Device::GetDeviceInfo(DeviceInfo& info) const {
|
||||||
info = m_deviceInfo;
|
info = m_deviceInfo;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user