diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-02-29 12:55:57 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-02-29 12:55:57 +0100 |
| commit | 50250bd2ca6bd4e30486da9a55ffee0cebebc37d (patch) | |
| tree | 82ca32449ae6bc296f918baf55e1f5aba60b1dda /src/wrapped/wrappedlibgl.c | |
| parent | 0e71c3a2ac67f9c77d27571f3e70429aefded5d5 (diff) | |
| download | box64-50250bd2ca6bd4e30486da9a55ffee0cebebc37d.tar.gz box64-50250bd2ca6bd4e30486da9a55ffee0cebebc37d.zip | |
Added wrapped support for EGL/GLESv2
Diffstat (limited to 'src/wrapped/wrappedlibgl.c')
| -rw-r--r-- | src/wrapped/wrappedlibgl.c | 133 |
1 files changed, 124 insertions, 9 deletions
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) |