summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDor Askayo <dor.askayo@gmail.com>2021-08-21 19:11:05 +0300
committerDor Askayo <dor.askayo@gmail.com>2021-08-27 14:36:03 +0300
commit69365526d0a477e0d7842571a72266631c77742d (patch)
tree1bb958556d286fdf96c875ceed3896c604776c0b
parent0d68a91dce88eeacd15bf1159ddc6200a01b1f2e (diff)
glamor: Set AMDGPU_CREATE_PIXMAP_SCANOUT on DRI2 and shared pixmaps
The scanout usage flag wasn't applied for DRI2 and shared pixmaps in 0732f81a2c67, resulting in GPU artifacts in some scenarios. Fixes: 0732f81a2c67 ("glamor: Make pixmap scanout compatible if its dimensions are") Closes: https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/-/issues/41 Signed-off-by: Dor Askayo <dor.askayo@gmail.com> Signed-off-by: Michel Dänzer <mdaenzer@redhat.com> Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
-rw-r--r--src/amdgpu_glamor.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/amdgpu_glamor.c b/src/amdgpu_glamor.c
index fb7a46b..31fcfb4 100644
--- a/src/amdgpu_glamor.c
+++ b/src/amdgpu_glamor.c
@@ -209,6 +209,14 @@ amdgpu_glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth,
if (!format)
return NULL;
+ if (usage != CREATE_PIXMAP_USAGE_BACKING_PIXMAP &&
+ !info->shadow_primary &&
+ w >= scrn->virtualX &&
+ w <= scrn->displayWidth &&
+ h == scrn->virtualY &&
+ format->bitsPerPixel == scrn->bitsPerPixel)
+ usage |= AMDGPU_CREATE_PIXMAP_SCANOUT;
+
if (!(usage & AMDGPU_CREATE_PIXMAP_SCANOUT) &&
!AMDGPU_CREATE_PIXMAP_SHARED(usage)) {
if (info->shadow_primary) {
@@ -218,15 +226,9 @@ amdgpu_glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth,
usage |= AMDGPU_CREATE_PIXMAP_LINEAR |
AMDGPU_CREATE_PIXMAP_GTT;
} else if (usage != CREATE_PIXMAP_USAGE_BACKING_PIXMAP) {
- if (w < scrn->virtualX || w > scrn->displayWidth ||
- h != scrn->virtualY ||
- format->bitsPerPixel != scrn->bitsPerPixel) {
- pixmap = glamor_create_pixmap(screen, w, h, depth, usage);
- if (pixmap)
- return pixmap;
- } else {
- usage |= AMDGPU_CREATE_PIXMAP_SCANOUT;
- }
+ pixmap = glamor_create_pixmap(screen, w, h, depth, usage);
+ if (pixmap)
+ return pixmap;
}
}