From 288c91581e3eba76ee991d8170d687ae4f919614 Mon Sep 17 00:00:00 2001 From: Finalspace Date: Wed, 2 Sep 2026 00:15:41 +0200 Subject: [PATCH] wined3d: accept a 24 bpp desktop when a 32 bpp mode is requested Both depths map to WINED3DFMT_B8G8R8X8_UNORM, so a mode change is neither needed nor possible on a driver that offers only one of them. --- wined3d/directx.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/wined3d/directx.c b/wined3d/directx.c index a890a66..2a25d78 100644 --- a/wined3d/directx.c +++ b/wined3d/directx.c @@ -4517,7 +4517,8 @@ HRESULT CDECL wined3d_set_adapter_display_mode(struct wined3d *wined3d, } else if (current_mode.dmPelsWidth == new_mode.dmPelsWidth && current_mode.dmPelsHeight == new_mode.dmPelsHeight - && current_mode.dmBitsPerPel == new_mode.dmBitsPerPel + && (current_mode.dmBitsPerPel == new_mode.dmBitsPerPel + || pixelformat_for_depth(current_mode.dmBitsPerPel) == new_format_id) && (current_mode.dmDisplayFrequency == new_mode.dmDisplayFrequency || !(new_mode.dmFields & DM_DISPLAYFREQUENCY)) && (DUMMYACCESS1(current_mode, u2, dmDisplayFlags) == DUMMYACCESS1(new_mode, u2, dmDisplayFlags) @@ -4537,6 +4538,14 @@ HRESULT CDECL wined3d_set_adapter_display_mode(struct wined3d *wined3d, new_mode.dmDisplayFrequency = 0; ret = ChangeDisplaySettingsExA95(adapter->DeviceName, &new_mode, NULL, CDS_FULLSCREEN, NULL); } + if (ret != DISP_CHANGE_SUCCESSFUL && new_mode.dmBitsPerPel == 32 + && pixelformat_for_depth(24) == new_format_id) + { + WARN("No 32 bpp mode, retrying at 24 bpp.\n"); + new_mode.dmBitsPerPel = 24; + ret = ChangeDisplaySettingsExA95(adapter->DeviceName, &new_mode, NULL, CDS_FULLSCREEN, NULL); + } + if (ret != DISP_CHANGE_SUCCESSFUL) return WINED3DERR_NOTAVAILABLE; }