mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-24 14:49:42 -06:00
D3DCommon: Fallback to base CreateSwapChain on failure
It appears that some older drivers do not support CreateSwapChainForHwnd, resulting in DXGI_ERROR_INVALID_CALL. For these cases, fall back to the base CreateSwapChain() from DXGI 1.0. In theory this should also let us run on Win7 without the platform update, but in reality we require the newer shader compiler so this probably won't work regardless. Also any hardware of this vintage is unlikely to run Dolphin well.
This commit is contained in:
@ -43,7 +43,7 @@ std::vector<u32> DXContext::GetAAModes(u32 adapter_index)
|
||||
ComPtr<ID3D12Device> temp_device = g_dx_context ? g_dx_context->m_device : nullptr;
|
||||
if (!temp_device)
|
||||
{
|
||||
ComPtr<IDXGIFactory2> temp_dxgi_factory = D3DCommon::CreateDXGIFactory(false);
|
||||
ComPtr<IDXGIFactory> temp_dxgi_factory = D3DCommon::CreateDXGIFactory(false);
|
||||
if (!temp_dxgi_factory)
|
||||
return {};
|
||||
|
||||
@ -57,7 +57,8 @@ std::vector<u32> DXContext::GetAAModes(u32 adapter_index)
|
||||
return {};
|
||||
}
|
||||
|
||||
HRESULT hr = d3d12_create_device(nullptr, D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&temp_device));
|
||||
HRESULT hr =
|
||||
d3d12_create_device(adapter.Get(), D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&temp_device));
|
||||
if (!SUCCEEDED(hr))
|
||||
return {};
|
||||
}
|
||||
|
@ -14,7 +14,7 @@
|
||||
#include "VideoBackends/D3D12/DescriptorHeapManager.h"
|
||||
#include "VideoBackends/D3D12/StreamBuffer.h"
|
||||
|
||||
struct IDXGIFactory2;
|
||||
struct IDXGIFactory;
|
||||
|
||||
namespace DX12
|
||||
{
|
||||
@ -54,7 +54,7 @@ public:
|
||||
// Destroys active context.
|
||||
static void Destroy();
|
||||
|
||||
IDXGIFactory2* GetDXGIFactory() const { return m_dxgi_factory.Get(); }
|
||||
IDXGIFactory* GetDXGIFactory() const { return m_dxgi_factory.Get(); }
|
||||
ID3D12Device* GetDevice() const { return m_device.Get(); }
|
||||
ID3D12CommandQueue* GetCommandQueue() const { return m_command_queue.Get(); }
|
||||
|
||||
@ -159,7 +159,7 @@ private:
|
||||
void MoveToNextCommandList();
|
||||
void DestroyPendingResources(CommandListResources& cmdlist);
|
||||
|
||||
ComPtr<IDXGIFactory2> m_dxgi_factory;
|
||||
ComPtr<IDXGIFactory> m_dxgi_factory;
|
||||
ComPtr<ID3D12Debug> m_debug_interface;
|
||||
ComPtr<ID3D12Device> m_device;
|
||||
ComPtr<ID3D12CommandQueue> m_command_queue;
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
namespace DX12
|
||||
{
|
||||
SwapChain::SwapChain(const WindowSystemInfo& wsi, IDXGIFactory2* dxgi_factory,
|
||||
SwapChain::SwapChain(const WindowSystemInfo& wsi, IDXGIFactory* dxgi_factory,
|
||||
ID3D12CommandQueue* d3d_command_queue)
|
||||
: D3DCommon::SwapChain(wsi, dxgi_factory, d3d_command_queue)
|
||||
{
|
||||
|
@ -23,7 +23,7 @@ class DXFramebuffer;
|
||||
class SwapChain : public D3DCommon::SwapChain
|
||||
{
|
||||
public:
|
||||
SwapChain(const WindowSystemInfo& wsi, IDXGIFactory2* dxgi_factory,
|
||||
SwapChain(const WindowSystemInfo& wsi, IDXGIFactory* dxgi_factory,
|
||||
ID3D12CommandQueue* d3d_command_queue);
|
||||
~SwapChain();
|
||||
|
||||
|
Reference in New Issue
Block a user