Skip to content

Commit

Permalink
winex11.drv: Update the check for broken nVidia RandR to test for the…
Browse files Browse the repository at this point in the history
… number of resolutions instead of the number of modes.
  • Loading branch information
compholio authored and julliard committed Jan 22, 2015
1 parent 286e4a8 commit 8e9e4a6
Showing 1 changed file with 27 additions and 15 deletions.
42 changes: 27 additions & 15 deletions dlls/winex11.drv/xrandr.c
Expand Up @@ -386,6 +386,7 @@ static XRRCrtcInfo *xrandr12_get_primary_crtc_info( XRRScreenResources *resource

static int xrandr12_init_modes(void)
{
unsigned int only_one_resolution = 1, mode_count;
XRRScreenResources *resources;
XRROutputInfo *output_info;
XRRCrtcInfo *crtc_info;
Expand Down Expand Up @@ -434,21 +435,6 @@ static int xrandr12_init_modes(void)
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 )))
{
ERR("Failed to allocate xrandr mode info array.\n");
Expand Down Expand Up @@ -480,6 +466,32 @@ static int xrandr12_init_modes(void)
}
}

mode_count = X11DRV_Settings_GetModeCount();
for (i = 1; i < mode_count; ++i)
{
if (dd_modes[i].width != dd_modes[0].width || dd_modes[i].height != dd_modes[0].height)
{
only_one_resolution = 0;
break;
}
}

/* 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 (only_one_resolution && 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;
HeapFree( GetProcessHeap(), 0, xrandr12_modes );
goto done;
}

X11DRV_Settings_AddDepthModes();
ret = 0;

Expand Down

0 comments on commit 8e9e4a6

Please sign in to comment.