Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/doitsujin/dxvk.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Rebohle <philip.rebohle@tu-dortmund.de>2022-10-28 18:22:27 +0300
committerPhilip Rebohle <philip.rebohle@tu-dortmund.de>2022-11-07 16:14:05 +0300
commit76e6b2764b1cc9f4203114074bf2a5edbe326227 (patch)
tree65b2e641cbdfab0b94cf046a6d7b571a0957330b
parent03dca539cbe38426e27498a34cc7d437628788c4 (diff)
[dxgi] Change CreateSwapChain to take a surface factorysurface-factory
-rw-r--r--src/d3d11/d3d11_device.cpp6
-rw-r--r--src/d3d11/d3d11_device.h2
-rw-r--r--src/dxgi/dxgi_factory.cpp7
-rw-r--r--src/dxgi/dxgi_interfaces.h2
4 files changed, 9 insertions, 8 deletions
diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp
index 6599a7e4..00157462 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<IDXGIVkSurfaceFactory> surfaceFactory = new DxgiSurfaceFactory(vki->getLoaderProc(), hWnd);
-
Com<D3D11SwapChain> 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 3c1db429..e23de4b2 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 0f6afee2..10cf2861 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<IWineDXGISwapChainFactory> wineFactory;
if (SUCCEEDED(pDevice->QueryInterface(IID_PPV_ARGS(&dxvkFactory)))) {
- Com<IDXGIVkSwapChain> presenter;
+ Com<IDXGIVkSurfaceFactory> surfaceFactory = new DxgiSurfaceFactory(
+ m_instance->vki()->getLoaderProc(), hWnd);
- HRESULT hr = dxvkFactory->CreateSwapChain(hWnd, &desc, &presenter);
+ Com<IDXGIVkSwapChain> 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 989fb064..66d517a8 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;
};