Skip to content

Commit d58c58f

Browse files
committed
[wasm64] Run all browser64 idbstore/idb_fs tests (emscripten-core#20607)
Split out from emscripten-core#20516
1 parent 3587fbc commit d58c58f

File tree

5 files changed

+76
-31
lines changed

5 files changed

+76
-31
lines changed

.circleci/config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,13 +786,15 @@ jobs:
786786
browser64.test_emscripten_async_wget_*
787787
browser64.test_wasm_worker_*
788788
browser64.test_sdl_*
789+
browser64.test_sdl1_*
789790
browser64.test_egl*
790791
browser64.test_gl_*
791792
browser64.test_glgears*
792793
browser64.test_glfw*
793794
browser64.test_glew
794795
browser64.test_idbstore*
795796
browser64.test_fs_idbfs*
797+
browser64.test_webgl*
796798
"
797799
test-browser-firefox:
798800
executor: bionic

src/library_pthread.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ var LibraryPThread = {
143143

144144
#if PTHREADS_PROFILING
145145
getThreadName(pthreadPtr) {
146-
var profilerBlock = {{{ makeGetValue('pthreadPtr', C_STRUCTS.pthread.profilerBlock, POINTER_TYPE) }}};
146+
var profilerBlock = {{{ makeGetValue('pthreadPtr', C_STRUCTS.pthread.profilerBlock, '*') }}};
147147
if (!profilerBlock) return "";
148148
return UTF8ToString(profilerBlock + {{{ C_STRUCTS.thread_profiler_block.name }}});
149149
},
@@ -162,7 +162,7 @@ var LibraryPThread = {
162162
},
163163

164164
threadStatusAsString(pthreadPtr) {
165-
var profilerBlock = {{{ makeGetValue('pthreadPtr', C_STRUCTS.pthread.profilerBlock, POINTER_TYPE) }}};
165+
var profilerBlock = {{{ makeGetValue('pthreadPtr', C_STRUCTS.pthread.profilerBlock, '*') }}};
166166
var status = (profilerBlock == 0) ? 0 : Atomics.load(HEAPU32, {{{ getHeapOffset('profilerBlock + ' + C_STRUCTS.thread_profiler_block.threadStatus, 'i32') }}});
167167
return PThread.threadStatusToString(status);
168168
},
@@ -761,7 +761,7 @@ var LibraryPThread = {
761761
// Deduce which WebGL canvases (HTMLCanvasElements or OffscreenCanvases) should be passed over to the
762762
// Worker that hosts the spawned pthread.
763763
// Comma-delimited list of CSS selectors that must identify canvases by IDs: "#canvas1, #canvas2, ..."
764-
var transferredCanvasNames = attr ? {{{ makeGetValue('attr', C_STRUCTS.pthread_attr_t._a_transferredcanvases, POINTER_TYPE) }}} : 0;
764+
var transferredCanvasNames = attr ? {{{ makeGetValue('attr', C_STRUCTS.pthread_attr_t._a_transferredcanvases, '*') }}} : 0;
765765
#if OFFSCREENCANVASES_TO_PTHREAD
766766
// Proxied canvases string pointer -1 is used as a special token to fetch
767767
// whatever canvases were passed to build in -s

src/library_strings.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ addToLibrary({
116116
#endif
117117
$UTF8ToString: (ptr, maxBytesToRead) => {
118118
#if ASSERTIONS
119-
assert(typeof ptr == 'number');
119+
assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`);
120120
#endif
121121
#if CAN_ADDRESS_2GB
122122
ptr >>>= 0;
@@ -158,7 +158,7 @@ addToLibrary({
158158
outIdx >>>= 0;
159159
#endif
160160
#if ASSERTIONS
161-
assert(typeof str === 'string');
161+
assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`);
162162
#endif
163163
// Parameter maxBytesToWrite is not optional. Negative values, 0, null,
164164
// undefined and false each don't write out any bytes.

src/library_webgl.js

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,7 +1168,7 @@ var LibraryGL = {
11681168
#endif
11691169
}
11701170
#endif
1171-
ret = s && stringToNewUTF8(s);
1171+
ret = s ? stringToNewUTF8(s) : 0;
11721172
break;
11731173

11741174
#if GL_EMULATE_GLES_VERSION_STRING_FORMAT
@@ -1783,7 +1783,7 @@ var LibraryGL = {
17831783
},
17841784

17851785
// Queries EXT
1786-
glGenQueriesEXT__sig: 'vii',
1786+
glGenQueriesEXT__sig: 'vip',
17871787
glGenQueriesEXT: (n, ids) => {
17881788
for (var i = 0; i < n; i++) {
17891789
var query = GLctx.disjointTimerQueryExt['createQueryEXT']();
@@ -1802,7 +1802,7 @@ var LibraryGL = {
18021802
}
18031803
},
18041804

1805-
glDeleteQueriesEXT__sig: 'vii',
1805+
glDeleteQueriesEXT__sig: 'vip',
18061806
glDeleteQueriesEXT: (n, ids) => {
18071807
for (var i = 0; i < n; i++) {
18081808
var id = {{{ makeGetValue('ids', 'i*4', 'i32') }}};
@@ -1844,7 +1844,7 @@ var LibraryGL = {
18441844
GLctx.disjointTimerQueryExt['queryCounterEXT'](GL.queries[id], target);
18451845
},
18461846

1847-
glGetQueryivEXT__sig: 'viii',
1847+
glGetQueryivEXT__sig: 'viip',
18481848
glGetQueryivEXT: (target, pname, params) => {
18491849
if (!params) {
18501850
// GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
@@ -1858,7 +1858,7 @@ var LibraryGL = {
18581858
{{{ makeSetValue('params', '0', 'GLctx.disjointTimerQueryExt[\'getQueryEXT\'](target, pname)', 'i32') }}};
18591859
},
18601860

1861-
glGetQueryObjectivEXT__sig: 'viii',
1861+
glGetQueryObjectivEXT__sig: 'viip',
18621862
glGetQueryObjectivEXT: (id, pname, params) => {
18631863
if (!params) {
18641864
// GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
@@ -1884,7 +1884,7 @@ var LibraryGL = {
18841884
},
18851885
glGetQueryObjectuivEXT: 'glGetQueryObjectivEXT',
18861886

1887-
glGetQueryObjecti64vEXT__sig: 'viii',
1887+
glGetQueryObjecti64vEXT__sig: 'viip',
18881888
glGetQueryObjecti64vEXT__deps: ['$writeI53ToI64'],
18891889
glGetQueryObjecti64vEXT: (id, pname, params) => {
18901890
if (!params) {
@@ -3840,7 +3840,7 @@ var LibraryGL = {
38403840
drawcount);
38413841
},
38423842

3843-
glMultiDrawArraysInstancedWEBGL__sig: 'viiiii',
3843+
glMultiDrawArraysInstancedWEBGL__sig: 'vipppi',
38443844
glMultiDrawArraysInstancedANGLE: 'glMultiDrawArraysInstancedWEBGL',
38453845
glMultiDrawArraysInstancedWEBGL: (mode, firsts, counts, instanceCounts, drawcount) => {
38463846
GLctx.multiDrawWebgl['multiDrawArraysInstancedWEBGL'](
@@ -3854,10 +3854,33 @@ var LibraryGL = {
38543854
drawcount);
38553855
},
38563856

3857+
#if MEMORY64
3858+
// Convert an array of i64 offset to and array of i32 offsets
3859+
// returning a pointer to the new (stack allocated) array.
3860+
$convertOffsets__internal: true,
3861+
$convertOffsets: (offsets, count) => {
3862+
var offsets32 = stackAlloc(count * 4);
3863+
var i64ptr = offsets >> 3;
3864+
var i32ptr = offsets32 >> 2;
3865+
for (var i = 0; i < count; i++, i32ptr++, i64ptr++) {
3866+
var i64val = HEAPU64[i64ptr];
3867+
assert(i64val >= 0 && i32ptr <= 0xffffffff);
3868+
HEAPU32[i32ptr] = Number(i64val);
3869+
}
3870+
return offsets32;
3871+
},
3872+
#endif
3873+
38573874
glMultiDrawElementsWEBGL__sig: 'vipipi',
38583875
glMultiDrawElements: 'glMultiDrawElementsWEBGL',
38593876
glMultiDrawElementsANGLE: 'glMultiDrawElementsWEBGL',
3877+
glMultiDrawElementsWEBGL__deps: ['$convertOffsets'],
38603878
glMultiDrawElementsWEBGL: (mode, counts, type, offsets, drawcount) => {
3879+
#if MEMORY64
3880+
var stack = stackSave();
3881+
offsets = convertOffsets(offsets, drawcount);
3882+
#endif
3883+
console.error(mode, counts, type, offsets, drawcount)
38613884
GLctx.multiDrawWebgl['multiDrawElementsWEBGL'](
38623885
mode,
38633886
HEAP32,
@@ -3866,11 +3889,19 @@ var LibraryGL = {
38663889
HEAP32,
38673890
offsets >> 2,
38683891
drawcount);
3892+
#if MEMORY64
3893+
stackRestore(stack);
3894+
#endif
38693895
},
38703896

3871-
glMultiDrawElementsInstancedWEBGL__sig: 'viiiiii',
3897+
glMultiDrawElementsInstancedWEBGL__sig: 'vipippi',
38723898
glMultiDrawElementsInstancedANGLE: 'glMultiDrawElementsInstancedWEBGL',
3899+
glMultiDrawElementsInstancedWEBGL__deps: ['$convertOffsets'],
38733900
glMultiDrawElementsInstancedWEBGL: (mode, counts, type, offsets, instanceCounts, drawcount) => {
3901+
#if MEMORY64
3902+
var stack = stackSave();
3903+
offsets = convertOffsets(offsets, drawcount);
3904+
#endif
38743905
GLctx.multiDrawWebgl['multiDrawElementsInstancedWEBGL'](
38753906
mode,
38763907
HEAP32,
@@ -3881,6 +3912,9 @@ var LibraryGL = {
38813912
HEAP32,
38823913
instanceCounts >> 2,
38833914
drawcount);
3915+
#if MEMORY64
3916+
stackRestore(stack);
3917+
#endif
38843918
},
38853919

38863920
// As a small peculiarity, we currently allow building with -sFULL_ES3 to emulate client side arrays,

test/test_browser.py

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,6 +1286,7 @@ def test_glfw_joystick(self):
12861286
self.btest_exit('test_glfw_joystick.c', args=['-O2', '--minify=0', '-o', 'page.html', '--pre-js', 'pre.js', '-lGL', '-lglfw3', '-sUSE_GLFW=3'])
12871287

12881288
@requires_graphics_hardware
1289+
12891290
def test_webgl_context_attributes(self):
12901291
# Javascript code to check the attributes support we want to test in the WebGL implementation
12911292
# (request the attribute, create a context and check its value afterwards in the context attributes).
@@ -1330,7 +1331,8 @@ def test_webgl_context_attributes(self):
13301331
# perform tests with attributes activated
13311332
self.btest_exit('test_webgl_context_attributes_glut.c', args=['--js-library', 'check_webgl_attributes_support.js', '-DAA_ACTIVATED', '-DDEPTH_ACTIVATED', '-DSTENCIL_ACTIVATED', '-DALPHA_ACTIVATED', '-lGL', '-lglut', '-lGLEW'])
13321333
self.btest_exit('test_webgl_context_attributes_sdl.c', args=['--js-library', 'check_webgl_attributes_support.js', '-DAA_ACTIVATED', '-DDEPTH_ACTIVATED', '-DSTENCIL_ACTIVATED', '-DALPHA_ACTIVATED', '-lGL', '-lSDL', '-lGLEW'])
1333-
self.btest_exit('test_webgl_context_attributes_sdl2.c', args=['--js-library', 'check_webgl_attributes_support.js', '-DAA_ACTIVATED', '-DDEPTH_ACTIVATED', '-DSTENCIL_ACTIVATED', '-DALPHA_ACTIVATED', '-lGL', '-sUSE_SDL=2', '-lGLEW'])
1334+
if not self.is_wasm64():
1335+
self.btest_exit('test_webgl_context_attributes_sdl2.c', args=['--js-library', 'check_webgl_attributes_support.js', '-DAA_ACTIVATED', '-DDEPTH_ACTIVATED', '-DSTENCIL_ACTIVATED', '-DALPHA_ACTIVATED', '-lGL', '-sUSE_SDL=2', '-lGLEW'])
13341336
self.btest_exit('test_webgl_context_attributes_glfw.c', args=['--js-library', 'check_webgl_attributes_support.js', '-DAA_ACTIVATED', '-DDEPTH_ACTIVATED', '-DSTENCIL_ACTIVATED', '-DALPHA_ACTIVATED', '-lGL', '-lglfw', '-lGLEW'])
13351337

13361338
# perform tests with attributes desactivated
@@ -2749,14 +2751,15 @@ def test_webgl_unmasked_vendor_webgl(self):
27492751
self.btest_exit('webgl_unmasked_vendor_webgl.c', args=['-lGL'])
27502752

27512753
@requires_graphics_hardware
2752-
def test_webgl2(self):
2753-
for opts in [
2754-
['-sMIN_CHROME_VERSION=0', '-Wno-transpile'],
2755-
['-O2', '-g1', '--closure=1', '-sWORKAROUND_OLD_WEBGL_UNIFORM_UPLOAD_IGNORED_OFFSET_BUG'],
2756-
['-sFULL_ES2'],
2757-
]:
2758-
print(opts)
2759-
self.btest_exit('webgl2.cpp', args=['-sMAX_WEBGL_VERSION=2', '-lGL'] + opts)
2754+
@parameterized({
2755+
'legacy_browser': (['-sMIN_CHROME_VERSION=0', '-Wno-transpile'],),
2756+
'closure': (['-O2', '-g1', '--closure=1', '-sWORKAROUND_OLD_WEBGL_UNIFORM_UPLOAD_IGNORED_OFFSET_BUG'],),
2757+
'full_es2': (['-sFULL_ES2'],),
2758+
})
2759+
def test_webgl2(self, args):
2760+
if '-sMIN_CHROME_VERSION=0' in args and self.is_wasm64():
2761+
self.skipTest('wasm64 not supported by legacy browsers')
2762+
self.btest_exit('webgl2.cpp', args=['-sMAX_WEBGL_VERSION=2', '-lGL'] + args)
27602763

27612764
# Tests the WebGL 2 glGetBufferSubData() functionality.
27622765
@requires_graphics_hardware
@@ -4502,6 +4505,7 @@ def test_small_js_flags(self):
45024505
@requires_threads
45034506
@requires_offscreen_canvas
45044507
@requires_graphics_hardware
4508+
@no_wasm64('TODO: wasm64 + OFFSCREENCANVAS')
45054509
def test_webgl_offscreen_canvas_in_pthread(self, args):
45064510
self.btest('gl_in_pthread.cpp', expected='1', args=args + ['-pthread', '-sPTHREAD_POOL_SIZE=2', '-sOFFSCREENCANVAS_SUPPORT', '-lGL'])
45074511

@@ -4521,6 +4525,7 @@ def test_webgl_offscreen_canvas_in_mainthread_after_pthread(self, args):
45214525
@requires_threads
45224526
@requires_offscreen_canvas
45234527
@requires_graphics_hardware
4528+
@no_wasm64('TODO: wasm64 + OFFSCREENCANVAS')
45244529
def test_webgl_offscreen_canvas_only_in_pthread(self):
45254530
self.btest_exit('gl_only_in_pthread.cpp', args=['-pthread', '-sPTHREAD_POOL_SIZE', '-sOFFSCREENCANVAS_SUPPORT', '-lGL', '-sOFFSCREEN_FRAMEBUFFER'])
45264531

@@ -4533,15 +4538,16 @@ def test_webgl_from_client_side_memory_without_default_enabled_extensions(self):
45334538
# For testing WebGL draft extensions like this, if using chrome as the browser,
45344539
# We might want to append the --enable-webgl-draft-extensions to the EMTEST_BROWSER env arg.
45354540
@requires_graphics_hardware
4536-
def test_webgl_multi_draw(self):
4537-
self.btest('webgl_multi_draw_test.c', reference='browser/webgl_multi_draw.png',
4538-
args=['-lGL', '-sOFFSCREEN_FRAMEBUFFER', '-DMULTI_DRAW_ARRAYS=1', '-DEXPLICIT_SWAP=1'])
4539-
self.btest('webgl_multi_draw_test.c', reference='browser/webgl_multi_draw.png',
4540-
args=['-lGL', '-sOFFSCREEN_FRAMEBUFFER', '-DMULTI_DRAW_ARRAYS_INSTANCED=1', '-DEXPLICIT_SWAP=1'])
4541-
self.btest('webgl_multi_draw_test.c', reference='browser/webgl_multi_draw.png',
4542-
args=['-lGL', '-sOFFSCREEN_FRAMEBUFFER', '-DMULTI_DRAW_ELEMENTS=1', '-DEXPLICIT_SWAP=1'])
4543-
self.btest('webgl_multi_draw_test.c', reference='browser/webgl_multi_draw.png',
4544-
args=['-lGL', '-sOFFSCREEN_FRAMEBUFFER', '-DMULTI_DRAW_ELEMENTS_INSTANCED=1', '-DEXPLICIT_SWAP=1'])
4541+
@parameterized({
4542+
'arrays': (['-DMULTI_DRAW_ARRAYS'],),
4543+
'arrays_instanced': (['-DMULTI_DRAW_ARRAYS_INSTANCED'],),
4544+
'elements': (['-DMULTI_DRAW_ELEMENTS'],),
4545+
'elements_instanced': (['-DMULTI_DRAW_ELEMENTS_INSTANCED'],),
4546+
})
4547+
def test_webgl_multi_draw(self, args):
4548+
self.btest('webgl_multi_draw_test.c',
4549+
reference='browser/webgl_multi_draw.png',
4550+
args=['-lGL', '-sOFFSCREEN_FRAMEBUFFER', '-DEXPLICIT_SWAP'] + args)
45454551

45464552
# Tests for base_vertex/base_instance extension
45474553
# For testing WebGL draft extensions like this, if using chrome as the browser,
@@ -4580,6 +4586,7 @@ def test_webgl_timer_query(self, args):
45804586

45814587
# Tests that -sOFFSCREEN_FRAMEBUFFER rendering works.
45824588
@requires_graphics_hardware
4589+
@no_wasm64('TODO: wasm64 + OFB')
45834590
def test_webgl_offscreen_framebuffer(self):
45844591
# Tests all the different possible versions of libgl
45854592
for threads in [[], ['-pthread', '-sPROXY_TO_PTHREAD']]:
@@ -4632,6 +4639,7 @@ def test_webgl_array_of_structs_uniform(self):
46324639
@requires_threads
46334640
@requires_offscreen_canvas
46344641
@requires_graphics_hardware
4642+
@no_wasm64('TODO: wasm64 + OFFSCREENCANVAS')
46354643
def test_webgl_offscreen_canvas_in_proxied_pthread(self, asyncify):
46364644
cmd = ['-pthread', '-sOFFSCREENCANVAS_SUPPORT', '-lGL', '-sGL_DEBUG', '-sPROXY_TO_PTHREAD']
46374645
if asyncify:
@@ -4648,6 +4656,7 @@ def test_webgl_offscreen_canvas_in_proxied_pthread(self, asyncify):
46484656
@requires_threads
46494657
@requires_graphics_hardware
46504658
@requires_offscreen_canvas
4659+
@no_wasm64('TODO: wasm64 + OFFSCREENCANVAS')
46514660
def test_webgl_resize_offscreencanvas_from_main_thread(self, args):
46524661
for args2 in [[], ['-DTEST_SYNC_BLOCKING_LOOP=1']]:
46534662
for args3 in [[], ['-sOFFSCREENCANVAS_SUPPORT', '-sOFFSCREEN_FRAMEBUFFER']]:

0 commit comments

Comments
 (0)