"Fossies" - the Fresh Open Source Software Archive

Member "mesa-20.1.8/docs/specs/MESA_drm_image.spec" (16 Sep 2020, 5293 Bytes) of package /linux/misc/mesa-20.1.8.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) RPM Spec source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 Name
    2 
    3     MESA_drm_image
    4 
    5 Name Strings
    6 
    7     EGL_MESA_drm_image
    8 
    9 Contact
   10 
   11     Kristian Høgsberg <krh@bitplanet.net>
   12 
   13 Status
   14 
   15     Proposal
   16 
   17 Version
   18 
   19     Version 2, August 25, 2010
   20 
   21 Number
   22 
   23     EGL Extension #not assigned
   24 
   25 Dependencies
   26 
   27     Requires EGL 1.4 or later.  This extension is written against the
   28     wording of the EGL 1.4 specification.
   29 
   30     EGL_KHR_base_image is required.
   31 
   32 Overview
   33 
   34     This extension provides entry points for integrating EGLImage with the
   35     Linux DRM mode setting and memory management drivers.  The extension
   36     lets applications create EGLImages without a client API resource and
   37     lets the application get the DRM buffer handles.
   38 
   39 IP Status
   40 
   41     Open-source; freely implementable.
   42 
   43 New Procedures and Functions
   44 
   45     EGLImageKHR eglCreateDRMImageMESA(EGLDisplay dpy,
   46                                       const EGLint *attrib_list);
   47 
   48     EGLBoolean eglExportDRMImageMESA(EGLDisplay dpy,
   49                                      EGLImageKHR image,
   50                                      EGLint *name,
   51                      EGLint *handle,
   52                      EGLint *stride);
   53 
   54 New Tokens
   55 
   56     Accepted in the <attrib_list> parameter of eglCreateDRMImageMESA:
   57 
   58         EGL_DRM_BUFFER_FORMAT_MESA      0x31D0
   59         EGL_DRM_BUFFER_USE_MESA         0x31D1
   60 
   61     Accepted as values for the EGL_IMAGE_FORMAT_MESA attribute:
   62 
   63         EGL_DRM_BUFFER_FORMAT_ARGB32_MESA   0x31D2
   64 
   65     Bits accepted in EGL_DRM_BUFFER_USE_MESA:
   66 
   67         EGL_DRM_BUFFER_USE_SCANOUT_MESA     0x0001
   68         EGL_DRM_BUFFER_USE_SHARE_MESA       0x0002
   69         EGL_DRM_BUFFER_USE_CURSOR_MESA      0x0004
   70 
   71     Accepted in the <target> parameter of eglCreateImageKHR:
   72 
   73         EGL_DRM_BUFFER_MESA         0x31D3
   74 
   75     Use when importing drm buffer:
   76 
   77         EGL_DRM_BUFFER_STRIDE_MESA      0x31D4
   78         EGL_DRM_BUFFER_FORMAT_MESA      0x31D0
   79 
   80 Additions to the EGL 1.4 Specification:
   81 
   82     To create a DRM EGLImage, call
   83 
   84         EGLImageKHR eglCreateDRMImageMESA(EGLDisplay dpy,
   85                                           const EGLint *attrib_list);
   86 
   87     In the attribute list, pass EGL_WIDTH, EGL_HEIGHT and format and
   88     use in the attrib list using EGL_DRM_BUFFER_FORMAT_MESA and
   89     EGL_DRM_BUFFER_USE_MESA.  The only format specified by this
   90     extension is EGL_DRM_BUFFER_FORMAT_ARGB32_MESA, where each pixel
   91     is a CPU-endian, 32-bit quantity, with alpha in the upper 8 bits,
   92     then red, then green, then blue.  The bit values accepted by
   93     EGL_DRM_BUFFER_USE_MESA are EGL_DRM_BUFFER_USE_SCANOUT_MESA,
   94     EGL_DRM_BUFFER_USE_SHARE_MESA and EGL_DRM_BUFFER_USE_CURSOR_MESA.
   95     EGL_DRM_BUFFER_USE_SCANOUT_MESA requests that the created EGLImage
   96     should be usable as a scanout buffer with the DRM kernel
   97     modesetting API.  EGL_DRM_BUFFER_USE_SHARE_MESA requests that the
   98     EGLImage can be shared with other processes by passing the
   99     underlying DRM buffer name.  EGL_DRM_BUFFER_USE_CURSOR_MESA
  100     requests that the image must be usable as a cursor with KMS.  When
  101     EGL_DRM_BUFFER_USE_CURSOR_MESA is set, width and height must both
  102     be 64.
  103 
  104     To create a process local handle or a global DRM name for a
  105     buffer, call
  106 
  107         EGLBoolean eglExportDRMImageMESA(EGLDisplay dpy,
  108                                          EGLImageKHR image,
  109                                          EGLint *name,
  110                                          EGLint *handle,
  111                                          EGLint *stride);
  112 
  113     If <name> is non-NULL, a global name is assigned to the image and
  114     written to <name>, the handle (local to the DRM file descriptor,
  115     for use with DRM kernel modesetting API) is written to <handle> if
  116     non-NULL and the stride (in bytes) is written to <stride>, if
  117     non-NULL.
  118 
  119     Import a shared buffer by calling eglCreateImageKHR with
  120     EGL_DRM_BUFFER_MESA as the target, using EGL_WIDTH, EGL_HEIGHT,
  121     EGL_DRM_BUFFER_FORMAT_MESA, EGL_DRM_BUFFER_STRIDE_MESA
  122     in the attrib list.
  123 
  124 Issues
  125 
  126     1.  Why don't we use eglCreateImageKHR with a target that
  127         indicates that we want to create an EGLImage from scratch?
  128 
  129         RESOLVED: The eglCreateImageKHR entry point is reserved for
  130         creating an EGLImage from an already existing client API
  131         resource.  This is fine when we're creating the EGLImage from
  132         an existing DRM buffer name, it doesn't seem right to overload
  133         the function to also allocate the underlying resource.
  134 
  135     2.  Why don't we use an eglQueryImageMESA type functions for
  136         querying the DRM EGLImage attributes (name, handle, and stride)?
  137 
  138         RESOLVED: The eglQueryImage function has been proposed often,
  139         but it goes against the EGLImage design.  EGLImages are opaque
  140         handles to a 2D array of pixels, which can be passed between
  141         client APIs.  By referencing an EGLImage in a client API, the
  142         EGLImage target (a texture, a renderbuffer or such) can be
  143         used to query the attributes of the EGLImage.  We don't have a
  144         full client API for creating and querying DRM buffers, though,
  145         so we use a new EGL extension entry point instead.
  146 
  147 Revision History
  148 
  149     Version 1, June 3, 2010
  150         Initial draft (Kristian Høgsberg)
  151     Version 2, August 25, 2010
  152         Flesh out the extension a bit, add final EGL tokens, capture
  153         some of the original discussion in the issues section.