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

Michel Dänzer daenzer at kemper.freedesktop.org
Thu Mar 24 09:04:31 UTC 2016


 configure.ac          |    2 +-
 src/drmmode_display.c |   45 ++++++++++++++++++++++++++-------------------
 src/radeon.h          |    8 --------
 src/radeon_dri2.c     |   14 --------------
 src/radeon_glamor.c   |    8 --------
 src/radeon_kms.c      |   47 ++++++++++++++++++++++++++++++-----------------
 src/radeon_list.h     |    1 +
 src/radeon_video.c    |    2 --
 8 files changed, 58 insertions(+), 69 deletions(-)

New commits:
commit e592f32f8b5f5873fcc18b10a69dd5e4ccf11073
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Mar 23 18:25:48 2016 +0900

    Require xserver 1.9 or newer
    
    1.9.0 was released in August 2010.
    
    We were already unintentionally relying on things not available in 1.8
    for at least a year, and nobody has complained.
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/configure.ac b/configure.ac
index eb97a6b..a4963c3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -75,7 +75,7 @@ PKG_CHECK_MODULES(LIBDRM, [libdrm >= 2.4.60])
 PKG_CHECK_MODULES(LIBDRM_RADEON, [libdrm_radeon])
 
 # Obtain compiler/linker options for the driver dependencies
-PKG_CHECK_MODULES(XORG, [xorg-server >= 1.8 xproto fontsproto xf86driproto $REQUIRED_MODULES])
+PKG_CHECK_MODULES(XORG, [xorg-server >= 1.9 xproto fontsproto xf86driproto $REQUIRED_MODULES])
 PKG_CHECK_MODULES(XEXT, [xextproto >= 7.0.99.1],
                   HAVE_XEXTPROTO_71="yes"; AC_DEFINE(HAVE_XEXTPROTO_71, 1, [xextproto 7.1 available]),
                   HAVE_XEXTPROTO_71="no")
diff --git a/src/radeon.h b/src/radeon.h
index b9afd8e..37d5fb6 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -272,19 +272,11 @@ struct radeon_pixmap {
 	uint32_t handle;
 };
 
-#if HAS_DEVPRIVATEKEYREC
 extern DevPrivateKeyRec glamor_pixmap_index;
-#else
-extern int glamor_pixmap_index;
-#endif
 
 static inline struct radeon_pixmap *radeon_get_pixmap_private(PixmapPtr pixmap)
 {
-#if HAS_DEVPRIVATEKEYREC
 	return dixGetPrivate(&pixmap->devPrivates, &glamor_pixmap_index);
-#else
-	return dixLookupPrivate(&pixmap->devPrivates, &glamor_pixmap_index);
-#endif
 }
 
 static inline void radeon_set_pixmap_private(PixmapPtr pixmap, struct radeon_pixmap *priv)
diff --git a/src/radeon_dri2.c b/src/radeon_dri2.c
index 474611a..73e09d0 100644
--- a/src/radeon_dri2.c
+++ b/src/radeon_dri2.c
@@ -70,18 +70,9 @@ struct dri2_window_priv {
     int vblank_delta;
 };
 
-#if HAS_DEVPRIVATEKEYREC
-
 static DevPrivateKeyRec dri2_window_private_key_rec;
 #define dri2_window_private_key (&dri2_window_private_key_rec)
 
-#else
-
-static int dri2_window_private_key_index;
-DevPrivateKey dri2_window_private_key = &dri2_window_private_key_index;
-
-#endif /* HAS_DEVPRIVATEKEYREC */
-
 #define get_dri2_window_priv(window) \
     ((struct dri2_window_priv*) \
      dixLookupPrivate(&(window)->devPrivates, dri2_window_private_key))
