[Mesa-dev] [PATCH] egl: Add swrast support to surfaceless platform

Emil Velikov emil.l.velikov at gmail.com
Wed Aug 2 11:05:18 UTC 2017


[+Chad]

Hi Akihiko Odaki,

Thank you for the patch and welcome to Mesa!

How you tested this patch? Did you run a test suite like piglit, dEQP, etc?
Can you give it a spin with either one of these, comparing HW vs
swrast surfacess and share the results.

On 1 August 2017 at 06:49, Akihiko Odaki <nekomanma at pixiv.co.jp> wrote:
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101397
> ---
>  src/egl/drivers/dri2/platform_surfaceless.c | 114 ++++++++++++++++++++++++++--
>  src/gallium/state_trackers/dri/drisw.c      |  45 ++++++++++-
A general rule of thumb - the difference in paths indicate these two
are distinct components.
As such they ought to be separate patches.

But before that, please look at my other comment below.

>  2 files changed, 148 insertions(+), 11 deletions(-)
>
> diff --git a/src/egl/drivers/dri2/platform_surfaceless.c b/src/egl/drivers/dri2/platform_surfaceless.c
> index 1091b4febd..5487c89816 100644
> --- a/src/egl/drivers/dri2/platform_surfaceless.c
> +++ b/src/egl/drivers/dri2/platform_surfaceless.c
> @@ -133,9 +133,16 @@ dri2_surfaceless_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
>     if (!config)
>        goto cleanup_surface;
>
> -   dri2_surf->dri_drawable =
> -      dri2_dpy->image_driver->createNewDrawable(dri2_dpy->dri_screen, config,
> -                                                dri2_surf);
> +   if (dri2_dpy->image_driver) {
> +      dri2_surf->dri_drawable =
> +         dri2_dpy->image_driver->createNewDrawable(dri2_dpy->dri_screen, config,
> +                                                   dri2_surf);
> +   } else {
> +      assert(dri2_dpy->swrast);
> +      dri2_surf->dri_drawable =
> +         dri2_dpy->swrast->createNewDrawable(dri2_dpy->dri_screen, config,
> +                                             dri2_surf);
> +   }
>     if (dri2_surf->dri_drawable == NULL) {
>        _eglError(EGL_BAD_ALLOC, "image->createNewDrawable");
>        goto cleanup_surface;
> @@ -229,7 +236,24 @@ surfaceless_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *dpy)
>     return (config_count != 0);
>  }
>
> -static const struct dri2_egl_display_vtbl dri2_surfaceless_display_vtbl = {
> +static const struct dri2_egl_display_vtbl dri2_surfaceless_swrast_display_vtbl = {
> +   .create_pixmap_surface = dri2_fallback_create_pixmap_surface,
> +   .create_pbuffer_surface = dri2_surfaceless_create_pbuffer_surface,
> +   .destroy_surface = surfaceless_destroy_surface,
> +   .create_image = dri2_create_image_khr,
> +   .swap_interval = dri2_fallback_swap_interval,
> +   .swap_buffers = surfaceless_swap_buffers,
> +   .swap_buffers_region = dri2_fallback_swap_buffers_region,
> +   .set_damage_region = dri2_fallback_set_damage_region,
> +   .post_sub_buffer = dri2_fallback_post_sub_buffer,
> +   .copy_buffers = dri2_fallback_copy_buffers,
> +   .query_buffer_age = dri2_fallback_query_buffer_age,
> +   .create_wayland_buffer_from_image = dri2_fallback_create_wayland_buffer_from_image,
> +   .get_sync_values = dri2_fallback_get_sync_values,
> +   .get_dri_drawable = dri2_surface_get_dri_drawable,
> +};
> +
> +static const struct dri2_egl_display_vtbl dri2_surfaceless_dri3_display_vtbl = {
>     .create_pixmap_surface = dri2_fallback_create_pixmap_surface,
>     .create_pbuffer_surface = dri2_surfaceless_create_pbuffer_surface,
>     .destroy_surface = surfaceless_destroy_surface,
> @@ -252,6 +276,66 @@ surfaceless_flush_front_buffer(__DRIdrawable *driDrawable, void *loaderPrivate)
>  {
>  }
>
> +static const __DRIextension *swrast_loader_extensions[] = {
> +   NULL,
I'm not 100% sure if it makes sense, for swrast at least, to have no
loader extensions.

Need to think about this a bit more. Although a related series comes
to mind [1].
It adds partial DRI_IMAGE support to state_trackers/dri/drisw.

I'm wondering if we cannot reuse/share some goals across the board.

Thanks
Emil

[1] https://patchwork.freedesktop.org/project/mesa/patches/?submitter=16100&state=&q=&archive=&delegate=


More information about the mesa-dev mailing list