xf86-video-ati: Branch 'master' - 6 commits

Michel Dänzer daenzer at kemper.freedesktop.org
Wed Feb 17 02:48:59 UTC 2016


 configure.ac          |    2 -
 src/drmmode_display.c |    1 
 src/radeon_dri3.c     |   37 ++++++++++++++++++++++---
 src/radeon_glamor.c   |   74 +++++++++++++++++++++++++-------------------------
 src/radeon_probe.c    |    5 ---
 src/radeon_probe.h    |    1 
 src/radeon_sync.c     |    7 ++++
 7 files changed, 83 insertions(+), 44 deletions(-)

New commits:
commit 7bc089ee9740a3ef91f16e36786d8ed64e165acd
Author: jimqu <Jim.Qu at amd.com>
Date:   Tue Feb 16 17:05:48 2016 +0900

    glamor: Return NullPixmap on failure to create shareable pixmap
    
    If we were asked to create a shareable pixmap, it doesn't make sense
    to return a pixmap which isn't shareable. Doing so caused trouble down
    the line such as a crash with older versions of glamor when trying to
    use GLX pixmaps of bpp < 32 via DRI2.
    
    Signed-off-by: JimQu <jim.qu at amd.com>
    (ported from amdgpu commit 2fcb7dadd3c71cd405cbbaafc777697538ca9c29)
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/radeon_glamor.c b/src/radeon_glamor.c
index 6a12b33..cc2b1f2 100644
--- a/src/radeon_glamor.c
+++ b/src/radeon_glamor.c
@@ -262,7 +262,9 @@ fallback_glamor:
 	 */
 		xf86DrvMsg(scrn->scrnIndex, X_WARNING,
 			   "Failed to create textured DRI2/PRIME pixmap.");
