Skip to content

Commit fef5697

Browse files
committed
[wasm64] Fix library_glemu.js under wasm64
1 parent fe8421d commit fef5697

File tree

3 files changed

+25
-38
lines changed

3 files changed

+25
-38
lines changed

src/library_glemu.js

Lines changed: 21 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

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
@@ -2017,27 +2017,23 @@ def test_gl_textures(self, args):
20172017
self.btest_exit('gl_textures.cpp', args=['-lGL', '-g', '-sSTACK_SIZE=1MB'] + args)
20182018

20192019
@requires_graphics_hardware
2020-
@no_wasm64('TODO: wasm64 + LEGACY_GL_EMULATION')
20212020
def test_gl_ps(self):
20222021
# pointers and a shader
20232022
shutil.copyfile(test_file('screenshot.png'), 'screenshot.png')
20242023
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)
20252024

20262025
@requires_graphics_hardware
2027-
@no_wasm64('TODO: wasm64 + LEGACY_GL_EMULATION')
20282026
def test_gl_ps_packed(self):
20292027
# packed data that needs to be strided
20302028
shutil.copyfile(test_file('screenshot.png'), 'screenshot.png')
20312029
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)
20322030

20332031
@requires_graphics_hardware
2034-
@no_wasm64('TODO: wasm64 + LEGACY_GL_EMULATION')
20352032
def test_gl_ps_strides(self):
20362033
shutil.copyfile(test_file('screenshot.png'), 'screenshot.png')
20372034
self.btest('gl_ps_strides.c', reference='gl_ps_strides.png', args=['--preload-file', 'screenshot.png', '-sLEGACY_GL_EMULATION', '-lGL', '-lSDL', '--use-preload-plugins'])
20382035

