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

Inspired by the modesetting driver.

(Ported from radeon commit db28d35ce9fd07a2a4703f3df0633d4c8291ff9b)

Signed-off-by: Michel Dänzer <[email protected]>
---
 src/amdgpu_glamor.c | 32 ++++++++++++++++++--------------
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/src/amdgpu_glamor.c b/src/amdgpu_glamor.c
index 8b839105e..ea49f822f 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)
-- 
2.18.0

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to