-		return pixmap;
+
+		radeon_glamor_destroy_pixmap(pixmap);
+		return NullPixmap;
 	}
 	/* Create textured pixmap failed means glamor failed to
 	 * create a texture from current BO for some reasons. We turn
commit 4cc32031467157ab8788f5c684fb1ac67ae96ff9
Author: jimqu <Jim.Qu at amd.com>
Date:   Tue Feb 16 17:03:24 2016 +0900

    Move radeon_glamor_destroy_pixmap before radeon_glamor_create_pixmap
    
    The next commit will call the former from the latter. No functional
    change.
    
    Signed-off-by: JimQu <jim.qu at amd.com>
    (ported from amdgpu commit 5269a2228bff6023c1a7f3e8534027e1d7addc25)
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/radeon_glamor.c b/src/radeon_glamor.c
index 86db4e2..6a12b33 100644
--- a/src/radeon_glamor.c
+++ b/src/radeon_glamor.c
@@ -159,6 +159,41 @@ radeon_glamor_create_textured_pixmap(PixmapPtr pixmap, struct radeon_pixmap *pri
 						 pixmap->devKind);
 }
 
+static Bool radeon_glamor_destroy_pixmap(PixmapPtr pixmap)
+{
+#ifndef HAVE_GLAMOR_EGL_DESTROY_TEXTURED_PIXMAP
+	ScreenPtr screen = pixmap->drawable.pScreen;
+	RADEONInfoPtr info = RADEONPTR(xf86ScreenToScrn(screen));
+	Bool ret;
+#endif
+
+	if (pixmap->refcnt == 1) {
+		if (pixmap->devPrivate.ptr) {
+			struct radeon_bo *bo = radeon_get_pixmap_bo(pixmap);
+
+			if (bo)
+				radeon_bo_unmap(bo);
+		}
+
+#ifdef HAVE_GLAMOR_EGL_DESTROY_TEXTURED_PIXMAP
+		glamor_egl_destroy_textured_pixmap(pixmap);
+#endif
+		radeon_set_pixmap_bo(pixmap, NULL);
+	}
+
+#ifdef HAVE_GLAMOR_EGL_DESTROY_TEXTURED_PIXMAP
+	fbDestroyPixmap(pixmap);
+	return TRUE;
+#else
+	screen->DestroyPixmap = info->glamor.SavedDestroyPixmap;
+	ret = screen->DestroyPixmap(pixmap);
+	info->glamor.SavedDestroyPixmap = screen->DestroyPixmap;
+	screen->DestroyPixmap = radeon_glamor_destroy_pixmap;
+
+	return ret;
+#endif
+}
+
 static PixmapPtr
 radeon_glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth,
 			unsigned usage)
@@ -250,41 +285,6 @@ fallback_pixmap:
 		return fbCreatePixmap(screen, w, h, depth, usage);
 }
 
-static Bool radeon_glamor_destroy_pixmap(PixmapPtr pixmap)
-{
-#ifndef HAVE_GLAMOR_EGL_DESTROY_TEXTURED_PIXMAP
-	ScreenPtr screen = pixmap->drawable.pScreen;
-	RADEONInfoPtr info = RADEONPTR(xf86ScreenToScrn(screen));
-	Bool ret;
-#endif
-
-	if (pixmap->refcnt == 1) {
-		if (pixmap->devPrivate.ptr) {
-			struct radeon_bo *bo = radeon_get_pixmap_bo(pixmap);
-
-			if (bo)
-				radeon_bo_unmap(bo);
-		}
-
-#ifdef HAVE_GLAMOR_EGL_DESTROY_TEXTURED_PIXMAP
-		glamor_egl_destroy_textured_pixmap(pixmap);
-#endif
-		radeon_set_pixmap_bo(pixmap, NULL);
-	}
-
-#ifdef HAVE_GLAMOR_EGL_DESTROY_TEXTURED_PIXMAP
-	fbDestroyPixmap(pixmap);
-	return TRUE;
-#else
-	screen->DestroyPixmap = info->glamor.SavedDestroyPixmap;
-	ret = screen->DestroyPixmap(pixmap);
-	info->glamor.SavedDestroyPixmap = screen->DestroyPixmap;
-	screen->DestroyPixmap = radeon_glamor_destroy_pixmap;
-
-	return ret;
-#endif
-}
-
 #ifdef RADEON_PIXMAP_SHARING
 
 static Bool
commit a9b181083d56b5de9b6822d0ed89fcc86de777a6
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Tue Feb 16 16:59:40 2016 +0900

    Remove pci_dev test from radeon_get_scrninfo
    
    The pci_dev parameter can never be NULL since we only support KMS.
    
    Reported-by: Tom St Denis <tom.stdenis at amd.com>
    (ported from amdgpu commit 6e42c58375a4c3229da93c27bbd104af145c6163)
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/radeon_probe.c b/src/radeon_probe.c
index 65cf0c9..6d6d8c5 100644
--- a/src/radeon_probe.c
+++ b/src/radeon_probe.c
@@ -127,11 +127,8 @@ radeon_get_scrninfo(int entity_num, void *pci_dev)
     if (!pScrn)
         return FALSE;
 
-    if (pci_dev) {
-      if (!radeon_kernel_mode_enabled(pScrn, pci_dev)) {
+    if (!radeon_kernel_mode_enabled(pScrn, pci_dev))
 	return FALSE;
-      }
-    }
 
     pScrn->driverVersion = RADEON_VERSION_CURRENT;
     pScrn->driverName    = RADEON_DRIVER_NAME;
commit 2c7f068b0a0493daae86e5eacdf8d9812fcd28dc
Author: Mykola Lysenko <Mykola.Lysenko at amd.com>
Date:   Mon Feb 15 18:21:39 2016 +0900

    Initialize drmmode_crtc dpms_mode to DPMSModeOff
    
    This disables query of disabled pipes for drmWaitVBlank on X start
    
    Signed-off-by: Mykola Lysenko <Mykola.Lysenko at amd.com>
    (ported from amdgpu commit 4eb9cedca080b30c57ded349a397620ee7d0cd46)
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 14f6a55..4063743 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1063,6 +1063,7 @@ drmmode_crtc_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, drmModeResPtr mode_res
 	drmmode_crtc = xnfcalloc(sizeof(drmmode_crtc_private_rec), 1);
 	drmmode_crtc->mode_crtc = drmModeGetCrtc(drmmode->fd, mode_res->crtcs[num]);
 	drmmode_crtc->drmmode = drmmode;
+	drmmode_crtc->dpms_mode = DPMSModeOff;
 	crtc->driver_private = drmmode_crtc;
 	drmmode_crtc_hw_id(crtc);
 
commit 9358e44f03c95396b7f7a4f7398f5b24d2559bb2
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Mon Feb 15 18:20:31 2016 +0900

    sync: Check if miSyncShmScreenInit symbol is resolved at runtime
    
    It may be disabled in the Xorg build, either explicitly or because the
    xshmfence library isn't available.
    
    (ported from amdgpu commit 1d0b0c1794e65e581a48aa9fb19679d928d82a5d)
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/radeon_sync.c b/src/radeon_sync.c
index d9ffbaf..86e0283 100644
--- a/src/radeon_sync.c
+++ b/src/radeon_sync.c
@@ -85,6 +85,13 @@ radeon_sync_init(ScreenPtr screen)
 	RADEONInfoPtr info = RADEONPTR(scrn);
 	SyncScreenFuncsPtr screen_funcs;
 
+	if (!xf86LoaderCheckSymbol("miSyncShmScreenInit")) {
+		xf86DrvMsg(scrn->scrnIndex, X_WARNING,
+			   "SYNC extension fences disabled because "
+			   "miSyncShmScreenInit symbol unresolved\n");
+		return FALSE;
+	}
+
 	if (!miSyncShmScreenInit(screen)) {
 		xf86DrvMsg(scrn->scrnIndex, X_WARNING,
 			   "SYNC extension fences disabled because "
commit cd94248ffa7d8fe0b57476f79e7e860dee66d1b0
Author: Jammy Zhou <Jammy.Zhou at amd.com>
Date:   Tue Feb 16 16:36:33 2016 +0900

    Use render node for DRI3 if available
    
    Signed-off-by: Jammy Zhou <Jammy.Zhou at amd.com>
    (ported from amdgpu commit ea558e645786b08d75307716036045170e97b43e)
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/configure.ac b/configure.ac
index 0a95420..f2bf57c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -71,7 +71,7 @@ XORG_DRIVER_CHECK_EXT(XV, videoproto)
 XORG_DRIVER_CHECK_EXT(DPMSExtension, xextproto)
 
 # Checks for libraries.
-PKG_CHECK_MODULES(LIBDRM, [libdrm >= 2.4.58])
+PKG_CHECK_MODULES(LIBDRM, [libdrm >= 2.4.60])
 PKG_CHECK_MODULES(LIBDRM_RADEON, [libdrm_radeon])
 
 # Obtain compiler/linker options for the driver dependencies
diff --git a/src/radeon_dri3.c b/src/radeon_dri3.c
index 1415a0d..de97f39 100644
--- a/src/radeon_dri3.c
+++ b/src/radeon_dri3.c
@@ -39,9 +39,7 @@
 #include <fcntl.h>
 #include <errno.h>
 
-
-static int
-radeon_dri3_open(ScreenPtr screen, RRProviderPtr provider, int *out)
+static int open_master_node(ScreenPtr screen, int *out)
 {
 	ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
 	RADEONInfoPtr info = RADEONPTR(scrn);
@@ -86,6 +84,36 @@ radeon_dri3_open(ScreenPtr screen, RRProviderPtr provider, int *out)
 	return Success;
 }
 
+static int open_render_node(ScreenPtr screen, int *out)
+{
+	ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
+	RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
+	int fd;
+
+	fd = open(pRADEONEnt->render_node, O_RDWR | O_CLOEXEC);
+	if (fd < 0)
+		return BadAlloc;
+
+	*out = fd;
+	return Success;
+}
+
+static int
+radeon_dri3_open(ScreenPtr screen, RRProviderPtr provider, int *out)
+{
+	ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
+	RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
+	int ret = BadAlloc;
+
+	if (pRADEONEnt->render_node)
+		ret = open_render_node(screen, out);
+
+	if (ret != Success)
+		ret = open_master_node(screen, out);
+
+	return ret;
+}
+
 static PixmapPtr radeon_dri3_pixmap_from_fd(ScreenPtr screen,
 					    int fd,
 					    CARD16 width,
@@ -190,6 +218,9 @@ Bool
 radeon_dri3_screen_init(ScreenPtr screen)
 {
 	ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
+	RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
+
+	pRADEONEnt->render_node = drmGetRenderDeviceNameFromFd(pRADEONEnt->fd);
 
 	if (!dri3_screen_init(screen, &radeon_dri3_screen_info)) {
 		xf86DrvMsg(scrn->scrnIndex, X_WARNING,
diff --git a/src/radeon_probe.h b/src/radeon_probe.h
index 258c7be..36e2ff6 100644
--- a/src/radeon_probe.h
+++ b/src/radeon_probe.h
@@ -142,6 +142,7 @@ typedef struct
 #ifdef XSERVER_PLATFORM_BUS
     struct xf86_platform_device *platform_dev;
 #endif
+    char *render_node;
 } RADEONEntRec, *RADEONEntPtr;
 
 extern const OptionInfoRec *RADEONOptionsWeak(void);


More information about the xorg-commit mailing list