[PATCH v2 xf86-video-ati] glamor: Use glamor_egl_create_textured_pixmap_from_gbm_bo when possible

Alex Deucher alexdeucher at gmail.com
Fri Jul 27 15:15:06 UTC 2018


On Fri, Jul 27, 2018 at 10:53 AM, Michel Dänzer <michel at daenzer.net> wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> Inspired by the modesetting driver.
>
> Fixes screen pixmap corruption with Xorg < 1.20, and as a bonus,
> simplifies the code slightly.
>
> v2:
> * Now doesn't break with xserver 1.20
>
> Bugzilla: https://bugs.freedesktop.org/107385
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  src/radeon_glamor.c | 34 +++++++++++++++-------------------
>  1 file changed, 15 insertions(+), 19 deletions(-)
>
> diff --git a/src/radeon_glamor.c b/src/radeon_glamor.c
> index b649bd18d..c733d192d 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)
> --
> 2.18.0
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list