20392036
@requires_graphics_hardware
2040-
@no_wasm64('TODO: wasm64 + LEGACY_GL_EMULATION')
20412037
def test_gl_ps_worker(self):
20422038
shutil.copyfile(test_file('screenshot.png'), 'screenshot.png')
20432039
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)
@@ -2070,37 +2066,31 @@ def test_gles2_conformance(self):
20702066
def test_matrix_identity(self):
20712067
self.btest('gl_matrix_identity.c', expected=['-1882984448', '460451840', '1588195328', '2411982848'], args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
20722068

2073-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
20742069
@requires_graphics_hardware
20752070
@no_swiftshader
20762071
def test_cubegeom_pre(self):
20772072
self.btest('third_party/cubegeom/cubegeom_pre.c', reference='third_party/cubegeom/cubegeom_pre.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
20782073

2079-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
20802074
@requires_graphics_hardware
20812075
@no_swiftshader
20822076
def test_cubegeom_pre_regal(self):
20832077
self.btest('third_party/cubegeom/cubegeom_pre.c', reference='third_party/cubegeom/cubegeom_pre.png', args=['-sUSE_REGAL', '-DUSE_REGAL', '-lGL', '-lSDL'])
20842078

2085-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
20862079
@requires_graphics_hardware
20872080
@no_swiftshader
20882081
def test_cubegeom_pre_relocatable(self):
20892082
self.btest('third_party/cubegeom/cubegeom_pre.c', reference='third_party/cubegeom/cubegeom_pre.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL', '-sRELOCATABLE'])
20902083

2091-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
20922084
@requires_graphics_hardware
20932085
@no_swiftshader
20942086
def test_cubegeom_pre2(self):
20952087
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
20962088

2097-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
20982089
@requires_graphics_hardware
20992090
@no_swiftshader
21002091
def test_cubegeom_pre3(self):
21012092
self.btest('third_party/cubegeom/cubegeom_pre3.c', reference='third_party/cubegeom/cubegeom_pre2.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
21022093

2103-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21042094
@parameterized({
21052095
'': ([],),
21062096
'tracing': (['-sTRACE_WEBGL_CALLS'],),
@@ -2111,18 +2101,15 @@ def test_cubegeom(self, args):
21112101
# proxied)
21122102
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)
21132103

2114-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21152104
@requires_graphics_hardware
21162105
def test_cubegeom_regal(self):
21172106
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)
21182107

2119-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21202108
@requires_threads
21212109
@requires_graphics_hardware
21222110
def test_cubegeom_regal_mt(self):
21232111
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)
21242112

2125-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21262113
@requires_graphics_hardware
21272114
@parameterized({
21282115
'': ([],),
@@ -2145,108 +2132,88 @@ def test_cubegeom_proc(self, opts):
21452132
''')
21462133
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'])
21472134

2148-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21492135
@also_with_wasmfs
21502136
@requires_graphics_hardware
21512137
def test_cubegeom_glew(self):
21522138
self.btest('third_party/cubegeom/cubegeom_glew.c', reference='third_party/cubegeom/cubegeom.png', args=['-O2', '--closure=1', '-sLEGACY_GL_EMULATION', '-lGL', '-lGLEW', '-lSDL'])
21532139

2154-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21552140
@requires_graphics_hardware
21562141
def test_cubegeom_color(self):
21572142
self.btest('third_party/cubegeom/cubegeom_color.c', reference='third_party/cubegeom/cubegeom_color.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
21582143

2159-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21602144
@requires_graphics_hardware
21612145
def test_cubegeom_normal(self):
21622146
self.btest('third_party/cubegeom/cubegeom_normal.c', reference='third_party/cubegeom/cubegeom_normal.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'], also_proxied=True)
21632147

2164-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21652148
@requires_graphics_hardware
21662149
def test_cubegeom_normal_dap(self): # draw is given a direct pointer to clientside memory, no element array buffer
21672150
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)
21682151

2169-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21702152
@requires_graphics_hardware
21712153
def test_cubegeom_normal_dap_far(self): # indices do nto start from 0
21722154
self.btest('third_party/cubegeom/cubegeom_normal_dap_far.c', reference='third_party/cubegeom/cubegeom_normal.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
21732155

2174-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21752156
@requires_graphics_hardware
21762157
def test_cubegeom_normal_dap_far_range(self): # glDrawRangeElements
21772158
self.btest('third_party/cubegeom/cubegeom_normal_dap_far_range.c', reference='third_party/cubegeom/cubegeom_normal.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
21782159

2179-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21802160
@requires_graphics_hardware
21812161
def test_cubegeom_normal_dap_far_glda(self): # use glDrawArrays
21822162
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'])
21832163

2184-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21852164
@requires_graphics_hardware
21862165
@no_firefox('fails on CI but works locally')
21872166
def test_cubegeom_normal_dap_far_glda_quad(self): # with quad
21882167
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'])
21892168

2190-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21912169
@requires_graphics_hardware
21922170
def test_cubegeom_mt(self):
21932171
self.btest('third_party/cubegeom/cubegeom_mt.c', reference='third_party/cubegeom/cubegeom_mt.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL']) # multitexture
21942172

2195-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
21962173
@requires_graphics_hardware
21972174
def test_cubegeom_color2(self):
21982175
self.btest('third_party/cubegeom/cubegeom_color2.c', reference='third_party/cubegeom/cubegeom_color2.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'], also_proxied=True)
21992176

2200-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22012177
@requires_graphics_hardware
22022178
def test_cubegeom_texturematrix(self):
22032179
self.btest('third_party/cubegeom/cubegeom_texturematrix.c', reference='third_party/cubegeom/cubegeom_texturematrix.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
22042180

2205-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22062181
@requires_graphics_hardware
22072182
def test_cubegeom_fog(self):
22082183
self.btest('third_party/cubegeom/cubegeom_fog.c', reference='third_party/cubegeom/cubegeom_fog.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
22092184

2210-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22112185
@requires_graphics_hardware
22122186
@no_swiftshader
22132187
def test_cubegeom_pre_vao(self):
22142188
self.btest('third_party/cubegeom/cubegeom_pre_vao.c', reference='third_party/cubegeom/cubegeom_pre_vao.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
22152189

2216-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22172190
@requires_graphics_hardware
22182191
@no_swiftshader
22192192
def test_cubegeom_pre_vao_regal(self):
22202193
self.btest('third_party/cubegeom/cubegeom_pre_vao.c', reference='third_party/cubegeom/cubegeom_pre_vao.png', args=['-sUSE_REGAL', '-DUSE_REGAL', '-lGL', '-lSDL'])
22212194

2222-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22232195
@requires_graphics_hardware
22242196
@no_swiftshader
22252197
def test_cubegeom_pre2_vao(self):
22262198
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'])
22272199

2228-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22292200
@requires_graphics_hardware
22302201
def test_cubegeom_pre2_vao2(self):
22312202
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'])
22322203

2233-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22342204
@requires_graphics_hardware
22352205
@no_swiftshader
22362206
def test_cubegeom_pre_vao_es(self):
22372207
self.btest('third_party/cubegeom/cubegeom_pre_vao_es.c', reference='third_party/cubegeom/cubegeom_pre_vao.png', args=['-sFULL_ES2', '-lGL', '-lSDL'])
22382208

2239-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22402209
@requires_graphics_hardware
22412210
def test_cubegeom_u4fv_2(self):
22422211
self.btest('third_party/cubegeom/cubegeom_u4fv_2.c', reference='third_party/cubegeom/cubegeom_u4fv_2.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])
22432212

2244-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22452213
@requires_graphics_hardware
22462214
def test_cube_explosion(self):
22472215
self.btest('cube_explosion.c', reference='cube_explosion.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'], also_proxied=True)
22482216

2249-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
22502217
@requires_graphics_hardware
22512218
def test_glgettexenv(self):
22522219
self.btest('glgettexenv.c', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'], expected='1')
@@ -2331,7 +2298,6 @@ def test_anisotropic(self):
23312298
shutil.copyfile(test_file('browser/water.dds'), 'water.dds')
23322299
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'])
23332300

2334-
@no_wasm64('wasm64 + LEGACY_GL_EMULATION')
23352301
@requires_graphics_hardware
23362302
def test_tex_nonbyte(self):
23372303
self.btest('tex_nonbyte.c', reference='tex_nonbyte.png', args=['-sLEGACY_GL_EMULATION', '-lGL', '-lSDL'])

0 commit comments

Comments
 (0)