winex11: Detect broken NVIDIA RandR setups.

This commit is contained in:
Henri Verbeet 2012-11-24 17:17:09 +01:00 committed by Alexandre Julliard
parent 86779241c6
commit 8776e1c0e1
1 changed files with 16 additions and 0 deletions

View File

@ -24,6 +24,7 @@
#include "wine/debug.h" #include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(xrandr); WINE_DEFAULT_DEBUG_CHANNEL(xrandr);
WINE_DECLARE_DEBUG_CHANNEL(winediag);
#ifdef SONAME_LIBXRANDR #ifdef SONAME_LIBXRANDR
@ -419,6 +420,21 @@ static int xrandr12_init_modes(void)
goto done; goto done;
} }
/* Recent (304.64, possibly earlier) versions of the nvidia driver only
* report a DFP's native mode through RandR 1.2 / 1.3. Standard DMT modes
* are only listed through RandR 1.0 / 1.1. This is completely useless,
* but NVIDIA considers this a feature, so it's unlikely to change. The
* best we can do is to fall back to RandR 1.0 and encourage users to
* consider more cooperative driver vendors when we detect such a
* configuration. */
if (output_info->nmode == 1 && XQueryExtension( gdi_display, "NV-CONTROL", &i, &j, &ret ))
{
ERR_(winediag)("Broken NVIDIA RandR detected, falling back to RandR 1.0. "
"Please consider using the Nouveau driver instead.\n");
ret = -1;
goto done;
}
if (!(xrandr12_modes = HeapAlloc( GetProcessHeap(), 0, sizeof(*xrandr12_modes) * output_info->nmode ))) if (!(xrandr12_modes = HeapAlloc( GetProcessHeap(), 0, sizeof(*xrandr12_modes) * output_info->nmode )))
{ {
ERR("Failed to allocate xrandr mode info array.\n"); ERR("Failed to allocate xrandr mode info array.\n");