From ea409cf4fa1d094730872f699d09e6a9eb5b40ab Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Sat, 9 Aug 2014 13:21:52 -0600 Subject: [PATCH] Added patch to better detect broken nVidia RandR 1.2 support. --- README.md | 1 + debian/changelog | 3 +- patches/Makefile | 17 ++++ ...te-the-check-for-broken-nVidia-RandR.patch | 86 +++++++++++++++++++ .../winex11-Limited_Resolutions/definition | 4 + 5 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 patches/winex11-Limited_Resolutions/0001-winex11.drv-Update-the-check-for-broken-nVidia-RandR.patch create mode 100644 patches/winex11-Limited_Resolutions/definition diff --git a/README.md b/README.md index dd3502bb..76c719c3 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ Besides that the following additional changes are included: * Support for GetVolumePathName * Workaround for shlwapi URLs with relative paths * XEMBED support for embedding Wine windows inside Linux applications +* nVidia driver for high-end laptop cards does not list all supported resolutions How to install Wine-Compholio diff --git a/debian/changelog b/debian/changelog index 7970ab42..b35eb0a9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,7 @@ wine-compholio (1.7.25) UNRELEASED; urgency=low * Added Courier Prime (OFLv1.1) as a Courier New replacement. - -- Erich E. Hoover Sat, 09 Aug 2014 09:28:25 -0600 + * Added patch to better detect broken nVidia RandR 1.2 support. + -- Erich E. Hoover Sat, 09 Aug 2014 13:21:27 -0600 wine-compholio (1.7.24) unstable; urgency=low * Various further improvements to the patch system. diff --git a/patches/Makefile b/patches/Makefile index ecabbde3..7f83f395 100644 --- a/patches/Makefile +++ b/patches/Makefile @@ -46,6 +46,7 @@ PATCHLIST := \ user32-WndProc.ok \ wineboot-HKEY_DYN_DATA.ok \ winepulse-PulseAudio_Support.ok \ + winex11-Limited_Resolutions.ok \ winex11-XEMBED.ok \ ws2_32-Connect_Time.ok \ ws2_32-TransmitFile.ok \ @@ -838,6 +839,22 @@ winepulse-PulseAudio_Support.ok: echo '+ { "winepulse-PulseAudio_Support", "Maarten Lankhorst", "Winepulse patches extracted from https://launchpad.net/~ubuntu-wine/+archive/ubuntu/ppa/+files/wine1.7_1.7.22-0ubuntu1.debian.tar.gz. [rev 4]" },'; \ ) > winepulse-PulseAudio_Support.ok +# Patchset winex11-Limited_Resolutions +# | +# | Included patches: +# | * Update the check for broken nVidia RandR to test for the number of resolutions instead of the number of modes. [by Erich +# | E. Hoover] +# | +# | Modified files: +# | * dlls/winex11.drv/xrandr.c +# | +.INTERMEDIATE: winex11-Limited_Resolutions.ok +winex11-Limited_Resolutions.ok: + $(call APPLY_FILE,winex11-Limited_Resolutions/0001-winex11.drv-Update-the-check-for-broken-nVidia-RandR.patch) + @( \ + echo '+ { "winex11-Limited_Resolutions", "Erich E. Hoover", "Update the check for broken nVidia RandR to test for the number of resolutions instead of the number of modes." },'; \ + ) > winex11-Limited_Resolutions.ok + # Patchset winex11-XEMBED # | # | Included patches: diff --git a/patches/winex11-Limited_Resolutions/0001-winex11.drv-Update-the-check-for-broken-nVidia-RandR.patch b/patches/winex11-Limited_Resolutions/0001-winex11.drv-Update-the-check-for-broken-nVidia-RandR.patch new file mode 100644 index 00000000..f80ea83d --- /dev/null +++ b/patches/winex11-Limited_Resolutions/0001-winex11.drv-Update-the-check-for-broken-nVidia-RandR.patch @@ -0,0 +1,86 @@ +From dcaf0bbafbfa6cfb89803c363f464c4766c972ff Mon Sep 17 00:00:00 2001 +From: "Erich E. Hoover" +Date: Sat, 9 Aug 2014 13:15:09 -0600 +Subject: winex11.drv: Update the check for broken nVidia RandR to test for + the number of resolutions instead of the number of modes. + +--- + dlls/winex11.drv/xrandr.c | 48 +++++++++++++++++++++++++++++++-------------- + 1 file changed, 33 insertions(+), 15 deletions(-) + +diff --git a/dlls/winex11.drv/xrandr.c b/dlls/winex11.drv/xrandr.c +index fc09020..bcad0ce 100644 +--- a/dlls/winex11.drv/xrandr.c ++++ b/dlls/winex11.drv/xrandr.c +@@ -389,6 +389,7 @@ static int xrandr12_init_modes(void) + XRRScreenResources *resources; + XRROutputInfo *output_info; + XRRCrtcInfo *crtc_info; ++ int resolution_count; + int ret = -1; + int i, j; + +@@ -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"); +@@ -480,6 +466,38 @@ static int xrandr12_init_modes(void) + } + } + ++ resolution_count = 0; ++ for (i = 0; i < xrandr_mode_count; ++i) ++ { ++ int duplicate_resolution = 0; ++ ++ for (j = 0; j < i; ++j) ++ { ++ if(dd_modes[i].width == dd_modes[j].width && dd_modes[i].height == dd_modes[j].height) ++ { ++ duplicate_resolution = 1; ++ break; ++ } ++ } ++ ++ if (!duplicate_resolution) resolution_count++; ++ } ++ ++ /* 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 (resolution_count == 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; ++ } ++ + X11DRV_Settings_AddDepthModes(); + ret = 0; + +-- +1.7.9.5 + diff --git a/patches/winex11-Limited_Resolutions/definition b/patches/winex11-Limited_Resolutions/definition new file mode 100644 index 00000000..c5fa6f27 --- /dev/null +++ b/patches/winex11-Limited_Resolutions/definition @@ -0,0 +1,4 @@ +Author: Erich E. Hoover +Subject: Update the check for broken nVidia RandR to test for the number of resolutions instead of the number of modes. +Revision: 1 +Fixes: nVidia driver for high-end laptop cards does not list all supported resolutions