"Fossies" - the Fresh Open Source Software Archive

Member "mesa-20.1.8/src/egl/main/eglimage.h" (16 Sep 2020, 4722 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) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "eglimage.h" see the Fossies "Dox" file reference documentation.

    1 /**************************************************************************
    2  *
    3  * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
    4  * Copyright 2010-2011 LunarG, Inc.
    5  * All Rights Reserved.
    6  *
    7  * Permission is hereby granted, free of charge, to any person obtaining a
    8  * copy of this software and associated documentation files (the
    9  * "Software"), to deal in the Software without restriction, including
   10  * without limitation the rights to use, copy, modify, merge, publish,
   11  * distribute, sub license, and/or sell copies of the Software, and to
   12  * permit persons to whom the Software is furnished to do so, subject to
   13  * the following conditions:
   14  *
   15  * The above copyright notice and this permission notice (including the
   16  * next paragraph) shall be included in all copies or substantial portions
   17  * of the Software.
   18  *
   19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   20  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   21  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
   22  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   23  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
   24  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
   25  * DEALINGS IN THE SOFTWARE.
   26  *
   27  **************************************************************************/
   28 
   29 
   30 #ifndef EGLIMAGE_INCLUDED
   31 #define EGLIMAGE_INCLUDED
   32 
   33 #include "c99_compat.h"
   34 
   35 #include "egltypedefs.h"
   36 #include "egldisplay.h"
   37 
   38 
   39 #ifdef __cplusplus
   40 extern "C" {
   41 #endif
   42 
   43 struct _egl_image_attrib_int
   44 {
   45    EGLint Value;
   46    EGLBoolean IsPresent;
   47 };
   48 
   49 #define DMA_BUF_MAX_PLANES 4
   50 
   51 struct _egl_image_attribs
   52 {
   53    /* EGL_KHR_image_base */
   54    EGLBoolean ImagePreserved;
   55 
   56    /* EGL_KHR_gl_image */
   57    EGLint GLTextureLevel;
   58    EGLint GLTextureZOffset;
   59 
   60    /* EGL_MESA_drm_image */
   61    EGLint Width;
   62    EGLint Height;
   63    EGLint DRMBufferFormatMESA;
   64    EGLint DRMBufferUseMESA;
   65    EGLint DRMBufferStrideMESA;
   66 
   67    /* EGL_WL_bind_wayland_display */
   68    EGLint PlaneWL;
   69 
   70    /* EGL_EXT_image_dma_buf_import and
   71     * EGL_EXT_image_dma_buf_import_modifiers */
   72    struct _egl_image_attrib_int DMABufFourCC;
   73    struct _egl_image_attrib_int DMABufPlaneFds[DMA_BUF_MAX_PLANES];
   74    struct _egl_image_attrib_int DMABufPlaneOffsets[DMA_BUF_MAX_PLANES];
   75    struct _egl_image_attrib_int DMABufPlanePitches[DMA_BUF_MAX_PLANES];
   76    struct _egl_image_attrib_int DMABufPlaneModifiersLo[DMA_BUF_MAX_PLANES];
   77    struct _egl_image_attrib_int DMABufPlaneModifiersHi[DMA_BUF_MAX_PLANES];
   78    struct _egl_image_attrib_int DMABufYuvColorSpaceHint;
   79    struct _egl_image_attrib_int DMABufSampleRangeHint;
   80    struct _egl_image_attrib_int DMABufChromaHorizontalSiting;
   81    struct _egl_image_attrib_int DMABufChromaVerticalSiting;
   82 };
   83 
   84 /**
   85  * "Base" class for device driver images.
   86  */
   87 struct _egl_image
   88 {
   89    /* An image is a display resource */
   90    _EGLResource Resource;
   91 };
   92 
   93 
   94 EGLBoolean
   95 _eglParseImageAttribList(_EGLImageAttribs *attrs, _EGLDisplay *disp,
   96                          const EGLint *attrib_list);
   97 
   98 
   99 static inline void
  100 _eglInitImage(_EGLImage *img, _EGLDisplay *disp)
  101 {
  102    _eglInitResource(&img->Resource, sizeof(*img), disp);
  103 }
  104 
  105 
  106 /**
  107  * Increment reference count for the image.
  108  */
  109 static inline _EGLImage *
  110 _eglGetImage(_EGLImage *img)
  111 {
  112    if (img)
  113       _eglGetResource(&img->Resource);
  114    return img;
  115 }
  116 
  117 
  118 /**
  119  * Decrement reference count for the image.
  120  */
  121 static inline EGLBoolean
  122 _eglPutImage(_EGLImage *img)
  123 {
  124    return (img) ? _eglPutResource(&img->Resource) : EGL_FALSE;
  125 }
  126 
  127 
  128 /**
  129  * Link an image to its display and return the handle of the link.
  130  * The handle can be passed to client directly.
  131  */
  132 static inline EGLImage
  133 _eglLinkImage(_EGLImage *img)
  134 {
  135    _eglLinkResource(&img->Resource, _EGL_RESOURCE_IMAGE);
  136    return (EGLImage) img;
  137 }
  138 
  139 
  140 /**
  141  * Unlink a linked image from its display.
  142  * Accessing an unlinked image should generate EGL_BAD_PARAMETER error.
  143  */
  144 static inline void
  145 _eglUnlinkImage(_EGLImage *img)
  146 {
  147    _eglUnlinkResource(&img->Resource, _EGL_RESOURCE_IMAGE);
  148 }
  149 
  150 
  151 /**
  152  * Lookup a handle to find the linked image.
  153  * Return NULL if the handle has no corresponding linked image.
  154  */
  155 static inline _EGLImage *
  156 _eglLookupImage(EGLImage image, _EGLDisplay *disp)
  157 {
  158    _EGLImage *img = (_EGLImage *) image;
  159    if (!disp || !_eglCheckResource((void *) img, _EGL_RESOURCE_IMAGE, disp))
  160       img = NULL;
  161    return img;
  162 }
  163 
  164 
  165 /**
  166  * Return the handle of a linked image, or EGL_NO_IMAGE_KHR.
  167  */
  168 static inline EGLImage
  169 _eglGetImageHandle(_EGLImage *img)
  170 {
  171    _EGLResource *res = (_EGLResource *) img;
  172    return (res && _eglIsResourceLinked(res)) ?
  173       (EGLImage) img : EGL_NO_IMAGE_KHR;
  174 }
  175 
  176 
  177 #ifdef __cplusplus
  178 }
  179 #endif
  180 
  181 #endif /* EGLIMAGE_INCLUDED */