[PATCH 5/5] wined3d: Refactor wined3d_find_closest_matching_adapter_mode() to wined3d_output_find_closest_matching_mode().

Zhiyi Zhang zzhang at codeweavers.com
Fri Mar 6 05:34:03 CST 2020


Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
 dlls/dxgi/output.c          |  7 +------
 dlls/dxgi/swapchain.c       |  9 ++-------
 dlls/wined3d/device.c       |  2 +-
 dlls/wined3d/directx.c      | 17 ++++++++---------
 dlls/wined3d/swapchain.c    | 23 ++++++++++-------------
 dlls/wined3d/wined3d.spec   |  6 +++---
 dlls/wined3d/wined3d_main.c |  4 ++--
 include/wine/wined3d.h      | 11 +++++------
 8 files changed, 32 insertions(+), 47 deletions(-)

diff --git a/dlls/dxgi/output.c b/dlls/dxgi/output.c
index fe8dd7b5c0a..8c94788fbf1 100644
--- a/dlls/dxgi/output.c
+++ b/dlls/dxgi/output.c
@@ -49,8 +49,6 @@ static void dxgi_mode1_from_wined3d(DXGI_MODE_DESC1 *mode, const struct wined3d_
 static HRESULT dxgi_output_find_closest_matching_mode(struct dxgi_output *output,
         struct wined3d_display_mode *mode, IUnknown *device)
 {
-    struct dxgi_adapter *adapter;
-    struct wined3d *wined3d;
     HRESULT hr;
 
     if (!mode->width != !mode->height)
@@ -66,10 +64,7 @@ static HRESULT dxgi_output_find_closest_matching_mode(struct dxgi_output *output
     }
 
     wined3d_mutex_lock();
-    adapter = output->adapter;
-    wined3d = adapter->factory->wined3d;
-
-    hr = wined3d_find_closest_matching_adapter_mode(wined3d, adapter->ordinal, mode);
+    hr = wined3d_output_find_closest_matching_mode(output->wined3d_output, mode);
     wined3d_mutex_unlock();
 
     return hr;
diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c
index 0d929099eb9..b86a79a94cf 100644
--- a/dlls/dxgi/swapchain.c
+++ b/dlls/dxgi/swapchain.c
@@ -156,15 +156,13 @@ static HRESULT dxgi_swapchain_set_fullscreen_state(struct wined3d_swapchain_stat
         const struct wined3d_swapchain_desc *swapchain_desc, IDXGIOutput *output)
 {
     struct dxgi_output *dxgi_output;
-    struct dxgi_adapter *adapter;
     HRESULT hr;
 
     dxgi_output = unsafe_impl_from_IDXGIOutput(output);
-    adapter = dxgi_output->adapter;
 
     wined3d_mutex_lock();
     hr = wined3d_swapchain_state_set_fullscreen(state, swapchain_desc,
-            adapter->factory->wined3d, dxgi_output->wined3d_output, NULL);
+            dxgi_output->wined3d_output, NULL);
     wined3d_mutex_unlock();
 
     return hr;
@@ -175,7 +173,6 @@ static HRESULT dxgi_swapchain_resize_target(IDXGISwapChain1 *swapchain,
 {
     struct wined3d_display_mode mode;
     struct dxgi_output *dxgi_output;
-    struct dxgi_adapter *adapter;
     IDXGIOutput *output;
     HRESULT hr;
 
@@ -188,7 +185,6 @@ static HRESULT dxgi_swapchain_resize_target(IDXGISwapChain1 *swapchain,
     if (FAILED(hr = IDXGISwapChain1_GetContainingOutput(swapchain, &output)))
         return hr;
     dxgi_output = unsafe_impl_from_IDXGIOutput(output);
-    adapter = dxgi_output->adapter;
 
     TRACE("Mode: %s.\n", debug_dxgi_mode(target_mode_desc));
 
@@ -197,8 +193,7 @@ static HRESULT dxgi_swapchain_resize_target(IDXGISwapChain1 *swapchain,
 
     wined3d_display_mode_from_dxgi(&mode, target_mode_desc);
 
-    hr = wined3d_swapchain_state_resize_target(state, adapter->factory->wined3d,
-            dxgi_output->wined3d_output, &mode);
+    hr = wined3d_swapchain_state_resize_target(state, dxgi_output->wined3d_output, &mode);
     IDXGIOutput_Release(output);
     return hr;
 }
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 9a1a16a6a7b..370ec5b794b 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -5154,7 +5154,7 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device,
             return E_FAIL;
         }
         if (FAILED(hr = wined3d_swapchain_state_set_fullscreen(&swapchain->state,
-                swapchain_desc, device->wined3d, output, mode)))
+                swapchain_desc, output, mode)))
             return hr;
 
         /* Switch from fullscreen to windowed. */
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 6ab9dd23579..9ca3053c89b 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -1080,18 +1080,18 @@ HRESULT CDECL wined3d_output_get_mode(const struct wined3d_output *output,
     return WINED3D_OK;
 }
 
-HRESULT CDECL wined3d_find_closest_matching_adapter_mode(const struct wined3d *wined3d,
-        unsigned int adapter_idx, struct wined3d_display_mode *mode)
+HRESULT CDECL wined3d_output_find_closest_matching_mode(const struct wined3d_output *output,
+        struct wined3d_display_mode *mode)
 {
     unsigned int i, j, mode_count, matching_mode_count, closest;
     struct wined3d_display_mode **matching_modes;
     struct wined3d_display_mode *modes;
     HRESULT hr;
 
-    TRACE("wined3d %p, adapter_idx %u, mode %p.\n", wined3d, adapter_idx, mode);
+    TRACE("output %p, mode %p.\n", output, mode);
 
-    if (!(mode_count = wined3d_output_get_mode_count(&wined3d->adapters[adapter_idx]->outputs[0],
-            mode->format_id, WINED3D_SCANLINE_ORDERING_UNKNOWN)))
+    if (!(mode_count = wined3d_output_get_mode_count(output, mode->format_id,
+            WINED3D_SCANLINE_ORDERING_UNKNOWN)))
     {
         WARN("Output has 0 matching modes.\n");
         return E_FAIL;
@@ -1107,8 +1107,8 @@ HRESULT CDECL wined3d_find_closest_matching_adapter_mode(const struct wined3d *w
 
     for (i = 0; i < mode_count; ++i)
     {
-        if (FAILED(hr = wined3d_output_get_mode(&wined3d->adapters[adapter_idx]->outputs[0],
-                mode->format_id, WINED3D_SCANLINE_ORDERING_UNKNOWN, i, &modes[i])))
+        if (FAILED(hr = wined3d_output_get_mode(output, mode->format_id,
+                WINED3D_SCANLINE_ORDERING_UNKNOWN, i, &modes[i])))
         {
             heap_free(matching_modes);
             heap_free(modes);
@@ -1144,8 +1144,7 @@ HRESULT CDECL wined3d_find_closest_matching_adapter_mode(const struct wined3d *w
     if (!mode->width || !mode->height)
     {
         struct wined3d_display_mode current_mode;
-        if (FAILED(hr = wined3d_output_get_display_mode(&wined3d->adapters[adapter_idx]->outputs[0],
-                &current_mode, NULL)))
+        if (FAILED(hr = wined3d_output_get_display_mode(output, &current_mode, NULL)))
         {
             heap_free(matching_modes);
             heap_free(modes);
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 57e5e25003a..c0eb25ffb66 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -1440,13 +1440,13 @@ HRESULT CDECL wined3d_swapchain_resize_buffers(struct wined3d_swapchain *swapcha
 }
 
 static HRESULT wined3d_swapchain_state_set_display_mode(struct wined3d_swapchain_state *state,
-        struct wined3d *wined3d, struct wined3d_output *output, struct wined3d_display_mode *mode)
+        struct wined3d_output *output, struct wined3d_display_mode *mode)
 {
     HRESULT hr;
 
     if (state->desc.flags & WINED3D_SWAPCHAIN_USE_CLOSEST_MATCHING_MODE)
     {
-        if (FAILED(hr = wined3d_find_closest_matching_adapter_mode(wined3d, 0, mode)))
+        if (FAILED(hr = wined3d_output_find_closest_matching_mode(output, mode)))
         {
             WARN("Failed to find closest matching mode, hr %#x.\n", hr);
         }
@@ -1462,15 +1462,14 @@ static HRESULT wined3d_swapchain_state_set_display_mode(struct wined3d_swapchain
 }
 
 HRESULT CDECL wined3d_swapchain_state_resize_target(struct wined3d_swapchain_state *state,
-        struct wined3d *wined3d, struct wined3d_output *output,
-        const struct wined3d_display_mode *mode)
+        struct wined3d_output *output, const struct wined3d_display_mode *mode)
 {
     struct wined3d_display_mode actual_mode;
     RECT original_window_rect, window_rect;
     HWND window;
     HRESULT hr;
 
-    TRACE("state %p, wined3d %p, output %p, mode %p.\n", state, wined3d, output, mode);
+    TRACE("state %p, output %p, mode %p.\n", state, output, mode);
 
     wined3d_mutex_lock();
 
@@ -1490,8 +1489,7 @@ HRESULT CDECL wined3d_swapchain_state_resize_target(struct wined3d_swapchain_sta
     else if (state->desc.flags & WINED3D_SWAPCHAIN_ALLOW_MODE_SWITCH)
     {
         actual_mode = *mode;
-        if (FAILED(hr = wined3d_swapchain_state_set_display_mode(state, wined3d, output,
-                &actual_mode)))
+        if (FAILED(hr = wined3d_swapchain_state_set_display_mode(state, output, &actual_mode)))
         {
             wined3d_mutex_unlock();
             return hr;
@@ -1628,14 +1626,14 @@ void wined3d_swapchain_state_restore_from_fullscreen(struct wined3d_swapchain_st
 }
 
 HRESULT CDECL wined3d_swapchain_state_set_fullscreen(struct wined3d_swapchain_state *state,
-        const struct wined3d_swapchain_desc *swapchain_desc, struct wined3d *wined3d,
-        struct wined3d_output *output, const struct wined3d_display_mode *mode)
+        const struct wined3d_swapchain_desc *swapchain_desc, struct wined3d_output *output,
+        const struct wined3d_display_mode *mode)
 {
     struct wined3d_display_mode actual_mode;
     HRESULT hr;
 
-    TRACE("state %p, swapchain_desc %p, wined3d %p, output %p, mode %p.\n",
-            state, swapchain_desc, wined3d, output, mode);
+    TRACE("state %p, swapchain_desc %p, output %p, mode %p.\n",
+            state, swapchain_desc, output, mode);
 
     if (state->desc.flags & WINED3D_SWAPCHAIN_ALLOW_MODE_SWITCH)
     {
@@ -1660,8 +1658,7 @@ HRESULT CDECL wined3d_swapchain_state_set_fullscreen(struct wined3d_swapchain_st
             }
         }
 
-        if (FAILED(hr = wined3d_swapchain_state_set_display_mode(state, wined3d, output,
-                &actual_mode)))
+        if (FAILED(hr = wined3d_swapchain_state_set_display_mode(state, output, &actual_mode)))
             return hr;
     }
     else
diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec
index 01f261b7662..51745e24183 100644
--- a/dlls/wined3d/wined3d.spec
+++ b/dlls/wined3d/wined3d.spec
@@ -9,7 +9,6 @@
 @ cdecl wined3d_check_device_type(ptr long long long long long)
 @ cdecl wined3d_create(long)
 @ cdecl wined3d_decref(ptr)
-@ cdecl wined3d_find_closest_matching_adapter_mode(ptr long ptr)
 @ cdecl wined3d_get_adapter(ptr long)
 @ cdecl wined3d_get_adapter_count(ptr)
 @ cdecl wined3d_get_adapter_identifier(ptr long long ptr)
@@ -158,6 +157,7 @@
 @ cdecl wined3d_device_update_texture(ptr ptr ptr)
 @ cdecl wined3d_device_validate_device(ptr ptr)
 
+@ cdecl wined3d_output_find_closest_matching_mode(ptr ptr)
 @ cdecl wined3d_output_get_display_mode(ptr ptr ptr)
 @ cdecl wined3d_output_get_mode(ptr long long long ptr)
 @ cdecl wined3d_output_get_mode_count(ptr long long)
@@ -282,8 +282,8 @@
 
 @ cdecl wined3d_swapchain_state_create(ptr ptr ptr ptr)
 @ cdecl wined3d_swapchain_state_destroy(ptr)
-@ cdecl wined3d_swapchain_state_resize_target(ptr ptr ptr ptr)
-@ cdecl wined3d_swapchain_state_set_fullscreen(ptr ptr ptr ptr ptr)
+@ cdecl wined3d_swapchain_state_resize_target(ptr ptr ptr)
+@ cdecl wined3d_swapchain_state_set_fullscreen(ptr ptr ptr ptr)
 
 @ cdecl wined3d_texture_add_dirty_region(ptr long ptr)
 @ cdecl wined3d_texture_blt(ptr long ptr ptr long ptr long ptr long)
diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c
index ea58f4473b8..e681ac1b61b 100644
--- a/dlls/wined3d/wined3d_main.c
+++ b/dlls/wined3d/wined3d_main.c
@@ -570,8 +570,8 @@ static LRESULT CALLBACK wined3d_hook_proc(int code, WPARAM wparam, LPARAM lparam
                 ERR("Failed to get output from swapchain %p.\n", swapchain);
                 break;
             }
-            wined3d_swapchain_state_set_fullscreen(&swapchain->state, &swapchain_desc,
-                    swapchain->device->wined3d, output, NULL);
+            wined3d_swapchain_state_set_fullscreen(&swapchain->state, &swapchain_desc, output,
+                    NULL);
 
             wined3d_wndproc_mutex_unlock();
 
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index b2b7dac87c2..a3a66fd4219 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -2258,8 +2258,6 @@ HRESULT __cdecl wined3d_check_device_type(const struct wined3d *wined3d, UINT ad
         enum wined3d_format_id backbuffer_format_id, BOOL windowed);
 struct wined3d * __cdecl wined3d_create(DWORD flags);
 ULONG __cdecl wined3d_decref(struct wined3d *wined3d);
-HRESULT __cdecl wined3d_find_closest_matching_adapter_mode(const struct wined3d *wined3d,
-        unsigned int adapter_idx, struct wined3d_display_mode *mode);
 struct wined3d_adapter * __cdecl wined3d_get_adapter(const struct wined3d *wined3d,
         unsigned int idx);
 UINT __cdecl wined3d_get_adapter_count(const struct wined3d *wined3d);
@@ -2492,6 +2490,8 @@ HRESULT __cdecl wined3d_device_update_texture(struct wined3d_device *device,
         struct wined3d_texture *src_texture, struct wined3d_texture *dst_texture);
 HRESULT __cdecl wined3d_device_validate_device(const struct wined3d_device *device, DWORD *num_passes);
 
+HRESULT __cdecl wined3d_output_find_closest_matching_mode(const struct wined3d_output *output,
+        struct wined3d_display_mode *mode);
 HRESULT __cdecl wined3d_output_get_display_mode(const struct wined3d_output *output,
         struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation);
 HRESULT __cdecl wined3d_output_get_mode(const struct wined3d_output *output,
@@ -2759,11 +2759,10 @@ HRESULT __cdecl wined3d_swapchain_state_create(const struct wined3d_swapchain_de
         HWND window, struct wined3d *wined3d, struct wined3d_swapchain_state **state);
 void __cdecl wined3d_swapchain_state_destroy(struct wined3d_swapchain_state *state);
 HRESULT __cdecl wined3d_swapchain_state_resize_target(struct wined3d_swapchain_state *state,
-        struct wined3d *wined3d, struct wined3d_output *output,
-        const struct wined3d_display_mode *mode);
-HRESULT __cdecl wined3d_swapchain_state_set_fullscreen(struct wined3d_swapchain_state *state,
-        const struct wined3d_swapchain_desc *desc, struct wined3d *wined3d,
         struct wined3d_output *output, const struct wined3d_display_mode *mode);
+HRESULT __cdecl wined3d_swapchain_state_set_fullscreen(struct wined3d_swapchain_state *state,
+        const struct wined3d_swapchain_desc *desc, struct wined3d_output *output,
+        const struct wined3d_display_mode *mode);
 
 HRESULT __cdecl wined3d_texture_add_dirty_region(struct wined3d_texture *texture,
         UINT layer, const struct wined3d_box *dirty_region);
-- 
2.20.1



More information about the wine-devel mailing list