diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2018-07-27 11:30:57 +0200 |
---|---|---|
committer | Michel Dänzer <michel@daenzer.net> | 2018-07-27 11:30:57 +0200 |
commit | db28d35ce9fd07a2a4703f3df0633d4c8291ff9b (patch) | |
tree | 554831c86c3b3d42a6cf58f277d4483ff0c8bb2a | |
parent | 7de4ea15880565c6536ed6859fd32ec89ce0b4c0 (diff) |
glamor: Use glamor_egl_create_textured_pixmap_from_gbm_bo when possible
Inspired by the modesetting driver.
Fixes screen pixmap corruption with Xorg < 1.20, and as a bonus,
simplifies the code slightly.
Bugzilla: https://bugs.freedesktop.org/107385
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | src/radeon_glamor.c | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/src/radeon_glamor.c b/src/radeon_glamor.c index b649bd18..c733d192 100644 --- a/src/radeon_glamor.c +++ b/src/radeon_glamor.c @@ -50,9 +50,9 @@ radeon_glamor_exchange_buffers(PixmapPtr src, Bool radeon_glamor_create_screen_resources(ScreenPtr screen) { + PixmapPtr screen_pixmap = screen->GetScreenPixmap(screen); ScrnInfoPtr scrn = xf86ScreenToScrn(screen); RADEONInfoPtr info = RADEONPTR(scrn); - uint32_t handle; if (!info->use_glamor) return TRUE; @@ -62,17 +62,8 @@ radeon_glamor_create_screen_resources(ScreenPtr screen) return FALSE; #endif - if (info->front_buffer->flags & RADEON_BO_FLAGS_GBM) - handle = gbm_bo_get_handle(info->front_buffer->bo.gbm).u32; - else - handle = info->front_buffer->bo.radeon->handle; - - if (!glamor_egl_create_textured_screen(screen, handle, - scrn->displayWidth * - info->pixel_bytes)) - return FALSE; - - return TRUE; + return radeon_glamor_create_textured_pixmap(screen_pixmap, + info->front_buffer); } @@ -180,17 +171,22 @@ radeon_glamor_create_textured_pixmap(PixmapPtr pixmap, struct radeon_buffer *bo) { ScrnInfoPtr scrn = xf86ScreenToScrn(pixmap->drawable.pScreen); RADEONInfoPtr info = RADEONPTR(scrn); - uint32_t handle; if (!info->use_glamor) return TRUE; - if (bo->flags & RADEON_BO_FLAGS_GBM) - handle = gbm_bo_get_handle(bo->bo.gbm).u32; - else - handle = bo->bo.radeon->handle; - - return glamor_egl_create_textured_pixmap(pixmap, handle, pixmap->devKind); + if (bo->flags & RADEON_BO_FLAGS_GBM) { + return glamor_egl_create_textured_pixmap_from_gbm_bo(pixmap, + bo->bo.gbm +#if XORG_VERSION_CURRENT > XORG_VERSION_NUMERIC(1,19,99,903,0) + , FALSE +#endif + ); + } else { + return glamor_egl_create_textured_pixmap(pixmap, + bo->bo.radeon->handle, + pixmap->devKind); + } } static Bool radeon_glamor_destroy_pixmap(PixmapPtr pixmap) |