diff options
author | Dor Askayo <dor.askayo@gmail.com> | 2021-08-21 19:11:05 +0300 |
---|---|---|
committer | Dor Askayo <dor.askayo@gmail.com> | 2021-08-27 14:36:03 +0300 |
commit | 69365526d0a477e0d7842571a72266631c77742d (patch) | |
tree | 1bb958556d286fdf96c875ceed3896c604776c0b /src | |
parent | 0d68a91dce88eeacd15bf1159ddc6200a01b1f2e (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>
Diffstat (limited to 'src')
-rw-r--r-- | src/amdgpu_glamor.c | 20 |
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; } } |