Fix RHI swap chain queue binding and restore minimal GT checks
This commit is contained in:
@@ -65,7 +65,7 @@ public:
|
||||
|
||||
RHIBuffer* CreateBuffer(const BufferDesc& desc) override;
|
||||
RHITexture* CreateTexture(const TextureDesc& desc) override;
|
||||
RHISwapChain* CreateSwapChain(const SwapChainDesc& desc) override;
|
||||
RHISwapChain* CreateSwapChain(const SwapChainDesc& desc, RHICommandQueue* presentQueue) override;
|
||||
RHICommandList* CreateCommandList(const CommandListDesc& desc) override;
|
||||
RHICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc) override;
|
||||
RHIShader* CreateShader(const ShaderCompileDesc& desc) override;
|
||||
@@ -114,8 +114,6 @@ private:
|
||||
ComPtr<ID3D12Device> m_device;
|
||||
ComPtr<IDXGIFactory4> m_factory;
|
||||
ComPtr<IDXGIAdapter1> m_adapter;
|
||||
ComPtr<ID3D12CommandQueue> m_commandQueue;
|
||||
|
||||
AdapterInfo m_adapterInfo;
|
||||
RHICapabilities m_capabilities;
|
||||
RHIDeviceInfo m_deviceInfo;
|
||||
|
||||
@@ -36,7 +36,7 @@ public:
|
||||
|
||||
RHIBuffer* CreateBuffer(const BufferDesc& desc) override;
|
||||
RHITexture* CreateTexture(const TextureDesc& desc) override;
|
||||
RHISwapChain* CreateSwapChain(const SwapChainDesc& desc) override;
|
||||
RHISwapChain* CreateSwapChain(const SwapChainDesc& desc, RHICommandQueue* presentQueue) override;
|
||||
RHICommandList* CreateCommandList(const CommandListDesc& desc) override;
|
||||
RHICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc) override;
|
||||
RHIShader* CreateShader(const ShaderCompileDesc& desc) override;
|
||||
@@ -90,4 +90,4 @@ private:
|
||||
};
|
||||
|
||||
} // namespace RHI
|
||||
} // namespace XCEngine
|
||||
} // namespace XCEngine
|
||||
|
||||
@@ -34,7 +34,7 @@ public:
|
||||
|
||||
virtual RHIBuffer* CreateBuffer(const BufferDesc& desc) = 0;
|
||||
virtual RHITexture* CreateTexture(const TextureDesc& desc) = 0;
|
||||
virtual RHISwapChain* CreateSwapChain(const SwapChainDesc& desc) = 0;
|
||||
virtual RHISwapChain* CreateSwapChain(const SwapChainDesc& desc, RHICommandQueue* presentQueue) = 0;
|
||||
virtual RHICommandList* CreateCommandList(const CommandListDesc& desc) = 0;
|
||||
virtual RHICommandQueue* CreateCommandQueue(const CommandQueueDesc& desc) = 0;
|
||||
virtual RHIShader* CreateShader(const ShaderCompileDesc& desc) = 0;
|
||||
@@ -69,4 +69,4 @@ public:
|
||||
};
|
||||
|
||||
} // namespace RHI
|
||||
} // namespace XCEngine
|
||||
} // namespace XCEngine
|
||||
|
||||
@@ -78,24 +78,12 @@ bool D3D12Device::Initialize(const RHIDeviceDesc& desc) {
|
||||
return false;
|
||||
}
|
||||
|
||||
D3D12_COMMAND_QUEUE_DESC queueDesc = {};
|
||||
queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;
|
||||
queueDesc.Priority = 0;
|
||||
queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
|
||||
queueDesc.NodeMask = 0;
|
||||
if (FAILED(m_device->CreateCommandQueue(&queueDesc, IID_PPV_ARGS(&m_commandQueue)))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
QueryAdapterInfo();
|
||||
m_initialized = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
void D3D12Device::Shutdown() {
|
||||
if (m_commandQueue) {
|
||||
m_commandQueue.Reset();
|
||||
}
|
||||
if (m_device) {
|
||||
m_device.Reset();
|
||||
}
|
||||
@@ -398,10 +386,19 @@ RHIFence* D3D12Device::CreateFence(const FenceDesc& desc) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RHISwapChain* D3D12Device::CreateSwapChain(const SwapChainDesc& desc) {
|
||||
RHISwapChain* D3D12Device::CreateSwapChain(const SwapChainDesc& desc, RHICommandQueue* presentQueue) {
|
||||
if (presentQueue == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto* nativeQueue = static_cast<ID3D12CommandQueue*>(presentQueue->GetNativeHandle());
|
||||
if (nativeQueue == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto* swapChain = new D3D12SwapChain();
|
||||
HWND hwnd = static_cast<HWND>(desc.windowHandle);
|
||||
if (swapChain->Initialize(m_factory.Get(), m_commandQueue.Get(), hwnd,
|
||||
if (swapChain->Initialize(m_factory.Get(), nativeQueue, hwnd,
|
||||
desc.width, desc.height, desc.bufferCount)) {
|
||||
return swapChain;
|
||||
}
|
||||
|
||||
@@ -334,13 +334,19 @@ RHITexture* OpenGLDevice::CreateTexture(const TextureDesc& desc) {
|
||||
return texture;
|
||||
}
|
||||
|
||||
RHISwapChain* OpenGLDevice::CreateSwapChain(const SwapChainDesc& desc) {
|
||||
RHISwapChain* OpenGLDevice::CreateSwapChain(const SwapChainDesc& desc, RHICommandQueue* presentQueue) {
|
||||
if (presentQueue == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto* swapChain = new OpenGLSwapChain();
|
||||
HWND hwnd = static_cast<HWND>(desc.windowHandle);
|
||||
if (hwnd) {
|
||||
swapChain->Initialize(this, hwnd, desc.width, desc.height);
|
||||
if (hwnd && swapChain->Initialize(this, hwnd, desc.width, desc.height)) {
|
||||
return swapChain;
|
||||
}
|
||||
return swapChain;
|
||||
|
||||
delete swapChain;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RHICommandList* OpenGLDevice::CreateCommandList(const CommandListDesc& desc) {
|
||||
@@ -579,4 +585,4 @@ void* OpenGLDevice::GetNativeHandle() const {
|
||||
}
|
||||
|
||||
} // namespace RHI
|
||||
} // namespace XCEngine
|
||||
} // namespace XCEngine
|
||||
|
||||
Reference in New Issue
Block a user