1 /* 2 * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 3 * All Rights Reserved. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining 6 * a copy of this software and associated documentation files (the 7 * "Software"), to deal in the Software without restriction, including 8 * without limitation the rights to use, copy, modify, merge, publish, 9 * distribute, sublicense, and/or sell copies of the Software, and to 10 * permit persons to whom the Software is furnished to do so, subject to 11 * the following conditions: 12 * 13 * The above copyright notice and this permission notice (including the 14 * next paragraph) shall be included in all copies or substantial 15 * portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 21 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 22 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 * SOFTWARE. 25 */ 26 /* Extensions used by Weston, copied from Mesa's eglmesaext.h, */ 27 28 #ifndef WESTON_EGL_EXT_H 29 #define WESTON_EGL_EXT_H 30 31 #ifdef ENABLE_EGL 32 33 #ifndef EGL_WL_bind_wayland_display 34 #define EGL_WL_bind_wayland_display 1 35 36 struct wl_display; 37 38 #ifdef EGL_EGLEXT_PROTOTYPES 39 EGLAPI EGLBoolean EGLAPIENTRY eglBindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display); 40 EGLAPI EGLBoolean EGLAPIENTRY eglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display); 41 #endif 42 typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDWAYLANDDISPLAYWL) (EGLDisplay dpy, struct wl_display *display); 43 typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNBINDWAYLANDDISPLAYWL) (EGLDisplay dpy, struct wl_display *display); 44 #endif 45 46 /* 47 * This is a little different to the tests shipped with EGL implementations, 48 * which wrap the entire thing in #ifndef EGL_WL_bind_wayland_display, then go 49 * on to define both BindWaylandDisplay and QueryWaylandBuffer. 50 * 51 * Unfortunately, some implementations (particularly the version of Mesa shipped 52 * in Ubuntu 12.04) define EGL_WL_bind_wayland_display, but then only provide 53 * prototypes for (Un)BindWaylandDisplay, completely omitting 54 * QueryWaylandBuffer. 55 * 56 * Detect this, and provide our own definitions if necessary. 57 */ 58 #ifndef EGL_WAYLAND_BUFFER_WL 59 #define EGL_WAYLAND_BUFFER_WL 0x31D5 /* eglCreateImageKHR target */ 60 #define EGL_WAYLAND_PLANE_WL 0x31D6 /* eglCreateImageKHR target */ 61 62 #define EGL_TEXTURE_Y_U_V_WL 0x31D7 63 #define EGL_TEXTURE_Y_UV_WL 0x31D8 64 #define EGL_TEXTURE_Y_XUXV_WL 0x31D9 65 #define EGL_TEXTURE_EXTERNAL_WL 0x31DA 66 67 struct wl_resource; 68 #ifdef EGL_EGLEXT_PROTOTYPES 69 EGLAPI EGLBoolean EGLAPIENTRY eglQueryWaylandBufferWL(EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value); 70 #endif 71 typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWL) (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value); 72 #endif 73 74 #ifndef EGL_WL_create_wayland_buffer_from_image 75 #define EGL_WL_create_wayland_buffer_from_image 1 76 77 #ifdef EGL_EGLEXT_PROTOTYPES 78 EGLAPI struct wl_buffer * EGLAPIENTRY eglCreateWaylandBufferFromImageWL(EGLDisplay dpy, EGLImageKHR image); 79 #endif 80 typedef struct wl_buffer * (EGLAPIENTRYP PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWL) (EGLDisplay dpy, EGLImageKHR image); 81 #endif 82 83 #ifndef EGL_TEXTURE_EXTERNAL_WL 84 #define EGL_TEXTURE_EXTERNAL_WL 0x31DA 85 #endif 86 87 #ifndef EGL_BUFFER_AGE_EXT 88 #define EGL_BUFFER_AGE_EXT 0x313D 89 #endif 90 91 #ifndef EGL_WAYLAND_Y_INVERTED_WL 92 #define EGL_WAYLAND_Y_INVERTED_WL 0x31DB /* eglQueryWaylandBufferWL attribute */ 93 #endif 94 95 #ifndef GL_EXT_unpack_subimage 96 #define GL_EXT_unpack_subimage 1 97 #define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 98 #define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 99 #define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 100 #endif /* GL_EXT_unpack_subimage */ 101 102 /* Mesas gl2ext.h and probably Khronos upstream defined 103 * GL_EXT_unpack_subimage with non _EXT suffixed GL_UNPACK_* tokens. 104 * In case we're using that mess, manually define the _EXT versions 105 * of the tokens here.*/ 106 #if defined(GL_EXT_unpack_subimage) && !defined(GL_UNPACK_ROW_LENGTH_EXT) 107 #define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 108 #define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 109 #define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 110 #endif 111 112 /* Define needed tokens from EGL_EXT_image_dma_buf_import extension 113 * here to avoid having to add ifdefs everywhere.*/ 114 #ifndef EGL_EXT_image_dma_buf_import 115 #define EGL_LINUX_DMA_BUF_EXT 0x3270 116 #define EGL_LINUX_DRM_FOURCC_EXT 0x3271 117 #define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272 118 #define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273 119 #define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274 120 #define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275 121 #define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276 122 #define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277 123 #define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278 124 #define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279 125 #define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A 126 #endif 127 128 /* Define tokens from EGL_EXT_image_dma_buf_import_modifiers */ 129 #ifndef EGL_EXT_image_dma_buf_import_modifiers 130 #define EGL_EXT_image_dma_buf_import_modifiers 1 131 #define EGL_DMA_BUF_PLANE3_FD_EXT 0x3440 132 #define EGL_DMA_BUF_PLANE3_OFFSET_EXT 0x3441 133 #define EGL_DMA_BUF_PLANE3_PITCH_EXT 0x3442 134 #define EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT 0x3443 135 #define EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT 0x3444 136 #define EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT 0x3445 137 #define EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT 0x3446 138 #define EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT 0x3447 139 #define EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT 0x3448 140 #define EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT 0x3449 141 #define EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT 0x344A 142 typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFFORMATSEXTPROC) (EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats); 143 typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFMODIFIERSEXTPROC) (EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLuint64KHR *modifiers, EGLBoolean *external_only, EGLint *num_modifiers); 144 #endif 145 146 #ifndef EGL_EXT_swap_buffers_with_damage 147 #define EGL_EXT_swap_buffers_with_damage 1 148 typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); 149 #endif /* EGL_EXT_swap_buffers_with_damage */ 150 151 #ifndef EGL_MESA_configless_context 152 #define EGL_MESA_configless_context 1 153 #define EGL_NO_CONFIG_MESA ((EGLConfig)0) 154 #endif 155 156 #ifndef EGL_NO_CONFIG_KHR 157 #define EGL_NO_CONFIG_KHR ((EGLConfig)0) 158 #endif 159 160 #ifndef EGL_EXT_platform_base 161 #define EGL_EXT_platform_base 1 162 typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list); 163 typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); 164 typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); 165 #endif /* EGL_EXT_platform_base */ 166 167 #ifndef EGL_PLATFORM_GBM_KHR 168 #define EGL_PLATFORM_GBM_KHR 0x31D7 169 #endif 170 171 #ifndef EGL_PLATFORM_WAYLAND_KHR 172 #define EGL_PLATFORM_WAYLAND_KHR 0x31D8 173 #endif 174 175 #ifndef EGL_PLATFORM_X11_KHR 176 #define EGL_PLATFORM_X11_KHR 0x31D5 177 #endif 178 179 #ifndef EGL_PLATFORM_SURFACELESS_MESA 180 #define EGL_PLATFORM_SURFACELESS_MESA 0x31DD 181 #endif 182 183 #ifndef EGL_KHR_cl_event2 184 #define EGL_KHR_cl_event2 1 185 typedef void *EGLSyncKHR; 186 #endif /* EGL_KHR_cl_event2 */ 187 188 #ifndef EGL_NO_SYNC_KHR 189 #define EGL_NO_SYNC_KHR ((EGLSyncKHR)0) 190 #endif 191 192 #ifndef EGL_KHR_fence_sync 193 #define EGL_KHR_fence_sync 1 194 typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); 195 typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync); 196 #endif /* EGL_KHR_fence_sync */ 197 198 #ifndef EGL_ANDROID_native_fence_sync 199 #define EGL_ANDROID_native_fence_sync 1 200 typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync); 201 #endif /* EGL_ANDROID_native_fence_sync */ 202 203 #ifndef EGL_SYNC_NATIVE_FENCE_ANDROID 204 #define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144 205 #endif 206 207 #ifndef EGL_NO_NATIVE_FENCE_FD_ANDROID 208 #define EGL_NO_NATIVE_FENCE_FD_ANDROID -1 209 #endif 210 211 #else /* ENABLE_EGL */ 212 213 /* EGL platform definition are keept to allow compositor-xx.c to build */ 214 #define EGL_PLATFORM_GBM_KHR 0x31D7 215 #define EGL_PLATFORM_WAYLAND_KHR 0x31D8 216 #define EGL_PLATFORM_X11_KHR 0x31D5 217 #define EGL_PLATFORM_SURFACELESS_MESA 0x31DD 218 219 #endif /* ENABLE_EGL */ 220 221 #endif 222