@@ -1588,14 +1579,9 @@ radeon_dri2_screen_init(ScreenPtr pScreen)
             driverNames[1] = NULL; /* no VDPAU support */
 
 	if (DRI2InfoCnt == 0) {
-#if HAS_DIXREGISTERPRIVATEKEY
 	    if (!dixRegisterPrivateKey(dri2_window_private_key,
 				       PRIVATE_WINDOW,
 				       sizeof(struct dri2_window_priv))) {
-#else
-	    if (!dixRequestPrivate(dri2_window_private_key,
-				   sizeof(struct dri2_window_priv))) {
-#endif
 		xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
 			   "Failed to get DRI2 window private\n");
 		return FALSE;
diff --git a/src/radeon_glamor.c b/src/radeon_glamor.c
index cc2b1f2..f94e0fd 100644
--- a/src/radeon_glamor.c
+++ b/src/radeon_glamor.c
@@ -34,11 +34,7 @@
 #include "radeon_bo_helper.h"
 #include "radeon_glamor.h"
 
-#if HAS_DEVPRIVATEKEYREC
 DevPrivateKeyRec glamor_pixmap_index;
-#else
-int glamor_pixmap_index;
-#endif
 
 void
 radeon_glamor_exchange_buffers(PixmapPtr src,
@@ -370,11 +366,7 @@ radeon_glamor_init(ScreenPtr screen)
 		return FALSE;
 	}
 
-#if HAS_DIXREGISTERPRIVATEKEY
 	if (!dixRegisterPrivateKey(&glamor_pixmap_index, PRIVATE_PIXMAP, 0))
-#else
-	if (!dixRequestPrivate(&glamor_pixmap_index, 0))
-#endif
 		return FALSE;
 
 	if (info->shadow_primary)
diff --git a/src/radeon_video.c b/src/radeon_video.c
index 48b06e2..e08d8e0 100644
--- a/src/radeon_video.c
+++ b/src/radeon_video.c
@@ -94,9 +94,7 @@ radeon_pick_best_crtc(ScrnInfoPtr pScrn, Bool consider_disabled,
     best_coverage = 0;
 
     /* Prefer the CRTC of the primary output */
-#ifdef HAS_DIXREGISTERPRIVATEKEY
     if (dixPrivateKeyRegistered(rrPrivKey))
-#endif
     {
 	primary_output = RRFirstOutput(pScrn->pScreen);
     }
commit bde466e5d44cad64b4e4eceaa5de80fdbf86356e
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Mar 23 18:16:42 2016 +0900

    Fix build against older versions of xserver
    
    Also slightly clean up the error handling in radeon_scanout_do_update.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94614
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index cb0b0a0..7ed8d6c 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -39,6 +39,7 @@
 #include "radeon.h"
 #include "radeon_bo_helper.h"
 #include "radeon_glamor.h"
+#include "radeon_list.h"
 #include "radeon_reg.h"
 
 #ifdef RADEON_PIXMAP_SHARING
@@ -361,6 +362,8 @@ drmmode_crtc_dpms(xf86CrtcPtr crtc, int mode)
 					    crtc->x, crtc->y);
 }
 
+#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 10
+
 static PixmapPtr
 create_pixmap_for_fbcon(drmmode_ptr drmmode,
 			ScrnInfoPtr pScrn, int fbcon_id)
@@ -424,8 +427,6 @@ destroy_pixmap_for_fbcon(ScrnInfoPtr pScrn)
 	info->fbcon_pixmap = NULL;
 }
 
-#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 10
-
 void drmmode_copy_fb(ScrnInfoPtr pScrn, drmmode_ptr drmmode)
 {
 	xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
@@ -627,16 +628,20 @@ drmmode_can_use_hw_cursor(xf86CrtcPtr crtc)
 	if (crtc->transformPresent)
 		return FALSE;
 
+#if XF86_CRTC_VERSION >= 4
 	/* Xorg doesn't correctly handle cursor position transform in the
 	 * rotation case
 	 */
 	if (crtc->driverIsPerformingTransform &&
 	    (crtc->rotation & 0xf) != RR_Rotate_0)
 		return FALSE;
+#endif
 
+#ifdef RADEON_PIXMAP_SHARING
 	/* HW cursor not supported yet with RandR 1.4 multihead */
 	if (!xorg_list_is_empty(&crtc->scrn->pScreen->pixmap_dirty_list))
 		return FALSE;
+#endif
 
 	return TRUE;
 }
@@ -770,8 +775,11 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
 
 			drmmode_crtc_scanout_destroy(drmmode, &drmmode_crtc->scanout[0]);
 			drmmode_crtc_scanout_destroy(drmmode, &drmmode_crtc->scanout[1]);
