Stefan Riesenberger : d3d11: Avoid calling D3D11CreateDevice() from D3D11CreateDeviceAndSwapChain().

Alexandre Julliard julliard at winehq.org
Tue Feb 26 15:13:57 CST 2019


Module: wine
Branch: master
Commit: e728156d2c31aa82ed3aab9629a03a8a6f8ca5bb
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=e728156d2c31aa82ed3aab9629a03a8a6f8ca5bb

Author: Stefan Riesenberger <stefan.riesenberger at gmail.com>
Date:   Tue Feb 26 22:57:00 2019 +0330

d3d11: Avoid calling D3D11CreateDevice() from D3D11CreateDeviceAndSwapChain().

Signed-off-by: Stefan Riesenberger <stefan.riesenberger at gmail.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/d3d11/d3d11_main.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/dlls/d3d11/d3d11_main.c b/dlls/d3d11/d3d11_main.c
index 9c89820..b0a32ac 100644
--- a/dlls/d3d11/d3d11_main.c
+++ b/dlls/d3d11/d3d11_main.c
@@ -136,7 +136,7 @@ HRESULT WINAPI D3D11CoreCreateDevice(IDXGIFactory *factory, IDXGIAdapter *adapte
     return S_OK;
 }
 
-HRESULT WINAPI D3D11CreateDevice(IDXGIAdapter *adapter, D3D_DRIVER_TYPE driver_type, HMODULE swrast, UINT flags,
+static HRESULT d3d11_create_device(IDXGIAdapter *adapter, D3D_DRIVER_TYPE driver_type, HMODULE swrast, UINT flags,
         const D3D_FEATURE_LEVEL *feature_levels, UINT levels, UINT sdk_version, ID3D11Device **device_out,
         D3D_FEATURE_LEVEL *obtained_feature_level, ID3D11DeviceContext **immediate_context)
 {
@@ -278,6 +278,14 @@ HRESULT WINAPI D3D11CreateDevice(IDXGIAdapter *adapter, D3D_DRIVER_TYPE driver_t
     return (device_out || immediate_context) ? S_OK : S_FALSE;
 }
 
+HRESULT WINAPI D3D11CreateDevice(IDXGIAdapter *adapter, D3D_DRIVER_TYPE driver_type, HMODULE swrast, UINT flags,
+        const D3D_FEATURE_LEVEL *feature_levels, UINT levels, UINT sdk_version, ID3D11Device **device_out,
+        D3D_FEATURE_LEVEL *obtained_feature_level, ID3D11DeviceContext **immediate_context)
+{
+    return d3d11_create_device(adapter, driver_type, swrast, flags, feature_levels,
+            levels, sdk_version, device_out, obtained_feature_level, immediate_context);
+}
+
 HRESULT WINAPI D3D11CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D_DRIVER_TYPE driver_type,
         HMODULE swrast, UINT flags, const D3D_FEATURE_LEVEL *feature_levels, UINT levels,
         UINT sdk_version, const DXGI_SWAP_CHAIN_DESC *swapchain_desc, IDXGISwapChain **swapchain,
@@ -299,8 +307,10 @@ HRESULT WINAPI D3D11CreateDeviceAndSwapChain(IDXGIAdapter *adapter, D3D_DRIVER_T
     if (device_out)
         *device_out = NULL;
 
-    if (FAILED(hr = D3D11CreateDevice(adapter, driver_type, swrast, flags, feature_levels, levels, sdk_version,
-                    &device, obtained_feature_level, immediate_context)))
+    /* Avoid forwarding to D3D11CreateDevice(), since it breaks applications
+     * hooking these entry-points. */
+    if (FAILED(hr = d3d11_create_device(adapter, driver_type, swrast, flags, feature_levels,
+            levels, sdk_version, &device, obtained_feature_level, immediate_context)))
     {
         WARN("Failed to create a device, returning %#x.\n", hr);
         return hr;




More information about the wine-cvs mailing list