[PATCH 1/5] wined3d: Only filter redundant mode changes in wined3d.
Henri Verbeet
hverbeet at codeweavers.com
Wed Jun 20 10:45:13 CDT 2012
We used to do this in ddraw_set_display_mode() because we changed window
dimensions before setting the display mode. This now happens in the
WM_DISPLAYCHANGE handler, so there's no reason to filter mode changes in ddraw
anymore.
---
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, ¤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)
--
1.7.3.4
More information about the wine-patches
mailing list