[Mesa-dev] [PATCH v13 07/36] egl: implement eglQueryDmaBufModifiersEXT
Jason Ekstrand
jason at jlekstrand.net
Fri May 19 18:19:16 UTC 2017
Just FYI: I'm not checking that you implement the EGL API correctly. I'm
mostly checking for whether or not it's using DRI correctly.
On Fri, May 19, 2017 at 2:37 AM, Daniel Stone <daniels at collabora.com> wrote:
> From: Varad Gautam <varadgautam at gmail.com>
>
> query and return supported dmabuf format modifiers for
> EGL_EXT_image_dma_buf_import_modifiers.
>
> v2: move format check to the driver instead of making format queries
> here and then checking.
> v3: Check DRIimageExtension version before query (Daniel Stone)
>
> Signed-off-by: Varad Gautam <varad.gautam at collabora.com>
> Reviewed-by: Daniel Stone <daniels at collabora.com>
> Signed-off-by: Daniel Stone <daniels at collabora.com>
> ---
> src/egl/drivers/dri2/egl_dri2.c | 36 ++++++++++++++++++++++++++++++++++++
> src/egl/main/eglapi.c | 20 ++++++++++++++++++++
> src/egl/main/eglapi.h | 5 +++++
> src/egl/main/eglentrypoint.h | 1 +
> 4 files changed, 62 insertions(+)
>
> diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_
> dri2.c
> index 55b6fcf1fc..1e0302359f 100644
> --- a/src/egl/drivers/dri2/egl_dri2.c
> +++ b/src/egl/drivers/dri2/egl_dri2.c
> @@ -2131,6 +2131,41 @@ dri2_query_dma_buf_formats(_EGLDriver *drv,
> _EGLDisplay *disp,
> return EGL_TRUE;
> }
>
> +static EGLBoolean
> +dri2_query_dma_buf_modifiers(_EGLDriver *drv, _EGLDisplay *disp, EGLint
> format,
> + EGLint max, EGLuint64KHR *modifiers,
> + EGLBoolean *external_only, EGLint *count)
> +{
> + struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> + EGLint i;
> +
> + if (max < 0) {
> + _eglError(EGL_BAD_PARAMETER, "invalid value for max count of
> formats");
> + return EGL_FALSE;
> + }
> +
> + if (max > 0 && modifiers == NULL) {
> + _eglError(EGL_BAD_PARAMETER, "invalid modifiers array");
> + return EGL_FALSE;
> + }
> +
> + if (dri2_dpy->image->base.version < 16)
>
Check for the function pointer...
> + return EGL_FALSE;
> +
> + if (dri2_dpy->image->queryDmaBufModifiers(dri2_dpy->dri_screen,
> format,
> + max, modifiers,
> + count) == false) {
> + _eglError(EGL_BAD_PARAMETER, "invalid format");
> + return EGL_FALSE;
> + }
> + if (external_only != NULL) {
> + for (i = 0; i < *count && i < max; i++)
> + external_only[i] = EGL_TRUE;
> + }
> +
> + return EGL_TRUE;
> +}
> +
> /**
> * The spec says:
> *
> @@ -3064,6 +3099,7 @@ _eglBuiltInDriverDRI2(const char *args)
> dri2_drv->base.API.ExportDMABUFImageQueryMESA =
> dri2_export_dma_buf_image_query_mesa;
> dri2_drv->base.API.ExportDMABUFImageMESA = dri2_export_dma_buf_image_
> mesa;
> dri2_drv->base.API.QueryDmaBufFormatsEXT = dri2_query_dma_buf_formats;
> + dri2_drv->base.API.QueryDmaBufModifiersEXT =
> dri2_query_dma_buf_modifiers;
> #endif
> #ifdef HAVE_WAYLAND_PLATFORM
> dri2_drv->base.API.BindWaylandDisplayWL =
> dri2_bind_wayland_display_wl;
> diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
> index e83e3a414e..d0755ec652 100644
> --- a/src/egl/main/eglapi.c
> +++ b/src/egl/main/eglapi.c
> @@ -2403,6 +2403,26 @@ eglQueryDmaBufFormatsEXT(EGLDisplay dpy, EGLint
> max_formats,
> RETURN_EGL_EVAL(disp, ret);
> }
>
> +static EGLBoolean EGLAPIENTRY
> +eglQueryDmaBufModifiersEXT(EGLDisplay dpy, EGLint format, EGLint
> max_modifiers,
> + EGLuint64KHR *modifiers, EGLBoolean
> *external_only,
> + EGLint *num_modifiers)
> +{
> + _EGLDisplay *disp = _eglLockDisplay(dpy);
> + _EGLDriver *drv;
> + EGLBoolean ret;
> +
> + _EGL_FUNC_START(NULL, EGL_NONE, NULL, EGL_FALSE);
> +
> + _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv);
> +
> + ret = drv->API.QueryDmaBufModifiersEXT(drv, disp, format,
> max_modifiers,
> + modifiers, external_only,
> + num_modifiers);
> +
> + RETURN_EGL_EVAL(disp, ret);
> +}
> +
> __eglMustCastToProperFunctionPointerType EGLAPIENTRY
> eglGetProcAddress(const char *procname)
> {
> diff --git a/src/egl/main/eglapi.h b/src/egl/main/eglapi.h
> index c9f98963db..cab3e9605a 100644
> --- a/src/egl/main/eglapi.h
> +++ b/src/egl/main/eglapi.h
> @@ -202,6 +202,11 @@ struct _egl_api
> EGLBoolean (*QueryDmaBufFormatsEXT)(_EGLDriver *drv, _EGLDisplay *dpy,
> EGLint max_formats, EGLint
> *formats,
> EGLint *num_formats);
> + EGLBoolean (*QueryDmaBufModifiersEXT) (_EGLDriver *drv, _EGLDisplay
> *dpy,
> + EGLint format, EGLint
> max_modifiers,
> + EGLuint64KHR *modifiers,
> + EGLBoolean *external_only,
> + EGLint *num_modifiers);
> };
>
> #ifdef __cplusplus
> diff --git a/src/egl/main/eglentrypoint.h b/src/egl/main/eglentrypoint.h
> index 91536239e9..b9dca7ceda 100644
> --- a/src/egl/main/eglentrypoint.h
> +++ b/src/egl/main/eglentrypoint.h
> @@ -57,6 +57,7 @@ EGL_ENTRYPOINT(eglQueryAPI)
> EGL_ENTRYPOINT(eglQueryContext)
> EGL_ENTRYPOINT(eglQueryDebugKHR)
> EGL_ENTRYPOINT(eglQueryDmaBufFormatsEXT)
> +EGL_ENTRYPOINT(eglQueryDmaBufModifiersEXT)
> EGL_ENTRYPOINT(eglQueryString)
> EGL_ENTRYPOINT(eglQuerySurface)
> EGL_ENTRYPOINT(eglQueryWaylandBufferWL)
> --
> 2.13.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170519/05b26d83/attachment.html>
More information about the mesa-dev
mailing list