1
0

Accepting request 907688 from home:dirkmueller:branches:X11:XOrg

- add U_present-get_crtc-should-not-return-crtc-when-its-scr.patch (bsc#1188559)
  https://gitlab.freedesktop.org/xorg/xserver/-/issues/1195

OBS-URL: https://build.opensuse.org/request/show/907688
OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xorg-x11-server?expand=0&rev=799
This commit is contained in:
Stefan Dirsch 2021-07-22 09:42:20 +00:00 committed by Git OBS Bridge
parent 24b54b0c7e
commit b1a21d4900
3 changed files with 104 additions and 0 deletions

View File

@ -0,0 +1,96 @@
From 857f4de8a8fc14a0bce566baf07b0eedc1b6b5b5 Mon Sep 17 00:00:00 2001
From: Lukasz Spintzyk <lukasz.spintzyk@synaptics.com>
Date: Mon, 19 Jul 2021 08:17:09 +0200
Subject: [PATCH xserver] present: get_crtc should not return crtc when its
screen does not have present extension
Since crtc can belong to secondary output that may not have present
extension enabled we should fallback to first enabled crtc or fake crtc.
Fix for issue xorg/xserver#1195
---
present/present.c | 11 ++++++++++-
randr/randr.c | 27 +++++++++++++++++++++++++++
randr/randrstr.h | 2 ++
3 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/present/present.c b/present/present.c
index 3eddb7434..66411212b 100644
--- a/present/present.c
+++ b/present/present.c
@@ -59,11 +59,20 @@ present_get_crtc(WindowPtr window)
{
ScreenPtr screen = window->drawable.pScreen;
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
+ RRCrtcPtr crtc = NULL;
+ RROutputPtr firstOutput = NULL;
if (!screen_priv)
return NULL;
- return screen_priv->get_crtc(screen_priv, window);
+ crtc = screen_priv->get_crtc(screen_priv, window);
+ if (crtc && !present_screen_priv(crtc->pScreen)) {
+ crtc = RRFirstEnabledCrtc(screen);
+ }
+ if (crtc && !present_screen_priv(crtc->pScreen)) {
+ crtc = NULL;
+ }
+ return crtc;
}
/*
diff --git a/randr/randr.c b/randr/randr.c
index 5db8b5ced..afc867ea9 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -693,6 +693,33 @@ RRFirstOutput(ScreenPtr pScreen)
return NULL;
}
+RRCrtcPtr
+RRFirstEnabledCrtc(ScreenPtr pScreen)
+{
+ rrScrPriv(pScreen);
+ RROutputPtr output;
+ int i, j;
+
+ if (!pScrPriv)
+ return NULL;
+
+ if (pScrPriv->primaryOutput && pScrPriv->primaryOutput->crtc &&
+ pScrPriv->primaryOutput->pScreen == pScreen)
+ return pScrPriv->primaryOutput->crtc;
+
+ for (i = 0; i < pScrPriv->numCrtcs; i++) {
+ RRCrtcPtr crtc = pScrPriv->crtcs[i];
+
+ for (j = 0; j < pScrPriv->numOutputs; j++) {
+ output = pScrPriv->outputs[j];
+ if (output->crtc == crtc && crtc->mode)
+ return crtc;
+ }
+ }
+ return NULL;
+}
+
+
CARD16
RRVerticalRefresh(xRRModeInfo * mode)
{
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 0b95d6e25..28ba4ea91 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -593,6 +593,8 @@ extern _X_EXPORT Bool RRScreenInit(ScreenPtr pScreen);
extern _X_EXPORT RROutputPtr RRFirstOutput(ScreenPtr pScreen);
+extern _X_EXPORT RRCrtcPtr RRFirstEnabledCrtc(ScreenPtr pScreen);
+
extern _X_EXPORT Bool RROutputSetNonDesktop(RROutputPtr output, Bool non_desktop);
extern _X_EXPORT CARD16
--
2.30.2

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
Thu Jul 22 09:30:11 UTC 2021 - Dirk Müller <dmueller@suse.com>
- add U_present-get_crtc-should-not-return-crtc-when-its-scr.patch (bsc#1188559)
https://gitlab.freedesktop.org/xorg/xserver/-/issues/1195
-------------------------------------------------------------------
Fri Jul 9 08:26:19 UTC 2021 - Stefan Dirsch <sndirsch@suse.com>

View File

@ -252,6 +252,7 @@ Patch1801: U_Fix-segfault-on-probing-a-non-PCI-platform-device-on.patch
Patch1900: u_no-lto-for-tests.patch
Patch1910: u_modesetting-Fix-dirty-updates-for-sw-rotation.patch
Patch1911: U_present-get_crtc-should-not-return-crtc-when-its-scr.patch
%description
This package contains the X.Org Server.
@ -403,6 +404,7 @@ sh %{SOURCE92} --verify . %{SOURCE91}
%patch1801 -p1
%patch1900 -p1
%patch1910 -p1
%patch1911 -p1
%build
%global _lto_cflags %{?_lto_cflags} -ffat-lto-objects