xf86-video-amdgpu: Branch 'master'

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Apr 24 10:21:07 UTC 2019


 src/amdgpu_pixmap.h |   25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

New commits:
commit bf61e6d7ac1a5754b1026d7f80acf25ef622c491
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Thu Apr 18 19:21:40 2019 +0200

    Retry get_fb_ptr in get_fb
    
    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
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/amdgpu_pixmap.h b/src/amdgpu_pixmap.h
index 0cff195..6720458 100644
--- a/src/amdgpu_pixmap.h
+++ b/src/amdgpu_pixmap.h
@@ -143,21 +143,22 @@ static inline struct drmmode_fb*
 amdgpu_pixmap_get_fb(PixmapPtr pix)
 {
 	struct drmmode_fb **fb_ptr = amdgpu_pixmap_get_fb_ptr(pix);
+	uint32_t handle;
 
-	if (!fb_ptr)
-		return NULL;
-
-	if (!*fb_ptr) {
-		uint32_t handle;
+	if (fb_ptr && *fb_ptr)
+		return *fb_ptr;
+	
+	if (amdgpu_pixmap_get_handle(pix, &handle)) {
+		ScrnInfoPtr scrn = xf86ScreenToScrn(pix->drawable.pScreen);
+		AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(scrn);
 
-		if (amdgpu_pixmap_get_handle(pix, &handle)) {
-			ScrnInfoPtr scrn = xf86ScreenToScrn(pix->drawable.pScreen);
-			AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(scrn);
+		if (!fb_ptr)
+			fb_ptr = amdgpu_pixmap_get_fb_ptr(pix);
 
-			*fb_ptr = amdgpu_fb_create(scrn, pAMDGPUEnt->fd, pix->drawable.width,
-						   pix->drawable.height, pix->devKind,
-						   handle);
-		}
+		*fb_ptr = amdgpu_fb_create(scrn, pAMDGPUEnt->fd,
+					   pix->drawable.width,
+					   pix->drawable.height, pix->devKind,
+					   handle);
 	}
 
 	return *fb_ptr;


More information about the xorg-commit mailing list