[PATCH xf86-video-amdgpu 6/6] glamor: Reallocate linear pixmap BO if necessary for DRI2 PRIME

Michel Dänzer michel at daenzer.net
Wed Jun 8 08:45:19 UTC 2016


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

Fixes corruption when using DRI2 PRIME render offloading with the master
screen using this driver.

Reported-by: Qiang Yu <qiang.yu at amd.com>
Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
---
 src/amdgpu_glamor.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/amdgpu_glamor.c b/src/amdgpu_glamor.c
index 1159e29..53ba277 100644
--- a/src/amdgpu_glamor.c
+++ b/src/amdgpu_glamor.c
@@ -328,10 +328,28 @@ amdgpu_glamor_share_pixmap_backing(PixmapPtr pixmap, ScreenPtr slave,
 				   void **handle_p)
 {
 	ScreenPtr screen = pixmap->drawable.pScreen;
+	uint64_t tiling_info;
 	CARD16 stride;
 	CARD32 size;
 	int fd;
 
+	tiling_info = amdgpu_pixmap_get_tiling_info(pixmap);
+	if (AMDGPU_TILING_GET(tiling_info, ARRAY_MODE) != 0) {
+		PixmapPtr linear;
+
+		/* We don't want to re-allocate the screen pixmap as
+		 * linear, to avoid trouble with page flipping
+		 */
+		if (screen->GetScreenPixmap(screen) == pixmap)
+			return FALSE;
+
+		linear = screen->CreatePixmap(screen, pixmap->drawable.width,
+					      pixmap->drawable.height,
+					      pixmap->drawable.depth,
+					      CREATE_PIXMAP_USAGE_SHARED);
+		amdgpu_glamor_set_pixmap_bo(&pixmap->drawable, linear);
+	}
+
 	fd = glamor_fd_from_pixmap(screen, pixmap, &stride, &size);
 	if (fd < 0)
 		return FALSE;
-- 
2.8.1



More information about the xorg-driver-ati mailing list