-		} else if (info->tear_free || info->shadow_primary ||
-			   crtc->driverIsPerformingTransform) {
+		} else if (info->tear_free ||
+#if XF86_CRTC_VERSION >= 4
+			   crtc->driverIsPerformingTransform ||
+#endif
+			   info->shadow_primary) {
 			for (i = 0; i < (info->tear_free ? 2 : 1); i++) {
 				drmmode_crtc_scanout_create(crtc,
 							    &drmmode_crtc->scanout[i],
@@ -2570,7 +2578,12 @@ restart_destroy:
 	}
 
 	if (changed) {
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,14,99,2,0)
 		RRSetChanged(xf86ScrnToScreen(scrn));
+#else
+		rrScrPrivPtr rrScrPriv = rrGetScrPriv(scrn->pScreen);
+		rrScrPriv->changed = TRUE;
+#endif
 		RRTellChanged(xf86ScrnToScreen(scrn));
 	}
 
diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index d6a9aa9..3864281 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -393,6 +393,7 @@ radeon_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id)
     force = info->accel_state->force;
     info->accel_state->force = TRUE;
 
+#if XF86_CRTC_VERSION >= 4
     if (xf86_crtc->driverIsPerformingTransform) {
 	SourceValidateProcPtr SourceValidate = pScreen->SourceValidate;
 	PictFormatPtr format = PictureWindowFormat(pScreen->root);
@@ -415,14 +416,14 @@ radeon_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id)
 	if (!dst) {
 	    ErrorF("Failed to create destination picture for transformed scanout "
 		   "update\n");
-	    goto out;
+	    goto free_src;
 	}
 
 	error = SetPictureTransform(src, &xf86_crtc->crtc_to_framebuffer);
 	if (error) {
 	    ErrorF("SetPictureTransform failed for transformed scanout "
 		   "update\n");
-	    goto out;
+	    goto free_dst;
 	}
 
 	if (xf86_crtc->filter)
@@ -443,9 +444,14 @@ radeon_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id)
 			 extents.y2 - extents.y1);
 	pScreen->SourceValidate = SourceValidate;
 
-	FreePicture(src, None);
+ free_dst:
 	FreePicture(dst, None);
-    } else {
+ free_src:
+	FreePicture(src, None);
+    } else
+ out:
+#endif /* XF86_CRTC_VERSION >= 4 */
+    {
 	GCPtr gc = GetScratchGC(pDraw->depth, pScreen);
 
 	ValidateGC(pDraw, gc);
@@ -459,7 +465,6 @@ radeon_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id)
 
     radeon_cs_flush_indirect(scrn);
 
- out:
     info->accel_state->force = force;
 
     return TRUE;
@@ -607,8 +612,11 @@ static void RADEONBlockHandler_KMS(BLOCKHANDLER_ARGS_DECL)
     for (c = 0; c < xf86_config->num_crtc; c++) {
 	if (info->tear_free)
 	    radeon_scanout_flip(pScreen, info, xf86_config->crtc[c]);
-	else if (info->shadow_primary ||
-		 xf86_config->crtc[c]->driverIsPerformingTransform)
+	else if (info->shadow_primary
+#if XF86_CRTC_VERSION >= 4
+		 || xf86_config->crtc[c]->driverIsPerformingTransform
+#endif
+	    )
 	    radeon_scanout_update(xf86_config->crtc[c]);
     }
 
diff --git a/src/radeon_list.h b/src/radeon_list.h
index 77f74af..a0038c9 100644
--- a/src/radeon_list.h
+++ b/src/radeon_list.h
@@ -30,6 +30,7 @@
 #if !HAVE_XORG_LIST
 #define xorg_list			list
 #define xorg_list_init			list_init
+#define xorg_list_is_empty		list_is_empty
 #define xorg_list_add			list_add
 #define xorg_list_del			list_del
 #define xorg_list_for_each_entry	list_for_each_entry
