[PATCH xf86-video-ati] present: Check that we can get a KMS FB for flipping

Michel Dänzer michel at daenzer.net
Tue Jun 25 15:54:46 UTC 2019


From: Michel Dänzer <michel.daenzer at amd.com>

This can legitimately fail if the pixmap's storage is shared from
another device, e.g. when using PRIME render offloading.

(Ported from amdgpu commit 7d3fef72e0c871e1677e9e544f4cae5e238b5c52)

Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
---
 src/radeon.h         |  1 +
 src/radeon_present.c | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/src/radeon.h b/src/radeon.h
index 008a59f3a..2c9134667 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -309,6 +309,7 @@ struct radeon_pixmap {
 
 	struct radeon_buffer *bo;
 	struct drmmode_fb *fb;
+	Bool fb_failed;
 
 	uint32_t tiling_flags;
 
diff --git a/src/radeon_present.c b/src/radeon_present.c
index 38a9a6b79..494655c91 100644
--- a/src/radeon_present.c
+++ b/src/radeon_present.c
@@ -254,6 +254,7 @@ radeon_present_check_flip(RRCrtcPtr crtc, WindowPtr window, PixmapPtr pixmap,
     xf86CrtcPtr xf86_crtc = crtc->devPrivate;
     ScreenPtr screen = window->drawable.pScreen;
     ScrnInfoPtr scrn = xf86_crtc->scrn;
+    struct radeon_pixmap *priv = radeon_get_pixmap_private(pixmap);
     xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
     RADEONInfoPtr info = RADEONPTR(scrn);
     PixmapPtr screen_pixmap = screen->GetScreenPixmap(screen);
@@ -277,6 +278,23 @@ radeon_present_check_flip(RRCrtcPtr crtc, WindowPtr window, PixmapPtr pixmap,
 	return FALSE;
 #endif
 
+    if (priv && priv->fb_failed)
+	return FALSE;
+
+    if (!radeon_pixmap_get_fb(pixmap)) {
+	if (!priv)
+	    priv = radeon_get_pixmap_private(pixmap);
+
+	if (priv && !priv->fb_failed) {
+	    xf86DrvMsg(scrn->scrnIndex, X_WARNING,
+		       "Cannot get FB for Present flip (may be "
+		       "normal if using PRIME render offloading)\n");
+	    priv->fb_failed = TRUE;
+	}
+
+	return FALSE;
+    }
+
     /* The kernel driver doesn't handle flipping between BOs with different
      * tiling parameters correctly yet
      */
-- 
2.20.1



More information about the amd-gfx mailing list