diff --git a/src/workerd/api/gpu/gpu-adapter.c++ b/src/workerd/api/gpu/gpu-adapter.c++ index 87111008e5f..82fb286af2f 100644 --- a/src/workerd/api/gpu/gpu-adapter.c++ +++ b/src/workerd/api/gpu/gpu-adapter.c++ @@ -69,12 +69,12 @@ GPUAdapter::requestDevice(jsg::Lock& js, jsg::Optional desc wgpu::DeviceDescriptor desc{}; kj::Vector requiredFeatures; wgpu::RequiredLimits limits; - KJ_IF_SOME (d, descriptor) { - KJ_IF_SOME (label, d.label) { + KJ_IF_SOME(d, descriptor) { + KJ_IF_SOME(label, d.label) { desc.label = label.cStr(); } - KJ_IF_SOME (features, d.requiredFeatures) { + KJ_IF_SOME(features, d.requiredFeatures) { for (auto& required : features) { requiredFeatures.add(parseFeatureName(required)); } @@ -83,7 +83,7 @@ GPUAdapter::requestDevice(jsg::Lock& js, jsg::Optional desc desc.requiredFeatures = requiredFeatures.begin(); } - KJ_IF_SOME (requiredLimits, d.requiredLimits) { + KJ_IF_SOME(requiredLimits, d.requiredLimits) { for (auto& f : requiredLimits.fields) { setLimit(limits, f.name, f.value); } @@ -118,7 +118,9 @@ jsg::Ref GPUAdapter::getFeatures() { wgpu::Adapter adapter(adapter_.Get()); size_t count = adapter.EnumerateFeatures(nullptr); kj::Array features = kj::heapArray(count); - adapter.EnumerateFeatures(&features[0]); + if (count > 0) { + adapter.EnumerateFeatures(&features[0]); + } return jsg::alloc(kj::mv(features)); } diff --git a/src/workerd/api/gpu/gpu-device.c++ b/src/workerd/api/gpu/gpu-device.c++ index 51bfc630a19..80e7d68b9c5 100644 --- a/src/workerd/api/gpu/gpu-device.c++ +++ b/src/workerd/api/gpu/gpu-device.c++ @@ -487,7 +487,9 @@ jsg::Ref GPUDevice::getFeatures() { wgpu::Device device(device_.Get()); size_t count = device.EnumerateFeatures(nullptr); kj::Array features = kj::heapArray(count); - device.EnumerateFeatures(&features[0]); + if (count > 0) { + device.EnumerateFeatures(&features[0]); + } return jsg::alloc(kj::mv(features)); } diff --git a/src/workerd/api/gpu/webgpu-errors-test.js b/src/workerd/api/gpu/webgpu-errors-test.js index b4618415eec..f221749c3ce 100644 --- a/src/workerd/api/gpu/webgpu-errors-test.js +++ b/src/workerd/api/gpu/webgpu-errors-test.js @@ -17,6 +17,7 @@ export class DurableObjectExample { const device = await adapter.requestDevice(); ok(device); + ok(device.features.keys()); let callbackCalled = false; device.addEventListener("uncapturederror", (event) => {