From 3e51a513a15c8ad03f7a0156f8296e74269a739d Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Wed, 15 Dec 2021 20:31:34 +0000 Subject: [PATCH] Bug 1743667 - Fix GPUSupportedFeatures on WebGPU device r=jimb Differential Revision: https://phabricator.services.mozilla.com/D133907 --- dom/webgpu/Adapter.cpp | 7 +++---- dom/webgpu/Device.cpp | 7 +++---- dom/webgpu/Device.h | 5 ++--- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/dom/webgpu/Adapter.cpp b/dom/webgpu/Adapter.cpp index edb690778c0c..4546f751d5b5 100644 --- a/dom/webgpu/Adapter.cpp +++ b/dom/webgpu/Adapter.cpp @@ -89,14 +89,13 @@ already_AddRefed Adapter::RequestDevice( Maybe id = mBridge->AdapterRequestDevice(mId, aDesc, &limits); if (id.isSome()) { RefPtr device = - new Device(this, id.value(), aDesc.mRequiredFeatures, - MakeUnique(limits)); + new Device(this, id.value(), MakeUnique(limits)); // copy over the features for (const auto& feature : aDesc.mRequiredFeatures) { NS_ConvertASCIItoUTF16 string( dom::GPUFeatureNameValues::GetString(feature)); - dom::GPUSupportedFeatures_Binding::SetlikeHelpers::Add(mFeatures, string, - aRv); + dom::GPUSupportedFeatures_Binding::SetlikeHelpers::Add(device->mFeatures, + string, aRv); } promise->MaybeResolve(device); } else { diff --git a/dom/webgpu/Device.cpp b/dom/webgpu/Device.cpp index 31dbf1da1d95..e1a88d249c7c 100644 --- a/dom/webgpu/Device.cpp +++ b/dom/webgpu/Device.cpp @@ -54,15 +54,14 @@ JSObject* Device::CreateExternalArrayBuffer(JSContext* aCx, size_t aOffset, } Device::Device(Adapter* const aParent, RawId aId, - const dom::Sequence& aRequiredFeatures, UniquePtr aRawLimits) : DOMEventTargetHelper(aParent->GetParentObject()), mId(aId), - mBridge(aParent->mBridge), - mQueue(new class Queue(this, aParent->mBridge, aId)), // features are filled in Adapter::RequestDevice mFeatures(new SupportedFeatures(aParent)), - mLimits(new SupportedLimits(aParent, std::move(aRawLimits))) { + mLimits(new SupportedLimits(aParent, std::move(aRawLimits))), + mBridge(aParent->mBridge), + mQueue(new class Queue(this, aParent->mBridge, aId)) { mBridge->RegisterDevice(mId, this); } diff --git a/dom/webgpu/Device.h b/dom/webgpu/Device.h index dcf5b0270640..31fe850db291 100644 --- a/dom/webgpu/Device.h +++ b/dom/webgpu/Device.h @@ -84,9 +84,10 @@ class Device final : public DOMEventTargetHelper { GPU_DECL_JS_WRAP(Device) const RawId mId; + RefPtr mFeatures; + RefPtr mLimits; explicit Device(Adapter* const aParent, RawId aId, - const dom::Sequence& aRequiredFeatures, UniquePtr aRawLimits); RefPtr GetBridge(); @@ -113,8 +114,6 @@ class Device final : public DOMEventTargetHelper { nsString mLabel; RefPtr mQueue; nsTHashSet mKnownWarnings; - RefPtr mFeatures; - RefPtr mLimits; public: void GetLabel(nsAString& aValue) const;