Zhiyi Zhang : wined3d: Introduce wined3d_swapchain_get_output().

Alexandre Julliard julliard at winehq.org
Thu Mar 5 16:35:26 CST 2020


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

Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date:   Thu Mar  5 23:04:29 2020 +0800

wined3d: Introduce wined3d_swapchain_get_output().

Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wined3d/device.c          |  9 ++++++++-
 dlls/wined3d/swapchain.c       | 13 +++++++++++++
 dlls/wined3d/wined3d_main.c    |  8 +++++++-
 dlls/wined3d/wined3d_private.h |  1 +
 4 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 85b651ffc7..21f9af9566 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -5038,6 +5038,7 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device,
     struct wined3d_swapchain *swapchain;
     struct wined3d_view_desc view_desc;
     BOOL backbuffer_resized, windowed;
+    struct wined3d_output *output;
     HRESULT hr = WINED3D_OK;
     unsigned int i;
 
@@ -5146,8 +5147,14 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device,
                 return hr;
             }
         }
+
+        if (!(output = wined3d_swapchain_get_output(swapchain)))
+        {
+            ERR("Failed to get output from swapchain %p.\n", swapchain);
+            return E_FAIL;
+        }
         if (FAILED(hr = wined3d_swapchain_state_set_fullscreen(&swapchain->state,
-                swapchain_desc, device->wined3d, &device->adapter->outputs[0], mode)))
+                swapchain_desc, device->wined3d, output, mode)))
             return hr;
 
         /* Switch from fullscreen to windowed. */
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index a70b6c1e06..be41cc385e 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -289,6 +289,19 @@ static struct wined3d_output * get_output_from_window(const struct wined3d *wine
     return &wined3d->adapters[0]->outputs[0];
 }
 
+struct wined3d_output * wined3d_swapchain_get_output(const struct wined3d_swapchain *swapchain)
+{
+    HWND hwnd;
+
+    TRACE("swapchain %p.\n", swapchain);
+
+    hwnd = swapchain->state.device_window;
+    if (!hwnd)
+        hwnd = swapchain->win_handle;
+
+    return get_output_from_window(swapchain->device->wined3d, hwnd);
+}
+
 HRESULT CDECL wined3d_swapchain_get_raster_status(const struct wined3d_swapchain *swapchain,
         struct wined3d_raster_status *raster_status)
 {
diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c
index 3e852bd4e6..ea58f4473b 100644
--- a/dlls/wined3d/wined3d_main.c
+++ b/dlls/wined3d/wined3d_main.c
@@ -541,6 +541,7 @@ static LRESULT CALLBACK wined3d_hook_proc(int code, WPARAM wparam, LPARAM lparam
     struct wined3d_swapchain_desc swapchain_desc;
     struct wined3d_swapchain *swapchain;
     struct wined3d_wndproc *entry;
+    struct wined3d_output *output;
     MSG *msg = (MSG *)lparam;
     unsigned int i;
 
@@ -564,8 +565,13 @@ static LRESULT CALLBACK wined3d_hook_proc(int code, WPARAM wparam, LPARAM lparam
 
             wined3d_swapchain_get_desc(swapchain, &swapchain_desc);
             swapchain_desc.windowed = !swapchain_desc.windowed;
+            if (!(output = wined3d_swapchain_get_output(swapchain)))
+            {
+                ERR("Failed to get output from swapchain %p.\n", swapchain);
+                break;
+            }
             wined3d_swapchain_state_set_fullscreen(&swapchain->state, &swapchain_desc,
-                    swapchain->device->wined3d, &swapchain->device->adapter->outputs[0], NULL);
+                    swapchain->device->wined3d, output, NULL);
 
             wined3d_wndproc_mutex_unlock();
 
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 4c7ea1f162..23540295bb 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -4485,6 +4485,7 @@ struct wined3d_swapchain
 
 void wined3d_swapchain_activate(struct wined3d_swapchain *swapchain, BOOL activate) DECLSPEC_HIDDEN;
 void wined3d_swapchain_cleanup(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
+struct wined3d_output * wined3d_swapchain_get_output(const struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
 void swapchain_update_draw_bindings(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
 void swapchain_set_max_frame_latency(struct wined3d_swapchain *swapchain,
         const struct wined3d_device *device) DECLSPEC_HIDDEN;




More information about the wine-cvs mailing list