[arch-commits] Commit in xorg-server/trunk (2 files)

Andreas Radke andyrtr at gemini.archlinux.org
Wed Nov 10 20:37:59 UTC 2021


    Date: Wednesday, November 10, 2021 @ 20:37:59
  Author: andyrtr
Revision: 427869

upgpkg: xorg-server 21.1.1-3: revert dpi calculation changes that leads to more issues than it fixes - FS#72661

Added:
  xorg-server/trunk/0001_revert_dpi_calculation.patch
Modified:
  xorg-server/trunk/PKGBUILD

-----------------------------------+
 0001_revert_dpi_calculation.patch |  118 ++++++++++++++++++++++++++++++++++++
 PKGBUILD                          |   12 ++-
 2 files changed, 127 insertions(+), 3 deletions(-)

Added: 0001_revert_dpi_calculation.patch
===================================================================
--- 0001_revert_dpi_calculation.patch	                        (rev 0)
+++ 0001_revert_dpi_calculation.patch	2021-11-10 20:37:59 UTC (rev 427869)
@@ -0,0 +1,118 @@
+diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
+index 0389945a7cf0e18545cbe101639b62cd01f1e276..d03382d263399bba67dc77f6525480f751674bcc 100644
+--- a/hw/xfree86/common/xf86Helper.c
++++ b/hw/xfree86/common/xf86Helper.c
+@@ -55,6 +55,7 @@
+ #include "xf86Xinput.h"
+ #include "xf86InPriv.h"
+ #include "mivalidate.h"
++#include "xf86Crtc.h"
+ 
+ /* For xf86GetClocks */
+ #if defined(CSRG_BASED) || defined(__GNU__)
+@@ -851,8 +852,9 @@ xf86SetDpi(ScrnInfoPtr pScrn, int x, int y)
+ {
+     MessageType from = X_DEFAULT;
+     xf86MonPtr DDC = (xf86MonPtr) (pScrn->monitor->DDC);
+-    int ddcWidthmm, ddcHeightmm;
++    int probedWidthmm, probedHeightmm;
+     int widthErr, heightErr;
++    xf86OutputPtr compat = xf86CompatOutput(pScrn);
+ 
+     /* XXX Maybe there is no need for widthmm/heightmm in ScrnInfoRec */
+     pScrn->widthmm = pScrn->monitor->widthmm;
+@@ -862,11 +864,15 @@ xf86SetDpi(ScrnInfoPtr pScrn, int x, int y)
+         /* DDC gives display size in mm for individual modes,
+          * but cm for monitor
+          */
+-        ddcWidthmm = DDC->features.hsize * 10;  /* 10mm in 1cm */
+-        ddcHeightmm = DDC->features.vsize * 10; /* 10mm in 1cm */
++        probedWidthmm = DDC->features.hsize * 10;  /* 10mm in 1cm */
++        probedHeightmm = DDC->features.vsize * 10; /* 10mm in 1cm */
++    }
++    else if (compat && compat->mm_width > 0 && compat->mm_height > 0) {
++        probedWidthmm = compat->mm_width;
++        probedHeightmm = compat->mm_height;
+     }
+     else {
+-        ddcWidthmm = ddcHeightmm = 0;
++        probedWidthmm = probedHeightmm = 0;
+     }
+ 
+     if (monitorResolution > 0) {
+@@ -892,15 +898,15 @@ xf86SetDpi(ScrnInfoPtr pScrn, int x, int y)
+                    pScrn->widthmm, pScrn->heightmm);
+ 
+         /* Warn if config and probe disagree about display size */
+-        if (ddcWidthmm && ddcHeightmm) {
++        if (probedWidthmm && probedHeightmm) {
+             if (pScrn->widthmm > 0) {
+-                widthErr = abs(ddcWidthmm - pScrn->widthmm);
++                widthErr = abs(probedWidthmm - pScrn->widthmm);
+             }
+             else {
+                 widthErr = 0;
+             }
+             if (pScrn->heightmm > 0) {
+-                heightErr = abs(ddcHeightmm - pScrn->heightmm);
++                heightErr = abs(probedHeightmm - pScrn->heightmm);
+             }
+             else {
+                 heightErr = 0;
+@@ -909,17 +915,17 @@ xf86SetDpi(ScrnInfoPtr pScrn, int x, int y)
+                 /* Should include config file name for monitor here */
+                 xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+                            "Probed monitor is %dx%d mm, using Displaysize %dx%d mm\n",
+-                           ddcWidthmm, ddcHeightmm, pScrn->widthmm,
++                           probedWidthmm, probedHeightmm, pScrn->widthmm,
+                            pScrn->heightmm);
+             }
+         }
+     }
+-    else if (ddcWidthmm && ddcHeightmm) {
++    else if (probedWidthmm && probedHeightmm) {
+         from = X_PROBED;
+         xf86DrvMsg(pScrn->scrnIndex, from, "Display dimensions: (%d, %d) mm\n",
+-                   ddcWidthmm, ddcHeightmm);
+-        pScrn->widthmm = ddcWidthmm;
+-        pScrn->heightmm = ddcHeightmm;
++                   probedWidthmm, probedHeightmm);
++        pScrn->widthmm = probedWidthmm;
++        pScrn->heightmm = probedHeightmm;
+         if (pScrn->widthmm > 0) {
+             pScrn->xDpi =
+                 (int) ((double) pScrn->virtualX * MMPERINCH / pScrn->widthmm);
+diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
+index c6e89e66f690cd7e2a26a3d4b663f9f146cd84e0..202791774b31d6c349f27ed692c1b4ea7f1fdca4 100644
+--- a/hw/xfree86/modes/xf86Crtc.c
++++ b/hw/xfree86/modes/xf86Crtc.c
+@@ -3256,8 +3256,10 @@ xf86OutputSetEDID(xf86OutputPtr output, xf86MonPtr edid_mon)
+     free(output->MonInfo);
+ 
+     output->MonInfo = edid_mon;
+-    output->mm_width = 0;
+-    output->mm_height = 0;
++    if (edid_mon) {
++        output->mm_width = 0;
++        output->mm_height = 0;
++    }
+ 
+     if (debug_modes) {
+         xf86DrvMsg(scrn->scrnIndex, X_INFO, "EDID for output %s\n",
+diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
+index 50cbd043edc8380a3307dfcd5dee9cb280a50ba9..d4651f4e856f9fbe8b87086405401e4c0989b409 100644
+--- a/hw/xfree86/modes/xf86RandR12.c
++++ b/hw/xfree86/modes/xf86RandR12.c
+@@ -806,6 +806,12 @@ xf86RandR12CreateScreenResources(ScreenPtr pScreen)
+                 mmWidth = output->conf_monitor->mon_width;
+                 mmHeight = output->conf_monitor->mon_height;
+             }
++            else if (output &&
++                (output->mm_width > 0 &&
++                 output->mm_height > 0)) {
++                mmWidth = output->mm_width;
++                mmHeight = output->mm_height;
++            }
+             else {
+                 /*
+                  * Otherwise, just set the screen to DEFAULT_DPI

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2021-11-10 19:16:18 UTC (rev 427868)
+++ PKGBUILD	2021-11-10 20:37:59 UTC (rev 427869)
@@ -5,7 +5,7 @@
 pkgname=('xorg-server' 'xorg-server-xephyr' 'xorg-server-xvfb' 'xorg-server-xnest'
          'xorg-server-common' 'xorg-server-devel')
 pkgver=21.1.1
-pkgrel=2
+pkgrel=3
 arch=('x86_64')
 license=('custom')
 groups=('xorg')
@@ -19,15 +19,21 @@
 #source=(${pkgbase}-${pkgver}::git+https://gitlab.freedesktop.org/xorg/xserver.git#commit=27a0ee32ccef8d621aaa758c804fc9a5ceeb5a56
 source=(https://xorg.freedesktop.org/releases/individual/xserver/${pkgbase}-${pkgver}.tar.xz{,.sig}
         xvfb-run # with updates from FC master
-        xvfb-run.1)
+        xvfb-run.1
+        0001_revert_dpi_calculation.patch)
 validpgpkeys=('FD0004A26EADFE43A4C3F249C6F7AE200374452D') # Povilas Kanapickas <povilas at radix.lt>
 sha512sums=('8608ed9c1537c95e8a3adea5e3e372a3c5eb841f8e27c84283093f22fb1909e16a800006510da684b13f8f237f33b8a4be3e2537f5f9ab9af4c5ad12770eef0d'
             'SKIP'
             '4154dd55702b98083b26077bf70c60aa957b4795dbf831bcc4c78b3cb44efe214f0cf8e3c140729c829b5f24e7466a24615ab8dbcce0ac6ebee3229531091514'
-            'de5e2cb3c6825e6cf1f07ca0d52423e17f34d70ec7935e9dd24be5fb9883bf1e03b50ff584931bd3b41095c510ab2aa44d2573fd5feaebdcb59363b65607ff22')
+            'de5e2cb3c6825e6cf1f07ca0d52423e17f34d70ec7935e9dd24be5fb9883bf1e03b50ff584931bd3b41095c510ab2aa44d2573fd5feaebdcb59363b65607ff22'
+            '28021ef9879d5313096c3e7e79a71a2e15be366652845acf32239d5c011c60aa5938c63c23b04bb0dee56df7b3762b7ca8d51d5925898c67c2ba83ec468fe782')
 
 prepare() {
   cd "${pkgbase}-${pkgver}"
+  # revert dpi calculation that leads to unwanted miscalculation results
+  # https://gitlab.freedesktop.org/xorg/xserver/-/issues/1241
+  # https://bugs.archlinux.org/task/72661
+  patch -Rp1 -i ../0001_revert_dpi_calculation.patch
 
 }
 



More information about the arch-commits mailing list