Skip to content

Commit 8747ab0

Browse files
authored
[wasm64] Fix library_glemu.js under wasm64 (#21241)
1 parent 2b9870c commit 8747ab0

File tree

3 files changed

+29
-38
lines changed

3 files changed

+29
-38
lines changed

src/library_glemu.js

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,18 @@
44
* SPDX-License-Identifier: MIT
55
*/
66

7+
{{{
8+
globalThis.fromPtr = (arg) => {
9+
if (CAN_ADDRESS_2GB) {
10+
return `${arg} >>>= 0`;
11+
} else if (MEMORY64) {
12+
return `${arg} = Number(${arg})`;
13+
}
14+
return '';
15+
}
16+
null;
17+
}}}
18+
719
var LibraryGLEmulation = {
820
// GL emulation: provides misc. functionality not present in OpenGL ES 2.0 or WebGL
921
$GLEmulation__deps: ['$GLImmediateSetup', 'glEnable', 'glDisable',
@@ -309,6 +321,7 @@ var LibraryGLEmulation = {
309321
_glGetBooleanv = _emscripten_glGetBooleanv = (pname, p) => {
310322
var attrib = GLEmulation.getAttributeFromCapability(pname);
311323
if (attrib !== null) {
324+
{{{ fromPtr('p') }}}
312325
var result = GLImmediate.enabledClientAttributes[attrib];
313326
{{{ makeSetValue('p', '0', 'result === true ? 1 : 0', 'i8') }}};
314327
return;
@@ -318,6 +331,7 @@ var LibraryGLEmulation = {
318331

319332
var glGetIntegerv = _glGetIntegerv;
320333
_glGetIntegerv = _emscripten_glGetIntegerv = (pname, params) => {
334+
{{{ fromPtr('params') }}}
321335
switch (pname) {
322336
case 0x84E2: pname = GLctx.MAX_TEXTURE_IMAGE_UNITS /* fake it */; break; // GL_MAX_TEXTURE_UNITS
323337
case 0x8B4A: { // GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB
@@ -439,6 +453,8 @@ var LibraryGLEmulation = {
439453

440454
var glShaderSource = _glShaderSource;
441455
_glShaderSource = _emscripten_glShaderSource = (shader, count, string, length) => {
456+
{{{ fromPtr('string') }}}
457+
{{{ fromPtr('length') }}}
442458
var source = GL.getSource(shader, count, string, length);
443459
#if GL_DEBUG
444460
dbg("glShaderSource: Input: \n" + source);
@@ -647,14 +663,15 @@ var LibraryGLEmulation = {
647663

648664
var glGetFloatv = _glGetFloatv;
649665
_glGetFloatv = _emscripten_glGetFloatv = (pname, params) => {
666+
{{{ fromPtr('params') }}}
650667
if (pname == 0xBA6) { // GL_MODELVIEW_MATRIX
651-
HEAPF32.set(GLImmediate.matrix[0/*m*/], params >> 2);
668+
HEAPF32.set(GLImmediate.matrix[0/*m*/], {{{ getHeapOffset('params', 'float') }}});
652669
} else if (pname == 0xBA7) { // GL_PROJECTION_MATRIX
653-
HEAPF32.set(GLImmediate.matrix[1/*p*/], params >> 2);
670+
HEAPF32.set(GLImmediate.matrix[1/*p*/], {{{ getHeapOffset('params', 'float') }}});
654671
} else if (pname == 0xBA8) { // GL_TEXTURE_MATRIX
655-
HEAPF32.set(GLImmediate.matrix[2/*t*/ + GLImmediate.clientActiveTexture], params >> 2);
672+
HEAPF32.set(GLImmediate.matrix[2/*t*/ + GLImmediate.clientActiveTexture], {{{ getHeapOffset('params', 'float') }}});
656673
} else if (pname == 0xB66) { // GL_FOG_COLOR
657-
HEAPF32.set(GLEmulation.fogColor, params >> 2);
674+
HEAPF32.set(GLEmulation.fogColor, {{{ getHeapOffset('params', 'float') }}});
658675
} else if (pname == 0xB63) { // GL_FOG_START
659676
{{{ makeSetValue('params', '0', 'GLEmulation.fogStart', 'float') }}};
660677
} else if (pname == 0xB64) { // GL_FOG_END
@@ -2783,6 +2800,7 @@ var LibraryGLEmulation = {
27832800
var glTexEnvi = (typeof _glTexEnvi != 'undefined') ? _glTexEnvi : () => {};
27842801
/** @suppress {checkTypes} */
27852802
_glTexEnvi = _emscripten_glTexEnvi = (target, pname, param) => {
2803+
{{{ fromPtr('param') }}}
27862804
GLImmediate.TexEnvJIT.hook_texEnvi(target, pname, param);
27872805
// Don't call old func, since we are the implementor.
27882806
//glTexEnvi(target, pname, param);
@@ -2791,16 +2809,19 @@ var LibraryGLEmulation = {
27912809
var glTexEnvfv = (typeof _glTexEnvfv != 'undefined') ? _glTexEnvfv : () => {};
27922810
/** @suppress {checkTypes} */
27932811
_glTexEnvfv = _emscripten_glTexEnvfv = (target, pname, param) => {
2812+
{{{ fromPtr('param') }}}
27942813
GLImmediate.TexEnvJIT.hook_texEnvfv(target, pname, param);
27952814
// Don't call old func, since we are the implementor.
27962815
//glTexEnvfv(target, pname, param);
27972816
};
27982817

27992818
_glGetTexEnviv = (target, pname, param) => {
2819+
{{{ fromPtr('param') }}}
28002820
GLImmediate.TexEnvJIT.hook_getTexEnviv(target, pname, param);
28012821
};
28022822

28032823
_glGetTexEnvfv = (target, pname, param) => {
2824+
{{{ fromPtr('param') }}}
28042825
GLImmediate.TexEnvJIT.hook_getTexEnvfv(target, pname, param);
28052826
};
28062827

src/library_webgl.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4279,6 +4279,10 @@ function recordGLProcAddressGet(lib) {
42794279
Object.keys(lib).forEach((x) => {
42804280
if (x.startsWith('gl') && !isDecorator(x)) {
42814281
lib['emscripten_' + x] = x;
4282+
var sig = LibraryManager.library[x + '__sig'];
4283+
if (sig) {
4284+
lib['emscripten_' + x + '__sig'] = sig;
4285+
}
42824286
}
42834287
});
42844288
}

test/test_browser.py

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2023,27 +2023,23 @@ def test_gl_textures(self, args):
20232023
self.btest_exit('gl_textures.cpp', args=['-lGL', '-g', '-sSTACK_SIZE=1MB'] + args)
20242024

20252025
@requires_graphics_hardware
2026-
@no_wasm64('TODO: wasm64 + LEGACY_GL_EMULATION')
20272026
def test_gl_ps(self):
20282027
# pointers and a shader
20292028
shutil.copyfile(test_file('screenshot.png'), 'screenshot.png')
20302029
self.btest('gl_ps.c', reference='gl_ps.png', args=['--preload-file', 'screenshot.png', '-sLEGACY_GL_EMULATION', '-lGL', '-lSDL', '--use-preload-plugins'], reference_slack=1)
20312030

20322031
@requires_graphics_hardware
2033-
@no_wasm64('TODO: wasm64 + LEGACY_GL_EMULATION')
20342032
def test_gl_ps_packed(self):
20352033
# packed data that needs to be strided
20362034
shutil.copyfile(test_file('screenshot.png'), 'screenshot.png')
20372035
self.btest('gl_ps_packed.c', reference='gl_ps.png', args=['--preload-file', 'screenshot.png', '-sLEGACY_GL_EMULATION', '-lGL', '-lSDL', '--use-preload-plugins'], reference_slack=1)
20382036

20392037
@requires_graphics_hardware
2040-
@no_wasm64('TODO: wasm64 + LEGACY_GL_EMULATION')
20412038
def test_gl_ps_strides(self):
20422039
shutil.copyfile(test_file('screenshot.png'), 'screenshot.png')
20432040
self.btest('gl_ps_strides.c', reference='gl_ps_strides.png', args=['--preload-file', 'screenshot.png', '-sLEGACY_GL_EMULATION', '-lGL', '-lSDL', '--use-preload-plugins'])
20442041

20452042
@requires_graphics_hardware
2046-
@no_wasm64('TODO: wasm64 + LEGACY_GL_EMULATION')
20472043
def test_gl_ps_worker(self):
20482044
shutil.copyfile(test_file('screenshot.png'), 'screenshot.png')
20492045
self.btest('gl_ps_worker.c', reference='gl_ps.png', args=['--preload-file', 'screenshot.png', '-sLEGACY_GL_EMULATION', '-lGL', '-lSDL', '--use-preload-plugins'], reference_slack=1, also_proxied=True)
@@ -2076,37 +2072,31 @@ def test_gles2_conformance(self):
20762072
def test_matrix_identity(self):
20772073
self.btest('gl_matrix_identity.c', expected=['-1882984448', '460451840', '1588195328', '2411982848'], args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
20782074

2079-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
20802075
@requires_graphics_hardware
20812076
@no_swiftshader
20822077
def test_cubegeom_pre(self):
20832078
self.btest('third_party/cubegeom/cubegeom_pre.c', reference='third_party/cubegeom/cubegeom_pre.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
20842079

2085-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
20862080
@requires_graphics_hardware
20872081
@no_swiftshader
20882082
def test_cubegeom_pre_regal(self):
20892083
self.btest('third_party/cubegeom/cubegeom_pre.c', reference='third_party/cubegeom/cubegeom_pre.png', args=['-sUSE_REGAL', '-DUSE_REGAL', '-lGL', '-lSDL'])
20902084

2091-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
20922085
@requires_graphics_hardware
20932086
@no_swiftshader
20942087
def test_cubegeom_pre_relocatable(self):
20952088
self.btest('third_party/cubegeom/cubegeom_pre.c', reference='third_party/cubegeom/cubegeom_pre.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL', '-sRELOCATABLE'])
20962089

2097-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
20982090
@requires_graphics_hardware
20992091
@no_swiftshader
21002092
def test_cubegeom_pre2(self):
21012093
self.btest('third_party/cubegeom/cubegeom_pre2.c', reference='third_party/cubegeom/cubegeom_pre2.png', args=['-sGL_DEBUG', '-sLEGACY_GL_EMULATION', '-lGL', '-lSDL']) # some coverage for GL_DEBUG not breaking the build
21022094

2103-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21042095
@requires_graphics_hardware
21052096
@no_swiftshader
21062097
def test_cubegeom_pre3(self):
21072098
self.btest('third_party/cubegeom/cubegeom_pre3.c', reference='third_party/cubegeom/cubegeom_pre2.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
21082099

2109-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21102100
@parameterized({
21112101
'': ([],),
21122102
'tracing': (['-sTRACE_WEBGL_CALLS'],),
@@ -2117,18 +2107,15 @@ def test_cubegeom(self, args):
21172107
# proxied)
21182108
self.btest('third_party/cubegeom/cubegeom.c', reference='third_party/cubegeom/cubegeom.png', args=['-O2', '-g', '-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'] + args, also_proxied=not args)
21192109

2120-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21212110
@requires_graphics_hardware
21222111
def test_cubegeom_regal(self):
21232112
self.btest('third_party/cubegeom/cubegeom.c', reference='third_party/cubegeom/cubegeom.png', args=['-O2', '-g', '-DUSE_REGAL', '-sUSE_REGAL', '-lGL', '-lSDL', '-lc++', '-lc++abi'], also_proxied=True)
21242113

2125-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21262114
@requires_threads
21272115
@requires_graphics_hardware
21282116
def test_cubegeom_regal_mt(self):
21292117
self.btest('third_party/cubegeom/cubegeom.c', reference='third_party/cubegeom/cubegeom.png', args=['-O2', '-g', '-pthread', '-DUSE_REGAL', '-pthread', '-sUSE_REGAL', '-lGL', '-lSDL', '-lc++', '-lc++abi'], also_proxied=False)
21302118

2131-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21322119
@requires_graphics_hardware
21332120
@parameterized({
21342121
'': ([],),
@@ -2151,108 +2138,88 @@ def test_cubegeom_proc(self, opts):
21512138
''')
21522139
self.btest('third_party/cubegeom/cubegeom_proc.c', reference='third_party/cubegeom/cubegeom.png', args=opts + ['side.c', '-sLEGACY_GL_EMULATION', '-lGL', '-lSDL', '-sGL_ENABLE_GET_PROC_ADDRESS'])
21532140

2154-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21552141
@also_with_wasmfs
21562142
@requires_graphics_hardware
21572143
def test_cubegeom_glew(self):
21582144
self.btest('third_party/cubegeom/cubegeom_glew.c', reference='third_party/cubegeom/cubegeom.png', args=['-O2', '--closure=1', '-sLEGACY_GL_EMULATION', '-lGL', '-lGLEW', '-lSDL'])
21592145

2160-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21612146
@requires_graphics_hardware
21622147
def test_cubegeom_color(self):
21632148
self.btest('third_party/cubegeom/cubegeom_color.c', reference='third_party/cubegeom/cubegeom_color.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
21642149

2165-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21662150
@requires_graphics_hardware
21672151
def test_cubegeom_normal(self):
21682152
self.btest('third_party/cubegeom/cubegeom_normal.c', reference='third_party/cubegeom/cubegeom_normal.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'], also_proxied=True)
21692153

2170-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21712154
@requires_graphics_hardware
21722155
def test_cubegeom_normal_dap(self): # draw is given a direct pointer to clientside memory, no element array buffer
21732156
self.btest('third_party/cubegeom/cubegeom_normal_dap.c', reference='third_party/cubegeom/cubegeom_normal.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'], also_proxied=True)
21742157

2175-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21762158
@requires_graphics_hardware
21772159
def test_cubegeom_normal_dap_far(self): # indices do nto start from 0
21782160
self.btest('third_party/cubegeom/cubegeom_normal_dap_far.c', reference='third_party/cubegeom/cubegeom_normal.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
21792161

2180-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21812162
@requires_graphics_hardware
21822163
def test_cubegeom_normal_dap_far_range(self): # glDrawRangeElements
21832164
self.btest('third_party/cubegeom/cubegeom_normal_dap_far_range.c', reference='third_party/cubegeom/cubegeom_normal.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
21842165

2185-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21862166
@requires_graphics_hardware
21872167
def test_cubegeom_normal_dap_far_glda(self): # use glDrawArrays
21882168
self.btest('third_party/cubegeom/cubegeom_normal_dap_far_glda.c', reference='third_party/cubegeom/cubegeom_normal_dap_far_glda.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
21892169

2190-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21912170
@requires_graphics_hardware
21922171
@no_firefox('fails on CI but works locally')
21932172
def test_cubegeom_normal_dap_far_glda_quad(self): # with quad
21942173
self.btest('third_party/cubegeom/cubegeom_normal_dap_far_glda_quad.c', reference='third_party/cubegeom/cubegeom_normal_dap_far_glda_quad.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
21952174

2196-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21972175
@requires_graphics_hardware
21982176
def test_cubegeom_mt(self):
21992177
self.btest('third_party/cubegeom/cubegeom_mt.c', reference='third_party/cubegeom/cubegeom_mt.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL']) # multitexture
22002178

2201-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22022179
@requires_graphics_hardware
22032180
def test_cubegeom_color2(self):
22042181
self.btest('third_party/cubegeom/cubegeom_color2.c', reference='third_party/cubegeom/cubegeom_color2.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'], also_proxied=True)
22052182

2206-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22072183
@requires_graphics_hardware
22082184
def test_cubegeom_texturematrix(self):
22092185
self.btest('third_party/cubegeom/cubegeom_texturematrix.c', reference='third_party/cubegeom/cubegeom_texturematrix.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
22102186

2211-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22122187
@requires_graphics_hardware
22132188
def test_cubegeom_fog(self):
22142189
self.btest('third_party/cubegeom/cubegeom_fog.c', reference='third_party/cubegeom/cubegeom_fog.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
22152190

2216-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22172191
@requires_graphics_hardware
22182192
@no_swiftshader
22192193
def test_cubegeom_pre_vao(self):
22202194
self.btest('third_party/cubegeom/cubegeom_pre_vao.c', reference='third_party/cubegeom/cubegeom_pre_vao.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
22212195

2222-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22232196
@requires_graphics_hardware
22242197
@no_swiftshader
22252198
def test_cubegeom_pre_vao_regal(self):
22262199
self.btest('third_party/cubegeom/cubegeom_pre_vao.c', reference='third_party/cubegeom/cubegeom_pre_vao.png', args=['-sUSE_REGAL', '-DUSE_REGAL', '-lGL', '-lSDL'])
22272200

2228-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22292201
@requires_graphics_hardware
22302202
@no_swiftshader
22312203
def test_cubegeom_pre2_vao(self):
22322204
self.btest('third_party/cubegeom/cubegeom_pre2_vao.c', reference='third_party/cubegeom/cubegeom_pre_vao.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL', '-sGL_ENABLE_GET_PROC_ADDRESS'])
22332205

2234-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22352206
@requires_graphics_hardware
22362207
def test_cubegeom_pre2_vao2(self):
22372208
self.btest('third_party/cubegeom/cubegeom_pre2_vao2.c', reference='third_party/cubegeom/cubegeom_pre2_vao2.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL', '-sGL_ENABLE_GET_PROC_ADDRESS'])
22382209

2239-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22402210
@requires_graphics_hardware
22412211
@no_swiftshader
22422212
def test_cubegeom_pre_vao_es(self):
22432213
self.btest('third_party/cubegeom/cubegeom_pre_vao_es.c', reference='third_party/cubegeom/cubegeom_pre_vao.png', args=['-sFULL_ES2', '-lGL', '-lSDL'])
22442214

2245-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22462215
@requires_graphics_hardware
22472216
def test_cubegeom_u4fv_2(self):
22482217
self.btest('third_party/cubegeom/cubegeom_u4fv_2.c', reference='third_party/cubegeom/cubegeom_u4fv_2.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
22492218

2250-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22512219
@requires_graphics_hardware
22522220
def test_cube_explosion(self):
22532221
self.btest('cube_explosion.c', reference='cube_explosion.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'], also_proxied=True)
22542222

2255-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22562223
@requires_graphics_hardware
22572224
def test_glgettexenv(self):
22582225
self.btest('glgettexenv.c', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'], expected='1')
@@ -2337,7 +2304,6 @@ def test_anisotropic(self):
23372304
shutil.copyfile(test_file('browser/water.dds'), 'water.dds')
23382305
self.btest('test_anisotropic.c', reference='browser/test_anisotropic.png', reference_slack=2, args=['--preload-file', 'water.dds', '-sLEGACY_GL_EMULATION', '-lGL', '-lSDL', '-Wno-incompatible-pointer-types'])
23392306

2340-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
23412307
@requires_graphics_hardware
23422308
def test_tex_nonbyte(self):
23432309
self.btest('tex_nonbyte.c', reference='tex_nonbyte.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])

0 commit comments

Comments
 (0)