From 08c4d42f43f80baa4bbc2ff9d0a422202cdc3538 Mon Sep 17 00:00:00 2001 From: Michel Dänzer Date: Thu, 2 Aug 2018 18:41:04 +0200 Subject: glamor: Use glamor_egl_create_textured_pixmap_from_gbm_bo when possible Inspired by the modesetting driver. (Ported from radeon commit db28d35ce9fd07a2a4703f3df0633d4c8291ff9b) Reviewed-by: Alex Deucher --- src/amdgpu_glamor.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/amdgpu_glamor.c b/src/amdgpu_glamor.c index 8b83910..ea49f82 100644 --- a/src/amdgpu_glamor.c +++ b/src/amdgpu_glamor.c @@ -53,9 +53,9 @@ void amdgpu_glamor_exchange_buffers(PixmapPtr src, PixmapPtr dst) Bool amdgpu_glamor_create_screen_resources(ScreenPtr screen) { + PixmapPtr screen_pixmap = screen->GetScreenPixmap(screen); ScrnInfoPtr scrn = xf86ScreenToScrn(screen); AMDGPUInfoPtr info = AMDGPUPTR(scrn); - uint32_t bo_handle; if (!info->use_glamor) return TRUE; @@ -65,14 +65,8 @@ Bool amdgpu_glamor_create_screen_resources(ScreenPtr screen) return FALSE; #endif - if (!amdgpu_bo_get_handle(info->front_buffer, &bo_handle) || - !glamor_egl_create_textured_screen(screen, bo_handle, - scrn->displayWidth * - info->pixel_bytes)) { - return FALSE; - } - - return TRUE; + return amdgpu_glamor_create_textured_pixmap(screen_pixmap, + info->front_buffer); } Bool amdgpu_glamor_pre_init(ScrnInfoPtr scrn) @@ -129,16 +123,26 @@ amdgpu_glamor_create_textured_pixmap(PixmapPtr pixmap, struct amdgpu_buffer *bo) { ScrnInfoPtr scrn = xf86ScreenToScrn(pixmap->drawable.pScreen); AMDGPUInfoPtr info = AMDGPUPTR(scrn); - uint32_t bo_handle; if ((info->use_glamor) == 0) return TRUE; - if (!amdgpu_bo_get_handle(bo, &bo_handle)) - return FALSE; + if (bo->flags & AMDGPU_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 { + uint32_t bo_handle; - return glamor_egl_create_textured_pixmap(pixmap, bo_handle, - pixmap->devKind); + if (!amdgpu_bo_get_handle(bo, &bo_handle)) + return FALSE; + + return glamor_egl_create_textured_pixmap(pixmap, bo_handle, + pixmap->devKind); + } } static Bool amdgpu_glamor_destroy_pixmap(PixmapPtr pixmap) -- cgit v1.2.3