This repository has been archived by the owner on May 20, 2023. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
upgpkg: xorg-server 21.1.1-3: revert dpi calculation changes that lea…
…ds to more issues than it fixes - FS#72661 git-svn-id: file:///srv/repos/svn-packages/svn@427869 eb2447ed-0c53-47e4-bac8-5bc4a241df78
- Loading branch information
andyrtr
authored and
svntogit
committed
Nov 10, 2021
1 parent
9584f84
commit c4b4539
Showing
2 changed files
with
127 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters