Hi Michel,

I've tested your patches. There's one problem:

1. sudo service lightdm start

2. DRI_PRIME=1 glxgears

The glxgears window is shown black. But after resize or tap a 'Alt' key to

show the command bar, the gears come out. My platform is a A+A (two Tonga Pro)

with Ubuntu 16.04.


It seems not the DDX problem but the mesa client not handling 
DRI2InvalidateBuffers

event in the Compiz side for the glxgears window pixmap after the 
PixmapShareToSlave()

call.


Regards,

Qiang

________________________________
From: Michel Dänzer <[email protected]>
Sent: Wednesday, June 8, 2016 4:45:19 PM
To: [email protected]
Cc: Yu, Qiang
Subject: [PATCH xf86-video-amdgpu 6/6] glamor: Reallocate linear pixmap BO if 
necessary for DRI2 PRIME

From: Michel Dänzer <[email protected]>

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

Reported-by: Qiang Yu <[email protected]>
Signed-off-by: Michel Dänzer <[email protected]>
---
 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

_______________________________________________
xorg-driver-ati mailing list
[email protected]
https://lists.x.org/mailman/listinfo/xorg-driver-ati

Reply via email to