=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: dxgi: Switch display mode when creating fullscreen swapchains.

Alexandre Julliard julliard at winehq.org
Wed Aug 3 18:09:17 CDT 2016


Module: wine
Branch: master
Commit: 005a6c6396c7db6a61e534290ce56454b3412de0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=005a6c6396c7db6a61e534290ce56454b3412de0

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Wed Aug  3 09:41:42 2016 +0200

dxgi: Switch display mode when creating fullscreen swapchains.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/dxgi/swapchain.c | 43 ++++++++++++++++++++++++++++++++-----------
 1 file changed, 32 insertions(+), 11 deletions(-)

diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c
index cdb28e4..3ea7d57 100644
--- a/dlls/dxgi/swapchain.c
+++ b/dlls/dxgi/swapchain.c
@@ -443,8 +443,7 @@ HRESULT dxgi_swapchain_init(struct dxgi_swapchain *swapchain, struct dxgi_device
             WARN("Failed to get adapter parent, hr %#x.\n", hr);
             return hr;
         }
-        swapchain->device = &device->IWineDXGIDevice_iface;
-        IWineDXGIDevice_AddRef(swapchain->device);
+        IWineDXGIDevice_AddRef(swapchain->device = &device->IWineDXGIDevice_iface);
     }
     else
     {
@@ -454,8 +453,6 @@ HRESULT dxgi_swapchain_init(struct dxgi_swapchain *swapchain, struct dxgi_device
 
     swapchain->IDXGISwapChain_iface.lpVtbl = &dxgi_swapchain_vtbl;
     swapchain->refcount = 1;
-    swapchain->fullscreen = FALSE;
-    swapchain->target = NULL;
     wined3d_mutex_lock();
     wined3d_private_store_init(&swapchain->private_store);
 
@@ -463,15 +460,39 @@ HRESULT dxgi_swapchain_init(struct dxgi_swapchain *swapchain, struct dxgi_device
             &dxgi_swapchain_wined3d_parent_ops, &swapchain->wined3d_swapchain)))
     {
         WARN("Failed to create wined3d swapchain, hr %#x.\n", hr);
-        wined3d_private_store_cleanup(&swapchain->private_store);
-        wined3d_mutex_unlock();
-        if (swapchain->factory)
-            IDXGIFactory_Release(swapchain->factory);
-        if (swapchain->device)
-            IWineDXGIDevice_Release(swapchain->device);
-        return hr;
+        goto cleanup;
+    }
+
+    swapchain->fullscreen = !desc->windowed;
+    swapchain->target = NULL;
+    if (swapchain->fullscreen)
+    {
+        if (FAILED(hr = wined3d_swapchain_set_fullscreen(swapchain->wined3d_swapchain,
+                desc, NULL)))
+        {
+            WARN("Failed to set fullscreen state, hr %#x.\n", hr);
+            wined3d_swapchain_decref(swapchain->wined3d_swapchain);
+            goto cleanup;
+        }
+
+        if (FAILED(hr = IDXGISwapChain_GetContainingOutput(&swapchain->IDXGISwapChain_iface,
+                &swapchain->target)))
+        {
+            WARN("Failed to get target output for fullscreen swapchain, hr %#x.\n", hr);
+            wined3d_swapchain_decref(swapchain->wined3d_swapchain);
+            goto cleanup;
+        }
     }
     wined3d_mutex_unlock();
 
     return S_OK;
+
+cleanup:
+    wined3d_private_store_cleanup(&swapchain->private_store);
+    wined3d_mutex_unlock();
+    if (swapchain->factory)
+        IDXGIFactory_Release(swapchain->factory);
+    if (swapchain->device)
+        IWineDXGIDevice_Release(swapchain->device);
+    return hr;
 }




More information about the wine-cvs mailing list