Henri Verbeet : wined3d: Only filter redundant mode changes in wined3d.

Alexandre Julliard julliard at winehq.org
Wed Jun 20 13:49:44 CDT 2012


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Wed Jun 20 17:45:13 2012 +0200

wined3d: Only filter redundant mode changes in wined3d.

---

 dlls/ddraw/ddraw.c    |   14 --------------
 dlls/wined3d/device.c |   16 ++++++++++++++--
 2 files changed, 14 insertions(+), 16 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 057e6e1..e5bd7d6 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -1061,20 +1061,6 @@ static HRESULT ddraw_set_display_mode(struct ddraw *ddraw, DWORD Width, DWORD He
         default: format = WINED3DFMT_UNKNOWN;          break;
     }
 
-    if (FAILED(hr = wined3d_device_get_display_mode(ddraw->wined3d_device, 0, &mode)))
-    {
-        ERR("Failed to get current display mode, hr %#x.\n", hr);
-    }
-    else if (mode.width == Width
-            && mode.height == Height
-            && mode.format_id == format
-            && mode.refresh_rate == RefreshRate)
-    {
-        TRACE("Skipping redundant mode setting call.\n");
-        wined3d_mutex_unlock();
-        return DD_OK;
-    }
-
     /* Check the exclusive mode
     if(!(ddraw->cooperative_level & DDSCL_EXCLUSIVE))
         return DDERR_NOEXCLUSIVEMODE;
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 3bc623a..8aadbbb 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -1567,9 +1567,11 @@ HRESULT CDECL wined3d_device_set_display_mode(struct wined3d_device *device,
 {
     struct wined3d_adapter *adapter = device->adapter;
     const struct wined3d_format *format = wined3d_get_format(&adapter->gl_info, mode->format_id);
+    struct wined3d_display_mode current_mode;
     DEVMODEW devmode;
     LONG ret;
     RECT clip_rc;
+    HRESULT hr;
 
     TRACE("device %p, swapchain_idx %u, mode %p (%ux%u@%u %s).\n", device, swapchain_idx, mode,
             mode->width, mode->height, mode->refresh_rate, debug_d3dformat(mode->format_id));
@@ -1592,9 +1594,19 @@ HRESULT CDECL wined3d_device_set_display_mode(struct wined3d_device *device,
         devmode.dmFields |= DM_DISPLAYFREQUENCY;
 
     /* Only change the mode if necessary */
-    if (adapter->screen_size.cx == mode->width && adapter->screen_size.cy == mode->height
-            && adapter->screen_format == mode->format_id && !mode->refresh_rate)
+    if (FAILED(hr = wined3d_device_get_display_mode(device, swapchain_idx, &current_mode)))
+    {
+        ERR("Failed to get current display mode, hr %#x.\n", hr);
+    }
+    else if (current_mode.width == mode->width
+            && current_mode.height == mode->height
+            && current_mode.format_id == mode->format_id
+            && (current_mode.refresh_rate == mode->refresh_rate
+            || !mode->refresh_rate))
+    {
+        TRACE("Skipping redundant mode setting call.\n");
         return WINED3D_OK;
+    }
 
     ret = ChangeDisplaySettingsExW(NULL, &devmode, NULL, CDS_FULLSCREEN, NULL);
     if (ret != DISP_CHANGE_SUCCESSFUL)




More information about the wine-cvs mailing list