Skip to content

Commit d9a6a12

Browse files
authored
Minor cleanups to library_webgpu.js (#19316)
- Use arrow functions. - Use stack space for error messages
1 parent 2749bae commit d9a6a12

File tree

1 file changed

+59
-60
lines changed

1 file changed

+59
-60
lines changed

src/library_webgpu.js

Lines changed: 59 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,15 @@
162162

163163
var LibraryWebGPU = {
164164
$WebGPU__postset: 'WebGPU.initManagers();',
165+
$WebGPU__deps: ['$withStackSave', '$stringToUTF8OnStack'],
165166
$WebGPU: {
167+
errorCallback: function(callback, type, message, userdata) {
168+
withStackSave(() => {
169+
var messagePtr = stringToUTF8OnStack(message);
170+
{{{ makeDynCall('viii', 'callback') }}}(type, messagePtr, userdata);
171+
});
172+
},
173+
166174
initManagers: function() {
167175
if (WebGPU.mgrDevice) return;
168176

@@ -770,13 +778,13 @@ var LibraryWebGPU = {
770778
device["pushErrorScope"](WebGPU.ErrorFilter[filter]);
771779
},
772780

773-
wgpuDevicePopErrorScope__deps: ['$callUserCallback', '$stringToNewUTF8'],
781+
wgpuDevicePopErrorScope__deps: ['$callUserCallback'],
774782
wgpuDevicePopErrorScope: function(deviceId, callback, userdata) {
775783
var device = WebGPU.mgrDevice.get(deviceId);
776784
{{{ runtimeKeepalivePush() }}}
777-
device["popErrorScope"]().then(function(gpuError) {
785+
device["popErrorScope"]().then((gpuError) => {
778786
{{{ runtimeKeepalivePop() }}}
779-
callUserCallback(function() {
787+
callUserCallback(() => {
780788
if (!gpuError) {
781789
{{{ makeDynCall('viii', 'callback') }}}(
782790
{{{ gpu.ErrorType.NoError }}}, 0, userdata);
@@ -787,20 +795,16 @@ var LibraryWebGPU = {
787795
#if ASSERTIONS
788796
assert(gpuError instanceof GPUValidationError);
789797
#endif
790-
var messagePtr = stringToNewUTF8(gpuError.message);
791-
{{{ makeDynCall('viii', 'callback') }}}({{{ gpu.ErrorType.Validation }}}, messagePtr, userdata);
792-
_free(messagePtr);
798+
WebGPU.errorCallback(callback, {{{ gpu.ErrorType.Validation }}}, gpuError.message, userdata);
793799
}
794800
});
795-
}, function(ex) {
801+
}, (ex) => {
796802
{{{ runtimeKeepalivePop() }}}
797-
callUserCallback(function() {
798-
var messagePtr = stringToNewUTF8(ex.message);
803+
callUserCallback(() => {
799804
// TODO: This can mean either the device was lost or the error scope stack was empty. Figure
800805
// out how to synthesize the DeviceLost error type. (Could be by simply tracking the error
801806
// scope depth, but that isn't ideal.)
802-
{{{ makeDynCall('viii', 'callback') }}}({{{ gpu.ErrorType.Unknown }}}, messagePtr, userdata);
803-
_free(messagePtr);
807+
WebGPU.errorCallback(callback, {{{ gpu.ErrorType.Unknown }}}, ex.message, userdata);
804808
});
805809
});
806810
},
@@ -810,32 +814,27 @@ var LibraryWebGPU = {
810814
device.label = UTF8ToString(labelPtr);
811815
},
812816

813-
wgpuDeviceSetDeviceLostCallback__deps: ['$callUserCallback', '$stringToNewUTF8', 'free'],
817+
wgpuDeviceSetDeviceLostCallback__deps: ['$callUserCallback'],
814818
wgpuDeviceSetDeviceLostCallback: function(deviceId, callback, userdata) {
815819
var deviceWrapper = WebGPU.mgrDevice.objects[deviceId];
816820
{{{ gpu.makeCheckDefined('deviceWrapper') }}}
817821
if (!deviceWrapper.lostCallback) {
818822
// device.lost hasn't been registered yet - register it.
819-
deviceWrapper.object["lost"].then(function(info) {
820-
deviceWrapper.lostCallback(info);
821-
});
823+
deviceWrapper.object["lost"].then((info) => deviceWrapper.lostCallback(info));
822824
}
823-
deviceWrapper.lostCallback = function(info) {
825+
deviceWrapper.lostCallback = (info) => {
824826
// This will skip the callback if the runtime is no longer alive.
825-
callUserCallback(function() {
826-
var messagePtr = stringToNewUTF8(info.message);
827-
{{{ makeDynCall('viii', 'callback') }}}(WebGPU.DeviceLostReason[info.reason], messagePtr, userdata);
828-
_free(messagePtr);
829-
});
827+
callUserCallback(() => WebGPU.errorCallback(callback, WebGPU.DeviceLostReason[info.reason],
828+
info.message, userdata));
830829
};
831830
},
832831

833-
wgpuDeviceSetUncapturedErrorCallback__deps: ['$callUserCallback', '$stringToNewUTF8'],
832+
wgpuDeviceSetUncapturedErrorCallback__deps: ['$callUserCallback'],
834833
wgpuDeviceSetUncapturedErrorCallback: function(deviceId, callback, userdata) {
835834
var device = WebGPU.mgrDevice.get(deviceId);
836835
device["onuncapturederror"] = function(ev) {
837836
// This will skip the callback if the runtime is no longer alive.
838-
callUserCallback(function() {
837+
callUserCallback(() => {
839838
// WGPUErrorType type, const char* message, void* userdata
840839
var Validation = 0x00000001;
841840
var OutOfMemory = 0x00000002;
@@ -847,9 +846,7 @@ var LibraryWebGPU = {
847846
if (ev.error instanceof GPUValidationError) type = Validation;
848847
else if (ev.error instanceof GPUOutOfMemoryError) type = OutOfMemory;
849848

850-
var messagePtr = stringToNewUTF8(ev.error.message);
851-
{{{ makeDynCall('viii', 'callback') }}}(type, messagePtr, userdata);
852-
_free(messagePtr);
849+
WebGPU.errorCallback(callback, type, ev.error.message, userdata);
853850
});
854851
};
855852
},
@@ -1506,14 +1503,14 @@ var LibraryWebGPU = {
15061503
#endif
15071504

15081505
{{{ runtimeKeepalivePush() }}}
1509-
queue["onSubmittedWorkDone"]().then(function() {
1506+
queue["onSubmittedWorkDone"]().then(() => {
15101507
{{{ runtimeKeepalivePop() }}}
1511-
callUserCallback(function() {
1508+
callUserCallback(() => {
15121509
{{{ makeDynCall('vii', 'callback') }}}({{{ gpu.QueueWorkDoneStatus.Success }}}, userdata);
15131510
});
1514-
}, function() {
1511+
}, () => {
15151512
{{{ runtimeKeepalivePop() }}}
1516-
callUserCallback(function() {
1513+
callUserCallback(() => {
15171514
{{{ makeDynCall('vii', 'callback') }}}({{{ gpu.QueueWorkDoneStatus.Error }}}, userdata);
15181515
});
15191516
});
@@ -1885,9 +1882,7 @@ var LibraryWebGPU = {
18851882

18861883
var data = _malloc(mapped.byteLength);
18871884
HEAPU8.set(new Uint8Array(mapped), data);
1888-
bufferWrapper.onUnmap.push(function() {
1889-
_free(data);
1890-
});
1885+
bufferWrapper.onUnmap.push(() => _free(data));
18911886
return data;
18921887
},
18931888

@@ -1924,7 +1919,7 @@ var LibraryWebGPU = {
19241919

19251920
var data = _malloc(mapped.byteLength);
19261921
HEAPU8.fill(0, data, mapped.byteLength);
1927-
bufferWrapper.onUnmap.push(function() {
1922+
bufferWrapper.onUnmap.push(() => {
19281923
new Uint8Array(mapped).set(HEAPU8.subarray(data, data + mapped.byteLength));
19291924
_free(data);
19301925
});
@@ -1947,14 +1942,14 @@ var LibraryWebGPU = {
19471942
// `callback` takes (WGPUBufferMapAsyncStatus status, void * userdata)
19481943

19491944
{{{ runtimeKeepalivePush() }}}
1950-
buffer["mapAsync"](mode, offset, size).then(function() {
1945+
buffer["mapAsync"](mode, offset, size).then(() => {
19511946
{{{ runtimeKeepalivePop() }}}
1952-
callUserCallback(function() {
1947+
callUserCallback(() => {
19531948
{{{ makeDynCall('vii', 'callback') }}}({{{ gpu.BufferMapAsyncStatus.Success }}}, userdata);
19541949
});
1955-
}, function() {
1950+
}, () => {
19561951
{{{ runtimeKeepalivePop() }}}
1957-
callUserCallback(function() {
1952+
callUserCallback(() => {
19581953
// TODO(kainino0x): Figure out how to pick other error status values.
19591954
{{{ makeDynCall('vii', 'callback') }}}({{{ gpu.BufferMapAsyncStatus.Error }}}, userdata);
19601955
});
@@ -2432,7 +2427,7 @@ var LibraryWebGPU = {
24322427
#endif
24332428
},
24342429

2435-
wgpuInstanceRequestAdapter__deps: ['$callUserCallback', '$stringToNewUTF8', 'free'],
2430+
wgpuInstanceRequestAdapter__deps: ['$callUserCallback', '$stringToUTF8OnStack'],
24362431
wgpuInstanceRequestAdapter: function(instanceId, options, callback, userdata) {
24372432
{{{ gpu.makeCheck('instanceId === 0, "WGPUInstance is ignored"') }}}
24382433

@@ -2448,31 +2443,34 @@ var LibraryWebGPU = {
24482443
}
24492444

24502445
if (!('gpu' in navigator)) {
2451-
var messagePtr = stringToNewUTF8('WebGPU not available on this browser (navigator.gpu is not available)');
2452-
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestAdapterStatus.Unavailable }}}, 0, messagePtr, userdata);
2453-
_free(messagePtr);
2446+
withStackSave(() => {
2447+
var messagePtr = stringToUTF8OnStack('WebGPU not available on this browser (navigator.gpu is not available)');
2448+
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestAdapterStatus.Unavailable }}}, 0, messagePtr, userdata);
2449+
});
24542450
return;
24552451
}
24562452

24572453
{{{ runtimeKeepalivePush() }}}
2458-
navigator["gpu"]["requestAdapter"](opts).then(function(adapter) {
2454+
navigator["gpu"]["requestAdapter"](opts).then((adapter) => {
24592455
{{{ runtimeKeepalivePop() }}}
2460-
callUserCallback(function() {
2456+
callUserCallback(() => {
24612457
if (adapter) {
24622458
var adapterId = WebGPU.mgrAdapter.create(adapter);
24632459
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestAdapterStatus.Success }}}, adapterId, 0, userdata);
24642460
} else {
2465-
var messagePtr = stringToNewUTF8('WebGPU not available on this system (requestAdapter returned null)');
2466-
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestAdapterStatus.Unavailable }}}, 0, messagePtr, userdata);
2467-
_free(messagePtr);
2461+
withStackSave(() => {
2462+
var messagePtr = stringToUTF8OnStack('WebGPU not available on this system (requestAdapter returned null)');
2463+
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestAdapterStatus.Unavailable }}}, 0, messagePtr, userdata);
2464+
});
24682465
}
24692466
});
2470-
}, function(ex) {
2467+
}, (ex) => {
24712468
{{{ runtimeKeepalivePop() }}}
2472-
callUserCallback(function() {
2473-
var messagePtr = stringToNewUTF8(ex.message);
2474-
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestAdapterStatus.Error }}}, 0, messagePtr, userdata);
2475-
_free(messagePtr);
2469+
callUserCallback(() => {
2470+
withStackSave(() => {
2471+
var messagePtr = stringToUTF8OnStack(ex.message);
2472+
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestAdapterStatus.Error }}}, 0, messagePtr, userdata);
2473+
});
24762474
});
24772475
});
24782476
},
@@ -2513,7 +2511,7 @@ var LibraryWebGPU = {
25132511
return adapter.features.has(WebGPU.FeatureName[featureEnumValue]);
25142512
},
25152513

2516-
wgpuAdapterRequestDevice__deps: ['$callUserCallback', '$stringToNewUTF8', 'free'],
2514+
wgpuAdapterRequestDevice__deps: ['$callUserCallback', '$stringToUTF8OnStack'],
25172515
wgpuAdapterRequestDevice: function(adapterId, descriptor, callback, userdata) {
25182516
var adapter = WebGPU.mgrAdapter.get(adapterId);
25192517

@@ -2524,7 +2522,7 @@ var LibraryWebGPU = {
25242522
if (requiredFeaturesCount) {
25252523
var requiredFeaturesPtr = {{{ makeGetValue('descriptor', C_STRUCTS.WGPUDeviceDescriptor.requiredFeatures, '*') }}};
25262524
desc["requiredFeatures"] = Array.from(HEAP32.subarray(requiredFeaturesPtr >> 2, (requiredFeaturesPtr >> 2) + requiredFeaturesCount),
2527-
function(feature) { return WebGPU.FeatureName[feature]; });
2525+
(feature) => WebGPU.FeatureName[feature]);
25282526
}
25292527
var requiredLimitsPtr = {{{ makeGetValue('descriptor', C_STRUCTS.WGPUDeviceDescriptor.requiredLimits, '*') }}};
25302528
if (requiredLimitsPtr) {
@@ -2592,19 +2590,20 @@ var LibraryWebGPU = {
25922590
}
25932591

25942592
{{{ runtimeKeepalivePush() }}}
2595-
adapter["requestDevice"](desc).then(function(device) {
2593+
adapter["requestDevice"](desc).then((device) => {
25962594
{{{ runtimeKeepalivePop() }}}
2597-
callUserCallback(function() {
2595+
callUserCallback(() => {
25982596
var deviceWrapper = { queueId: WebGPU.mgrQueue.create(device["queue"]) };
25992597
var deviceId = WebGPU.mgrDevice.create(device, deviceWrapper);
26002598
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestDeviceStatus.Success }}}, deviceId, 0, userdata);
26012599
});
26022600
}, function(ex) {
26032601
{{{ runtimeKeepalivePop() }}}
2604-
callUserCallback(function() {
2605-
var messagePtr = stringToNewUTF8(ex.message);
2606-
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestDeviceStatus.Error }}}, 0, messagePtr, userdata);
2607-
_free(messagePtr);
2602+
callUserCallback(() => {
2603+
withStackSave(() => {
2604+
var messagePtr = stringToUTF8OnStack(ex.message);
2605+
{{{ makeDynCall('viiii', 'callback') }}}({{{ gpu.RequestDeviceStatus.Error }}}, 0, messagePtr, userdata);
2606+
});
26082607
});
26092608
});
26102609
},

0 commit comments

Comments
 (0)