[Mesa-dev] [PATCH 1/2] egl_dri2: Avoid using createSubImage when not neccassery

Kristian Høgsberg krh at bitplanet.net
Mon Aug 13 09:51:51 PDT 2012


On Mon, Aug 13, 2012 at 10:16 AM, Jakob Bornecrantz <jakob at vmware.com> wrote:
> Makes it possible to run Wayland on Gallium drivers. At least a bit until
> it tries to use gbm cursor bo's.

Reviewed-by: Kristian Høgsberg <krh at bitplanet.net>

> Signed-off-by: Jakob Bornecrantz <jakob at vmware.com>
> ---
>  src/egl/drivers/dri2/egl_dri2.c |   22 ++++++++++++++++------
>  1 file changed, 16 insertions(+), 6 deletions(-)
>
> diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
> index a78ee8b..7648e68 100644
> --- a/src/egl/drivers/dri2/egl_dri2.c
> +++ b/src/egl/drivers/dri2/egl_dri2.c
> @@ -1142,9 +1142,13 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, _EGLContext *ctx,
>     offset = buffer->offset[index];
>     stride = buffer->stride[index];
>
> -   dri_image = dri2_dpy->image->createSubImage(buffer->driver_buffer,
> -                                               width, height, format,
> -                                               offset, stride / cpp, NULL);
> +   if (f->nplanes == 1) {
> +      dri_image = dri2_dpy->image->dupImage(buffer->driver_buffer, NULL);
> +   } else {
> +      dri_image = dri2_dpy->image->createSubImage(buffer->driver_buffer,
> +                                                  width, height, format,
> +                                                  offset, stride / cpp, NULL);
> +   }
>
>     return dri2_create_image(disp, dri_image);
>  }
> @@ -1305,11 +1309,17 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name,
>  {
>     _EGLDisplay *disp = user_data;
>     struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> -   int i;
> +   const struct wl_drm_format_descriptor *f;
> +   int i, format = 0;
>
>     for (i = 0; i < ARRAY_SIZE(wl_drm_formats); i++)
>        if (wl_drm_formats[i].wl_format == buffer->format) {
> -         buffer->driver_format = &wl_drm_formats[i];
> +         f = &wl_drm_formats[i];
> +         buffer->driver_format = f;
> +         if (f->nplanes == 1)
> +            format = f->planes[0].dri_format;
> +         else
> +            format = __DRI_IMAGE_FORMAT_NONE;
>           break;
>        }
>
> @@ -1320,7 +1330,7 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name,
>        dri2_dpy->image->createImageFromName(dri2_dpy->dri_screen,
>                                             buffer->buffer.width,
>                                             buffer->buffer.height,
> -                                           __DRI_IMAGE_FORMAT_NONE, name,
> +                                           format, name,
>                                             buffer->stride[0] / 4,
>                                             NULL);
>  }
> --
> 1.7.9.5
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list