Henri Verbeet : wined3d: Lie about the display format in wined3d_get_adapter_display_mode().
Alexandre Julliard
julliard at winehq.org
Wed Jun 20 13:49:44 CDT 2012
Module: wine
Branch: master
Commit: fdb85423b4ae3ee8454456966b8cc1b0c46da49a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fdb85423b4ae3ee8454456966b8cc1b0c46da49a
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Wed Jun 20 17:45:14 2012 +0200
wined3d: Lie about the display format in wined3d_get_adapter_display_mode().
---
dlls/wined3d/directx.c | 20 +++++++++++++++++---
1 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 5183904..df22efd 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -3029,15 +3029,18 @@ HRESULT CDECL wined3d_enum_adapter_modes(const struct wined3d *wined3d, UINT ada
HRESULT CDECL wined3d_get_adapter_display_mode(const struct wined3d *wined3d, UINT adapter_idx,
struct wined3d_display_mode *mode)
{
+ const struct wined3d_adapter *adapter;
+
TRACE("wined3d %p, adapter_idx %u, display_mode %p.\n", wined3d, adapter_idx, mode);
if (!mode || adapter_idx >= wined3d->adapter_count)
return WINED3DERR_INVALIDCALL;
+ adapter = &wined3d->adapters[adapter_idx];
+
if (!adapter_idx)
{
DEVMODEW DevModeW;
- unsigned int bpp;
ZeroMemory(&DevModeW, sizeof(DevModeW));
DevModeW.dmSize = sizeof(DevModeW);
@@ -3045,11 +3048,22 @@ HRESULT CDECL wined3d_get_adapter_display_mode(const struct wined3d *wined3d, UI
EnumDisplaySettingsExW(NULL, ENUM_CURRENT_SETTINGS, &DevModeW, 0);
mode->width = DevModeW.dmPelsWidth;
mode->height = DevModeW.dmPelsHeight;
- bpp = DevModeW.dmBitsPerPel;
mode->refresh_rate = DEFAULT_REFRESH_RATE;
if (DevModeW.dmFields & DM_DISPLAYFREQUENCY)
mode->refresh_rate = DevModeW.dmDisplayFrequency;
- mode->format_id = pixelformat_for_depth(bpp);
+ mode->format_id = pixelformat_for_depth(DevModeW.dmBitsPerPel);
+
+ /* Lie about the format. X11 can't change the color depth, and some
+ * apps are pretty angry if they SetDisplayMode from 24 to 16 bpp and
+ * find out that GetDisplayMode still returns 24 bpp. This should
+ * probably be handled in winex11 instead. */
+ if (adapter->screen_format && adapter->screen_format != mode->format_id)
+ {
+ WARN("Overriding format %s with stored format %s.\n",
+ debug_d3dformat(mode->format_id),
+ debug_d3dformat(adapter->screen_format));
+ mode->format_id = adapter->screen_format;
+ }
}
else
{
More information about the wine-cvs
mailing list