/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
constauto errStr = [&]() -> std::optional<std::string_view> { #ifdef RELEASE_OR_BETA if (true) { return"WebGPU is not yet available in Release or Beta builds.";
}
// NOTE: Deliberately left after the above check so that we only enter // here if it's removed. Above is a more informative diagnostic, while the // check is still present. // // Follow-up to remove this check: // <https://bugzilla.mozilla.org/show_bug.cgi?id=1942431> if (dom::WorkerPrivate* wp = dom::GetCurrentThreadWorkerPrivate()) { if (wp->IsServiceWorker()) { return"WebGPU in service workers is not yet available in Release or " "Beta builds; see " "<https://bugzilla.mozilla.org/show_bug.cgi?id=1942431>.";
}
} #endif if (!gfx::gfxVars::AllowWebGPU()) { return"WebGPU is disabled by blocklist.";
} if (!StaticPrefs::dom_webgpu_enabled()) { return"WebGPU is disabled by dom.webgpu.enabled:false.";
} return {};
}(); if (errStr) {
promise->MaybeRejectWithNotSupportedError(ToCString(*errStr)); return promise.forget();
}
// - // Make the request.
auto* const canvasManager = gfx::CanvasManagerChild::Get(); if (!canvasManager) {
promise->MaybeRejectWithInvalidStateError( "Failed to create CanvasManagerChild"); return promise.forget();
}
RefPtr<WebGPUChild> bridge = canvasManager->GetWebGPUChild(); if (!bridge) {
promise->MaybeRejectWithInvalidStateError("Failed to create WebGPUChild"); return promise.forget();
}
RefPtr<Instance> instance = this;
bridge->InstanceRequestAdapter(aOptions)->Then(
GetCurrentSerialEventTarget(), __func__,
[promise, instance, bridge](ipc::ByteBuf aInfoBuf) { auto info = std::make_shared<ffi::WGPUAdapterInformation>();
ffi::wgpu_client_adapter_extract_info(ToFFI(&aInfoBuf), info.get());
MOZ_ASSERT(info->id != 0);
RefPtr<Adapter> adapter = new Adapter(instance, bridge, info);
promise->MaybeResolve(adapter);
},
[promise](const Maybe<ipc::ResponseRejectReason>& aResponseReason) { if (aResponseReason.isSome()) {
promise->MaybeRejectWithAbortError("Internal communication error!");
} else {
promise->MaybeResolve(JS::NullHandleValue);
}
});
return promise.forget();
}
} // namespace mozilla::webgpu
¤ Dauer der Verarbeitung: 0.18 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.