[PATCH xf86-video-ati] Retry get_fb_ptr in get_fb

Deucher, Alexander Alexander.Deucher at amd.com
Wed Apr 24 15:26:10 UTC 2019


Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
________________________________
From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> on behalf of Michel Dänzer <michel at daenzer.net>
Sent: Wednesday, April 24, 2019 6:32 AM
To: amd-gfx at lists.freedesktop.org
Subject: [PATCH xf86-video-ati] Retry get_fb_ptr in get_fb

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

If get_fb_ptr returns NULL, try again after pixmap_get_handle, it should
work then.

Fixes spurious Present page flipping failures using "normal" pixmaps
which aren't shared with direct rendering clients, e.g. with a
compositor using the RENDER extension.

Bugzilla: https://bugs.freedesktop.org/110417
(Ported from amdgpu commit bf61e6d7ac1a5754b1026d7f80acf25ef622c491)

Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
---
 src/radeon.h | 31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)

diff --git a/src/radeon.h b/src/radeon.h
index 74454c307..008a59f3a 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -877,21 +877,22 @@ static inline struct drmmode_fb*
 radeon_pixmap_get_fb(PixmapPtr pix)
 {
     struct drmmode_fb **fb_ptr = radeon_pixmap_get_fb_ptr(pix);
-
-    if (!fb_ptr)
-       return NULL;
-
-    if (!*fb_ptr) {
-       uint32_t handle;
-
-       if (radeon_get_pixmap_handle(pix, &handle)) {
-           ScrnInfoPtr scrn = xf86ScreenToScrn(pix->drawable.pScreen);
-           RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
-
-           *fb_ptr = radeon_fb_create(scrn, pRADEONEnt->fd, pix->drawable.width,
-                                      pix->drawable.height, pix->devKind,
-                                      handle);
-       }
+    uint32_t handle;
+
+    if (fb_ptr && *fb_ptr)
+       return *fb_ptr;
+
+    if (radeon_get_pixmap_handle(pix, &handle)) {
+       ScrnInfoPtr scrn = xf86ScreenToScrn(pix->drawable.pScreen);
+       RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
+
+       if (!fb_ptr)
+           fb_ptr = radeon_pixmap_get_fb_ptr(pix);
+
+       *fb_ptr = radeon_fb_create(scrn, pRADEONEnt->fd,
+                                  pix->drawable.width,
+                                  pix->drawable.height, pix->devKind,
+                                  handle);
     }

     return *fb_ptr;
--
2.20.1

_______________________________________________
amd-gfx mailing list
amd-gfx at lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20190424/94101087/attachment.html>


More information about the amd-gfx mailing list