commit b2b079be0e7ef2704c3df9ee25fe46166e450e83
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Mar 23 17:29:47 2016 +0900

    Use radeon_alloc_pixmap_bo for allocating scanout BOs
    
    This enables tiling for scanout BOs used for TearFree / ShadowPrimary,
    and simplifies the code a little.
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index ad3de7f..cb0b0a0 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -531,11 +531,10 @@ drmmode_crtc_scanout_allocate(xf86CrtcPtr crtc,
 	ScrnInfoPtr pScrn = crtc->scrn;
 	drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
 	drmmode_ptr drmmode = drmmode_crtc->drmmode;
-	int aligned_height;
-	int size;
+	struct radeon_surface surface;
+	uint32_t tiling;
 	int ret;
-	unsigned long rotate_pitch;
-	int base_align;
+	int pitch;
 
 	if (scanout->bo) {
 		if (scanout->width == width && scanout->height == height)
@@ -544,23 +543,18 @@ drmmode_crtc_scanout_allocate(xf86CrtcPtr crtc,
 		drmmode_crtc_scanout_destroy(drmmode, scanout);
 	}
 
-	rotate_pitch =
-		RADEON_ALIGN(width, drmmode_get_pitch_align(pScrn, drmmode->cpp, 0))
-		* drmmode->cpp;
-	aligned_height = RADEON_ALIGN(height, drmmode_get_height_align(pScrn, 0));
-	base_align = drmmode_get_base_align(pScrn, drmmode->cpp, 0);
-	size = RADEON_ALIGN(rotate_pitch * aligned_height, RADEON_GPU_PAGE_SIZE);
-
-	scanout->bo = radeon_bo_open(drmmode->bufmgr, 0, size, base_align,
-				     RADEON_GEM_DOMAIN_VRAM,
-				     RADEON_GEM_NO_CPU_ACCESS);
+	scanout->bo = radeon_alloc_pixmap_bo(pScrn, width, height, pScrn->depth,
+					     RADEON_CREATE_PIXMAP_TILING_MACRO |
+					     RADEON_CREATE_PIXMAP_TILING_MICRO,
+					     pScrn->bitsPerPixel, &pitch,
+					     &surface, &tiling);
 	if (scanout->bo == NULL)
 		return NULL;
 
 	radeon_bo_map(scanout->bo, 1);
 
 	ret = drmModeAddFB(drmmode->fd, width, height, pScrn->depth,
-			   pScrn->bitsPerPixel, rotate_pitch,
+			   pScrn->bitsPerPixel, pitch,
 			   scanout->bo->handle,
 			   &scanout->fb_id);
 	if (ret) {
commit d21ac4669a8b2cdd4eec5e5a94d1950b7423b8b5
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Mar 23 17:27:27 2016 +0900

    DRI3 only works with acceleration
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94214
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index 27d9fed..d6a9aa9 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -1713,13 +1713,16 @@ Bool RADEONScreenInit_KMS(SCREEN_INIT_ARGS_DECL)
 
     value = FALSE;
     from = X_DEFAULT;
-    if (xf86GetOptValBool(info->Options, OPTION_DRI3, &value))
-	from = X_CONFIG;
 
-    if (xf86GetOptValInteger(info->Options, OPTION_DRI, &driLevel) &&
-	(driLevel == 2 || driLevel == 3)) {
-	from = X_CONFIG;
-	value = driLevel == 3;
+    if (!info->r600_shadow_fb) {
+	if (xf86GetOptValBool(info->Options, OPTION_DRI3, &value))
+	    from = X_CONFIG;
+
+	if (xf86GetOptValInteger(info->Options, OPTION_DRI, &driLevel) &&
+	    (driLevel == 2 || driLevel == 3)) {
+	    from = X_CONFIG;
+	    value = driLevel == 3;
+	}
     }
 
     if (value) {
commit eb1a2c57e6c45d7ca57b2e2be643194243b7aae1
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Wed Mar 23 17:23:31 2016 +0900

    TearFree can only work with acceleration
    
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index d89c376..27d9fed 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -1278,11 +1278,13 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags)
     }
 #endif
 
-    info->tear_free = xf86ReturnOptValBool(info->Options, OPTION_TEAR_FREE,
-					   FALSE);
+    if (!info->r600_shadow_fb) {
+	info->tear_free = xf86ReturnOptValBool(info->Options, OPTION_TEAR_FREE,
+					       FALSE);
 
-    if (info->tear_free)
-	xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TearFree enabled\n");
+	if (info->tear_free)
+	    xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TearFree enabled\n");
+    }
 
     if (info->dri2.pKernelDRMVersion->version_minor >= 8) {
 	Bool sw_cursor = xf86ReturnOptValBool(info->Options, OPTION_SW_CURSOR, FALSE);


More information about the xorg-commit mailing list