[Mesa-dev] [PATCH v2 9/9] egl/tizen: add support of dri_image_loader

Emil Velikov emil.l.velikov at gmail.com
Thu Sep 28 14:37:47 UTC 2017


On 17 September 2017 at 19:01, Gwan-gyeong Mun <elongbug at gmail.com> wrote:
> It adds support of dri_image_loader to egl dri2 tizen backend.
>    - referenced a basic buffer flow and management  implementation from android's.
>
> It adds dri_image_back/dri_image_back member variables to dri_egl_surface for
> a management of back/front buffers.
>
I fear you've heard this before:

Some of the code is fairly generic and can be moved and shared with others.


> +   if (dri2_surf->dri_image_back) {
> +      _eglLog(_EGL_DEBUG, "%s : %d : destroy dri_image_back", __func__, __LINE__);
> +      dri2_dpy->image->destroyImage(dri2_surf->dri_image_back);
> +      dri2_surf->dri_image_back = NULL;
> +   }
> +
> +   if (dri2_surf->dri_image_front) {
> +      _eglLog(_EGL_DEBUG, "%s : %d : destroy dri_image_front", __func__, __LINE__);
> +      dri2_dpy->image->destroyImage(dri2_surf->dri_image_front);
> +      dri2_surf->dri_image_front = NULL;
> +   }
> +
... this

>     dri2_dpy->core->destroyDrawable(dri2_surf->dri_drawable);
>
>     tpl_object_unreference((tpl_object_t *)dri2_surf->tpl_surface);
> @@ -416,6 +436,157 @@ update_buffers(struct dri2_egl_surface *dri2_surf)
>     return 0;
>  }
>
> +static int
> +get_front_bo(struct dri2_egl_surface *dri2_surf, unsigned int format)
> +{
> +   struct dri2_egl_display *dri2_dpy =
> +      dri2_egl_display(dri2_surf->base.Resource.Display);
> +
> +   if (dri2_surf->dri_image_front)
> +      return 0;
> +
> +   if (dri2_surf->base.Type == EGL_WINDOW_BIT) {
> +      /* According current EGL spec, front buffer rendering
> +       * for window surface is not supported now.
> +       * and mesa doesn't have the implementation of this case.
> +       * Add warning message, but not treat it as error.
> +       */
> +      _eglLog(_EGL_DEBUG, "DRI driver requested unsupported front buffer for window surface");
> +   } else if (dri2_surf->base.Type == EGL_PBUFFER_BIT) {
> +      dri2_surf->dri_image_front =
> +         dri2_dpy->image->createImage(dri2_dpy->dri_screen,
> +                                      dri2_surf->base.Width,
> +                                      dri2_surf->base.Height,
> +                                      format,
> +                                      0,
> +                                      dri2_surf);
> +      if (!dri2_surf->dri_image_front) {
> +         _eglLog(_EGL_WARNING, "dri2_image_front allocation failed");
> +         return -1;
> +      }
> +   }
> +
> +   return 0;
> +}
... this whole function

Thanks
Emil


More information about the mesa-dev mailing list