/**************************************************************************
 *
 * Copyright 2008 VMware, Inc.
 * Copyright 2009-2010 Chia-I Wu <olvaffe@gmail.com>
 * Copyright 2010-2011 LunarG, Inc.
 * All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sub license, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice (including the
 * next paragraph) shall be included in all copies or substantial portions
 * of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 *
 **************************************************************************/


#ifndef EGLDISPLAY_INCLUDED
#define EGLDISPLAY_INCLUDED

#include "c99_compat.h"
#include "c11/threads.h"

#include "egltypedefs.h"
#include "egldefines.h"
#include "eglarray.h"


#ifdef __cplusplus
extern "C" {
#endif

enum _egl_platform_type {
   _EGL_PLATFORM_X11,
   _EGL_PLATFORM_WAYLAND,
   _EGL_PLATFORM_DRM,
   _EGL_PLATFORM_ANDROID,
   _EGL_PLATFORM_HAIKU,
   _EGL_PLATFORM_SURFACELESS,
   _EGL_PLATFORM_DEVICE,

   _EGL_NUM_PLATFORMS,
   _EGL_INVALID_PLATFORM = -1
};
typedef enum _egl_platform_type _EGLPlatformType;


enum _egl_resource_type {
   _EGL_RESOURCE_CONTEXT,
   _EGL_RESOURCE_SURFACE,
   _EGL_RESOURCE_IMAGE,
   _EGL_RESOURCE_SYNC,

   _EGL_NUM_RESOURCES
};
/* this cannot and need not go into egltypedefs.h */
typedef enum _egl_resource_type _EGLResourceType;


/**
 * A resource of a display.
 */
struct _egl_resource
{
   /* which display the resource belongs to */
   _EGLDisplay *Display;
   EGLBoolean IsLinked;
   EGLint RefCount;

   EGLLabelKHR Label;

   /* used to link resources of the same type */
   _EGLResource *Next;
};


/**
 * Optional EGL extensions info.
 */
struct _egl_extensions
{
   /* Please keep these sorted alphabetically. */
   EGLBoolean ANDROID_blob_cache;
   EGLBoolean ANDROID_framebuffer_target;
   EGLBoolean ANDROID_image_native_buffer;
   EGLBoolean ANDROID_native_fence_sync;
   EGLBoolean ANDROID_recordable;

   EGLBoolean CHROMIUM_sync_control;

   EGLBoolean EXT_buffer_age;
   EGLBoolean EXT_create_context_robustness;
   EGLBoolean EXT_image_dma_buf_import;
   EGLBoolean EXT_image_dma_buf_import_modifiers;
   EGLBoolean EXT_pixel_format_float;
   EGLBoolean EXT_surface_CTA861_3_metadata;
   EGLBoolean EXT_surface_SMPTE2086_metadata;
   EGLBoolean EXT_swap_buffers_with_damage;

   unsigned int IMG_context_priority;
#define  __EGL_CONTEXT_PRIORITY_LOW_BIT    0
#define  __EGL_CONTEXT_PRIORITY_MEDIUM_BIT 1
#define  __EGL_CONTEXT_PRIORITY_HIGH_BIT   2

   EGLBoolean KHR_cl_event2;
   EGLBoolean KHR_config_attribs;
   EGLBoolean KHR_context_flush_control;
   EGLBoolean KHR_create_context;
   EGLBoolean KHR_create_context_no_error;
   EGLBoolean KHR_fence_sync;
   EGLBoolean KHR_get_all_proc_addresses;
   EGLBoolean KHR_gl_colorspace;
   EGLBoolean KHR_gl_renderbuffer_image;
   EGLBoolean KHR_gl_texture_2D_image;
   EGLBoolean KHR_gl_texture_3D_image;
   EGLBoolean KHR_gl_texture_cubemap_image;
   EGLBoolean KHR_image;
   EGLBoolean KHR_image_base;
   EGLBoolean KHR_image_pixmap;
   EGLBoolean KHR_mutable_render_buffer;
   EGLBoolean KHR_no_config_context;
   EGLBoolean KHR_partial_update;
   EGLBoolean KHR_reusable_sync;
   EGLBoolean KHR_surfaceless_context;
   EGLBoolean KHR_wait_sync;

   EGLBoolean MESA_drm_image;
   EGLBoolean MESA_image_dma_buf_export;
   EGLBoolean MESA_query_driver;

   EGLBoolean NOK_swap_region;
   EGLBoolean NOK_texture_from_pixmap;

   EGLBoolean NV_post_sub_buffer;

   EGLBoolean WL_bind_wayland_display;
   EGLBoolean WL_create_wayland_buffer_from_image;
};

struct _egl_display
{
   /* used to link displays */
   _EGLDisplay *Next;

   mtx_t Mutex;

   _EGLPlatformType Platform; /**< The type of the platform display */
   void *PlatformDisplay;     /**< A pointer to the platform display */

   _EGLDevice *Device;        /**< Device backing the display */
   const _EGLDriver *Driver;  /**< Matched driver of the display */
   EGLBoolean Initialized;    /**< True if the display is initialized */

   /* options that affect how the driver initializes the display */
   struct {
      EGLBoolean ForceSoftware; /**< Use software path only */
      EGLAttrib *Attribs;     /**< Platform-specific options */
      int fd; /**< plaform device specific, local fd */
   } Options;

   /* these fields are set by the driver during init */
   void *DriverData;          /**< Driver private data */
   EGLint Version;            /**< EGL version major*10+minor */
   EGLint ClientAPIs;         /**< Bitmask of APIs supported (EGL_xxx_BIT) */
   _EGLExtensions Extensions; /**< Extensions supported */

   /* these fields are derived from above */
   char VersionString[100];                        /**< EGL_VERSION */
   char ClientAPIsString[100];                     /**< EGL_CLIENT_APIS */
   char ExtensionsString[_EGL_MAX_EXTENSIONS_LEN]; /**< EGL_EXTENSIONS */

   _EGLArray *Configs;

   /* lists of resources */
   _EGLResource *ResourceLists[_EGL_NUM_RESOURCES];

   EGLLabelKHR Label;

   EGLSetBlobFuncANDROID BlobCacheSet;
   EGLGetBlobFuncANDROID BlobCacheGet;
};


extern _EGLPlatformType
_eglGetNativePlatform(void *nativeDisplay);


extern void
_eglFiniDisplay(void);


extern _EGLDisplay *
_eglFindDisplay(_EGLPlatformType plat, void *plat_dpy, const EGLAttrib *attr);


extern void
_eglReleaseDisplayResources(const _EGLDriver *drv, _EGLDisplay *disp);


extern void
_eglCleanupDisplay(_EGLDisplay *disp);


extern EGLBoolean
_eglCheckDisplayHandle(EGLDisplay dpy);


extern EGLBoolean
_eglCheckResource(void *res, _EGLResourceType type, _EGLDisplay *disp);


/**
 * Lookup a handle to find the linked display.
 * Return NULL if the handle has no corresponding linked display.
 */
static inline _EGLDisplay *
_eglLookupDisplay(EGLDisplay dpy)
{
   _EGLDisplay *disp = (_EGLDisplay *) dpy;
   if (!_eglCheckDisplayHandle(dpy))
      disp = NULL;
   return disp;
}


/**
 * Return the handle of a linked display, or EGL_NO_DISPLAY.
 */
static inline EGLDisplay
_eglGetDisplayHandle(_EGLDisplay *disp)
{
   return (EGLDisplay) ((disp) ? disp : EGL_NO_DISPLAY);
}


extern void
_eglInitResource(_EGLResource *res, EGLint size, _EGLDisplay *disp);


extern void
_eglGetResource(_EGLResource *res);


extern EGLBoolean
_eglPutResource(_EGLResource *res);


extern void
_eglLinkResource(_EGLResource *res, _EGLResourceType type);


extern void
_eglUnlinkResource(_EGLResource *res, _EGLResourceType type);


/**
 * Return true if the resource is linked.
 */
static inline EGLBoolean
_eglIsResourceLinked(_EGLResource *res)
{
   return res->IsLinked;
}

static inline size_t
_eglNumAttribs(const EGLAttrib *attribs)
{
   size_t len = 0;

   if (attribs) {
      while (attribs[len] != EGL_NONE)
         len += 2;
      len++;
   }
   return len;
}

#ifdef HAVE_X11_PLATFORM
_EGLDisplay*
_eglGetX11Display(Display *native_display, const EGLAttrib *attrib_list);
#endif

#ifdef HAVE_DRM_PLATFORM
struct gbm_device;

_EGLDisplay*
_eglGetGbmDisplay(struct gbm_device *native_display,
                  const EGLAttrib *attrib_list);
#endif

#ifdef HAVE_WAYLAND_PLATFORM
struct wl_display;

_EGLDisplay*
_eglGetWaylandDisplay(struct wl_display *native_display,
                      const EGLAttrib *attrib_list);
#endif

_EGLDisplay*
_eglGetSurfacelessDisplay(void *native_display,
                          const EGLAttrib *attrib_list);

#ifdef HAVE_ANDROID_PLATFORM
_EGLDisplay*
_eglGetAndroidDisplay(void *native_display,
                         const EGLAttrib *attrib_list);
#endif

_EGLDisplay*
_eglGetDeviceDisplay(void *native_display,
                     const EGLAttrib *attrib_list);

#ifdef __cplusplus
}
#endif

#endif /* EGLDISPLAY_INCLUDED */
