| 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 |
| |
| Complete, shipping. |
| |
| Version |
| |
| Version 3, May 5, 2015 |
| |
| Number |
| |
| EGL Extension #87 |
| |
| Dependencies |
| |
| Requires 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 extension uses the 64-bit unsigned integer type EGLuint64KHR |
| first introduced by the EGL_KHR_stream extension, but does not |
| depend on that extension. The typedef may be reproduced separately |
| for this extension, if not already present in eglext.h. |
| |
| typedef khronos_uint64_t EGLuint64KHR; |
| |
| New Procedures and Functions |
| |
| EGLBoolean eglExportDMABUFImageQueryMESA(EGLDisplay dpy, |
| EGLImageKHR image, |
| int *fourcc, |
| int *num_planes, |
| EGLuint64KHR *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, |
| EGLuint64KHR *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 3, May, 2015 |
| Just use the KHR 64-bit type. |
| Version 2, March, 2015 |
| Add a query interface (Dave Airlie) |
| Version 1, June 3, 2014 |
| Initial draft (Dave Airlie) |
| |