diff options
Diffstat (limited to 'mesalib/docs/MESA_drm_image.spec')
-rw-r--r-- | mesalib/docs/MESA_drm_image.spec | 302 |
1 files changed, 153 insertions, 149 deletions
diff --git a/mesalib/docs/MESA_drm_image.spec b/mesalib/docs/MESA_drm_image.spec index 76de3f8b6..1150a4c43 100644 --- a/mesalib/docs/MESA_drm_image.spec +++ b/mesalib/docs/MESA_drm_image.spec @@ -1,149 +1,153 @@ -Name
-
- MESA_drm_image
-
-Name Strings
-
- EGL_MESA_drm_image
-
-Contact
-
- Kristian Høgsberg <krh@bitplanet.net>
-
-Status
-
- Proposal
-
-Version
-
- Version 2, August 25, 2010
-
-Number
-
- EGL Extension #not assigned
-
-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.
-
-Overview
-
- This extension provides entry points for integrating EGLImage with the
- Linux DRM mode setting and memory management drivers. The extension
- lets applications create EGLImages without a client API resource and
- lets the application get the DRM buffer handles.
-
-IP Status
-
- Open-source; freely implementable.
-
-New Procedures and Functions
-
- EGLImageKHR eglCreateDRMImageMESA(EGLDisplay dpy,
- const EGLint *attrib_list);
-
- EGLBoolean eglExportDRMImageMESA(EGLDisplay dpy,
- EGLImageKHR image,
- EGLint *name,
- EGLint *handle,
- EGLint *stride);
-
-New Tokens
-
- Accepted in the <attrib_list> parameter of eglCreateDRMImageMESA:
-
- EGL_DRM_BUFFER_FORMAT_MESA 0x31D0
- EGL_DRM_BUFFER_USE_MESA 0x31D1
-
- Accepted as values for the EGL_IMAGE_FORMAT_MESA attribute:
-
- EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2
-
- Bits accepted in EGL_DRM_BUFFER_USE_MESA:
-
- EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x0001
- EGL_DRM_BUFFER_USE_SHARE_MESA 0x0002
-
- Accepted in the <target> parameter of eglCreateImageKHR:
-
- EGL_DRM_BUFFER_MESA 0x31D3
-
- Use when importing drm buffer:
-
- EGL_DRM_BUFFER_STRIDE_MESA 0x31D4
- EGL_DRM_BUFFER_FORMAT_MESA 0x31D0
-
-Additions to the EGL 1.4 Specification:
-
- To create a DRM EGLImage, call
-
- EGLImageKHR eglCreateDRMImageMESA(EGLDisplay dpy,
- const EGLint *attrib_list);
-
- In the attribute list, pass EGL_WIDTH, EGL_HEIGHT and format and
- use in the attrib list using EGL_DRM_BUFFER_FORMAT_MESA and
- EGL_DRM_BUFFER_USE_MESA. The only format specified by this
- extension is EGL_DRM_BUFFER_FORMAT_ARGB32_MESA, where each pixel
- is a CPU-endian, 32-bit quantity, with alpha in the upper 8 bits,
- then red, then green, then blue. The bit values accepted by
- EGL_DRM_BUFFER_USE_MESA are EGL_DRM_BUFFER_USE_SCANOUT_MESA and
- EGL_DRM_BUFFER_USE_SHARE_MESA. EGL_DRM_BUFFER_USE_SCANOUT_MESA
- requests that the created EGLImage should be usable as a scanout
- buffer with the DRM kernel modesetting API. The
- EGL_DRM_BUFFER_USE_SHARE_MESA bit requests that the EGLImage can
- be shared with other processes by passing the underlying DRM
- buffer name.
-
- To create a process local handle or a global DRM name for a
- buffer, call
-
- EGLBoolean eglExportDRMImageMESA(EGLDisplay dpy,
- EGLImageKHR image,
- EGLint *name,
- EGLint *handle,
- EGLint *stride);
-
- If <name> is non-NULL, a global name is assigned to the image and
- written to <name>, the handle (local to the DRM file descriptor,
- for use with DRM kernel modesetting API) is written to <handle> if
- non-NULL and the stride (in bytes) is written to <stride>, if
- non-NULL.
-
- Import a shared buffer by calling eglCreateImageKHR with
- EGL_DRM_BUFFER_MESA as the target, using EGL_WIDTH, EGL_HEIGHT,
- EGL_DRM_BUFFER_FORMAT_MESA, EGL_DRM_BUFFER_STRIDE_MESA
- in the attrib list.
-
-Issues
-
- 1. Why don't we use eglCreateImageKHR with a target that
- indicates that we want to create an EGLImage from scratch?
-
- RESOLVED: The eglCreateImageKHR entry point is reserved for
- creating an EGLImage from an already existing client API
- resource. This is fine when we're creating the EGLImage from
- an existing DRM buffer name, it doesn't seem right to overload
- the function to also allocate the underlying resource.
-
- 2. Why don't we use an eglQueryImageMESA type functions for
- querying the DRM EGLImage attributes (name, handle, and stride)?
-
- RESOLVED: The eglQueryImage function has been proposed often,
- but it goes against the EGLImage design. EGLImages are opaque
- handles to a 2D array of pixels, which can be passed between
- client APIs. By referencing an EGLImage in a client API, the
- EGLImage target (a texture, a renderbuffer or such) can be
- used to query the attributes of the EGLImage. We don't have a
- full client API for creating and querying DRM buffers, though,
- so we use a new EGL extension entry point instead.
-
-Revision History
-
- Version 1, June 3, 2010
- Initial draft (Kristian Høgsberg)
- Version 2, August 25, 2010
- Flesh out the extension a bit, add final EGL tokens, capture
- some of the original discussion in the issues section.
+Name + + MESA_drm_image + +Name Strings + + EGL_MESA_drm_image + +Contact + + Kristian Høgsberg <krh@bitplanet.net> + +Status + + Proposal + +Version + + Version 2, August 25, 2010 + +Number + + EGL Extension #not assigned + +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. + +Overview + + This extension provides entry points for integrating EGLImage with the + Linux DRM mode setting and memory management drivers. The extension + lets applications create EGLImages without a client API resource and + lets the application get the DRM buffer handles. + +IP Status + + Open-source; freely implementable. + +New Procedures and Functions + + EGLImageKHR eglCreateDRMImageMESA(EGLDisplay dpy, + const EGLint *attrib_list); + + EGLBoolean eglExportDRMImageMESA(EGLDisplay dpy, + EGLImageKHR image, + EGLint *name, + EGLint *handle, + EGLint *stride); + +New Tokens + + Accepted in the <attrib_list> parameter of eglCreateDRMImageMESA: + + EGL_DRM_BUFFER_FORMAT_MESA 0x31D0 + EGL_DRM_BUFFER_USE_MESA 0x31D1 + + Accepted as values for the EGL_IMAGE_FORMAT_MESA attribute: + + EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2 + + Bits accepted in EGL_DRM_BUFFER_USE_MESA: + + EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x0001 + EGL_DRM_BUFFER_USE_SHARE_MESA 0x0002 + EGL_DRM_BUFFER_USE_CURSOR_MESA 0x0004 + + Accepted in the <target> parameter of eglCreateImageKHR: + + EGL_DRM_BUFFER_MESA 0x31D3 + + Use when importing drm buffer: + + EGL_DRM_BUFFER_STRIDE_MESA 0x31D4 + EGL_DRM_BUFFER_FORMAT_MESA 0x31D0 + +Additions to the EGL 1.4 Specification: + + To create a DRM EGLImage, call + + EGLImageKHR eglCreateDRMImageMESA(EGLDisplay dpy, + const EGLint *attrib_list); + + In the attribute list, pass EGL_WIDTH, EGL_HEIGHT and format and + use in the attrib list using EGL_DRM_BUFFER_FORMAT_MESA and + EGL_DRM_BUFFER_USE_MESA. The only format specified by this + extension is EGL_DRM_BUFFER_FORMAT_ARGB32_MESA, where each pixel + is a CPU-endian, 32-bit quantity, with alpha in the upper 8 bits, + then red, then green, then blue. The bit values accepted by + EGL_DRM_BUFFER_USE_MESA are EGL_DRM_BUFFER_USE_SCANOUT_MESA, + EGL_DRM_BUFFER_USE_SHARE_MESA and EGL_DRM_BUFFER_USE_CURSOR_MESA. + EGL_DRM_BUFFER_USE_SCANOUT_MESA requests that the created EGLImage + should be usable as a scanout buffer with the DRM kernel + modesetting API. EGL_DRM_BUFFER_USE_SHARE_MESA requests that the + EGLImage can be shared with other processes by passing the + underlying DRM buffer name. EGL_DRM_BUFFER_USE_CURSOR_MESA + requests that the image must be usable as a cursor with KMS. When + EGL_DRM_BUFFER_USE_CURSOR_MESA is set, width and height must both + be 64. + + To create a process local handle or a global DRM name for a + buffer, call + + EGLBoolean eglExportDRMImageMESA(EGLDisplay dpy, + EGLImageKHR image, + EGLint *name, + EGLint *handle, + EGLint *stride); + + If <name> is non-NULL, a global name is assigned to the image and + written to <name>, the handle (local to the DRM file descriptor, + for use with DRM kernel modesetting API) is written to <handle> if + non-NULL and the stride (in bytes) is written to <stride>, if + non-NULL. + + Import a shared buffer by calling eglCreateImageKHR with + EGL_DRM_BUFFER_MESA as the target, using EGL_WIDTH, EGL_HEIGHT, + EGL_DRM_BUFFER_FORMAT_MESA, EGL_DRM_BUFFER_STRIDE_MESA + in the attrib list. + +Issues + + 1. Why don't we use eglCreateImageKHR with a target that + indicates that we want to create an EGLImage from scratch? + + RESOLVED: The eglCreateImageKHR entry point is reserved for + creating an EGLImage from an already existing client API + resource. This is fine when we're creating the EGLImage from + an existing DRM buffer name, it doesn't seem right to overload + the function to also allocate the underlying resource. + + 2. Why don't we use an eglQueryImageMESA type functions for + querying the DRM EGLImage attributes (name, handle, and stride)? + + RESOLVED: The eglQueryImage function has been proposed often, + but it goes against the EGLImage design. EGLImages are opaque + handles to a 2D array of pixels, which can be passed between + client APIs. By referencing an EGLImage in a client API, the + EGLImage target (a texture, a renderbuffer or such) can be + used to query the attributes of the EGLImage. We don't have a + full client API for creating and querying DRM buffers, though, + so we use a new EGL extension entry point instead. + +Revision History + + Version 1, June 3, 2010 + Initial draft (Kristian Høgsberg) + Version 2, August 25, 2010 + Flesh out the extension a bit, add final EGL tokens, capture + some of the original discussion in the issues section. |