258385978c
If the EGL implementation supports the EGL_IMG_hibernate_process extension, use it to hibernate (and hopefully release memory or other resources) when the process isn't actively using EGL or OpenGL ES. The idleness heuristic used in this change is: (a) Wake up when entering any EGL API call, and remain awake for the duration of the call. (b) Do not hibernate when any window surface exists; this means the application is very likely in the foreground. (c) Do not hibernate while any context is made current to a thread. The app may be using a client API without the EGL layer knowing, so it is not safe to hibernate. (d) Only check these conditions and attempt to hibernate after a window surface is destroyed or a thread's context is detached. By not attempting to hibernate at the end of every EGL call, we avoid some transient wakeups/hibernate cycles when the app is mostly idle, or is starting to become active but hasn't created its window surface yet. On a Galaxy Nexus, hibernating frees 1567 VM pages from the process. Both hibernating and waking can take anywhere from 30ms to over 100ms -- measurements have been very inconsistent. Change-Id: Ib555f5d9d069aefccca06e8173a89625b5f32d7e
278 lines
12 KiB
C
278 lines
12 KiB
C
#ifndef __eglext_h_
|
|
#define __eglext_h_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
** Copyright (c) 2007-2010 The Khronos Group Inc.
|
|
**
|
|
** Permission is hereby granted, free of charge, to any person obtaining a
|
|
** copy of this software and/or associated documentation files (the
|
|
** "Materials"), to deal in the Materials without restriction, including
|
|
** without limitation the rights to use, copy, modify, merge, publish,
|
|
** distribute, sublicense, and/or sell copies of the Materials, and to
|
|
** permit persons to whom the Materials are furnished to do so, subject to
|
|
** the following conditions:
|
|
**
|
|
** The above copyright notice and this permission notice shall be included
|
|
** in all copies or substantial portions of the Materials.
|
|
**
|
|
** THE MATERIALS ARE 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
|
|
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
|
*/
|
|
|
|
#include <EGL/eglplatform.h>
|
|
|
|
/*************************************************************/
|
|
|
|
/* Header file version number */
|
|
/* Current version at http://www.khronos.org/registry/egl/ */
|
|
/* $Revision: 11249 $ on $Date: 2010-05-05 09:54:28 -0700 (Wed, 05 May 2010) $ */
|
|
#define EGL_EGLEXT_VERSION 5
|
|
|
|
#ifndef EGL_KHR_config_attribs
|
|
#define EGL_KHR_config_attribs 1
|
|
#define EGL_CONFORMANT_KHR 0x3042 /* EGLConfig attribute */
|
|
#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020 /* EGL_SURFACE_TYPE bitfield */
|
|
#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040 /* EGL_SURFACE_TYPE bitfield */
|
|
#endif
|
|
|
|
#ifndef EGL_KHR_lock_surface
|
|
#define EGL_KHR_lock_surface 1
|
|
#define EGL_READ_SURFACE_BIT_KHR 0x0001 /* EGL_LOCK_USAGE_HINT_KHR bitfield */
|
|
#define EGL_WRITE_SURFACE_BIT_KHR 0x0002 /* EGL_LOCK_USAGE_HINT_KHR bitfield */
|
|
#define EGL_LOCK_SURFACE_BIT_KHR 0x0080 /* EGL_SURFACE_TYPE bitfield */
|
|
#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100 /* EGL_SURFACE_TYPE bitfield */
|
|
#define EGL_MATCH_FORMAT_KHR 0x3043 /* EGLConfig attribute */
|
|
#define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0 /* EGL_MATCH_FORMAT_KHR value */
|
|
#define EGL_FORMAT_RGB_565_KHR 0x30C1 /* EGL_MATCH_FORMAT_KHR value */
|
|
#define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2 /* EGL_MATCH_FORMAT_KHR value */
|
|
#define EGL_FORMAT_RGBA_8888_KHR 0x30C3 /* EGL_MATCH_FORMAT_KHR value */
|
|
#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4 /* eglLockSurfaceKHR attribute */
|
|
#define EGL_LOCK_USAGE_HINT_KHR 0x30C5 /* eglLockSurfaceKHR attribute */
|
|
#define EGL_BITMAP_POINTER_KHR 0x30C6 /* eglQuerySurface attribute */
|
|
#define EGL_BITMAP_PITCH_KHR 0x30C7 /* eglQuerySurface attribute */
|
|
#define EGL_BITMAP_ORIGIN_KHR 0x30C8 /* eglQuerySurface attribute */
|
|
#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9 /* eglQuerySurface attribute */
|
|
#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA /* eglQuerySurface attribute */
|
|
#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB /* eglQuerySurface attribute */
|
|
#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC /* eglQuerySurface attribute */
|
|
#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD /* eglQuerySurface attribute */
|
|
#define EGL_LOWER_LEFT_KHR 0x30CE /* EGL_BITMAP_ORIGIN_KHR value */
|
|
#define EGL_UPPER_LEFT_KHR 0x30CF /* EGL_BITMAP_ORIGIN_KHR value */
|
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
|
EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay display, EGLSurface surface, const EGLint *attrib_list);
|
|
EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay display, EGLSurface surface);
|
|
#endif /* EGL_EGLEXT_PROTOTYPES */
|
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay display, EGLSurface surface, const EGLint *attrib_list);
|
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay display, EGLSurface surface);
|
|
#endif
|
|
|
|
#ifndef EGL_KHR_image
|
|
#define EGL_KHR_image 1
|
|
#define EGL_NATIVE_PIXMAP_KHR 0x30B0 /* eglCreateImageKHR target */
|
|
typedef void *EGLImageKHR;
|
|
#define EGL_NO_IMAGE_KHR ((EGLImageKHR)0)
|
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
|
EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
|
|
EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image);
|
|
#endif /* EGL_EGLEXT_PROTOTYPES */
|
|
typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
|
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image);
|
|
#endif
|
|
|
|
#ifndef EGL_KHR_vg_parent_image
|
|
#define EGL_KHR_vg_parent_image 1
|
|
#define EGL_VG_PARENT_IMAGE_KHR 0x30BA /* eglCreateImageKHR target */
|
|
#endif
|
|
|
|
#ifndef EGL_KHR_gl_texture_2D_image
|
|
#define EGL_KHR_gl_texture_2D_image 1
|
|
#define EGL_GL_TEXTURE_2D_KHR 0x30B1 /* eglCreateImageKHR target */
|
|
#define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC /* eglCreateImageKHR attribute */
|
|
#endif
|
|
|
|
#ifndef EGL_KHR_gl_texture_cubemap_image
|
|
#define EGL_KHR_gl_texture_cubemap_image 1
|
|
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3 /* eglCreateImageKHR target */
|
|
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4 /* eglCreateImageKHR target */
|
|
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5 /* eglCreateImageKHR target */
|
|
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6 /* eglCreateImageKHR target */
|
|
#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7 /* eglCreateImageKHR target */
|
|
#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8 /* eglCreateImageKHR target */
|
|
#endif
|
|
|
|
#ifndef EGL_KHR_gl_texture_3D_image
|
|
#define EGL_KHR_gl_texture_3D_image 1
|
|
#define EGL_GL_TEXTURE_3D_KHR 0x30B2 /* eglCreateImageKHR target */
|
|
#define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD /* eglCreateImageKHR attribute */
|
|
#endif
|
|
|
|
#ifndef EGL_KHR_gl_renderbuffer_image
|
|
#define EGL_KHR_gl_renderbuffer_image 1
|
|
#define EGL_GL_RENDERBUFFER_KHR 0x30B9 /* eglCreateImageKHR target */
|
|
#endif
|
|
|
|
#ifndef EGL_KHR_reusable_sync
|
|
#define EGL_KHR_reusable_sync 1
|
|
|
|
typedef void* EGLSyncKHR;
|
|
typedef khronos_utime_nanoseconds_t EGLTimeKHR;
|
|
|
|
#define EGL_SYNC_STATUS_KHR 0x30F1
|
|
#define EGL_SIGNALED_KHR 0x30F2
|
|
#define EGL_UNSIGNALED_KHR 0x30F3
|
|
#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5
|
|
#define EGL_CONDITION_SATISFIED_KHR 0x30F6
|
|
#define EGL_SYNC_TYPE_KHR 0x30F7
|
|
#define EGL_SYNC_REUSABLE_KHR 0x30FA
|
|
#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001 /* eglClientWaitSyncKHR <flags> bitfield */
|
|
#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull
|
|
#define EGL_NO_SYNC_KHR ((EGLSyncKHR)0)
|
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
|
EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
|
|
EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync);
|
|
EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
|
|
EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
|
|
EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
|
|
#endif /* EGL_EGLEXT_PROTOTYPES */
|
|
typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list);
|
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync);
|
|
typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout);
|
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode);
|
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value);
|
|
#endif
|
|
|
|
#ifndef EGL_KHR_image_base
|
|
#define EGL_KHR_image_base 1
|
|
/* Most interfaces defined by EGL_KHR_image_pixmap above */
|
|
#define EGL_IMAGE_PRESERVED_KHR 0x30D2 /* eglCreateImageKHR attribute */
|
|
#endif
|
|
|
|
#ifndef EGL_KHR_image_pixmap
|
|
#define EGL_KHR_image_pixmap 1
|
|
/* Interfaces defined by EGL_KHR_image above */
|
|
#endif
|
|
|
|
#ifndef EGL_IMG_context_priority
|
|
#define EGL_IMG_context_priority 1
|
|
#define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100
|
|
#define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101
|
|
#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102
|
|
#define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103
|
|
#endif
|
|
|
|
#ifndef EGL_NV_coverage_sample
|
|
#define EGL_NV_coverage_sample 1
|
|
#define EGL_COVERAGE_BUFFERS_NV 0x30E0
|
|
#define EGL_COVERAGE_SAMPLES_NV 0x30E1
|
|
#endif
|
|
|
|
#ifndef EGL_NV_depth_nonlinear
|
|
#define EGL_NV_depth_nonlinear 1
|
|
#define EGL_DEPTH_ENCODING_NV 0x30E2
|
|
#define EGL_DEPTH_ENCODING_NONE_NV 0
|
|
#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3
|
|
#endif
|
|
|
|
#ifndef EGL_NV_sync
|
|
#define EGL_NV_sync 1
|
|
#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6
|
|
#define EGL_SYNC_STATUS_NV 0x30E7
|
|
#define EGL_SIGNALED_NV 0x30E8
|
|
#define EGL_UNSIGNALED_NV 0x30E9
|
|
#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001
|
|
#define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFFull
|
|
#define EGL_ALREADY_SIGNALED_NV 0x30EA
|
|
#define EGL_TIMEOUT_EXPIRED_NV 0x30EB
|
|
#define EGL_CONDITION_SATISFIED_NV 0x30EC
|
|
#define EGL_SYNC_TYPE_NV 0x30ED
|
|
#define EGL_SYNC_CONDITION_NV 0x30EE
|
|
#define EGL_SYNC_FENCE_NV 0x30EF
|
|
#define EGL_NO_SYNC_NV ((EGLSyncNV)0)
|
|
typedef void* EGLSyncNV;
|
|
typedef unsigned long long EGLTimeNV;
|
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
|
EGLSyncNV eglCreateFenceSyncNV (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list);
|
|
EGLBoolean eglDestroySyncNV (EGLSyncNV sync);
|
|
EGLBoolean eglFenceNV (EGLSyncNV sync);
|
|
EGLint eglClientWaitSyncNV (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
|
|
EGLBoolean eglSignalSyncNV (EGLSyncNV sync, EGLenum mode);
|
|
EGLBoolean eglGetSyncAttribNV (EGLSyncNV sync, EGLint attribute, EGLint *value);
|
|
#endif /* EGL_EGLEXT_PROTOTYPES */
|
|
typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list);
|
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync);
|
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync);
|
|
typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout);
|
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode);
|
|
typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value);
|
|
#endif
|
|
|
|
#ifndef EGL_KHR_fence_sync
|
|
#define EGL_KHR_fence_sync 1
|
|
/* Reuses most tokens and entry points from EGL_KHR_reusable_sync */
|
|
#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0
|
|
#define EGL_SYNC_CONDITION_KHR 0x30F8
|
|
#define EGL_SYNC_FENCE_KHR 0x30F9
|
|
#endif
|
|
|
|
#ifndef EGL_ANDROID_image_native_buffer
|
|
#define EGL_ANDROID_image_native_buffer 1
|
|
struct ANativeWindowBuffer;
|
|
#define EGL_NATIVE_BUFFER_ANDROID 0x3140 /* eglCreateImageKHR target */
|
|
#endif
|
|
|
|
#ifndef EGL_ANDROID_recordable
|
|
#define EGL_ANDROID_recordable 1
|
|
#define EGL_RECORDABLE_ANDROID 0x3142 /* EGLConfig attribute */
|
|
#endif
|
|
|
|
/* EGL_NV_system_time
|
|
*/
|
|
#ifndef EGL_NV_system_time
|
|
#define EGL_NV_system_time 1
|
|
typedef khronos_int64_t EGLint64NV;
|
|
typedef khronos_uint64_t EGLuint64NV;
|
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
|
EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV(void);
|
|
EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV(void);
|
|
#endif
|
|
typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC)(void);
|
|
typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC)(void);
|
|
#endif
|
|
|
|
/* EGL_ANDROID_blob_cache
|
|
*/
|
|
#ifndef EGL_ANDROID_blob_cache
|
|
#define EGL_ANDROID_blob_cache 1
|
|
typedef khronos_ssize_t EGLsizeiANDROID;
|
|
typedef void (*EGLSetBlobFuncANDROID) (const void* key, EGLsizeiANDROID keySize, const void* value, EGLsizeiANDROID valueSize);
|
|
typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void* key, EGLsizeiANDROID keySize, void* value, EGLsizeiANDROID valueSize);
|
|
#ifdef EGL_EGLEXT_PROTOTYPES
|
|
EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID(EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get);
|
|
#endif /* EGL_EGLEXT_PROTOTYPES */
|
|
typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy,
|
|
EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get);
|
|
#endif
|
|
|
|
/* EGL_IMG_hibernate_process
|
|
*/
|
|
#ifndef EGL_IMG_hibernate_process
|
|
#define EGL_IMG_hibernate_process 1
|
|
typedef EGLBoolean (EGLAPIENTRYP PFEGLHIBERNATEPROCESSIMGPROC)(void);
|
|
typedef EGLBoolean (EGLAPIENTRYP PFEGLAWAKENPROCESSIMGPROC)(void);
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|