about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/librarian/library.c6
-rw-r--r--src/library_list.h3
-rw-r--r--src/wrapped/generated/functions_list.txt6
-rw-r--r--src/wrapped/generated/wrappedglesv2defs.h8
-rw-r--r--src/wrapped/generated/wrappedglesv2types.h17
-rw-r--r--src/wrapped/generated/wrappedglesv2undefs.h8
-rw-r--r--src/wrapped/generated/wrappedlibgltypes.h6
-rw-r--r--src/wrapped/generated/wrapper.c2
-rw-r--r--src/wrapped/generated/wrapper.h1
-rw-r--r--src/wrapped/wrappedglesv2.c23
-rw-r--r--src/wrapped/wrappedglesv2_private.h362
-rw-r--r--src/wrapped/wrappedlibegl_private.h20
-rw-r--r--src/wrapped/wrappedlibgl.c133
-rw-r--r--src/wrapped/wrappedlibgl_private.h204
14 files changed, 700 insertions, 99 deletions
diff --git a/src/librarian/library.c b/src/librarian/library.c
index 99d884cd..fb27c430 100644
--- a/src/librarian/library.c
+++ b/src/librarian/library.c
@@ -473,6 +473,12 @@ library_t *NewLibrary(const char* path, box64context_t* context, elfheader_t* ve
     int precise = (!box64_prefer_wrapped && !essential && path && strchr(path, '/'))?1:0;
     if(!notwrapped && precise && strstr(path, "libtcmalloc_minimal.so"))
         precise = 0;    // allow native version for tcmalloc_minimum
+    /*
+    if(!notwrapped && precise && strstr(path, "libEGL.so"))
+        precise = 0;    // allow native version for EGL
+    if(!notwrapped && precise && strstr(path, "libGLESv2.so"))
+        precise = 0;    // allow native version for GLESv2
+    */
     // check if name is libSDL_sound-1.0.so.1 but with SDL2 loaded, then try emulated first...
     if(!notwrapped && !strcmp(lib->name, "libSDL_sound-1.0.so.1") && my_context->sdl2lib)
         notwrapped = 1;
diff --git a/src/library_list.h b/src/library_list.h
index ba69fd4e..6314311a 100644
--- a/src/library_list.h
+++ b/src/library_list.h
@@ -6,12 +6,15 @@ GO("libc.musl-x86_64.so.1", libcmusl)
 GO("librt.so.1", librt)
 GO("libbsd.so.0", libbsd)
 GO("libEGL.so.1", libegl)
+GO("libEGL.so", libegl)
 GO("libGL.so.1", libgl)
 GO("libGL.so", libgl)
 GO("libOpenGL.so.0", libgl)
 GO("libGLU.so.1", libglu)
 GO("libGLX.so.0", libglx)
 GO("libGLX.so", libglx)
+GO("libGLESv2.so.2", glesv2)
+GO("libGLESv2.so", glesv2)
 GO("libX11.so.6", libx11)
 GO("libasound.so.2", libasound)
 GO("libasound.so", libasound)
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index ceff6490..9ec09008 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -2482,6 +2482,7 @@
 #() vFEpppppuu
 #() vFiiiiuuip
 #() vFiilliilp
+#() vFiilluulp
 #() vFiupuiuup
 #() vFiupuuuup
 #() vFuiiiiiii
@@ -3437,6 +3438,7 @@ wrappedgio2:
   - g_dbus_connection_signal_subscribe
 - vFpppppppiippp:
   - g_dbus_connection_call
+wrappedglesv2:
 wrappedglib2:
 - vFp:
   - g_atexit
@@ -4365,10 +4367,14 @@ wrappedlibgl:
   - glDebugMessageCallbackAMD
   - glDebugMessageCallbackARB
   - glDebugMessageCallbackKHR
+- iFpp:
+  - eglDebugMessageControlKHR
 - vFipp:
   - glProgramCallbackMESA
 - vFppi:
   - glXSwapIntervalEXT
+- vFppp:
+  - eglSetBlobCacheFuncsANDROID
 wrappedlibglu:
 - vFpip:
   - gluNurbsCallback
diff --git a/src/wrapped/generated/wrappedglesv2defs.h b/src/wrapped/generated/wrappedglesv2defs.h
new file mode 100644
index 00000000..26d20e5a
--- /dev/null
+++ b/src/wrapped/generated/wrappedglesv2defs.h
@@ -0,0 +1,8 @@
+/*******************************************************************
+ * File automatically generated by rebuild_wrappers.py (v2.4.0.21) *
+ *******************************************************************/
+#ifndef __wrappedglesv2DEFS_H_
+#define __wrappedglesv2DEFS_H_
+
+
+#endif // __wrappedglesv2DEFS_H_
diff --git a/src/wrapped/generated/wrappedglesv2types.h b/src/wrapped/generated/wrappedglesv2types.h
new file mode 100644
index 00000000..586fe02b
--- /dev/null
+++ b/src/wrapped/generated/wrappedglesv2types.h
@@ -0,0 +1,17 @@
+/*******************************************************************
+ * File automatically generated by rebuild_wrappers.py (v2.4.0.21) *
+ *******************************************************************/
+#ifndef __wrappedglesv2TYPES_H_
+#define __wrappedglesv2TYPES_H_
+
+#ifndef LIBNAME
+#error You should only #include this file inside a wrapped*.c file
+#endif
+#ifndef ADDED_FUNCTIONS
+#define ADDED_FUNCTIONS() 
+#endif
+
+
+#define SUPER() ADDED_FUNCTIONS()
+
+#endif // __wrappedglesv2TYPES_H_
diff --git a/src/wrapped/generated/wrappedglesv2undefs.h b/src/wrapped/generated/wrappedglesv2undefs.h
new file mode 100644
index 00000000..9362f423
--- /dev/null
+++ b/src/wrapped/generated/wrappedglesv2undefs.h
@@ -0,0 +1,8 @@
+/*******************************************************************
+ * File automatically generated by rebuild_wrappers.py (v2.4.0.21) *
+ *******************************************************************/
+#ifndef __wrappedglesv2UNDEFS_H_
+#define __wrappedglesv2UNDEFS_H_
+
+
+#endif // __wrappedglesv2UNDEFS_H_
diff --git a/src/wrapped/generated/wrappedlibgltypes.h b/src/wrapped/generated/wrappedlibgltypes.h
index d266fdc9..e9d48457 100644
--- a/src/wrapped/generated/wrappedlibgltypes.h
+++ b/src/wrapped/generated/wrappedlibgltypes.h
@@ -14,8 +14,10 @@
 typedef int32_t (*iFi_t)(int32_t);
 typedef void* (*pFp_t)(void*);
 typedef void (*vFpp_t)(void*, void*);
+typedef int32_t (*iFpp_t)(void*, void*);
 typedef void (*vFipp_t)(int32_t, void*, void*);
 typedef void (*vFppi_t)(void*, void*, int32_t);
+typedef void (*vFppp_t)(void*, void*, void*);
 
 #define SUPER() ADDED_FUNCTIONS() \
 	GO(glXSwapIntervalMESA, iFi_t) \
@@ -26,7 +28,9 @@ typedef void (*vFppi_t)(void*, void*, int32_t);
 	GO(glDebugMessageCallbackAMD, vFpp_t) \
 	GO(glDebugMessageCallbackARB, vFpp_t) \
 	GO(glDebugMessageCallbackKHR, vFpp_t) \
+	GO(eglDebugMessageControlKHR, iFpp_t) \
 	GO(glProgramCallbackMESA, vFipp_t) \
-	GO(glXSwapIntervalEXT, vFppi_t)
+	GO(glXSwapIntervalEXT, vFppi_t) \
+	GO(eglSetBlobCacheFuncsANDROID, vFppp_t)
 
 #endif // __wrappedlibglTYPES_H_
diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c
index 260f1fc7..5126f324 100644
--- a/src/wrapped/generated/wrapper.c
+++ b/src/wrapped/generated/wrapper.c
@@ -2520,6 +2520,7 @@ typedef void (*vFEpppuipV_t)(x64emu_t*, void*, void*, void*, uint32_t, int32_t,
 typedef void (*vFEpppppuu_t)(x64emu_t*, void*, void*, void*, void*, void*, uint32_t, uint32_t);
 typedef void (*vFiiiiuuip_t)(int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, void*);
 typedef void (*vFiilliilp_t)(int32_t, int32_t, intptr_t, intptr_t, int32_t, int32_t, intptr_t, void*);
+typedef void (*vFiilluulp_t)(int32_t, int32_t, intptr_t, intptr_t, uint32_t, uint32_t, intptr_t, void*);
 typedef void (*vFiupuiuup_t)(int32_t, uint32_t, void*, uint32_t, int32_t, uint32_t, uint32_t, void*);
 typedef void (*vFiupuuuup_t)(int32_t, uint32_t, void*, uint32_t, uint32_t, uint32_t, uint32_t, void*);
 typedef void (*vFuiiiiiii_t)(uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t);
@@ -5589,6 +5590,7 @@ void vFEpppuipV(x64emu_t *emu, uintptr_t fcn) { vFEpppuipV_t fn = (vFEpppuipV_t)
 void vFEpppppuu(x64emu_t *emu, uintptr_t fcn) { vFEpppppuu_t fn = (vFEpppppuu_t)fcn; fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8)); }
 void vFiiiiuuip(x64emu_t *emu, uintptr_t fcn) { vFiiiiuuip_t fn = (vFiiiiuuip_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); }
 void vFiilliilp(x64emu_t *emu, uintptr_t fcn) { vFiilliilp_t fn = (vFiilliilp_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(intptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); }
+void vFiilluulp(x64emu_t *emu, uintptr_t fcn) { vFiilluulp_t fn = (vFiilluulp_t)fcn; fn((int32_t)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(intptr_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); }
 void vFiupuiuup(x64emu_t *emu, uintptr_t fcn) { vFiupuiuup_t fn = (vFiupuiuup_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); }
 void vFiupuuuup(x64emu_t *emu, uintptr_t fcn) { vFiupuuuup_t fn = (vFiupuuuup_t)fcn; fn((int32_t)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); }
 void vFuiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFuiiiiiii_t fn = (vFuiiiiiii_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); }
diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h
index 2e3fb875..d9393acd 100644
--- a/src/wrapped/generated/wrapper.h
+++ b/src/wrapped/generated/wrapper.h
@@ -2520,6 +2520,7 @@ void vFEpppuipV(x64emu_t *emu, uintptr_t fnc);
 void vFEpppppuu(x64emu_t *emu, uintptr_t fnc);
 void vFiiiiuuip(x64emu_t *emu, uintptr_t fnc);
 void vFiilliilp(x64emu_t *emu, uintptr_t fnc);
+void vFiilluulp(x64emu_t *emu, uintptr_t fnc);
 void vFiupuiuup(x64emu_t *emu, uintptr_t fnc);
 void vFiupuuuup(x64emu_t *emu, uintptr_t fnc);
 void vFuiiiiiii(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped/wrappedglesv2.c b/src/wrapped/wrappedglesv2.c
new file mode 100644
index 00000000..63b22358
--- /dev/null
+++ b/src/wrapped/wrappedglesv2.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#define _GNU_SOURCE         /* See feature_test_macros(7) */
+#include <dlfcn.h>
+
+#include "wrappedlibs.h"
+
+#include "debug.h"
+#include "wrapper.h"
+#include "bridge.h"
+#include "librarian/library_private.h"
+#include "x64emu.h"
+
+#ifdef ANDROID
+    const char* glesv2Name = "libGLESv2.so";
+#else
+    const char* glesv2Name = "libGLESv2.so.2";
+#endif
+
+#define LIBNAME glesv2
+
+#include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedglesv2_private.h b/src/wrapped/wrappedglesv2_private.h
new file mode 100644
index 00000000..54cb4b42
--- /dev/null
+++ b/src/wrapped/wrappedglesv2_private.h
@@ -0,0 +1,362 @@
+#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA))
+#error meh!
+#endif
+
+GO(glActiveShaderProgram, vFuu)
+GO(glActiveTexture, vFu)
+GO(glAttachShader, vFuu)
+GO(glBeginQuery, vFuu)
+GO(glBeginTransformFeedback, vFu)
+GO(glBindAttribLocation, vFuup)
+GO(glBindBuffer, vFuu)
+GO(glBindBufferBase, vFuuu)
+GO(glBindBufferRange, vFuuuii)
+GO(glBindFramebuffer, vFuu)
+GO(glBindImageTexture, vFuuiCiuu)
+GO(glBindProgramPipeline, vFu)
+GO(glBindRenderbuffer, vFuu)
+GO(glBindSampler, vFuu)
+GO(glBindTexture, vFuu)
+GO(glBindTransformFeedback, vFuu)
+GO(glBindVertexArray, vFu)
+GO(glBindVertexBuffer, vFuuli)
+GO(glBlendBarrier, vFv)
+GO(glBlendColor, vFffff)
+GO(glBlendEquation, vFu)
+GO(glBlendEquationi, vFuu)
+GO(glBlendEquationSeparate, vFuu)
+GO(glBlendEquationSeparatei, vFuuu)
+GO(glBlendFunc, vFuu)
+GO(glBlendFunci, vFuuu)
+GO(glBlendFuncSeparate, vFuuuu)
+GO(glBlendFuncSeparatei, vFuuuuu)
+GO(glBlitFramebuffer, vFiiiiiiiiiu)
+GO(glBufferData, vFulpu)
+GO(glBufferSubData, vFullp)
+GO(glCheckFramebufferStatus, uFu)
+GO(glClear, vFi)
+GO(glClearBufferfi, vFuifi)
+GO(glClearBufferfv, vFuip)
+GO(glClearBufferiv, vFuip)
+GO(glClearBufferuiv, vFuip)
+GO(glClearColor, vFffff)
+GO(glClearDepthf, vFf)
+GO(glClearStencil, vFi)
+GO(glClientWaitSync, uFpuL)
+GO(glColorMask, vFCCCC)
+GO(glColorMaski, vFuiiii)
+GO(glCompileShader, vFu)
+GO(glCompressedTexImage2D, vFuiuiiiip)
+GO(glCompressedTexImage3D, vFuiuiiiiip)
+GO(glCompressedTexSubImage2D, vFuiiiiiuip)
+GO(glCompressedTexSubImage3D, vFuiiiiiiiuip)
+GO(glCopyBufferSubData, vFuulll)
+GO(glCopyImageSubData, vFuuiiiiuuiiiiiii)
+GO(glCopyTexImage2D, vFuiuiiiii)
+GO(glCopyTexSubImage2D, vFuiiiiiii)
+GO(glCopyTexSubImage3D, vFuiiiiiiii)
+GO(glCreateProgram, uFv)
+GO(glCreateShader, uFu)
+GO(glCreateShaderProgramv, uFuip)
+GO(glCullFace, vFu)
+//GO(glDebugMessageCallback, 
+GO(glDebugMessageControl, vFuuuipi)
+GO(glDebugMessageInsert, vFuuuuip)
+GO(glDeleteBuffers, vFip)
+GO(glDeleteFramebuffers, vFip)
+GO(glDeleteProgram, vFu)
+GO(glDeleteProgramPipelines, vFip)
+GO(glDeleteQueries, vFip)
+GO(glDeleteRenderbuffers, vFip)
+GO(glDeleteSamplers, vFip)
+GO(glDeleteShader, vFu)
+GO(glDeleteSync, vFp)
+GO(glDeleteTextures, vFip)
+GO(glDeleteTransformFeedbacks, vFip)
+GO(glDeleteVertexArrays, vFip)
+GO(glDepthFunc, vFu)
+GO(glDepthMask, vFi)
+GO(glDepthRangef, vFff)
+GO(glDetachShader, vFuu)
+GO(glDisable, vFu)
+GO(glDisablei, vFuu)
+GO(glDisableVertexAttribArray, vFu)
+GO(glDispatchCompute, vFuuu)
+GO(glDispatchComputeIndirect, vFi)
+GO(glDrawArrays, vFuii)
+GO(glDrawArraysIndirect, vFup)
+GO(glDrawArraysInstanced, vFuiii)
+GO(glDrawBuffers, vFip)
+GO(glDrawElements, vFuiup)
+GO(glDrawElementsBaseVertex, vFuiupi)
+GO(glDrawElementsIndirect, vFuup)
+GO(glDrawElementsInstanced, vFuiupi)
+GO(glDrawElementsInstancedBaseVertex, vFuiupii)
+GO(glDrawRangeElements, vFuuuiup)
+GO(glDrawRangeElementsBaseVertex, vFuuuiupi)
+GO(glEnable, vFu)
+GO(glEnablei, vFuu)
+GO(glEnableVertexAttribArray, vFu)
+GO(glEndQuery, vFu)
+GO(glEndTransformFeedback, vFv)
+GO(glFenceSync, pFuu)
+GO(glFinish, vFv)
+GO(glFlush, vFv)
+GO(glFlushMappedBufferRange, vFull)
+GO(glFramebufferParameteri, vFuui)
+GO(glFramebufferRenderbuffer, vFuuuu)
+GO(glFramebufferTexture, vFuuui)
+GO(glFramebufferTexture2D, vFuuuui)
+GO(glFramebufferTextureLayer, vFuuuii)
+GO(glFrontFace, vFu)
+GO(glGenBuffers, vFip)
+GO(glGenerateMipmap, vFu)
+GO(glGenFramebuffers, vFip)
+GO(glGenProgramPipelines, vFip)
+GO(glGenQueries, vFip)
+GO(glGenRenderbuffers, vFip)
+GO(glGenSamplers, vFip)
+GO(glGenTextures, vFip)
+GO(glGenTransformFeedbacks, vFip)
+GO(glGenVertexArrays, vFip)
+GO(glGetActiveAttrib, vFuuipppp)
+GO(glGetActiveUniform, vFuuipppp)
+GO(glGetActiveUniformBlockiv, vFuuup)
+GO(glGetActiveUniformBlockName, vFuuipp)
+GO(glGetActiveUniformsiv, vFuipup)
+GO(glGetAttachedShaders, vFuipp)
+GO(glGetAttribLocation, iFup)
+GO(glGetBooleani_v, vFuup)
+GO(glGetBooleanv, vFup)
+GO(glGetBufferParameteri64v, vFuup)
+GO(glGetBufferParameteriv, vFuup)
+GO(glGetBufferPointerv, vFuup)
+GO(glGetDebugMessageLog, uFuipppppp)
+GO(glGetError, uFv)
+GO(glGetFloatv, vFup)
+GO(glGetFragDataLocation, iFup)
+GO(glGetFramebufferAttachmentParameteriv, vFuuup)
+GO(glGetFramebufferParameteriv, vFuup)
+GO(glGetGraphicsResetStatus, iFv)
+GO(glGetInteger64i_v, vFuup)
+GO(glGetInteger64v, vFup)
+GO(glGetIntegeri_v, vFuup)
+GO(glGetIntegerv, vFup)
+GO(glGetInternalformativ, vFuuuip)
+GO(glGetMultisamplefv, vFuup)
+GO(glGetnUniformfv, vFuilp)
+GO(glGetnUniformiv, vFuilp)
+GO(glGetnUniformuiv, vFuilp)
+GO(glGetObjectLabel, vFuuipp)
+GO(glGetObjectPtrLabel, vFpipp)
+GO(glGetPointerv, vFup)
+GO(glGetProgramBinary, vFuippp)
+GO(glGetProgramInfoLog, vFuipp)
+GO(glGetProgramInterfaceiv, vFuuup)
+GO(glGetProgramiv, vFuup)
+GO(glGetProgramPipelineInfoLog, vFuipp)
+GO(glGetProgramPipelineiv, vFuup)
+GO(glGetProgramResourceIndex, uFuup)
+GO(glGetProgramResourceiv, vFuuuipipp)
+GO(glGetProgramResourceLocation, iFuup)
+GO(glGetProgramResourceName, vFuuuipp)
+GO(glGetQueryiv, vFuup)
+GO(glGetQueryObjectuiv, vFuup)
+GO(glGetRenderbufferParameteriv, vFuup)
+GO(glGetSamplerParameterfv, vFuup)
+GO(glGetSamplerParameterIiv, vFuup)
+GO(glGetSamplerParameterIuiv, vFuup)
+GO(glGetSamplerParameteriv, vFuup)
+GO(glGetShaderInfoLog, vFuipp)
+GO(glGetShaderiv, vFuup)
+GO(glGetShaderPrecisionFormat, vFuupp)
+GO(glGetShaderSource, vFuipp)
+GO(glGetString, pFu)
+GO(glGetStringi, pFuu)
+GO(glGetSynciv, vFpuipp)
+GO(glGetTexLevelParameterfv, vFuiup)
+GO(glGetTexLevelParameteriv, vFuiup)
+GO(glGetTexParameterfv, vFuup)
+GO(glGetTexParameterIiv, vFuup)
+GO(glGetTexParameterIuiv, vFuup)
+GO(glGetTexParameteriv, vFuup)
+GO(glGetTransformFeedbackVarying, vFuuipppp)
+GO(glGetUniformBlockIndex, uFup)
+GO(glGetUniformfv, vFuip)
+GO(glGetUniformIndices, vFuipp)
+GO(glGetUniformiv, vFuip)
+GO(glGetUniformLocation, iFup)
+GO(glGetUniformuiv, vFuip)
+GO(glGetVertexAttribfv, vFuup)
+GO(glGetVertexAttribIiv, vFuup)
+GO(glGetVertexAttribIuiv, vFuup)
+GO(glGetVertexAttribiv, vFuup)
+GO(glGetVertexAttribPointerv, vFuup)
+GO(glHint, vFuu)
+GO(glInvalidateFramebuffer, vFuip)
+GO(glInvalidateSubFramebuffer, vFuipiiii)
+GO(glIsBuffer, iFu)
+GO(glIsEnabled, iFu)
+GO(glIsEnabledi, iFuu)
+GO(glIsFramebuffer, iFu)
+GO(glIsProgram, iFu)
+GO(glIsProgramPipeline, iFu)
+GO(glIsQuery, iFu)
+GO(glIsRenderbuffer, iFu)
+GO(glIsSampler, iFu)
+GO(glIsShader, iFu)
+GO(glIsSync, CFp)
+GO(glIsTexture, iFu)
+GO(glIsTransformFeedback, iFu)
+GO(glIsVertexArray, iFu)
+GO(glLineWidth, vFf)
+GO(glLinkProgram, vFu)
+GO(glMapBufferRange, pFullu)
+GO(glMemoryBarrier, vFi)
+GO(glMemoryBarrierByRegion, vFu)
+GO(glMinSampleShading, vFf)
+GO(glObjectLabel, vFuuip)
+GO(glObjectPtrLabel, vFpip)
+GO(glPatchParameteri, vFui)
+GO(glPauseTransformFeedback, vFv)
+GO(glPixelStorei, vFui)
+GO(glPolygonOffset, vFff)
+GO(glPopDebugGroup, vFv)
+GO(glPrimitiveBoundingBox, vFffffffff)
+GO(glProgramBinary, vFuupi)
+GO(glProgramParameteri, vFuui)
+GO(glProgramUniform1f, vFuif)
+GO(glProgramUniform1fv, vFuiip)
+GO(glProgramUniform1i, vFuii)
+GO(glProgramUniform1iv, vFuiip)
+GO(glProgramUniform1ui, vFuiu)
+GO(glProgramUniform1uiv, vFuiip)
+GO(glProgramUniform2f, vFuiff)
+GO(glProgramUniform2fv, vFuiip)
+GO(glProgramUniform2i, vFuiii)
+GO(glProgramUniform2iv, vFuiip)
+GO(glProgramUniform2ui, vFuiuu)
+GO(glProgramUniform2uiv, vFuiip)
+GO(glProgramUniform3f, vFuifff)
+GO(glProgramUniform3fv, vFuiip)
+GO(glProgramUniform3i, vFuiiii)
+GO(glProgramUniform3iv, vFuiip)
+GO(glProgramUniform3ui, vFuiuuu)
+GO(glProgramUniform3uiv, vFuiip)
+GO(glProgramUniform4f, vFuiffff)
+GO(glProgramUniform4fv, vFuiip)
+GO(glProgramUniform4i, vFuiiiii)
+GO(glProgramUniform4iv, vFuiip)
+GO(glProgramUniform4ui, vFuiuuuu)
+GO(glProgramUniform4uiv, vFuiip)
+GO(glProgramUniformMatrix2fv, vFuiiip)
+GO(glProgramUniformMatrix2x3fv, vFuiiip)
+GO(glProgramUniformMatrix2x4fv, vFuiiip)
+GO(glProgramUniformMatrix3fv, vFuiiip)
+GO(glProgramUniformMatrix3x2fv, vFuiiip)
+GO(glProgramUniformMatrix3x4fv, vFuiiip)
+GO(glProgramUniformMatrix4fv, vFuiiip)
+GO(glProgramUniformMatrix4x2fv, vFuiiip)
+GO(glProgramUniformMatrix4x3fv, vFuiiip)
+GO(glPushDebugGroup, vFuuip)
+GO(glReadBuffer, vFu)
+GO(glReadnPixels, vFiilluulp)
+GO(glReadPixels, vFiiiiuup)
+GO(glReleaseShaderCompiler, vFv)
+GO(glRenderbufferStorage, vFuuii)
+GO(glRenderbufferStorageMultisample, vFuiuii)
+GO(glResumeTransformFeedback, vFv)
+GO(glSampleCoverage, vFfi)
+GO(glSampleMaski, vFui)
+GO(glSamplerParameterf, vFuuf)
+GO(glSamplerParameterfv, vFuup)
+GO(glSamplerParameteri, vFuui)
+GO(glSamplerParameterIiv, vFuup)
+GO(glSamplerParameterIuiv, vFuup)
+GO(glSamplerParameteriv, vFuup)
+GO(glScissor, vFiiii)
+GO(glShaderBinary, vFipupi)
+GO(glShaderSource, vFuipp)
+GO(glStencilFunc, vFuiu)
+GO(glStencilFuncSeparate, vFuuiu)
+GO(glStencilMask, vFu)
+GO(glStencilMaskSeparate, vFuu)
+GO(glStencilOp, vFuuu)
+GO(glStencilOpSeparate, vFuuuu)
+GO(glTexBuffer, vFuuu)
+GO(glTexBufferRange, vFuuull)
+GO(glTexImage2D, vFuiiiiiuup)
+GO(glTexImage3D, vFuiiiiiiuup)
+GO(glTexParameterf, vFuuf)
+GO(glTexParameterfv, vFuup)
+GO(glTexParameteri, vFuui)
+GO(glTexParameterIiv, vFuup)
+GO(glTexParameterIuiv, vFuup)
+GO(glTexParameteriv, vFuup)
+GO(glTexStorage2D, vFuiuii)
+GO(glTexStorage2DMultisample, vFuiuiiC)
+GO(glTexStorage3D, vFuiuiii)
+GO(glTexStorage3DMultisample, vFuiuiiiC)
+GO(glTexSubImage2D, vFuiiiiiuup)
+GO(glTexSubImage3D, vFuiiiiiiiuup)
+GO(glTransformFeedbackVaryings, vFuipu)
+GO(glUniform1f, vFif)
+GO(glUniform1fv, vFiip)
+GO(glUniform1i, vFii)
+GO(glUniform1iv, vFiip)
+GO(glUniform1ui, vFiu)
+GO(glUniform1uiv, vFiip)
+GO(glUniform2f, vFiff)
+GO(glUniform2fv, vFiip)
+GO(glUniform2i, vFiii)
+GO(glUniform2iv, vFiip)
+GO(glUniform2ui, vFiuu)
+GO(glUniform2uiv, vFiip)
+GO(glUniform3f, vFifff)
+GO(glUniform3fv, vFiip)
+GO(glUniform3i, vFiiii)
+GO(glUniform3iv, vFiip)
+GO(glUniform3ui, vFiuuu)
+GO(glUniform3uiv, vFiip)
+GO(glUniform4f, vFiffff)
+GO(glUniform4fv, vFiip)
+GO(glUniform4i, vFiiiii)
+GO(glUniform4iv, vFiip)
+GO(glUniform4ui, vFiuuuu)
+GO(glUniform4uiv, vFiip)
+GO(glUniformBlockBinding, vFuuu)
+GO(glUniformMatrix2fv, vFiiip)
+GO(glUniformMatrix2x3fv, vFiiip)
+GO(glUniformMatrix2x4fv, vFiiip)
+GO(glUniformMatrix3fv, vFiiip)
+GO(glUniformMatrix3x2fv, vFiiip)
+GO(glUniformMatrix3x4fv, vFiiip)
+GO(glUniformMatrix4fv, vFiiip)
+GO(glUniformMatrix4x2fv, vFiiip)
+GO(glUniformMatrix4x3fv, vFiiip)
+GO(glUnmapBuffer, iFu)
+GO(glUseProgram, vFu)
+GO(glUseProgramStages, vFuuu)
+GO(glValidateProgram, vFu)
+GO(glValidateProgramPipeline, vFu)
+GO(glVertexAttrib1f, vFuf)
+GO(glVertexAttrib1fv, vFup)
+GO(glVertexAttrib2f, vFuff)
+GO(glVertexAttrib2fv, vFup)
+GO(glVertexAttrib3f, vFufff)
+GO(glVertexAttrib3fv, vFup)
+GO(glVertexAttrib4f, vFuffff)
+GO(glVertexAttrib4fv, vFup)
+GO(glVertexAttribBinding, vFuu)
+GO(glVertexAttribDivisor, vFuu)
+GO(glVertexAttribFormat, vFuiuCu)
+GO(glVertexAttribI4i, vFuiiii)
+GO(glVertexAttribI4iv, vFup)
+GO(glVertexAttribI4ui, vFuuuuu)
+GO(glVertexAttribI4uiv, vFup)
+GO(glVertexAttribIFormat, vFuiuu)
+GO(glVertexAttribIPointer, vFuiuip)
+GO(glVertexAttribPointer, vFuiuiip)
+GO(glVertexBindingDivisor, vFuu)
+GO(glViewport, vFiiii)
+GO(glWaitSync, vFpuL)
diff --git a/src/wrapped/wrappedlibegl_private.h b/src/wrapped/wrappedlibegl_private.h
index e109388a..1f3eb966 100644
--- a/src/wrapped/wrappedlibegl_private.h
+++ b/src/wrapped/wrappedlibegl_private.h
@@ -5,21 +5,21 @@
 GO(eglBindAPI, iFi)
 GO(eglBindTexImage, iFppi)
 GO(eglChooseConfig, iFpppip)
-//GO(eglClientWaitSync, 
+GO(eglClientWaitSync, iFppiU)
 GO(eglCopyBuffers, iFppp)
 GO(eglCreateContext, pFpppp)
-//GO(eglCreateImage, 
+GO(eglCreateImage, pFppuup)
 GO(eglCreatePbufferFromClientBuffer, pFpippp)
 GO(eglCreatePbufferSurface, pFppp)
 GO(eglCreatePixmapSurface, pFpppp)
-//GO(eglCreatePlatformPixmapSurface, 
-//GO(eglCreatePlatformWindowSurface, 
-//GO(eglCreateSync, 
+GO(eglCreatePlatformPixmapSurface, pFpppp)
+GO(eglCreatePlatformWindowSurface, pFpppp)
+GO(eglCreateSync, pFpup)
 GO(eglCreateWindowSurface, pFpppp)
 GO(eglDestroyContext, iFpp)
-//GO(eglDestroyImage, 
+GO(eglDestroyImage, iFpp)
 GO(eglDestroySurface, iFpp)
-//GO(eglDestroySync, 
+GO(eglDestroySync, iFpp)
 GO(eglGetConfigAttrib, iFppip)
 GO(eglGetConfigs, iFppip)
 GO(eglGetCurrentContext, pFv)
@@ -27,9 +27,9 @@ GO(eglGetCurrentDisplay, pFv)
 GO(eglGetCurrentSurface, pFi)
 GO(eglGetDisplay, pFp)
 GO(eglGetError, iFv)
-//GO(eglGetPlatformDisplay, 
+GO(eglGetPlatformDisplay, pFppp)
 GOM(eglGetProcAddress, pFEp)
-//GO(eglGetSyncAttrib, 
+GO(eglGetSyncAttrib, iFppip)
 GO(eglInitialize, iFppp)
 GO(eglMakeCurrent, iFpppp)
 GO(eglQueryAPI, iFv)
@@ -45,5 +45,5 @@ GO(eglTerminate, iFp)
 GO(eglWaitClient, iFv)
 GO(eglWaitGL, iFv)
 GO(eglWaitNative, iFi)
-//GO(eglWaitSync, 
+GO(eglWaitSync, iFppi)
 
diff --git a/src/wrapped/wrappedlibgl.c b/src/wrapped/wrappedlibgl.c
index 32780acb..f7d7633e 100644
--- a/src/wrapped/wrappedlibgl.c
+++ b/src/wrapped/wrappedlibgl.c
@@ -33,6 +33,7 @@ EXPORT void* my_glXGetProcAddressARB(x64emu_t* emu, void* name) __attribute__((a
 
 typedef int  (*iFi_t)(int);
 typedef void (*vFpp_t)(void*, void*);
+typedef void (*vFppp_t)(void*, void*, void*);
 typedef void (*vFppi_t)(void*, void*, int);
 typedef void*(*pFp_t)(void*);
 typedef void (*debugProc_t)(int32_t, int32_t, uint32_t, int32_t, int32_t, void*, void*);
@@ -76,6 +77,28 @@ static void* find_debug_callback_Fct(void* fct)
     printf_log(LOG_NONE, "Warning, no more slot for libGL debug_callback callback\n");
     return NULL;
 }
+// egl_debug_callback ...
+#define GO(A)   \
+static uintptr_t my_egl_debug_callback_fct_##A = 0;                                                     \
+    static void my_egl_debug_callback_##A(int a, void* b, int c, void* d, void* e, const char* f)       \
+{                                                                                                       \
+    RunFunctionFmt(my_egl_debug_callback_fct_##A, "ipippp", a, b, c, d, e, f);                          \
+}
+SUPER()
+#undef GO
+static void* find_egl_debug_callback_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_egl_debug_callback_fct_##A == (uintptr_t)fct) return my_egl_debug_callback_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_egl_debug_callback_fct_##A == 0) {my_egl_debug_callback_fct_##A = (uintptr_t)fct; return my_egl_debug_callback_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libGL egl_debug_callback callback\n");
+    return NULL;
+}
 // program_callback ...
 #define GO(A)                                                       \
 static uintptr_t my_program_callback_fct_##A = 0;                   \
@@ -98,6 +121,50 @@ static void* find_program_callback_Fct(void* fct)
     printf_log(LOG_NONE, "Warning, no more slot for libGL program_callback callback\n");
     return NULL;
 }
+// set_blob_func ...
+#define GO(A)                                                               \
+static uintptr_t my_set_blob_func_fct_##A = 0;                              \
+static void my_set_blob_func_##A(void* a, ssize_t b, void* c, ssize_t d)    \
+{                                                                           \
+    RunFunctionFmt(my_set_blob_func_fct_##A, "plpl", a, b, c, d);           \
+}
+SUPER()
+#undef GO
+static void* find_set_blob_func_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_set_blob_func_fct_##A == (uintptr_t)fct) return my_set_blob_func_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_set_blob_func_fct_##A == 0) {my_set_blob_func_fct_##A = (uintptr_t)fct; return my_set_blob_func_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libGL set_blob_func callback\n");
+    return NULL;
+}
+// get_blob_func ...
+#define GO(A)                                                                       \
+static uintptr_t my_get_blob_func_fct_##A = 0;                                      \
+static ssize_t my_get_blob_func_##A(void* a, ssize_t b, void* c, ssize_t d)         \
+{                                                                                   \
+    return (ssize_t)RunFunctionFmt(my_get_blob_func_fct_##A, "plpl", a, b, c, d);   \
+}
+SUPER()
+#undef GO
+static void* find_get_blob_func_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_get_blob_func_fct_##A == (uintptr_t)fct) return my_get_blob_func_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_get_blob_func_fct_##A == 0) {my_get_blob_func_fct_##A = (uintptr_t)fct; return my_get_blob_func_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libGL get_blob_func callback\n");
+    return NULL;
+}
 
 // glDebugMessageCallback ...
 #define GO(A)                                                                       \
@@ -191,6 +258,52 @@ static void* find_glDebugMessageCallbackKHR_Fct(void* fct)
     printf_log(LOG_NONE, "Warning, no more slot for libGL glDebugMessageCallbackKHR callback\n");
     return NULL;
 }
+// eglDebugMessageControlKHR ...
+#define GO(A)                                                                           \
+static vFpp_t my_eglDebugMessageControlKHR_fct_##A = NULL;                             \
+static void my_eglDebugMessageControlKHR_##A(x64emu_t* emu, void* prod, void* param)   \
+{                                                                                       \
+    if(!my_eglDebugMessageControlKHR_fct_##A)                                          \
+        return;                                                                         \
+    my_eglDebugMessageControlKHR_fct_##A(find_egl_debug_callback_Fct(prod), param);    \
+}
+SUPER()
+#undef GO
+static void* find_eglDebugMessageControlKHR_Fct(void* fct)
+{
+    if(!fct) return fct;
+    #define GO(A) if(my_eglDebugMessageControlKHR_fct_##A == (vFpp_t)fct) return my_eglDebugMessageControlKHR_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_eglDebugMessageControlKHR_fct_##A == 0) {my_eglDebugMessageControlKHR_fct_##A = (vFpp_t)fct; return my_eglDebugMessageControlKHR_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libGL eglDebugMessageControlKHR callback\n");
+    return NULL;
+}
+// eglSetBlobCacheFuncsANDROID ...
+#define GO(A)                                                                                               \
+static vFppp_t my_eglSetBlobCacheFuncsANDROID_fct_##A = NULL;                                               \
+static void my_eglSetBlobCacheFuncsANDROID_##A(x64emu_t* emu, void* dpy, void* set, void* get)              \
+{                                                                                                           \
+    if(!my_eglSetBlobCacheFuncsANDROID_fct_##A)                                                             \
+        return;                                                                                             \
+    my_eglSetBlobCacheFuncsANDROID_fct_##A(dpy, find_set_blob_func_Fct(set), find_get_blob_func_Fct(get));  \
+}
+SUPER()
+#undef GO
+static void* find_eglSetBlobCacheFuncsANDROID_Fct(void* fct)
+{
+    if(!fct) return fct;
+    #define GO(A) if(my_eglSetBlobCacheFuncsANDROID_fct_##A == (vFppp_t)fct) return my_eglSetBlobCacheFuncsANDROID_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_eglSetBlobCacheFuncsANDROID_fct_##A == 0) {my_eglSetBlobCacheFuncsANDROID_fct_##A = (vFppp_t)fct; return my_eglSetBlobCacheFuncsANDROID_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libGL eglSetBlobCacheFuncsANDROID callback\n");
+    return NULL;
+}
 // glXSwapIntervalMESA ...
 #define GO(A)                                           \
 static iFi_t my_glXSwapIntervalMESA_fct_##A = NULL;     \
@@ -325,15 +438,17 @@ static void* find_glGetVkProcAddrNV_Fct(void* fct)
 
 #include "wrappedlib_init.h"
 
-#define SUPER()                         \
- GO(vFpp_t, glDebugMessageCallback)     \
- GO(vFpp_t, glDebugMessageCallbackARB)  \
- GO(vFpp_t, glDebugMessageCallbackAMD)  \
- GO(vFpp_t, glDebugMessageCallbackKHR)  \
- GO(iFi_t, glXSwapIntervalMESA)         \
- GO(vFppi_t, glXSwapIntervalEXT)        \
- GO(vFpp_t, glProgramCallbackMESA)      \
- GO(pFp_t, glGetVkProcAddrNV)           \
+#define SUPER()                             \
+ GO(vFpp_t, glDebugMessageCallback)         \
+ GO(vFpp_t, glDebugMessageCallbackARB)      \
+ GO(vFpp_t, glDebugMessageCallbackAMD)      \
+ GO(vFpp_t, glDebugMessageCallbackKHR)      \
+ GO(vFpp_t, eglDebugMessageControlKHR)      \
+ GO(iFi_t, glXSwapIntervalMESA)             \
+ GO(vFppi_t, glXSwapIntervalEXT)            \
+ GO(vFpp_t, glProgramCallbackMESA)          \
+ GO(pFp_t, glGetVkProcAddrNV)               \
+ GO(vFppp_t, eglSetBlobCacheFuncsANDROID)   \
 
 
 gl_wrappers_t* getGLProcWrapper(box64context_t* context, glprocaddress_t procaddress)
diff --git a/src/wrapped/wrappedlibgl_private.h b/src/wrapped/wrappedlibgl_private.h
index b25f26d6..33605de8 100644
--- a/src/wrapped/wrappedlibgl_private.h
+++ b/src/wrapped/wrappedlibgl_private.h
@@ -787,6 +787,10 @@ GO(glMemoryBarrierByRegion, vFu)
 GO(glGetTextureSubImage, vFuiiiiiiiuuip)
 GO(glGetCompressedTextureSubImage, vFuiiiiiiiip)
 GO(glGetGraphicsResetStatus, iFv)
+GO(glGetnUniformfv, vFuilp)
+GO(glGetnUniformiv, vFuilp)
+GO(glGetnUniformuiv, vFuilp)
+GO(glReadnPixels, vFiilluulp)
 //VERSION_4_6
 GO(glSpecializeShader, vFippp)
 
@@ -2037,9 +2041,6 @@ GO(glIsTextureEXT, iFu)
 GO(glPrioritizeTexturesEXT, vFipp)
 //EXT_texture_perturb_normal
 GO(glTextureNormalEXT, vFu)
-//EXT_timer_query
-GO(glGetQueryObjecti64vEXT, vFuup)
-GO(glGetQueryObjectui64vEXT, vFuup)
 //EXT_transform_feedback
 GO(glBeginTransformFeedbackEXT, vFu)
 GO(glBindBufferBaseEXT, vFuuu)
@@ -3309,82 +3310,6 @@ GO(glGetnUniformfvKHR, vFuilp)
 GO(glGetnUniformivKHR, vFuilp)
 GO(glGetnUniformuivKHR, vFuilp)
 
-// EGL stuffs
-GO(eglBindAPI, iFi)
-GO(eglBindTexImage, iFppi)
-GO(eglChooseConfig, iFpppip)
-GO(eglClientWaitSyncKHR, iFppip)
-GO(eglClientWaitSyncNV, iFpip)
-GO(eglCopyBuffers, iFppp)
-GO(eglCreateContext, pFpppp)
-GO(eglCreateDRMImageMESA, pFpp)
-GO(eglCreateFenceSyncNV, pFpip)
-GO(eglCreateImageKHR, pFppipp)
-GO(eglCreatePbufferFromClientBuffer, pFpippp)
-GO(eglCreatePbufferSurface, pFppp)
-GO(eglCreatePixmapSurface, pFpppp)
-GO(eglCreatePixmapSurfaceHI, pFppp)
-GO(eglCreateStreamFromFileDescriptorKHR, pFpi)
-GO(eglCreateStreamKHR, pFpp)
-GO(eglCreateStreamProducerSurfaceKHR, pFpppp)
-GO(eglCreateSyncKHR, pFpip)
-GO(eglCreateWindowSurface, pFpppp)
-GO(eglDestroyContext, iFpp)
-GO(eglDestroyImageKHR, iFpp)
-GO(eglDestroyStreamKHR, iFpp)
-GO(eglDestroySurface, iFpp)
-GO(eglDestroySyncKHR, iFpp)
-GO(eglDestroySyncNV, iFp)
-GO(eglDupNativeFenceFDANDROID, iFpp)
-GO(eglExportDRMImageMESA, iFppppp)
-GO(eglFenceNV, iFp)
-GO(eglGetConfigAttrib, iFppip)
-GO(eglGetConfigs, iFppip)
-GO(eglGetCurrentContext, pFv)
-GO(eglGetCurrentDisplay, pFv)
-GO(eglGetCurrentSurface, pFi)
-GO(eglGetDisplay, pFp)
-GO(eglGetError, iFv)
-GO(eglGetStreamFileDescriptorKHR, iFpp)
-GO(eglGetSyncAttribKHR, iFppip)
-GO(eglGetSyncAttribNV, iFpip)
-GO(eglGetSystemTimeFrequencyNV, UFv)
-GO(eglGetSystemTimeNV, UFv)
-GO(eglInitialize, iFppp)
-GO(eglLockSurfaceKHR, iFppp)
-GO(eglMakeCurrent, iFpppp)
-GO(eglPostSubBufferNV, iFppiiii)
-GO(eglQueryAPI, iFv)
-GO(eglQueryContext, iFppip)
-GO(eglQueryNativeDisplayNV, iFpp)
-GO(eglQueryNativePixmapNV, iFppp)
-GO(eglQueryNativeWindowNV, iFppp)
-GO(eglQueryStreamKHR, iFppip)
-GO(eglQueryStreamTimeKHR, iFppip)
-GO(eglQueryStreamu64KHR, iFppip)
-GO(eglQueryString, pFpi)
-GO(eglQuerySurface, iFppip)
-GO(eglQuerySurfacePointerANGLE, iFppip)
-GO(eglReleaseTexImage, iFppi)
-GO(eglReleaseThread, iFv)
-//GOM(eglSetBlobCacheFuncsANDROID, vFpBB)
-GO(eglSignalSyncKHR, iFppi)
-GO(eglSignalSyncNV, iFpi)
-GO(eglStreamAttribKHR, iFppii)
-GO(eglStreamConsumerAcquireKHR, iFpp)
-GO(eglStreamConsumerGLTextureExternalKHR, iFpp)
-GO(eglStreamConsumerReleaseKHR, iFpp)
-GO(eglSurfaceAttrib, iFppii)
-GO(eglSwapBuffers, iFpp)
-GO(eglSwapBuffersWithDamageEXT, iFpppi)
-GO(eglSwapInterval, iFpi)
-GO(eglTerminate, iFp)
-GO(eglUnlockSurfaceKHR, iFpp)
-GO(eglWaitClient, iFv)
-GO(eglWaitGL, iFv)
-GO(eglWaitNative, iFi)
-GO(eglWaitSyncKHR, iFppi)
-
 // GLES stuff
 GO(glDiscardFramebuffer, vFilp)
 GO(glDiscardFramebufferARB, vFilp)
@@ -3417,6 +3342,7 @@ GO(glGetProgramPipelineivEXT, vFuip)
 GO(glIsProgramPipelineEXT, iFu)
 GO(glUseProgramStagesEXT, vFuuu)
 GO(glValidateProgramPipelineEXT, vFu)
+GO(glPrimitiveBoundingBox, vFffffffff)
 
 // GL_EXT_window_rectangles
 GO(glWindowRectanglesEXT, vFuip)
@@ -4014,3 +3940,123 @@ GO(glTexturePageCommitmentMemNV, vFuiiiiiiiiuLC)
 
 // GL_NV_vdpau_interop2
 GO(glVDPAURegisterVideoSurfaceWithPictureStructureNV, lFpuipC)
+
+// Base EGL
+GO(eglBindAPI, iFi)
+GO(eglBindTexImage, iFppi)
+GO(eglChooseConfig, iFpppip)
+GO(eglClientWaitSync, iFppiU)
+GO(eglCopyBuffers, iFppp)
+GO(eglCreateContext, pFpppp)
+GO(eglCreateImage, pFppuup)
+GO(eglCreatePbufferFromClientBuffer, pFpippp)
+GO(eglCreatePbufferSurface, pFppp)
+GO(eglCreatePixmapSurface, pFpppp)
+GO(eglCreatePlatformPixmapSurface, pFpppp)
+GO(eglCreatePlatformWindowSurface, pFpppp)
+GO(eglCreateSync, pFpup)
+GO(eglCreateWindowSurface, pFpppp)
+GO(eglDestroyContext, iFpp)
+GO(eglDestroyImage, iFpp)
+GO(eglDestroySurface, iFpp)
+GO(eglDestroySync, iFpp)
+GO(eglGetConfigAttrib, iFppip)
+GO(eglGetConfigs, iFppip)
+GO(eglGetCurrentContext, pFv)
+GO(eglGetCurrentDisplay, pFv)
+GO(eglGetCurrentSurface, pFi)
+GO(eglGetDisplay, pFp)
+GO(eglGetError, iFv)
+GO(eglGetPlatformDisplay, pFppp)
+//GOM(eglGetProcAddress, pFEp)
+GO(eglGetSyncAttrib, iFppip)
+GO(eglInitialize, iFppp)
+GO(eglMakeCurrent, iFpppp)
+GO(eglQueryAPI, iFv)
+GO(eglQueryContext, iFppip)
+GO(eglQueryString, pFpi)
+GO(eglQuerySurface, iFppip)
+GO(eglReleaseTexImage, iFppi)
+GO(eglReleaseThread, iFv)
+GO(eglSurfaceAttrib, iFppii)
+GO(eglSwapBuffers, iFpp)
+GO(eglSwapInterval, iFpi)
+GO(eglTerminate, iFp)
+GO(eglWaitClient, iFv)
+GO(eglWaitGL, iFv)
+GO(eglWaitNative, iFi)
+GO(eglWaitSync, iFppi)
+
+// EGL_KHR_debug
+GOM(eglDebugMessageControlKHR, iFEpp)
+GO(eglQueryDebugKHR, iFip)
+GO(eglLabelObjectKHR, iFpupp)
+
+// EGL_MESA_image_dma_buf_export
+GO(eglExportDMABUFImageQueryMESA, iFppppp)
+GO(eglExportDMABUFImageMESA, iFppppp)
+
+// EGL_ANGLE_sync_control_rate
+GO(eglGetMscRateANGLE, iFpppp)
+
+// EGL_CHROMIUM_sync_control
+GO(eglGetSyncValuesCHROMIUM, iFppppp)
+
+// EGL_EXT_device_query
+GO(eglQueryDeviceAttribEXT, iFpip)
+GO(eglQueryDeviceStringEXT, pFpi)
+GO(eglQueryDisplayAttribEXT, iFpip)
+
+// EGL_EXT_device_enumeration
+GO(eglQueryDevicesEXT, iFipp)
+
+// EGL_EXT_image_dma_buf_import_modifiers
+GO(eglQueryDmaBufFormatsEXT, iFpipp)
+GO(eglQueryDmaBufModifiersEXT, iFpiippp)
+
+// EGL_ANDROID_blob_cache
+GOM(eglSetBlobCacheFuncsANDROID, vFEppp)
+
+// EGL_KHR_swap_buffers_with_damage
+GO(eglSwapBuffersWithDamageKHR, iFpppi)
+
+// EGL_KHR_wait_sync
+GO(eglWaitSyncKHR, iFppi)
+
+// EGL_KHR_image_base
+GO(eglCreateImageKHR, pFppupp)
+GO(eglDestroyImageKHR, iFpp)
+
+// EGL_KHR_fence_sync
+GO(eglCreateSyncKHR, pFpup)
+GO(eglDestroySyncKHR, iFpp)
+GO(eglClientWaitSyncKHR, iFppiU)
+GO(eglGetSyncAttribKHR, iFppip)
+
+// EGL_ANDROID_native_fence_sync
+GO(eglDupNativeFenceFDANDROID, iFpp)
+
+// EGL_NV_post_sub_buffer
+GO(eglPostSubBufferNV, iFppiiii)
+
+// GL_EXT_clip_control
+GO(glClipControlEXT, vFuu)
+
+// GL_EXT_disjoint_timer_query
+GO(glGenQueriesEXT, vFlp)
+GO(glDeleteQueriesEXT, vFlp)
+GO(glIsQueryEXT, iFu)
+GO(glBeginQueryEXT, vFuu)
+GO(glEndQueryEXT, vFu)
+GO(glQueryCounterEXT, vFuu)
+GO(glGetQueryivEXT, vFuup)
+GO(glGetQueryObjectivEXT, vFuup)
+GO(glGetQueryObjectuivEXT, vFuup)
+GO(glGetQueryObjecti64vEXT, vFuup)
+GO(glGetQueryObjectui64vEXT, vFuup)
+GO(glGetInteger64vEXT, vFup)
+
+// GL_OES_mapbuffer
+GO(glGetBufferPointervOES, vFuup)
+GO(glMapBufferOES, pFuu)
+GO(glUnmapBufferOES, iFu)