Spec-Zone.ru › Web APIs

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. По умолчанию используется пустой объект, если значение не указано.

Примечание: Не все функции и ограничения будут доступны WebGPU во всех браузерах, которые его поддерживают, даже если они поддерживаются базовым оборудованием. Дополнительную информацию см. на страницах features и limits.

Значение возврата

A Promise, который выполняется с объектом GPUDevice.

Если вы вызываете функцию повторно, т.е. вызываете requestDevice() на GPUAdapter, на котором requestDevice() уже был вызван, обещание выполняется с устройством, которое немедленно потеряно. Затем вы можете получить информацию о том, как устройство было потеряно, с помощью GPUDevice.lost.

Исключения

OperationError DOMException

Обещание отклоняется с OperationError если ограничения, включенные в свойство requiredLimits, не поддерживаются GPUAdapter, либо потому, что они не являются допустимыми ограничениями, либо потому, что их значения выше, чем значения адаптера для этих ограничений.

TypeError DOMException

Обещание отклоняется с 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();

  // ...
}

Запрос определенных функций и ограничений

В следующем коде мы:

  1. Проверяем, доступна ли функция texture-compression-astc для GPUAdapter. Если да, мы добавляем ее в массив requiredFeatures.
  2. Запрашиваем значение GPUAdapter.limits для maxBindGroups и проверяем, равно ли оно или больше 6. Нашему теоретическому приложению идеально подходят 6 групп связывания. Если возвращаемое значение >= 6, мы добавляем максимальное ограничение в 6 к объекту requiredLimits.
  3. Запрашиваем устройство с этими требованиями к функциям и ограничениям, а также меткой 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API