xserver: Branch 'server-1.20-branch' - 2 commits
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Jul 29 18:16:19 UTC 2021
hw/xfree86/drivers/modesetting/present.c | 3 +++
present/present.c | 10 +++++++++-
randr/randr.c | 27 +++++++++++++++++++++++++++
randr/randrstr.h | 2 ++
4 files changed, 41 insertions(+), 1 deletion(-)
New commits:
commit f85e4edba489316950fc3422f39e3c2ef8fb1ac5
Author: Łukasz Spintzyk <lukasz.spintzyk at synaptics.com>
Date: Thu Jul 22 13:12:05 2021 +0200
modesetting: unflip not possible when glamor is not set
This is fixing crashes of xfce when running under qemu
(cherry picked from commit 8836b9d243444031b6396d39d345f2f83b5fa6a9)
diff --git a/hw/xfree86/drivers/modesetting/present.c b/hw/xfree86/drivers/modesetting/present.c
index 02671c594..186309a29 100644
--- a/hw/xfree86/drivers/modesetting/present.c
+++ b/hw/xfree86/drivers/modesetting/present.c
@@ -257,6 +257,9 @@ ms_present_check_unflip(RRCrtcPtr crtc,
pixmap->devKind != drmmode_bo_get_pitch(&ms->drmmode.front_bo))
return FALSE;
+ if (!ms->drmmode.glamor)
+ return FALSE;
+
#ifdef GBM_BO_WITH_MODIFIERS
/* Check if buffer format/modifier is supported by all active CRTCs */
gbm = glamor_gbm_bo_from_pixmap(screen, pixmap);
commit b03d7184b7906121a432b05473675937ab6c0f1e
Author: Łukasz Spintzyk <lukasz.spintzyk at synaptics.com>
Date: Mon Jul 19 14:25:28 2021 +0200
present: fallback get_crtc to return crtc belonging to screen with 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
(cherry picked from commit d6c02ffd9c910637f6b3b7249507998e9e45f93c)
diff --git a/present/present.c b/present/present.c
index 3eddb7434..d81095375 100644
--- a/present/present.c
+++ b/present/present.c
@@ -59,11 +59,19 @@ present_get_crtc(WindowPtr window)
{
ScreenPtr screen = window->drawable.pScreen;
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
+ RRCrtcPtr crtc = 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
More information about the xorg-commit
mailing list