From 2a0463ac21bab45a477f1f4a500b315546a85042 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Wed, 20 Jun 2012 17:45:13 +0200 Subject: [PATCH] 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 057e6e1b311..e5bd7d6b963 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 3bc623a8545..8aadbbb651b 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, ¤t_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)