[Mesa-dev] [PATCH 4/6] egl: Add EGL_MESA_drm_image

Jakob Bornecrantz wallbraker at gmail.com
Sat May 29 05:56:32 PDT 2010


---
 include/EGL/eglext.h                |    8 ++
 src/egl/docs/EGL_MESA_drm_image.txt |  147 +++++++++++++++++++++++++++++++++++
 src/egl/main/egldisplay.h           |    1 +
 src/egl/main/eglimage.c             |    8 ++
 src/egl/main/eglimage.h             |    5 +
 src/egl/main/eglmisc.c              |    3 +
 6 files changed, 172 insertions(+), 0 deletions(-)
 create mode 100644 src/egl/docs/EGL_MESA_drm_image.txt

diff --git a/include/EGL/eglext.h b/include/EGL/eglext.h
index a00a1e9..371ed38 100644
--- a/include/EGL/eglext.h
+++ b/include/EGL/eglext.h
@@ -266,6 +266,14 @@ typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETIMAGEATTRIBMESA) (EGLDisplay dpy, EGLI
 #define EGL_SYSTEM_SHARABLE_BIT_MESA         0x0002  /* eglCreateImageKHR value */
 #endif /* EGL_MESA_image_system_use */
 
+#ifndef EGL_MESA_drm_image
+#define EGL_MESA_drm_image 1
+#define EGL_DRM_IMAGE_MESA                0x3203  /* eglCreateImageKHR target */
+#define EGL_DRM_STRIDE_MESA               0x3204  /* eglCreateImageKHR attribute */
+#define EGL_DRM_KMS_HANDLE_MESA           0x3205  /* eglGetImageAttributeMESA attribute */
+#define EGL_DRM_SHARED_HANDLE_MESA        0x3206  /* eglGetImageAttributeMESA attribute */
+#endif /* EGL_MESA_drm_image */
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/egl/docs/EGL_MESA_drm_image.txt b/src/egl/docs/EGL_MESA_drm_image.txt
new file mode 100644
index 0000000..f8e7f70
--- /dev/null
+++ b/src/egl/docs/EGL_MESA_drm_image.txt
@@ -0,0 +1,147 @@
+Name
+
+    MESA_drm_image
+
+Name Strings
+
+    EGL_MESA_drm_image
+
+Contributors
+
+    Jakob Bornecrantz
+
+Contacts
+
+    Jakob Bornecrantz, (wallbraker 'at' gmail.com)
+
+Status
+
+    Preliminary - totally subject to change.
+
+Version
+
+    Version 1, January 20, 2010
+
+Number
+
+    EGL Extension #?
+
+Dependencies
+
+    EGL_KHR_base_image extension
+
+Overview
+
+    The extensions specified in this document provide a mechanism for creating
+    EGLImage objects from drm handles and also query handle and stride from
+    images created with EGL_MESA_image_system_use use cases.
+
+New Types
+
+    None
+
+New Procedures and Functions
+
+    None
+
+New Tokens
+
+      Accepted in the <target> parameter of eglCreateImageKHR:
+
+          EGL_DRM_IMAGE_MESA                            0x????
+
+      Accepted as an attribute in the <attr_list> parameter of
+      eglCreateImageKHR:
+
+          EGL_DRM_STRIDE_MESA                           0x????
+
+      Accepted as am attribute to eglGetImageAttributeMESA.
+
+          EGL_DRM_STRIDE_MESA                           0x????
+          EGL_DRM_KMS_HANDLE_MESA                       0x????
+          EGL_DRM_SHARED_HANDLE_MESA                    0x????
+
+
+Additions to the EGL Image (EGL_KHR_image) Specification:
+
+    Add the following to Table aaa (Legal values for eglCreateImageKHR
+    <target> parameter), Section 2.5.1 (EGLImage Specification)
+
+      +-------------------------------------+---------------------------------+
+      |  <target>                           |  Notes                          |
+      +-------------------------------------+---------------------------------+
+      |  EGL_DRM_IMAGE_MESA                 |  Used for DRM images.           |
+      +-------------------------------------+---------------------------------+
+
+    Add the following to Table bbb (Legal attributes for eglCreateImageKHR
+    <attr_list> parameter), Section 2.5.1 (EGLImage Specification)
+
+      +------------------------+------------------------------------+---------+
+      |                        |                                    | Default |
+      |  Attribute             |  Description                       | Value   |
+      +------------------------+------------------------------------+---------+
+      |  EGL_DRM_STRIDE_MESA   |  Specifies the internal stride.    |  None   |
+      +------------------------+------------------------------------+---------+
+      |  EGL_WIDTH             |  Specifies the width in pixels.    |  None   |
+      +------------------------+------------------------------------+---------+
+      |  EGL_HEIGHT            |  Specifies the height in pixels.   |  None   |
+      +------------------------+------------------------------------+---------+
+
+    Add the following to Table ??? (Legal values for eglGetImageAttribMESA
+    <attrib> parameter, Section ??? (???)
+
+      +-------------------------------+---------------------------------------+
+      |                               |                                       |
+      |  Attribute                    |  Description                          |
+      +-------------------------------+---------------------------------------+
+      |  EGL_DRM_STRIDE_MESA          |  Internal stride of the image.        |
+      +-------------------------------+---------------------------------------+
+      |  EGL_DRM_KMS_HANDLE_MESA      |  Handle to be used with kms.          |
+      +-------------------------------+---------------------------------------+
+      |  EGL_DRM_SHARED_HANDLE_MESA   |  Handle sharable to other proccess,   |
+      |                               |  see EGL_MESA_drm_image.              |
+      +-------------------------------+---------------------------------------+
+
+
+    Insert the following text after paragraph 3 ("If <target> is
+    NATIVE_PIXMAP_KHR...") of Section 2.5.1 (EGLImage Specification)
+
+    "If <target> is EGL_DRM_IMAGE_MESA, <dpy> must be a valid EGLDisplay,
+    and <ctx> must be EGL_NO_CONTEXT. This is because drm has no context.
+
+    If <target> is EGL_DRM_IMAGE_MESA, <buffer> must be the handle to a
+    valid drm buffer object. <attr_list> must specify the stride, width and
+    height to be used for the EGLimage. Additional values specified in
+    <attr_list> are ignored."
+
+    Add the following errors to the end of the list in Section 2.5.1 (EGLImage
+    Specification):
+
+    "   * If <target> is EGL_DRM_IMAGE_MESA, and <dpy> is not a valid
+          EGLDisplay, the error EGL_BAD_DISPLAY is generated.
+
+        * If <target> is EGL_DRM_IMAGE_MESA, and neither EGL_WIDTH,
+          EGL_HEIGHT, EGL_DRM_HANDLE_MESA and EGL_DRM_STRIDE_MESA, are
+          specified, the error EGL_BAD_PARAMETER is generated.
+
+        * If <target> is EGL_DRM_IMAGE_MESA, and EGL_DRM_HANDLE_MESA is
+          not a valid drm handle to a buffer object, error EGL_BAD_PARAMETER
+          is generated.
+
+        * <AND SO ON>"
+
+
+Issues
+
+    1.  Should it be able to query the width, height, stride and handle from a
+        EGL_DRM_IMAGE_MESA object.
+
+        SUGGESTION:  No this up to defined by another extension.
+
+
+    2.  Should you be able to specify the format?
+
+        SUGGESTION: Yes, add this ASAP.
+
+Revision History
+
diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h
index 3413fa3..e792d51 100644
--- a/src/egl/main/egldisplay.h
+++ b/src/egl/main/egldisplay.h
@@ -51,6 +51,7 @@ struct _egl_extensions
    EGLBoolean MESA_create_image;
    EGLBoolean MESA_get_image_attrib;
    EGLBoolean MESA_image_system_use;
+   EGLBoolean MESA_drm_image;
 
    char String[_EGL_MAX_EXTENSIONS_LEN];
 };
diff --git a/src/egl/main/eglimage.c b/src/egl/main/eglimage.c
index 855c4c0..3eb9a6b 100644
--- a/src/egl/main/eglimage.c
+++ b/src/egl/main/eglimage.c
@@ -47,6 +47,11 @@ _eglParseImageAttribList(_EGLImage *img, const EGLint *attrib_list)
          img->UseSystem = val;
          break;
 #endif
+#ifdef EGL_MESA_drm_image
+      case EGL_DRM_STRIDE_MESA:
+         img->DRMStride = val;
+         break;
+#endif
       default:
          /* unknown attrs are ignored */
          break;
@@ -80,6 +85,9 @@ _eglInitImage(_EGLImage *img, _EGLDisplay *dpy, const EGLint *attrib_list)
 #ifdef EGL_MESA_image_system_use
    img->UseSystem = 0;
 #endif
+#ifdef EGL_MESA_drm_image
+   img->DRMStride = 0;
+#endif
 
    err = _eglParseImageAttribList(img, attrib_list);
    if (err != EGL_SUCCESS)
diff --git a/src/egl/main/eglimage.h b/src/egl/main/eglimage.h
index f07f12b..2139d20 100644
--- a/src/egl/main/eglimage.h
+++ b/src/egl/main/eglimage.h
@@ -24,6 +24,11 @@ struct _egl_image
 #ifdef EGL_MESA_image_system_use
    EGLint UseSystem;
 #endif
+#ifdef EGL_MESA_drm_image
+   /* stride and handles must be handled by the driver,
+    * this value is not queryable */
+   EGLint DRMStride;
+#endif
 };
 
 
diff --git a/src/egl/main/eglmisc.c b/src/egl/main/eglmisc.c
index c9329cb..baeb8da 100644
--- a/src/egl/main/eglmisc.c
+++ b/src/egl/main/eglmisc.c
@@ -104,6 +104,9 @@ _eglUpdateExtensionsString(_EGLDisplay *dpy)
 #ifdef EGL_MESA_image_system_use
    _EGL_CHECK_EXTENSION(MESA_image_system_use);
 #endif
+#ifdef EGL_MESA_drm_image
+   _EGL_CHECK_EXTENSION(MESA_drm_image);
+#endif
 
    _EGL_CHECK_EXTENSION(NOK_swap_region);
    _EGL_CHECK_EXTENSION(NOK_texture_from_pixmap);
-- 
1.7.0.4



More information about the mesa-dev mailing list