Skip to content

Commit

Permalink
Merge pull request #1255 from cloudflare/check_empty_features
Browse files Browse the repository at this point in the history
webgpu: check for empty features list
  • Loading branch information
edevil authored Oct 2, 2023
2 parents 66cb3ce + 5a525de commit a71dfbd
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 6 deletions.
12 changes: 7 additions & 5 deletions src/workerd/api/gpu/gpu-adapter.c++
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,12 @@ GPUAdapter::requestDevice(jsg::Lock& js, jsg::Optional<GPUDeviceDescriptor> desc
wgpu::DeviceDescriptor desc{};
kj::Vector<wgpu::FeatureName> 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));
}
Expand All @@ -83,7 +83,7 @@ GPUAdapter::requestDevice(jsg::Lock& js, jsg::Optional<GPUDeviceDescriptor> 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);
}
Expand Down Expand Up @@ -118,7 +118,9 @@ jsg::Ref<GPUSupportedFeatures> GPUAdapter::getFeatures() {
wgpu::Adapter adapter(adapter_.Get());
size_t count = adapter.EnumerateFeatures(nullptr);
kj::Array<wgpu::FeatureName> features = kj::heapArray<wgpu::FeatureName>(count);
adapter.EnumerateFeatures(&features[0]);
if (count > 0) {
adapter.EnumerateFeatures(&features[0]);
}
return jsg::alloc<GPUSupportedFeatures>(kj::mv(features));
}

Expand Down
4 changes: 3 additions & 1 deletion src/workerd/api/gpu/gpu-device.c++
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,9 @@ jsg::Ref<GPUSupportedFeatures> GPUDevice::getFeatures() {
wgpu::Device device(device_.Get());
size_t count = device.EnumerateFeatures(nullptr);
kj::Array<wgpu::FeatureName> features = kj::heapArray<wgpu::FeatureName>(count);
device.EnumerateFeatures(&features[0]);
if (count > 0) {
device.EnumerateFeatures(&features[0]);
}
return jsg::alloc<GPUSupportedFeatures>(kj::mv(features));
}

Expand Down
1 change: 1 addition & 0 deletions src/workerd/api/gpu/webgpu-errors-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) => {
Expand Down

0 comments on commit a71dfbd

Please sign in to comment.