feat(RHI): 实现 RHIDevice 抽象基类

This commit is contained in:
2026-03-17 17:45:01 +08:00
parent af718279ff
commit 14fb51e61e
5 changed files with 309 additions and 39 deletions

View File

@@ -36,24 +36,24 @@ D3D12Device::~D3D12Device() {
Shutdown();
}
bool D3D12Device::Initialize(bool enableDebugLayer) {
bool D3D12Device::Initialize(const RHIDeviceDesc& desc) {
if (m_initialized) {
return true;
}
if (!CreateDXGIFactory(enableDebugLayer)) {
if (!CreateDXGIFactory(desc.enableDebugLayer)) {
return false;
}
ComPtr<IDXGIAdapter1> adapter;
int adapterIndex = 0;
int adapterIndex = desc.adapterIndex;
bool adapterFound = false;
while (m_factory->EnumAdapters1(adapterIndex, &adapter) != DXGI_ERROR_NOT_FOUND) {
DXGI_ADAPTER_DESC1 desc;
adapter->GetDesc1(&desc);
DXGI_ADAPTER_DESC1 descAdapter;
adapter->GetDesc1(&descAdapter);
if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) {
if (descAdapter.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) {
adapterIndex++;
continue;
}
@@ -185,5 +185,100 @@ void* D3D12Device::GetNativeHandle() const {
return m_device.Get();
}
void* D3D12Device::GetNativeDevice() {
return m_device.Get();
}
const RHICapabilities& D3D12Device::GetCapabilities() const {
return m_capabilities;
}
const RHIDeviceInfo& D3D12Device::GetDeviceInfo() const {
return m_deviceInfo;
}
RHIBuffer* D3D12Device::CreateBuffer(const BufferDesc& desc) {
auto* buffer = new D3D12Buffer();
if (buffer->Initialize(m_device.Get(), desc.size, desc.stride, desc.bufferType)) {
return buffer;
}
delete buffer;
return nullptr;
}
RHITexture* D3D12Device::CreateTexture(const TextureDesc& desc) {
auto* texture = new D3D12Texture();
if (texture->Initialize(m_device.Get(), desc)) {
return texture;
}
delete texture;
return nullptr;
}
RHIShader* D3D12Device::CompileShader(const ShaderCompileDesc& desc) {
auto* shader = new D3D12Shader();
if (shader->CompileFromFile(desc.fileName.c_str(), desc.entryPoint.c_str(), desc.profile.c_str())) {
return shader;
}
delete shader;
return nullptr;
}
RHISampler* D3D12Device::CreateSampler(const SamplerDesc& desc) {
auto* sampler = new D3D12Sampler();
if (sampler->Initialize(m_device.Get(), desc)) {
return sampler;
}
delete sampler;
return nullptr;
}
RHIFence* D3D12Device::CreateFence(const FenceDesc& desc) {
auto* fence = new D3D12Fence();
if (fence->Initialize(m_device.Get(), desc.initialValue)) {
return fence;
}
delete fence;
return nullptr;
}
RHISwapChain* D3D12Device::CreateSwapChain(const SwapChainDesc& desc) {
return nullptr;
}
RHICommandList* D3D12Device::CreateCommandList(const CommandListDesc& desc) {
return nullptr;
}
RHICommandQueue* D3D12Device::CreateCommandQueue(const CommandQueueDesc& desc) {
return nullptr;
}
RHIPipelineState* D3D12Device::CreatePipelineState(const PipelineStateDesc& desc) {
return nullptr;
}
bool D3D12Device::PollEvents() {
return false;
}
void D3D12Device::SwapBuffers() {
}
bool D3D12Device::ShouldClose() const {
return false;
}
void D3D12Device::SetShouldClose(bool shouldClose) {
}
D3D12CommandQueue* D3D12Device::CreateCommandQueueImpl(const CommandQueueDesc& desc) {
return nullptr;
}
D3D12CommandList* D3D12Device::CreateCommandListImpl(const CommandListDesc& desc) {
return nullptr;
}
} // namespace RHI
} // namespace XCEngine