aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-graphics/xorg-app/xrandr/0001-Fixed-CRTC-disable-in-xrandr-causing-scale-issue.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-graphics/xorg-app/xrandr/0001-Fixed-CRTC-disable-in-xrandr-causing-scale-issue.patch')
-rw-r--r--meta-amd-bsp/recipes-graphics/xorg-app/xrandr/0001-Fixed-CRTC-disable-in-xrandr-causing-scale-issue.patch87
1 files changed, 87 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-graphics/xorg-app/xrandr/0001-Fixed-CRTC-disable-in-xrandr-causing-scale-issue.patch b/meta-amd-bsp/recipes-graphics/xorg-app/xrandr/0001-Fixed-CRTC-disable-in-xrandr-causing-scale-issue.patch
new file mode 100644
index 00000000..3ba30c34
--- /dev/null
+++ b/meta-amd-bsp/recipes-graphics/xorg-app/xrandr/0001-Fixed-CRTC-disable-in-xrandr-causing-scale-issue.patch
@@ -0,0 +1,87 @@
+From 3e946f562ba38993b57ea46bc7089c4f6bc7951b Mon Sep 17 00:00:00 2001
+From: Arsalan-Awan <Arsalan_Awan@mentor.com>
+Date: Mon, 5 Mar 2018 18:37:37 +0500
+Subject: [PATCH] Fixed CRTC disable in xrandr causing scale issue
+
+Whenever scale value is increased when it is between 0.0 - 1.0
+and is kept within 0.0 - 1.0 range, the display does not expand
+to fullscreen. It rather becomes smaller and leaves blank spaces on
+the right and bottom sides. And the following error message shows up:
+
+X Error of failed request: BadMatch (invalid parameter attributes)
+ Major opcode of failed request: 139 (RANDR)
+ Minor opcode of failed request: 7 (RRSetScreenSize)
+ Serial number of failed request: 36
+ Current serial number in output stream: 38
+
+Before xrandr attempts to apply the transformation matrix requested
+by "scale", "transform" or "scale-from" options, it disables the
+CRTCs for which the transformed image's dimensions are larger than the
+target display's resolution/mode. But, when the image is smaller, it
+does not disable the CRTCs, and proceeds with applying the
+transformation (involves framebuffer dimension changes). This works well
+for all the scale values and transitions except for the above mentioned
+transitions.
+
+This patch fixes such issues!
+
+Signed-off-by: Arsalan-Awan <Arsalan_Awan@mentor.com>
+---
+ xrandr.c | 31 +++++--------------------------
+ 1 file changed, 5 insertions(+), 26 deletions(-)
+
+diff --git a/xrandr.c b/xrandr.c
+index dcfdde0..d2872ef 100644
+--- a/xrandr.c
++++ b/xrandr.c
+@@ -1723,8 +1723,7 @@ apply (void)
+ XGrabServer (dpy);
+
+ /*
+- * Turn off any crtcs which are to be disabled or which are
+- * larger than the target size
++ * Turn off any crtcs which are to be disabled
+ */
+ for (c = 0; c < res->ncrtc; c++)
+ {
+@@ -1736,33 +1735,13 @@ apply (void)
+ continue;
+
+ /*
+- * If this crtc is to be left enabled, make
+- * sure the old size fits then new screen
++ * Once the scale value is changed in xrandr, omitting the
++ * following if statement causes the display to fail to
++ * turn back ON after it goes to sleep due to inactivity.
+ */
+ if (crtc->mode_info)
+- {
+- XRRModeInfo *old_mode = find_mode_by_xid (crtc_info->mode);
+- int x, y, w, h;
+- box_t bounds;
+-
+- if (!old_mode)
+- panic (RRSetConfigFailed, crtc);
+-
+- /* old position and size information */
+- mode_geometry (old_mode, crtc_info->rotation,
+- &crtc->current_transform.transform,
+- &bounds);
+-
+- x = crtc_info->x + bounds.x1;
+- y = crtc_info->y + bounds.y1;
+- w = bounds.x2 - bounds.x1;
+- h = bounds.y2 - bounds.y1;
+-
+- /* if it fits, skip it */
+- if (x + w <= fb_width && y + h <= fb_height)
+- continue;
+ crtc->changing = True;
+- }
++
+ s = crtc_disable (crtc);
+ if (s != RRSetConfigSuccess)
+ panic (s, crtc);
+--
+2.7.4
+