From a8e236f94d03bd3248025ed79b833f884e53b329 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Wed, 17 Feb 2021 14:44:02 -0800 Subject: [PATCH 1/5] Move emscripten_GetProcAddress calls into C --- src/library_egl.js | 7 ------- src/library_glfw.js | 5 ----- src/library_sdl.js | 5 ----- system/lib/gl/libprocaddr.c | 22 ++++++++++++++++++++++ tools/deps_info.py | 4 ---- tools/system_libs.py | 2 +- 6 files changed, 23 insertions(+), 22 deletions(-) create mode 100644 system/lib/gl/libprocaddr.c diff --git a/src/library_egl.js b/src/library_egl.js index bc49a1ceaca3d..c826c0946c26a 100644 --- a/src/library_egl.js +++ b/src/library_egl.js @@ -687,13 +687,6 @@ var LibraryEGL = { return 0 /* EGL_FALSE */; }, - eglGetProcAddress__deps: ['emscripten_GetProcAddress'], - eglGetProcAddress__proxy: 'sync', - eglGetProcAddress__sig: 'ii', - eglGetProcAddress: function(name_) { - return _emscripten_GetProcAddress(name_); - }, - eglReleaseThread__proxy: 'sync', eglReleaseThread__sig: 'i', eglReleaseThread: function() { diff --git a/src/library_glfw.js b/src/library_glfw.js index 164a51c38d722..c9a1e5b8fa821 100644 --- a/src/library_glfw.js +++ b/src/library_glfw.js @@ -1200,11 +1200,6 @@ var LibraryGLFW = { return (GLFW.extensions.indexOf("GL_" + extension) != -1); }, - glfwGetProcAddress__deps: ['emscripten_GetProcAddress'], - glfwGetProcAddress: function(procname) { - return _emscripten_GetProcAddress(procname); - }, - glfwSwapInterval__deps: ['emscripten_set_main_loop_timing'], glfwSwapInterval: function(interval) { interval = Math.abs(interval); // GLFW uses negative values to enable GLX_EXT_swap_control_tear, which we don't have, so just treat negative and positive the same. diff --git a/src/library_sdl.js b/src/library_sdl.js index 1f6ae5334c039..aaf3588565bd3 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -3450,11 +3450,6 @@ var LibrarySDL = { return 0; }, - SDL_GL_GetProcAddress__deps: ['emscripten_GetProcAddress'], - SDL_GL_GetProcAddress: function(name_) { - return _emscripten_GetProcAddress(name_); - }, - SDL_GL_SwapBuffers__proxy: 'sync', SDL_GL_SwapBuffers__sig: 'v', SDL_GL_SwapBuffers: function() { diff --git a/system/lib/gl/libprocaddr.c b/system/lib/gl/libprocaddr.c new file mode 100644 index 0000000000000..191816c283521 --- /dev/null +++ b/system/lib/gl/libprocaddr.c @@ -0,0 +1,22 @@ +/* + * Copyright 2021 The Emscripten Authors. All rights reserved. + * Emscripten is available under two separate licenses, the MIT license and the + * University of Illinois/NCSA Open Source License. Both these licenses can be + * found in the LICENSE file. + */ + +// GL proc address library integration + +extern void* emscripten_GetProcAddress(const char *name); + +void* SDL_GL_GetProcAddress(const char* name) { + return emscripten_GetProcAddress(name); +} + +void* eglGetProcAddress(const char* name) { + return emscripten_GetProcAddress(name); +} + +void* glfwGetProcAddress(const char* name) { + return emscripten_GetProcAddress(name); +} diff --git a/tools/deps_info.py b/tools/deps_info.py index 105a83af7ee7f..e4babe0721437 100644 --- a/tools/deps_info.py +++ b/tools/deps_info.py @@ -51,7 +51,6 @@ deps_info = { 'Mix_LoadWAV_RW': ['fileno'], 'SDL_CreateRGBSurface': ['malloc', 'free'], - 'SDL_GL_GetProcAddress': ['emscripten_GetProcAddress'], 'SDL_Init': ['malloc', 'free', 'memset', 'memcpy'], 'SDL_LockSurface': ['malloc', 'free'], 'SDL_OpenAudio': ['malloc', 'free'], @@ -88,9 +87,7 @@ 'ctime_r': ['_get_tzname', '_get_daylight', '_get_timezone', 'malloc'], 'dladdr': ['malloc'], 'dlerror': ['malloc', 'free'], - 'eglGetProcAddress': ['emscripten_GetProcAddress'], 'eglQueryString': ['malloc'], - 'emscripten_GetProcAddress': ['malloc'], 'emscripten_GetAlProcAddress': ['emscripten_GetAlProcAddress'], 'emscripten_GetAlcProcAddress': ['emscripten_GetAlcProcAddress'], 'emscripten_SDL_SetEventHandler': ['malloc', 'free'], @@ -176,7 +173,6 @@ 'glGetStringi': ['malloc'], 'glMapBufferRange': ['malloc'], 'glewInit': ['malloc'], - 'glfwGetProcAddress': ['emscripten_GetProcAddress'], 'glfwInit': ['malloc', 'free'], 'glfwSleep': ['sleep'], 'gmtime': ['malloc'], diff --git a/tools/system_libs.py b/tools/system_libs.py index 52c48ee5d3e08..11a157a4c8dde 100644 --- a/tools/system_libs.py +++ b/tools/system_libs.py @@ -1065,7 +1065,7 @@ class libgl(MTLibrary): name = 'libgl' src_dir = ['system', 'lib', 'gl'] - src_files = ['gl.c', 'webgl1.c'] + src_files = ['gl.c', 'webgl1.c', 'libprocaddr.c'] cflags = ['-Oz'] From 5be0999fad14f81d3aa67cded6a8491d92d07d44 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Wed, 17 Feb 2021 14:59:45 -0800 Subject: [PATCH 2/5] fix --- tools/deps_info.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/deps_info.py b/tools/deps_info.py index e4babe0721437..91a09a6855909 100644 --- a/tools/deps_info.py +++ b/tools/deps_info.py @@ -51,6 +51,7 @@ deps_info = { 'Mix_LoadWAV_RW': ['fileno'], 'SDL_CreateRGBSurface': ['malloc', 'free'], + 'SDL_GL_GetProcAddress': ['malloc'], 'SDL_Init': ['malloc', 'free', 'memset', 'memcpy'], 'SDL_LockSurface': ['malloc', 'free'], 'SDL_OpenAudio': ['malloc', 'free'], @@ -87,7 +88,9 @@ 'ctime_r': ['_get_tzname', '_get_daylight', '_get_timezone', 'malloc'], 'dladdr': ['malloc'], 'dlerror': ['malloc', 'free'], + 'eglGetProcAddress': ['malloc'], 'eglQueryString': ['malloc'], + 'emscripten_GetProcAddress': ['malloc'], 'emscripten_GetAlProcAddress': ['emscripten_GetAlProcAddress'], 'emscripten_GetAlcProcAddress': ['emscripten_GetAlcProcAddress'], 'emscripten_SDL_SetEventHandler': ['malloc', 'free'], @@ -173,6 +176,7 @@ 'glGetStringi': ['malloc'], 'glMapBufferRange': ['malloc'], 'glewInit': ['malloc'], + 'glfwGetProcAddress': ['malloc'], 'glfwInit': ['malloc', 'free'], 'glfwSleep': ['sleep'], 'gmtime': ['malloc'], From 6685b506fb0d2dd498fad814ba77a1a1ed8b72ab Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Wed, 17 Feb 2021 15:00:34 -0800 Subject: [PATCH 3/5] undo --- tools/deps_info.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/deps_info.py b/tools/deps_info.py index 91a09a6855909..105a83af7ee7f 100644 --- a/tools/deps_info.py +++ b/tools/deps_info.py @@ -51,7 +51,7 @@ deps_info = { 'Mix_LoadWAV_RW': ['fileno'], 'SDL_CreateRGBSurface': ['malloc', 'free'], - 'SDL_GL_GetProcAddress': ['malloc'], + 'SDL_GL_GetProcAddress': ['emscripten_GetProcAddress'], 'SDL_Init': ['malloc', 'free', 'memset', 'memcpy'], 'SDL_LockSurface': ['malloc', 'free'], 'SDL_OpenAudio': ['malloc', 'free'], @@ -88,7 +88,7 @@ 'ctime_r': ['_get_tzname', '_get_daylight', '_get_timezone', 'malloc'], 'dladdr': ['malloc'], 'dlerror': ['malloc', 'free'], - 'eglGetProcAddress': ['malloc'], + 'eglGetProcAddress': ['emscripten_GetProcAddress'], 'eglQueryString': ['malloc'], 'emscripten_GetProcAddress': ['malloc'], 'emscripten_GetAlProcAddress': ['emscripten_GetAlProcAddress'], @@ -176,7 +176,7 @@ 'glGetStringi': ['malloc'], 'glMapBufferRange': ['malloc'], 'glewInit': ['malloc'], - 'glfwGetProcAddress': ['malloc'], + 'glfwGetProcAddress': ['emscripten_GetProcAddress'], 'glfwInit': ['malloc', 'free'], 'glfwSleep': ['sleep'], 'gmtime': ['malloc'], From fa5f8dca8c5de6d3df8afcedbeafeae79516aa8f Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Wed, 17 Feb 2021 15:01:23 -0800 Subject: [PATCH 4/5] revert --- tools/deps_info.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/deps_info.py b/tools/deps_info.py index 105a83af7ee7f..91a09a6855909 100644 --- a/tools/deps_info.py +++ b/tools/deps_info.py @@ -51,7 +51,7 @@ deps_info = { 'Mix_LoadWAV_RW': ['fileno'], 'SDL_CreateRGBSurface': ['malloc', 'free'], - 'SDL_GL_GetProcAddress': ['emscripten_GetProcAddress'], + 'SDL_GL_GetProcAddress': ['malloc'], 'SDL_Init': ['malloc', 'free', 'memset', 'memcpy'], 'SDL_LockSurface': ['malloc', 'free'], 'SDL_OpenAudio': ['malloc', 'free'], @@ -88,7 +88,7 @@ 'ctime_r': ['_get_tzname', '_get_daylight', '_get_timezone', 'malloc'], 'dladdr': ['malloc'], 'dlerror': ['malloc', 'free'], - 'eglGetProcAddress': ['emscripten_GetProcAddress'], + 'eglGetProcAddress': ['malloc'], 'eglQueryString': ['malloc'], 'emscripten_GetProcAddress': ['malloc'], 'emscripten_GetAlProcAddress': ['emscripten_GetAlProcAddress'], @@ -176,7 +176,7 @@ 'glGetStringi': ['malloc'], 'glMapBufferRange': ['malloc'], 'glewInit': ['malloc'], - 'glfwGetProcAddress': ['emscripten_GetProcAddress'], + 'glfwGetProcAddress': ['malloc'], 'glfwInit': ['malloc', 'free'], 'glfwSleep': ['sleep'], 'gmtime': ['malloc'], From aaf4a9d3c17d4b80111aa137aa62aa40f155378a Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Wed, 24 Feb 2021 10:53:52 -0800 Subject: [PATCH 5/5] Fix linking with SDL2 --- system/lib/gl/libprocaddr.c | 1 + 1 file changed, 1 insertion(+) diff --git a/system/lib/gl/libprocaddr.c b/system/lib/gl/libprocaddr.c index 191816c283521..b753dc8040763 100644 --- a/system/lib/gl/libprocaddr.c +++ b/system/lib/gl/libprocaddr.c @@ -9,6 +9,7 @@ extern void* emscripten_GetProcAddress(const char *name); +__attribute__((weak)) // SDL2 will link in its own version of this void* SDL_GL_GetProcAddress(const char* name) { return emscripten_GetProcAddress(name); }