Skip to content

Commit 75a9a6c

Browse files
committed
[wasm64]: run webgpu tests also with wasm64
1 parent 5a9f8d7 commit 75a9a6c

File tree

4 files changed

+21
-18
lines changed

4 files changed

+21
-18
lines changed

ChangeLog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ See docs/process.md for more on how version tagging works.
2020

2121
3.1.47 (in development)
2222
-----------------------
23+
- The egl, html5, sdl and webgpu libraries now support basic functionality with
24+
`-sMEMORY64`. (#20276)
2325
- Value types in `emscripten/html5.h` that correspond the WebIDL `long` type are
2426
now represented as `int` rather than `long` types so that they are 32-bit wide
2527
on both wasm32 and wasm64. (#20290)

emscripten.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -892,6 +892,7 @@ def create_pointer_conversion_wrappers(metadata):
892892
'stackAlloc': 'pp',
893893
'emscripten_builtin_malloc': 'pp',
894894
'malloc': 'pp',
895+
'memalign': 'ppp',
895896
'__getTypeName': 'pp',
896897
'setThrew': '_p',
897898
'free': '_p',

src/library_webgpu.js

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ var LibraryWebGPU = {
157157
errorCallback: (callback, type, message, userdata) => {
158158
withStackSave(() => {
159159
var messagePtr = stringToUTF8OnStack(message);
160-
{{{ makeDynCall('viii', 'callback') }}}(type, messagePtr, userdata);
160+
{{{ makeDynCall('vipp', 'callback') }}}(type, messagePtr, userdata);
161161
});
162162
},
163163

@@ -792,10 +792,10 @@ var LibraryWebGPU = {
792792
{{{ runtimeKeepalivePop() }}}
793793
callUserCallback(() => {
794794
if (!gpuError) {
795-
{{{ makeDynCall('viii', 'callback') }}}(
795+
{{{ makeDynCall('vipp', 'callback') }}}(
796796
{{{ gpu.ErrorType.NoError }}}, 0, userdata);
797797
} else if (gpuError instanceof GPUOutOfMemoryError) {
798-
{{{ makeDynCall('viii', 'callback') }}}(
798+
{{{ makeDynCall('vipp', 'callback') }}}(
799799
{{{ gpu.ErrorType.OutOfMemory }}}, 0, userdata);
800800
} else {
801801
#if ASSERTIONS
@@ -902,7 +902,7 @@ var LibraryWebGPU = {
902902
var viewFormatCount = {{{ gpu.makeGetU32('descriptor', C_STRUCTS.WGPUTextureDescriptor.viewFormatCount) }}};
903903
if (viewFormatCount) {
904904
var viewFormatsPtr = {{{ makeGetValue('descriptor', C_STRUCTS.WGPUTextureDescriptor.viewFormats, '*') }}};
905-
desc["viewFormats"] = Array.from(HEAP32.subarray(viewFormatsPtr >> 2, (viewFormatsPtr >> 2) + viewFormatCount),
905+
desc["viewFormats"] = Array.from({{{ makeHEAPView(`${POINTER_BITS}`, 'viewFormatsPtr', `viewFormatsPtr + viewFormatCount * ${POINTER_SIZE}`) }}},
906906
function(format) { return WebGPU.TextureFormat[format]; });
907907
}
908908

@@ -1481,7 +1481,7 @@ var LibraryWebGPU = {
14811481
assert(commands % 4 === 0);
14821482
#endif
14831483
var queue = WebGPU.mgrQueue.get(queueId);
1484-
var cmds = Array.from(HEAP32.subarray(commands >> 2, (commands >> 2) + commandCount),
1484+
var cmds = Array.from({{{ makeHEAPView(`${POINTER_BITS}`, 'commands', `commands + commandCount * ${POINTER_SIZE}`)}}},
14851485
function(id) { return WebGPU.mgrCommandBuffer.get(id); });
14861486
queue["submit"](cmds);
14871487
},
@@ -1497,12 +1497,12 @@ var LibraryWebGPU = {
14971497
queue["onSubmittedWorkDone"]().then(() => {
14981498
{{{ runtimeKeepalivePop() }}}
14991499
callUserCallback(() => {
1500-
{{{ makeDynCall('vii', 'callback') }}}({{{ gpu.QueueWorkDoneStatus.Success }}}, userdata);
1500+
{{{ makeDynCall('vip', 'callback') }}}({{{ gpu.QueueWorkDoneStatus.Success }}}, userdata);
15011501
});
15021502
}, () => {
15031503
{{{ runtimeKeepalivePop() }}}
15041504
callUserCallback(() => {
1505-
{{{ makeDynCall('vii', 'callback') }}}({{{ gpu.QueueWorkDoneStatus.Error }}}, userdata);
1505+
{{{ makeDynCall('vip', 'callback') }}}({{{ gpu.QueueWorkDoneStatus.Error }}}, userdata);
15061506
});
15071507
});
15081508
},
@@ -1853,7 +1853,6 @@ var LibraryWebGPU = {
18531853
// TODO(kainino0x): Somehow inject a validation error?
18541854
return 0;
18551855
}
1856-
18571856
var data = _memalign(16, mapped.byteLength);
18581857
HEAPU8.set(new Uint8Array(mapped), data);
18591858
bufferWrapper.onUnmap.push(() => _free(data));
@@ -1922,13 +1921,13 @@ var LibraryWebGPU = {
19221921
buffer["mapAsync"](mode, offset, size).then(() => {
19231922
{{{ runtimeKeepalivePop() }}}
19241923
callUserCallback(() => {
1925-
{{{ makeDynCall('vii', 'callback') }}}({{{ gpu.BufferMapAsyncStatus.Success }}}, userdata);
1924+
{{{ makeDynCall('vip', 'callback') }}}({{{ gpu.BufferMapAsyncStatus.Success }}}, userdata);
19261925
});
19271926
}, () => {
19281927
{{{ runtimeKeepalivePop() }}}
19291928
callUserCallback(() => {
19301929
// TODO(kainino0x): Figure out how to pick other error status values.
1931-
{{{ makeDynCall('vii', 'callback') }}}({{{ gpu.BufferMapAsyncStatus.ValidationError }}}, userdata);
1930+
{{{ makeDynCall('vip', 'callback') }}}({{{ gpu.BufferMapAsyncStatus.ValidationError }}}, userdata);
19321931
});
19331932
});
19341933
},
@@ -2197,7 +2196,7 @@ var LibraryWebGPU = {
21972196
assert(bundlesPtr % 4 === 0);
21982197
#endif
21992198

2200-
var bundles = Array.from(HEAP32.subarray(bundlesPtr >> 2, (bundlesPtr >> 2) + count),
2199+
var bundles = Array.from({{{ makeHEAPView(`${POINTER_BITS}`, 'bundlesPtr', `bundlesPtr + count * ${POINTER_SIZE}`) }}},
22012200
(id) => WebGPU.mgrRenderBundle.get(id));
22022201
pass["executeBundles"](bundles);
22032202
},
@@ -2392,7 +2391,7 @@ var LibraryWebGPU = {
23922391
if (!('gpu' in navigator)) {
23932392
withStackSave(() => {
23942393
var messagePtr = stringToUTF8OnStack('WebGPU not available on this browser (navigator.gpu is not available)');
2395-
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestAdapterStatus.Unavailable }}}, 0, messagePtr, userdata);
2394+
{{{ makeDynCall('vippp', 'callback') }}}({{{ gpu.RequestAdapterStatus.Unavailable }}}, 0, messagePtr, userdata);
23962395
});
23972396
return;
23982397
}
@@ -2403,11 +2402,11 @@ var LibraryWebGPU = {
24032402
callUserCallback(() => {
24042403
if (adapter) {
24052404
var adapterId = WebGPU.mgrAdapter.create(adapter);
2406-
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestAdapterStatus.Success }}}, adapterId, 0, userdata);
2405+
{{{ makeDynCall('vippp', 'callback') }}}({{{ gpu.RequestAdapterStatus.Success }}}, adapterId, 0, userdata);
24072406
} else {
24082407
withStackSave(() => {
24092408
var messagePtr = stringToUTF8OnStack('WebGPU not available on this system (requestAdapter returned null)');
2410-
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestAdapterStatus.Unavailable }}}, 0, messagePtr, userdata);
2409+
{{{ makeDynCall('vippp', 'callback') }}}({{{ gpu.RequestAdapterStatus.Unavailable }}}, 0, messagePtr, userdata);
24112410
});
24122411
}
24132412
});
@@ -2416,7 +2415,7 @@ var LibraryWebGPU = {
24162415
callUserCallback(() => {
24172416
withStackSave(() => {
24182417
var messagePtr = stringToUTF8OnStack(ex.message);
2419-
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestAdapterStatus.Error }}}, 0, messagePtr, userdata);
2418+
{{{ makeDynCall('vippp', 'callback') }}}({{{ gpu.RequestAdapterStatus.Error }}}, 0, messagePtr, userdata);
24202419
});
24212420
});
24222421
});
@@ -2469,7 +2468,7 @@ var LibraryWebGPU = {
24692468
var requiredFeaturesCount = {{{ gpu.makeGetU32('descriptor', C_STRUCTS.WGPUDeviceDescriptor.requiredFeaturesCount) }}};
24702469
if (requiredFeaturesCount) {
24712470
var requiredFeaturesPtr = {{{ makeGetValue('descriptor', C_STRUCTS.WGPUDeviceDescriptor.requiredFeatures, '*') }}};
2472-
desc["requiredFeatures"] = Array.from(HEAP32.subarray(requiredFeaturesPtr >> 2, (requiredFeaturesPtr >> 2) + requiredFeaturesCount),
2471+
desc["requiredFeatures"] = Array.from({{{ makeHEAPView(`${POINTER_BITS}`, 'requiredFeaturesPtr', `requiredFeaturesPtr + requiredFeaturesCount * ${POINTER_SIZE}`) }}},
24732472
(feature) => WebGPU.FeatureName[feature]);
24742473
}
24752474
var requiredLimitsPtr = {{{ makeGetValue('descriptor', C_STRUCTS.WGPUDeviceDescriptor.requiredLimits, '*') }}};
@@ -2552,14 +2551,14 @@ var LibraryWebGPU = {
25522551
WebGPU.DeviceLostReason[info.reason], info.message, deviceLostUserdataPtr));
25532552
});
25542553
}
2555-
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestDeviceStatus.Success }}}, deviceId, 0, userdata);
2554+
{{{ makeDynCall('vippp', 'callback') }}}({{{ gpu.RequestDeviceStatus.Success }}}, deviceId, 0, userdata);
25562555
});
25572556
}, function(ex) {
25582557
{{{ runtimeKeepalivePop() }}}
25592558
callUserCallback(() => {
25602559
withStackSave(() => {
25612560
var messagePtr = stringToUTF8OnStack(ex.message);
2562-
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestDeviceStatus.Error }}}, 0, messagePtr, userdata);
2561+
{{{ makeDynCall('vippp', 'callback') }}}({{{ gpu.RequestDeviceStatus.Error }}}, 0, messagePtr, userdata);
25632562
});
25642563
});
25652564
});

test/test_browser.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4699,6 +4699,7 @@ def test_webgpu_basic_rendering(self, args):
46994699
def test_webgpu_basic_rendering_pthreads(self):
47004700
self.btest_exit('webgpu_basic_rendering.cpp', args=['-sUSE_WEBGPU', '-pthread', '-sPROXY_TO_PTHREAD'])
47014701

4702+
@also_with_wasm64
47024703
def test_webgpu_get_device(self):
47034704
self.btest_exit('webgpu_get_device.cpp', args=['-sUSE_WEBGPU', '-sASSERTIONS', '--closure=1'])
47044705

0 commit comments

Comments
 (0)