[Mesa-dev] [PATCH] [RFC] egl: propose simple EGL_MESA_image_dma_buf_export v2.4

Marc-André Lureau marcandre.lureau at gmail.com
Wed Apr 1 06:56:23 PDT 2015


Hi

On Mon, Mar 30, 2015 at 8:12 AM, Dave Airlie <airlied at gmail.com> wrote:

> From: Dave Airlie <airlied at redhat.com>
>
> At the moment to get an EGL image to a dma-buf file descriptor,
> you have to use EGL_MESA_drm_image, and then use libdrm to
> convert this to a file descriptor.
>
> This extension just provides an API modelled on EGL_MESA_drm_image,
> to return a dma-buf file descriptor.
>
> v2: update spec for new API proposal
> add internal queries to get the fourcc back from intel driver.
>
> v2.1: add gallium pieces.
>
> v2.2: add offsets to spec and API, rename fd->fds, stride->strides
> in API. rewrite spec a bit more, add some q/a
>
> v2.3:
> add modifiers to query interface and 64-bit type for that (Daniel Stone)
> specifiy what happens to num fds vs num planes differences. (Chad Versace)
>
> v2.4:
> fix grammar (Daniel Stone)
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  docs/specs/MESA_image_dma_buf_export.txt | 142
> +++++++++++++++++++++++++++++++
>  include/EGL/eglmesaext.h                 |   8 ++
>  include/GL/internal/dri_interface.h      |   4 +-
>  src/egl/drivers/dri2/egl_dri2.c          |  59 ++++++++++++-
>  src/egl/main/eglapi.c                    |  48 +++++++++++
>  src/egl/main/eglapi.h                    |  10 +++
>  src/egl/main/egldisplay.h                |   2 +
>  src/egl/main/eglfallbacks.c              |   5 ++
>  src/egl/main/eglmisc.c                   |   2 +
>  src/gallium/state_trackers/dri/dri2.c    |  32 ++++++-
>  src/mesa/drivers/dri/i965/intel_screen.c |  25 +++++-
>  11 files changed, 332 insertions(+), 5 deletions(-)
>  create mode 100644 docs/specs/MESA_image_dma_buf_export.txt
>
> diff --git a/docs/specs/MESA_image_dma_buf_export.txt
> b/docs/specs/MESA_image_dma_buf_export.txt
> new file mode 100644
> index 0000000..3bc5890
> --- /dev/null
> +++ b/docs/specs/MESA_image_dma_buf_export.txt
> @@ -0,0 +1,142 @@
> +Name
> +
> +    MESA_image_dma_buf_export
> +
> +Name Strings
> +
> +    EGL_MESA_image_dma_buf_export
> +
> +Contributors
> +
> +    Dave Airlie
> +
> +Contact
> +
> +    Dave Airlie (airlied 'at' redhat 'dot' com)
> +
> +Status
> +
> +    Proposal
> +
> +Version
> +
> +    Version 2
> +
> +Number
> +
> + <unnumbered>
> +
> +Dependencies
> +
> +    Reguires EGL 1.4 or later.  This extension is written against the
> +    wording of the EGL 1.4 specification.
> +
> +    EGL_KHR_base_image is required.
> +
> +    The EGL implementation must be running on a Linux kernel supporting
> the
> +    dma_buf buffer sharing mechanism.
> +
> +Overview
> +
> +    This extension provides entry points for integrating EGLImage with the
> +    dma-buf infrastructure.  The extension allows creating a Linux dma_buf
> +    file descriptor or multiple file descriptors, in the case of
> multi-plane
> +    YUV image, from an EGLImage.
> +
> +    It is designed to provide the complementary functionality to
> EGL_EXT_image_dma_buf_import.
> +
> +IP Status
> +
> +    Open-source; freely implementable.
> +
> +New Types
> +
> +    This is a 64 bit unsigned integer.
> +
> +    typedef khronos_uint64_t EGLuint64MESA;
> +
> +
> +New Procedures and Functions
> +
> +    EGLBoolean eglExportDMABUFImageQueryMESA(EGLDisplay dpy,
> +                                  EGLImageKHR image,
> +                                 int *fourcc,
> +                                 int *num_planes,
> +                                 EGLuint64MESA *modifiers);
> +
> +    EGLBoolean eglExportDMABUFImageMESA(EGLDisplay dpy,
> +                                        EGLImageKHR image,
> +                                        int *fds,
> +                                       EGLint *strides,
> +                                       EGLint *offsets);
> +
> +New Tokens
> +
> +    None
> +
> +
> +Additions to the EGL 1.4 Specification:
> +
> +    To mirror the import extension, this extension attempts to return
> +    enough information to enable an exported dma-buf to be imported
> +    via eglCreateImageKHR and EGL_LINUX_DMA_BUF_EXT token.
> +
> +    Retrieving the information is a two step process, so two APIs
> +    are required.
> +
> +    The first entrypoint
> +       EGLBoolean eglExportDMABUFImageQueryMESA(EGLDisplay dpy,
> +                                  EGLImageKHR image,
> +                                 int *fourcc,
> +                                 int *num_planes,
> +                                 EGLuint64MESA *modifiers);
> +
> +    is used to retrieve the pixel format of the buffer, as specified by
> +    drm_fourcc.h, the number of planes in the image and the Linux
> +    drm modifiers. <fourcc>, <num_planes> and <modifiers> may be NULL,
> +    in which case no value is retrieved.
> +
> +    The second entrypoint retrieves the dma_buf file descriptors,
> +    strides and offsets for the image. The caller should pass
> +    arrays sized according to the num_planes values retrieved previously.
> +    Passing arrays of the wrong size will have undefined results.
> +    If the number of fds is less than the number of planes, then
> +    subsequent fd slots should contain -1.
> +
> +        EGLBoolean eglExportDMABUFImageMESA(EGLDisplay dpy,
> +                                         EGLImageKHR image,
> +                                        int *fds,
> +                                         EGLint *strides,
> +                                         EGLint *offsets);
> +
> +    <fds>, <strides>, <offsets> can be NULL if the infomatation isn't
> +    required by the caller.
> +
> +Issues
> +
> +1. Should the API look more like an attribute getting API?
> +
> +ANSWER: No, from a user interface pov, having to iterate across calling
> +the API up to 12 times using attribs seems like the wrong solution.
> +
> +2. Should the API take a plane and just get the fd/stride/offset for that
> +   plane?
> +
> +ANSWER: UNKNOWN,this might be just as valid an API.
> +
> +3. Does ownership of the file descriptor remain with the app?
> +
> +ANSWER: Yes, the app is responsible for closing any fds retrieved.
> +
> +4. If number of planes and number of fds differ what should we do?
> +
> +ANSWER: Return -1 for the secondary slots, as this avoids having
> +to dup the fd extra times to make the interface sane.
> +
> +Revision History
> +
> +    Version 2, March, 2015
> +        Add a query interface (Dave Airlie)
> +    Version 1, June 3, 2014
> +        Initial draft (Dave Airlie)
> +
> diff --git a/include/EGL/eglmesaext.h b/include/EGL/eglmesaext.h
> index 5fcc527..595babd 100644
> --- a/include/EGL/eglmesaext.h
> +++ b/include/EGL/eglmesaext.h
> @@ -170,6 +170,14 @@ typedef EGLBoolean (EGLAPIENTRYP
> PFNEGLSWAPBUFFERSREGIONNOK) (EGLDisplay dpy, EG
>  #define EGL_NO_CONFIG_MESA                     ((EGLConfig)0)
>  #endif
>
> +#if KHRONOS_SUPPORT_INT64
> +#ifndef EGL_MESA_image_dma_buf_export
> +#define EGL_MESA_image_dma_buf_export 1
> +typedef khronos_uint64_t EGLuint64MESA;
> +EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageQueryMESA (EGLDisplay
> dpy, EGLImageKHR image, EGLint *fourcc, EGLint *nplanes, EGLuint64MESA
> *modifiers);
> +EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageMESA (EGLDisplay dpy,
> EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets);
> +#endif
> +#endif
>  #ifdef __cplusplus
>  }
>  #endif
> diff --git a/include/GL/internal/dri_interface.h
> b/include/GL/internal/dri_interface.h
> index 1d670b1..eb7da23 100644
> --- a/include/GL/internal/dri_interface.h
> +++ b/include/GL/internal/dri_interface.h
> @@ -1006,7 +1006,7 @@ struct __DRIdri2ExtensionRec {
>   * extensions.
>   */
>  #define __DRI_IMAGE "DRI_IMAGE"
> -#define __DRI_IMAGE_VERSION 10
> +#define __DRI_IMAGE_VERSION 11
>
>  /**
>   * These formats correspond to the similarly named MESA_FORMAT_*
> @@ -1097,6 +1097,8 @@ struct __DRIdri2ExtensionRec {
>  #define __DRI_IMAGE_ATTRIB_FD           0x2007 /* available in versions
>                                                  * 7+. Each query will
> return a
>                                                  * new fd. */
> +#define __DRI_IMAGE_ATTRIB_FOURCC       0x2008 /* available in versions
> 11 */
> +#define __DRI_IMAGE_ATTRIB_NUM_PLANES   0x2009 /* available in versions
> 11 */
>
>  enum __DRIYUVColorSpace {
>     __DRI_YUV_COLOR_SPACE_UNDEFINED = 0,
> diff --git a/src/egl/drivers/dri2/egl_dri2.c
> b/src/egl/drivers/dri2/egl_dri2.c
> index 6306483..3d0a8fe 100644
> --- a/src/egl/drivers/dri2/egl_dri2.c
> +++ b/src/egl/drivers/dri2/egl_dri2.c
> @@ -524,8 +524,14 @@ dri2_setup_screen(_EGLDisplay *disp)
>
>           capabilities =
> dri2_dpy->image->getCapabilities(dri2_dpy->dri_screen);
>           disp->Extensions.MESA_drm_image = (capabilities &
> __DRI_IMAGE_CAP_GLOBAL_NAMES) != 0;
> -      } else
> +
> +         if (dri2_dpy->image->base.version >= 11)
> +            disp->Extensions.MESA_image_dma_buf_export = EGL_TRUE;
> +      } else {
>           disp->Extensions.MESA_drm_image = EGL_TRUE;
> +         if (dri2_dpy->image->base.version >= 11)
> +            disp->Extensions.MESA_image_dma_buf_export = EGL_TRUE;
> +      }
>
>        disp->Extensions.KHR_image_base = EGL_TRUE;
>        disp->Extensions.KHR_gl_renderbuffer_image = EGL_TRUE;
> @@ -1964,6 +1970,55 @@ dri2_export_drm_image_mesa(_EGLDriver *drv,
> _EGLDisplay *disp, _EGLImage *img,
>
>     return EGL_TRUE;
>  }
> +
> +static EGLBoolean
> +dri2_export_dma_buf_image_query_mesa(_EGLDriver *drv, _EGLDisplay *disp,
> +                                     _EGLImage *img,
> +                                     EGLint *fourcc, EGLint *nplanes,
> +                                     EGLuint64MESA *modifiers)
> +{
> +   struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> +   struct dri2_egl_image *dri2_img = dri2_egl_image(img);
> +
> +   (void) drv;
> +
> +
> +   if (nplanes)
> +      dri2_dpy->image->queryImage(dri2_img->dri_image,
> +                                 __DRI_IMAGE_ATTRIB_NUM_PLANES, nplanes);
> +   if (fourcc)
> +      dri2_dpy->image->queryImage(dri2_img->dri_image,
> +                                 __DRI_IMAGE_ATTRIB_FOURCC, fourcc);
> +
> +   if (modifiers)
> +      *modifiers = 0;
> +
> +   return EGL_TRUE;
> +}
> +
> +static EGLBoolean
> +dri2_export_dma_buf_image_mesa(_EGLDriver *drv, _EGLDisplay *disp,
> _EGLImage *img,
> +                               int *fds, EGLint *strides, EGLint *offsets)
> +{
> +   struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> +   struct dri2_egl_image *dri2_img = dri2_egl_image(img);
> +
> +   (void) drv;
> +
> +   /* rework later to provide multiple fds/strides/offsets */
> +   if (fds)
> +      dri2_dpy->image->queryImage(dri2_img->dri_image,
> +                                 __DRI_IMAGE_ATTRIB_FD, fds);
> +
> +   if (strides)
> +      dri2_dpy->image->queryImage(dri2_img->dri_image,
> +                                 __DRI_IMAGE_ATTRIB_STRIDE, strides);
> +
> +   if (offsets)
> +      offsets[0] = 0;
> +
> +   return EGL_TRUE;
> +}
>  #endif
>
>  #ifdef HAVE_WAYLAND_PLATFORM
> @@ -2218,6 +2273,8 @@ _eglBuiltInDriverDRI2(const char *args)
>  #ifdef HAVE_LIBDRM
>     dri2_drv->base.API.CreateDRMImageMESA = dri2_create_drm_image_mesa;
>     dri2_drv->base.API.ExportDRMImageMESA = dri2_export_drm_image_mesa;
> +   dri2_drv->base.API.ExportDMABUFImageQueryMESA =
> dri2_export_dma_buf_image_query_mesa;
> +   dri2_drv->base.API.ExportDMABUFImageMESA =
> dri2_export_dma_buf_image_mesa;
>  #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 db44a26..2d2ed39 100644
> --- a/src/egl/main/eglapi.c
> +++ b/src/egl/main/eglapi.c
> @@ -1114,6 +1114,10 @@ eglGetProcAddress(const char *procname)
>        { "eglCreatePlatformWindowSurfaceEXT", (_EGLProc)
> eglCreatePlatformWindowSurfaceEXT },
>        { "eglCreatePlatformPixmapSurfaceEXT", (_EGLProc)
> eglCreatePlatformPixmapSurfaceEXT },
>        { "eglGetSyncValuesCHROMIUM", (_EGLProc) eglGetSyncValuesCHROMIUM },
> +#ifdef EGL_MESA_drm_buf_image_export
>

