blob: 750369102c5c1f935296b0b81b1343800fa9e027 [file] [log] [blame]
// Copyright 2019 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Module Overview: Starboard EGL API
//
// The EGL API provides an interface with accompanying type declarations and
// defines that together provide a single consistent method of EGL usage across
// platforms.
//
// This API is designed to abstract the differences between EGL implementations
// and versions on different systems, and to remove the requirement for any
// other code to directly pull in and use these system libraries.
//
// # EGL Version
//
// This API has the ability to support EGL 1.5, however it is not required to
// support anything beyond EGL 1.4. The user is responsible for ensuring that
// the functions from EGL 1.5 they are calling from the interface are valid.
#ifndef STARBOARD_EGL_H_
#define STARBOARD_EGL_H_
#include "starboard/configuration.h"
#include "starboard/export.h"
#include "starboard/log.h"
#include "starboard/types.h"
#ifdef __cplusplus
extern "C" {
#endif
// The following type definitions were adapted from the types declared in
// https://www.khronos.org/registry/EGL/api/EGL/eglplatform.h.
typedef int32_t SbEglInt32;
typedef intptr_t SbEglNativeDisplayType;
typedef intptr_t SbEglNativePixmapType;
typedef intptr_t SbEglNativeWindowType;
// The following type definitions were adapted from the types declared in
// https://www.khronos.org/registry/EGL/api/EGL/egl.h.
typedef void (*SbEglCastsToProperFunctionPointerType)(void);
typedef int64_t SbEglAttrib;
typedef uint32_t SbEglBoolean;
typedef void* SbEglClientBuffer;
typedef void* SbEglConfig;
typedef void* SbEglContext;
typedef void* SbEglDisplay;
typedef uint32_t SbEglEnum;
typedef void* SbEglImage;
typedef void* SbEglSurface;
typedef void* SbEglSync;
typedef uint64_t SbEglTime;
typedef struct SbEglInterface {
SbEglBoolean (*eglChooseConfig)(SbEglDisplay dpy,
const SbEglInt32* attrib_list,
SbEglConfig* configs,
SbEglInt32 config_size,
SbEglInt32* num_config);
SbEglBoolean (*eglCopyBuffers)(SbEglDisplay dpy,
SbEglSurface surface,
SbEglNativePixmapType target);
SbEglContext (*eglCreateContext)(SbEglDisplay dpy,
SbEglConfig config,
SbEglContext share_context,
const SbEglInt32* attrib_list);
SbEglSurface (*eglCreatePbufferSurface)(SbEglDisplay dpy,
SbEglConfig config,
const SbEglInt32* attrib_list);
SbEglSurface (*eglCreatePixmapSurface)(SbEglDisplay dpy,
SbEglConfig config,
SbEglNativePixmapType pixmap,
const SbEglInt32* attrib_list);
SbEglSurface (*eglCreateWindowSurface)(SbEglDisplay dpy,
SbEglConfig config,
SbEglNativeWindowType win,
const SbEglInt32* attrib_list);
SbEglBoolean (*eglDestroyContext)(SbEglDisplay dpy, SbEglContext ctx);
SbEglBoolean (*eglDestroySurface)(SbEglDisplay dpy, SbEglSurface surface);
SbEglBoolean (*eglGetConfigAttrib)(SbEglDisplay dpy,
SbEglConfig config,
SbEglInt32 attribute,
SbEglInt32* value);
SbEglBoolean (*eglGetConfigs)(SbEglDisplay dpy,
SbEglConfig* configs,
SbEglInt32 config_size,
SbEglInt32* num_config);
SbEglDisplay (*eglGetCurrentDisplay)(void);
SbEglSurface (*eglGetCurrentSurface)(SbEglInt32 readdraw);
SbEglDisplay (*eglGetDisplay)(SbEglNativeDisplayType display_id);
SbEglInt32 (*eglGetError)(void);
SbEglCastsToProperFunctionPointerType (*eglGetProcAddress)(
const char* procname);
SbEglBoolean (*eglInitialize)(SbEglDisplay dpy,
SbEglInt32* major,
SbEglInt32* minor);
SbEglBoolean (*eglMakeCurrent)(SbEglDisplay dpy,
SbEglSurface draw,
SbEglSurface read,
SbEglContext ctx);
SbEglBoolean (*eglQueryContext)(SbEglDisplay dpy,
SbEglContext ctx,
SbEglInt32 attribute,
SbEglInt32* value);
const char* (*eglQueryString)(SbEglDisplay dpy, SbEglInt32 name);
SbEglBoolean (*eglQuerySurface)(SbEglDisplay dpy,
SbEglSurface surface,
SbEglInt32 attribute,
SbEglInt32* value);
SbEglBoolean (*eglSwapBuffers)(SbEglDisplay dpy, SbEglSurface surface);
SbEglBoolean (*eglTerminate)(SbEglDisplay dpy);
SbEglBoolean (*eglWaitGL)(void);
SbEglBoolean (*eglWaitNative)(SbEglInt32 engine);
SbEglBoolean (*eglBindTexImage)(SbEglDisplay dpy,
SbEglSurface surface,
SbEglInt32 buffer);
SbEglBoolean (*eglReleaseTexImage)(SbEglDisplay dpy,
SbEglSurface surface,
SbEglInt32 buffer);
SbEglBoolean (*eglSurfaceAttrib)(SbEglDisplay dpy,
SbEglSurface surface,
SbEglInt32 attribute,
SbEglInt32 value);
SbEglBoolean (*eglSwapInterval)(SbEglDisplay dpy, SbEglInt32 interval);
SbEglBoolean (*eglBindAPI)(SbEglEnum api);
SbEglEnum (*eglQueryAPI)(void);
SbEglSurface (*eglCreatePbufferFromClientBuffer)(
SbEglDisplay dpy,
SbEglEnum buftype,
SbEglClientBuffer buffer,
SbEglConfig config,
const SbEglInt32* attrib_list);
SbEglBoolean (*eglReleaseThread)(void);
SbEglBoolean (*eglWaitClient)(void);
SbEglContext (*eglGetCurrentContext)(void);
SbEglSync (*eglCreateSync)(SbEglDisplay dpy,
SbEglEnum type,
const SbEglAttrib* attrib_list);
SbEglBoolean (*eglDestroySync)(SbEglDisplay dpy, SbEglSync sync);
SbEglInt32 (*eglClientWaitSync)(SbEglDisplay dpy,
SbEglSync sync,
SbEglInt32 flags,
SbEglTime timeout);
SbEglBoolean (*eglGetSyncAttrib)(SbEglDisplay dpy,
SbEglSync sync,
SbEglInt32 attribute,
SbEglAttrib* value);
SbEglImage (*eglCreateImage)(SbEglDisplay dpy,
SbEglContext ctx,
SbEglEnum target,
SbEglClientBuffer buffer,
const SbEglAttrib* attrib_list);
SbEglBoolean (*eglDestroyImage)(SbEglDisplay dpy, SbEglImage image);
SbEglDisplay (*eglGetPlatformDisplay)(SbEglEnum platform,
void* native_display,
const SbEglAttrib* attrib_list);
SbEglSurface (*eglCreatePlatformWindowSurface)(
SbEglDisplay dpy,
SbEglConfig config,
void* native_window,
const SbEglAttrib* attrib_list);
SbEglSurface (*eglCreatePlatformPixmapSurface)(
SbEglDisplay dpy,
SbEglConfig config,
void* native_pixmap,
const SbEglAttrib* attrib_list);
SbEglBoolean (*eglWaitSync)(SbEglDisplay dpy,
SbEglSync sync,
SbEglInt32 flags);
} SbEglInterface;
SB_EXPORT const SbEglInterface* SbGetEglInterface();
// All of the following were previously defined in
// https://www.khronos.org/registry/EGL/api/EGL/egl.h.
// EGL_VERSION_1_0
#define SB_EGL_ALPHA_SIZE 0x3021
#define SB_EGL_BAD_ACCESS 0x3002
#define SB_EGL_BAD_ALLOC 0x3003
#define SB_EGL_BAD_ATTRIBUTE 0x3004
#define SB_EGL_BAD_CONFIG 0x3005
#define SB_EGL_BAD_CONTEXT 0x3006
#define SB_EGL_BAD_CURRENT_SURFACE 0x3007
#define SB_EGL_BAD_DISPLAY 0x3008
#define SB_EGL_BAD_MATCH 0x3009
#define SB_EGL_BAD_NATIVE_PIXMAP 0x300A
#define SB_EGL_BAD_NATIVE_WINDOW 0x300B
#define SB_EGL_BAD_PARAMETER 0x300C
#define SB_EGL_BAD_SURFACE 0x300D
#define SB_EGL_BLUE_SIZE 0x3022
#define SB_EGL_BUFFER_SIZE 0x3020
#define SB_EGL_CONFIG_CAVEAT 0x3027
#define SB_EGL_CONFIG_ID 0x3028
#define SB_EGL_CORE_NATIVE_ENGINE 0x305B
#define SB_EGL_DEPTH_SIZE 0x3025
#define SB_EGL_DONT_CARE (SbEglInt32)(-1)
#define SB_EGL_DRAW 0x3059
#define SB_EGL_EXTENSIONS 0x3055
#define SB_EGL_FALSE 0
#define SB_EGL_GREEN_SIZE 0x3023
#define SB_EGL_HEIGHT 0x3056
#define SB_EGL_LARGEST_PBUFFER 0x3058
#define SB_EGL_LEVEL 0x3029
#define SB_EGL_MAX_PBUFFER_HEIGHT 0x302A
#define SB_EGL_MAX_PBUFFER_PIXELS 0x302B
#define SB_EGL_MAX_PBUFFER_WIDTH 0x302C
#define SB_EGL_NATIVE_RENDERABLE 0x302D
#define SB_EGL_NATIVE_VISUAL_ID 0x302E
#define SB_EGL_NATIVE_VISUAL_TYPE 0x302F
#define SB_EGL_NONE 0x3038
#define SB_EGL_NON_CONFORMANT_CONFIG 0x3051
#define SB_EGL_NOT_INITIALIZED 0x3001
#define SB_EGL_NO_CONTEXT (SbEglContext)(0)
#define SB_EGL_NO_DISPLAY (SbEglDisplay)(0)
#define SB_EGL_NO_SURFACE (SbEglSurface)(0)
#define SB_EGL_PBUFFER_BIT 0x0001
#define SB_EGL_PIXMAP_BIT 0x0002
#define SB_EGL_READ 0x305A
#define SB_EGL_RED_SIZE 0x3024
#define SB_EGL_SAMPLES 0x3031
#define SB_EGL_SAMPLE_BUFFERS 0x3032
#define SB_EGL_SLOW_CONFIG 0x3050
#define SB_EGL_STENCIL_SIZE 0x3026
#define SB_EGL_SUCCESS 0x3000
#define SB_EGL_SURFACE_TYPE 0x3033
#define SB_EGL_TRANSPARENT_BLUE_VALUE 0x3035
#define SB_EGL_TRANSPARENT_GREEN_VALUE 0x3036
#define SB_EGL_TRANSPARENT_RED_VALUE 0x3037
#define SB_EGL_TRANSPARENT_RGB 0x3052
#define SB_EGL_TRANSPARENT_TYPE 0x3034
#define SB_EGL_TRUE 1
#define SB_EGL_VENDOR 0x3053
#define SB_EGL_VERSION 0x3054
#define SB_EGL_WIDTH 0x3057
#define SB_EGL_WINDOW_BIT 0x0004
// EGL_VERSION_1_1
#define SB_EGL_BACK_BUFFER 0x3084
#define SB_EGL_BIND_TO_TEXTURE_RGB 0x3039
#define SB_EGL_BIND_TO_TEXTURE_RGBA 0x303A
#define SB_EGL_CONTEXT_LOST 0x300E
#define SB_EGL_MIN_SWAP_INTERVAL 0x303B
#define SB_EGL_MAX_SWAP_INTERVAL 0x303C
#define SB_EGL_MIPMAP_TEXTURE 0x3082
#define SB_EGL_MIPMAP_LEVEL 0x3083
#define SB_EGL_NO_TEXTURE 0x305C
#define SB_EGL_TEXTURE_2D 0x305F
#define SB_EGL_TEXTURE_FORMAT 0x3080
#define SB_EGL_TEXTURE_RGB 0x305D
#define SB_EGL_TEXTURE_RGBA 0x305E
#define SB_EGL_TEXTURE_TARGET 0x3081
// EGL_VERSION_1_2
#define SB_EGL_ALPHA_FORMAT 0x3088
#define SB_EGL_ALPHA_FORMAT_NONPRE 0x308B
#define SB_EGL_ALPHA_FORMAT_PRE 0x308C
#define SB_EGL_ALPHA_MASK_SIZE 0x303E
#define SB_EGL_BUFFER_PRESERVED 0x3094
#define SB_EGL_BUFFER_DESTROYED 0x3095
#define SB_EGL_CLIENT_APIS 0x308D
#define SB_EGL_COLORSPACE 0x3087
#define SB_EGL_COLORSPACE_sRGB 0x3089
#define SB_EGL_COLORSPACE_LINEAR 0x308A
#define SB_EGL_COLOR_BUFFER_TYPE 0x303F
#define SB_EGL_CONTEXT_CLIENT_TYPE 0x3097
#define SB_EGL_DISPLAY_SCALING 10000
#define SB_EGL_HORIZONTAL_RESOLUTION 0x3090
#define SB_EGL_LUMINANCE_BUFFER 0x308F
#define SB_EGL_LUMINANCE_SIZE 0x303D
#define SB_EGL_OPENGL_ES_BIT 0x0001
#define SB_EGL_OPENVG_BIT 0x0002
#define SB_EGL_OPENGL_ES_API 0x30A0
#define SB_EGL_OPENVG_API 0x30A1
#define SB_EGL_OPENVG_IMAGE 0x3096
#define SB_EGL_PIXEL_ASPECT_RATIO 0x3092
#define SB_EGL_RENDERABLE_TYPE 0x3040
#define SB_EGL_RENDER_BUFFER 0x3086
#define SB_EGL_RGB_BUFFER 0x308E
#define SB_EGL_SINGLE_BUFFER 0x3085
#define SB_EGL_SWAP_BEHAVIOR 0x3093
#define SB_EGL_UNKNOWN (SbEglInt) - 1
#define SB_EGL_VERTICAL_RESOLUTION 0x3091
// EGL_VERSION_1_3
#define SB_EGL_CONFORMANT 0x3042
#define SB_EGL_CONTEXT_CLIENT_VERSION 0x3098
#define SB_EGL_MATCH_NATIVE_PIXMAP 0x3041
#define SB_EGL_OPENGL_ES2_BIT 0x0004
#define SB_EGL_VG_ALPHA_FORMAT 0x3088
#define SB_EGL_VG_ALPHA_FORMAT_NONPRE 0x308B
#define SB_EGL_VG_ALPHA_FORMAT_PRE 0x308C
#define SB_EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040
#define SB_EGL_VG_COLORSPACE 0x3087
#define SB_EGL_VG_COLORSPACE_sRGB 0x3089
#define SB_EGL_VG_COLORSPACE_LINEAR 0x308A
#define SB_EGL_VG_COLORSPACE_LINEAR_BIT 0x0020
// EGL_VERSION_1_4
#define SB_EGL_DEFAULT_DISPLAY (SbEglNativeDisplayType)(0)
#define SB_EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200
#define SB_EGL_MULTISAMPLE_RESOLVE 0x3099
#define SB_EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A
#define SB_EGL_MULTISAMPLE_RESOLVE_BOX 0x309B
#define SB_EGL_OPENGL_API 0x30A2
#define SB_EGL_OPENGL_BIT 0x0008
#define SB_EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400
// EGL_VERSION_1_5
#define SB_EGL_CONTEXT_MAJOR_VERSION 0x3098
#define SB_EGL_CONTEXT_MINOR_VERSION 0x30FB
#define SB_EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD
#define SB_EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD
#define SB_EGL_NO_RESET_NOTIFICATION 0x31BE
#define SB_EGL_LOSE_CONTEXT_ON_RESET 0x31BF
#define SB_EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001
#define SB_EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002
#define SB_EGL_CONTEXT_OPENGL_DEBUG 0x31B0
#define SB_EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1
#define SB_EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2
#define SB_EGL_OPENGL_ES3_BIT 0x00000040
#define SB_EGL_CL_EVENT_HANDLE 0x309C
#define SB_EGL_SYNC_CL_EVENT 0x30FE
#define SB_EGL_SYNC_CL_EVENT_COMPLETE 0x30FF
#define SB_EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0
#define SB_EGL_SYNC_TYPE 0x30F7
#define SB_EGL_SYNC_STATUS 0x30F1
#define SB_EGL_SYNC_CONDITION 0x30F8
#define SB_EGL_SIGNALED 0x30F2
#define SB_EGL_UNSIGNALED 0x30F3
#define SB_EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001
#define SB_EGL_FOREVER 0xFFFFFFFFFFFFFFFFull
#define SB_EGL_TIMEOUT_EXPIRED 0x30F5
#define SB_EGL_CONDITION_SATISFIED 0x30F6
#define SB_EGL_NO_SYNC (SbEglSync)(0)
#define SB_EGL_SYNC_FENCE 0x30F9
#define SB_EGL_GL_COLORSPACE 0x309D
#define SB_EGL_GL_COLORSPACE_SRGB 0x3089
#define SB_EGL_GL_COLORSPACE_LINEAR 0x308A
#define SB_EGL_GL_RENDERBUFFER 0x30B9
#define SB_EGL_GL_TEXTURE_2D 0x30B1
#define SB_EGL_GL_TEXTURE_LEVEL 0x30BC
#define SB_EGL_GL_TEXTURE_3D 0x30B2
#define SB_EGL_GL_TEXTURE_ZOFFSET 0x30BD
#define SB_EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3
#define SB_EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4
#define SB_EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5
#define SB_EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6
#define SB_EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7
#define SB_EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8
#define SB_EGL_IMAGE_PRESERVED 0x30D2
#define SB_EGL_NO_IMAGE (SbEglImage)(0)
#ifdef __cplusplus
} // extern "C"
#endif
#endif // STARBOARD_EGL_H_