GPUAdapter: метод requestDevice()
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает в некоторых из самых широко используемых браузеров.
Экспериментально: Это экспериментальная технология
Перед использованием в производстве внимательно проверьте таблицу совместимости браузеров.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Примечание: Эта функция доступна в Web Workers.
Метод requestDevice() интерфейса GPUAdapter возвращает Promise, который выполняется с объектом GPUDevice, который является основным интерфейсом для взаимодействия с графическим процессором.
Синтаксис
requestDevice() requestDevice(descriptor)
Параметры
descriptorНеобязательно-
Объект, содержащий следующие свойства:
defaultQueueНеобязательно-
Объект, предоставляющий информацию для стандартной очереди устройства
GPUQueue(как возвращаетсяGPUDevice.queue). У этого объекта есть единственное свойство —label— которое предоставляет стандартную очередь со значениемlabel. Если значение не предоставлено, по умолчанию используется пустой объект, а метка стандартной очереди будет пустой строкой. labelНеобязательно-
Строка, предоставляющая метку, которая может использоваться для идентификации
GPUDevice, например, в сообщениях обGPUErrorили предупреждениях консоли. requiredFeaturesНеобязательно-
Массив строк, представляющих дополнительную функциональность, которую вы хотите поддерживать возвращаемым
GPUDevice. ВызовrequestDevice()завершится ошибкой, еслиGPUAdapterне может предоставить эти функции. Полный список возможных функций см. вGPUSupportedFeatures. По умолчанию используется пустой массив, если значение не указано. requiredLimitsНеобязательно-
Объект, содержащий свойства, представляющие ограничения, которые вы хотите поддерживать возвращаемым
GPUDevice. ВызовrequestDevice()завершится ошибкой, еслиGPUAdapterне может предоставить эти ограничения. Каждый ключ должен быть именем членаGPUSupportedLimits. По умолчанию используется пустой объект, если значение не указано.
Значение возврата
A Promise, который выполняется с объектом GPUDevice.
Если вы вызываете функцию повторно, т.е. вызываете requestDevice() на GPUAdapter, на котором requestDevice() уже был вызван, обещание выполняется с устройством, которое немедленно потеряно. Затем вы можете получить информацию о том, как устройство было потеряно, с помощью GPUDevice.lost.
Исключения
-
OperationErrorDOMException -
Обещание отклоняется с
OperationErrorесли ограничения, включенные в свойствоrequiredLimits, не поддерживаютсяGPUAdapter, либо потому, что они не являются допустимыми ограничениями, либо потому, что их значения выше, чем значения адаптера для этих ограничений. -
TypeErrorDOMException -
Обещание отклоняется с
TypeErrorесли функции, включенные в свойствоrequiredFeatures, не поддерживаютсяGPUAdapter.
Примеры
Базовый пример
async function init() {
if (!navigator.gpu) {
throw Error("WebGPU not supported.");
}
const adapter = await navigator.gpu.requestAdapter();
if (!adapter) {
throw Error("Couldn't request WebGPU adapter.");
}
const device = await adapter.requestDevice();
// ...
}
Запрос определенных функций и ограничений
В следующем коде мы:
- Проверяем, доступна ли функция
texture-compression-astcдляGPUAdapter. Если да, мы добавляем ее в массивrequiredFeatures. - Запрашиваем значение
GPUAdapter.limitsдляmaxBindGroupsи проверяем, равно ли оно или больше 6. Нашему теоретическому приложению идеально подходят 6 групп связывания. Если возвращаемое значение >= 6, мы добавляем максимальное ограничение в 6 к объектуrequiredLimits. - Запрашиваем устройство с этими требованиями к функциям и ограничениям, а также меткой
defaultQueue.
async function init() {
if (!navigator.gpu) {
throw Error("WebGPU not supported.");
}
const adapter = await navigator.gpu.requestAdapter();
if (!adapter) {
throw Error("Couldn't request WebGPU adapter.");
}
const requiredFeatures = [];
if (adapter.features.has("texture-compression-astc")) {
requiredFeatures.push("texture-compression-astc");
}
const requiredLimits = {};
// App ideally needs 6 bind groups, so we'll try to request what the app needs
if (adapter.limits.maxBindGroups >= 6) {
requiredLimits.maxBindGroups = 6;
}
const device = await adapter.requestDevice({
defaultQueue: {
label: "my_queue",
},
requiredFeatures,
requiredLimits,
});
// ...
}
Спецификации
| Спецификация |
|---|
| WebGPU # dom-gpuadapter-requestdevice |
Совместимость браузеров
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
requestDevice |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
предварительная версияВ настоящее время поддерживается только на Linux и Windows. |
99В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
предварительная версия | 121 | Нет | 81 | Нет | 25.0 | 121 |
lost_device_on_duplicate |
116 | 116 | Нет | 102 | предварительная версия | 121 | Нет | 81 | Нет | 25.0 | 121 |
См. также
- The API WebGPU
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/GPUAdapter/requestDevice