[PATCH xf86-video-ati] Don't enable micro-tiling for scanout buffers on pre-R600

Michel Dänzer michel at daenzer.net
Tue Jul 12 06:58:13 UTC 2016


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

The display engine didn't support it.

Fixes display corruption with options "TearFree" and "ShadowPrimary"
(and rotation or transforms with current xserver) on pre-R600.

Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
---
 src/drmmode_display.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 2555465..b4f4f1a 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -539,10 +539,11 @@ drmmode_crtc_scanout_allocate(xf86CrtcPtr crtc,
 			      int width, int height)
 {
 	ScrnInfoPtr pScrn = crtc->scrn;
+	RADEONInfoPtr info = RADEONPTR(pScrn);
 	drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
 	drmmode_ptr drmmode = drmmode_crtc->drmmode;
 	struct radeon_surface surface;
-	uint32_t tiling;
+	uint32_t tiling = RADEON_CREATE_PIXMAP_TILING_MACRO;
 	int ret;
 	int pitch;
 
@@ -553,11 +554,11 @@ drmmode_crtc_scanout_allocate(xf86CrtcPtr crtc,
 		drmmode_crtc_scanout_destroy(drmmode, scanout);
 	}
 
+	if (info->ChipFamily >= CHIP_FAMILY_R600)
+		tiling |= RADEON_CREATE_PIXMAP_TILING_MICRO;
 	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);
+					     tiling, pScrn->bitsPerPixel,
+					     &pitch, &surface, &tiling);
 	if (scanout->bo == NULL)
 		return NULL;
 
-- 
2.8.1



More information about the amd-gfx mailing list