EGL_MESA_image_dma_buf_export instead?


> +      { "eglExportDMABUFImageQueryMESA", (_EGLProc)
> eglExportDMABUFImageQueryMESA },
> +      { "eglExportDMABUFImageMESA", (_EGLProc) eglExportDMABUFImageMESA },
> +#endif
>        { NULL, NULL }
>     };
>     EGLint i;
> @@ -1801,3 +1805,47 @@ eglGetSyncValuesCHROMIUM(EGLDisplay display,
> EGLSurface surface,
>
>     RETURN_EGL_EVAL(disp, ret);
>  }
> +
> +#ifdef EGL_MESA_image_dma_buf_export
> +EGLBoolean EGLAPIENTRY
> +eglExportDMABUFImageQueryMESA(EGLDisplay dpy, EGLImageKHR image,
> +                              EGLint *fourcc, EGLint *nplanes,
> +                              EGLuint64MESA *modifiers)
> +{
> +   _EGLDisplay *disp = _eglLockDisplay(dpy);
> +   _EGLImage *img = _eglLookupImage(image, disp);
> +   _EGLDriver *drv;
> +   EGLBoolean ret;
> +
> +   _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv);
> +   assert(disp->Extensions.MESA_image_dma_buf_export);
> +
> +   if (!img)
> +      RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE);
> +
> +   ret = drv->API.ExportDMABUFImageQueryMESA(drv, disp, img, fourcc,
> nplanes,
> +                                             modifiers);
> +
> +   RETURN_EGL_EVAL(disp, ret);
> +}
> +
> +EGLBoolean EGLAPIENTRY
> +eglExportDMABUFImageMESA(EGLDisplay dpy, EGLImageKHR image,
> +                         int *fds, EGLint *strides, EGLint *offsets)
> +{
> +   _EGLDisplay *disp = _eglLockDisplay(dpy);
> +   _EGLImage *img = _eglLookupImage(image, disp);
> +   _EGLDriver *drv;
> +   EGLBoolean ret;
> +
> +   _EGL_CHECK_DISPLAY(disp, EGL_FALSE, drv);
> +   assert(disp->Extensions.MESA_image_dma_buf_export);
> +
> +   if (!img)
> +      RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE);
> +
> +   ret = drv->API.ExportDMABUFImageMESA(drv, disp, img, fds, strides,
> offsets);
> +
> +   RETURN_EGL_EVAL(disp, ret);
> +}
> +#endif
> diff --git a/src/egl/main/eglapi.h b/src/egl/main/eglapi.h
> index cb01cab..092abb9 100644
> --- a/src/egl/main/eglapi.h
> +++ b/src/egl/main/eglapi.h
> @@ -141,6 +141,11 @@ typedef EGLBoolean (*SwapBuffersWithDamageEXT_t)
> (_EGLDriver *drv, _EGLDisplay *
>
>  typedef EGLBoolean (*GetSyncValuesCHROMIUM_t) (_EGLDisplay *dpy,
> _EGLSurface *surface, EGLuint64KHR *ust, EGLuint64KHR *msc, EGLuint64KHR
> *sbc);
>
> +#ifdef EGL_MESA_image_dma_buf_export
> +typedef EGLBoolean (*ExportDMABUFImageQueryMESA_t)(_EGLDriver *drv,
> _EGLDisplay *disp, _EGLImage *img, EGLint *fourcc, EGLint *stride,
> EGLuint64MESA *modifiers);
> +typedef EGLBoolean (*ExportDMABUFImageMESA_t)(_EGLDriver *drv,
> _EGLDisplay *disp, _EGLImage *img, EGLint *fds, EGLint *strides, EGLint
> *offsets);
> +#endif
> +
>  /**
>   * The API dispatcher jumps through these functions
>   */
> @@ -228,6 +233,11 @@ struct _egl_api
>
>     QueryBufferAge_t QueryBufferAge;
>     GetSyncValuesCHROMIUM_t GetSyncValuesCHROMIUM;
> +
> +#ifdef EGL_MESA_image_dma_buf_export
> +   ExportDMABUFImageQueryMESA_t ExportDMABUFImageQueryMESA;
> +   ExportDMABUFImageMESA_t ExportDMABUFImageMESA;
> +#endif
>  };
>
>  #endif /* EGLAPI_INCLUDED */
> diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h
> index bcdc2b2..8581cb2 100644
> --- a/src/egl/main/egldisplay.h
> +++ b/src/egl/main/egldisplay.h
> @@ -123,6 +123,8 @@ struct _egl_extensions
>     EGLBoolean EXT_buffer_age;
>     EGLBoolean EXT_swap_buffers_with_damage;
>     EGLBoolean EXT_image_dma_buf_import;
> +
> +   EGLBoolean MESA_image_dma_buf_export;
>  };
>
>
> diff --git a/src/egl/main/eglfallbacks.c b/src/egl/main/eglfallbacks.c
> index 0b70e92..6127426 100644
> --- a/src/egl/main/eglfallbacks.c
> +++ b/src/egl/main/eglfallbacks.c
> @@ -120,4 +120,9 @@ _eglInitDriverFallbacks(_EGLDriver *drv)
>  #ifdef EGL_NOK_swap_region
>     drv->API.SwapBuffersRegionNOK = NULL;
>  #endif
> +
> +#ifdef EGL_MESA_dma_buf_image_export
> +   drv->API.ExportDMABUFImageQueryMESA = NULL;
> +   drv->API.ExportDMABUFImageMESA = NULL;
> +#endif
>  }
> diff --git a/src/egl/main/eglmisc.c b/src/egl/main/eglmisc.c
> index 2f49809..7837684 100644
> --- a/src/egl/main/eglmisc.c
> +++ b/src/egl/main/eglmisc.c
> @@ -126,6 +126,8 @@ _eglUpdateExtensionsString(_EGLDisplay *dpy)
>     _EGL_CHECK_EXTENSION(EXT_image_dma_buf_import);
>
>     _EGL_CHECK_EXTENSION(NV_post_sub_buffer);
> +
> +   _EGL_CHECK_EXTENSION(MESA_image_dma_buf_export);
>  #undef _EGL_CHECK_EXTENSION
>  }
>
> diff --git a/src/gallium/state_trackers/dri/dri2.c
> b/src/gallium/state_trackers/dri/dri2.c
> index 7d65ba3..f8f4ecf 100644
> --- a/src/gallium/state_trackers/dri/dri2.c
> +++ b/src/gallium/state_trackers/dri/dri2.c
> @@ -76,6 +76,30 @@ static int convert_fourcc(int format, int
> *dri_components_p)
>     return format;
>  }
>
> +static int convert_to_fourcc(int format)
> +{
> +   switch(format) {
> +   case __DRI_IMAGE_FORMAT_RGB565:
> +      format = __DRI_IMAGE_FOURCC_RGB565;
> +      break;
> +   case __DRI_IMAGE_FORMAT_ARGB8888:
> +      format = __DRI_IMAGE_FOURCC_ARGB8888;
> +      break;
> +   case __DRI_IMAGE_FORMAT_XRGB8888:
> +      format = __DRI_IMAGE_FOURCC_XRGB8888;
> +      break;
> +   case __DRI_IMAGE_FORMAT_ABGR8888:
> +      format = __DRI_IMAGE_FOURCC_ABGR8888;
> +      break;
> +   case __DRI_IMAGE_FORMAT_XBGR8888:
> +      format = __DRI_IMAGE_FOURCC_XBGR8888;
> +      break;
> +   default:
> +      return -1;
> +   }
> +   return format;
> +}
> +
>  /**
>   * DRI2 flush extension.
>   */
> @@ -909,6 +933,12 @@ dri2_query_image(__DRIimage *image, int attrib, int
> *value)
>           return GL_FALSE;
>        *value = image->dri_components;
>        return GL_TRUE;
> +   case __DRI_IMAGE_ATTRIB_FOURCC:
> +      *value = convert_to_fourcc(image->dri_format);
> +      return GL_TRUE;
> +   case __DRI_IMAGE_ATTRIB_NUM_PLANES:
> +      *value = 1;
> +      return GL_TRUE;
>     default:
>        return GL_FALSE;
>     }
> @@ -1203,7 +1233,7 @@ dri2_get_capabilities(__DRIscreen *_screen)
>
>  /* The extension is modified during runtime if DRI_PRIME is detected */
>  static __DRIimageExtension dri2ImageExtension = {
> -    .base = { __DRI_IMAGE, 10 },
> +    .base = { __DRI_IMAGE, 11 },
>
>      .createImageFromName          = dri2_create_image_from_name,
>      .createImageFromRenderbuffer  = dri2_create_image_from_renderbuffer,
> diff --git a/src/mesa/drivers/dri/i965/intel_screen.c
> b/src/mesa/drivers/dri/i965/intel_screen.c
> index cea7ddf..39e8eaf 100644
> --- a/src/mesa/drivers/dri/i965/intel_screen.c
> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> @@ -300,6 +300,17 @@ intel_image_format_lookup(int fourcc)
>     return f;
>  }
>
> +static boolean intel_lookup_fourcc(int dri_format, int *fourcc)
>

