diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index 6599a7e40..001574625 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -2997,7 +2997,7 @@ namespace dxvk { HRESULT STDMETHODCALLTYPE DXGIVkSwapChainFactory::CreateSwapChain( - HWND hWnd, + IDXGIVkSurfaceFactory* pSurfaceFactory, const DXGI_SWAP_CHAIN_DESC1* pDesc, IDXGIVkSwapChain** ppSwapChain) { InitReturnPtr(ppSwapChain); @@ -3005,10 +3005,8 @@ namespace dxvk { try { auto vki = m_device->GetDXVKDevice()->adapter()->vki(); - Com surfaceFactory = new DxgiSurfaceFactory(vki->getLoaderProc(), hWnd); - Com presenter = new D3D11SwapChain( - m_container, m_device, surfaceFactory.ptr(), pDesc); + m_container, m_device, pSurfaceFactory, pDesc); *ppSwapChain = presenter.ref(); return S_OK; diff --git a/src/d3d11/d3d11_device.h b/src/d3d11/d3d11_device.h index 3c1db4295..e23de4b21 100644 --- a/src/d3d11/d3d11_device.h +++ b/src/d3d11/d3d11_device.h @@ -710,7 +710,7 @@ namespace dxvk { void** ppvObject); HRESULT STDMETHODCALLTYPE CreateSwapChain( - HWND hWnd, + IDXGIVkSurfaceFactory* pSurfaceFactory, const DXGI_SWAP_CHAIN_DESC1* pDesc, IDXGIVkSwapChain** ppSwapChain); diff --git a/src/dxgi/dxgi_factory.cpp b/src/dxgi/dxgi_factory.cpp index 0f6afee2d..10cf2861d 100644 --- a/src/dxgi/dxgi_factory.cpp +++ b/src/dxgi/dxgi_factory.cpp @@ -1,4 +1,5 @@ #include "dxgi_factory.h" +#include "dxgi_surface.h" #include "dxgi_swapchain.h" #include "dxgi_swapchain_dispatcher.h" @@ -153,9 +154,11 @@ namespace dxvk { Com wineFactory; if (SUCCEEDED(pDevice->QueryInterface(IID_PPV_ARGS(&dxvkFactory)))) { - Com presenter; + Com surfaceFactory = new DxgiSurfaceFactory( + m_instance->vki()->getLoaderProc(), hWnd); - HRESULT hr = dxvkFactory->CreateSwapChain(hWnd, &desc, &presenter); + Com presenter; + HRESULT hr = dxvkFactory->CreateSwapChain(surfaceFactory.ptr(), &desc, &presenter); if (FAILED(hr)) { Logger::err(str::format("DXGI: CreateSwapChainForHwnd: Failed to create swap chain, hr ", hr)); diff --git a/src/dxgi/dxgi_interfaces.h b/src/dxgi/dxgi_interfaces.h index 989fb064b..66d517a88 100644 --- a/src/dxgi/dxgi_interfaces.h +++ b/src/dxgi/dxgi_interfaces.h @@ -121,7 +121,7 @@ IDXGIVkSwapChain : public IUnknown { MIDL_INTERFACE("e7d6c3ca-23a0-4e08-9f2f-ea5231df6633") IDXGIVkSwapChainFactory : public IUnknown { virtual HRESULT STDMETHODCALLTYPE CreateSwapChain( - HWND hWnd, + IDXGIVkSurfaceFactory* pSurfaceFactory, const DXGI_SWAP_CHAIN_DESC1* pDesc, IDXGIVkSwapChain** ppSwapChain) = 0; };