s/boolean/bool

+{
> +   for (unsigned i = 0; i < ARRAY_SIZE(intel_image_formats); i++) {
> +      if (intel_image_formats[i].planes[0].dri_format == dri_format) {
> +         *fourcc = intel_image_formats[i].fourcc;
> +         return true;
> +      }
> +   }
> +   return false;
> +}
> +
>  static __DRIimage *
>  intel_allocate_image(int dri_format, void *loaderPrivate)
>  {
> @@ -559,6 +570,14 @@ intel_query_image(__DRIimage *image, int attrib, int
> *value)
>        if (drm_intel_bo_gem_export_to_prime(image->bo, value) == 0)
>           return true;
>        return false;
> +   case __DRI_IMAGE_ATTRIB_FOURCC:
> +      if (intel_lookup_fourcc(image->dri_format, value))
> +         return true;
> +      return false;
> +   case __DRI_IMAGE_ATTRIB_NUM_PLANES:
> +      *value = 1;
> +      return true;
> +
>    default:
>        return false;
>     }
> @@ -784,7 +803,7 @@ intel_from_planar(__DRIimage *parent, int plane, void
> *loaderPrivate)
>  }
>
>  static const __DRIimageExtension intelImageExtension = {
> -    .base = { __DRI_IMAGE, 8 },
> +    .base = { __DRI_IMAGE, 11 },
>
>      .createImageFromName                = intel_create_image_from_name,
>      .createImageFromRenderbuffer        =
> intel_create_image_from_renderbuffer,
> @@ -797,7 +816,9 @@ static const __DRIimageExtension intelImageExtension =
> {
>      .fromPlanar                         = intel_from_planar,
>      .createImageFromTexture             = intel_create_image_from_texture,
>      .createImageFromFds                 = intel_create_image_from_fds,
> -    .createImageFromDmaBufs             = intel_create_image_from_dma_bufs
> +    .createImageFromDmaBufs             =
> intel_create_image_from_dma_bufs,
> +    .blitImage                          = NULL,
> +    .getCapabilities                    = NULL
>  };
>
>  static int
> --
> 2.3.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>



-- 
Marc-André Lureau
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150401/fc622c36/attachment-0001.html>


More information about the mesa-dev mailing list