Spec-Zone.ru › Web APIs

GPURenderBundleEncoder: метод setBindGroup()

Ограниченная доступность

Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Экспериментальная: Это экспериментальная технология
Перед использованием в продакшене тщательно проверьте таблицу совместимости с браузерами.

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.

Примечание: Эта функция доступна в Web Workers.

Метод `setBindGroup()` интерфейса `GPURenderBundleEncoder` устанавливает `GPUBindGroup` для использования последующими командами рендеринга, для заданного индекса.

Примечание: Этот метод функционально идентичен своему аналогу в `GPURenderPassEncoder` — `setBindGroup`.

Синтаксис

`setBindGroup(index, bindGroup, dynamicOffsets)`

Параметры

`index`

Индекс, для которого устанавливается группа связей. Соответствует индексу `group` атрибута `group` в коде шейдера (`GPUShaderModule`), используемого в связанной конвейерной линии.

`bindGroup`

`GPUBindGroup` для использования последующими командами рендеринга или `null`, в этом случае любая ранее установленная группа связей в данном слоте будет сброшена.

`dynamicOffsets` Необязательно

Значение, указывающее смещение в байтах для каждой записи в `bindGroup` с установленным `dynamic` (т.е. в описателе вызова `createBindGroupLayout`, который создал объект `GPUBindGroupLayout`, на основе которого основан `bindGroup`). Это значение может быть:

  • Массивом чисел, указывающим различные смещения.
  • Массивом `Uint32Array`, содержащим числа, указывающие смещения.

Если для `dynamicOffsets` задано значение типа `Uint32Array`, то оба следующих параметра также обязательны:

`dynamicOffsetsStart`

Число, указывающее смещение в элементах массива в `dynamicOffsets`, с которого начинаются данные динамических смещений.

`dynamicOffsetsLength`

Число, указывающее количество значений динамических смещений, которые будут считаны из `dynamicOffsets`.

Возвращаемое значение

None (`undefined`).

Исключения

Для вызовов `setBindGroup()` с использованием значения `Uint32Array` для `dynamicOffsets`, вызов сгенерирует исключение `DOMException` `DOMException`, если:

  • `dynamicOffsetsStart` меньше 0.
  • `dynamicOffsetsStart` + `dynamicOffsetsLength` больше `dynamicOffsets.length`.

Проверка

При вызове `setBindGroup()` должны быть выполнены следующие условия, в противном случае генерируется `GPUValidationError`, и `GPURenderBundleEncoder` становится недопустимым:

  • `index` меньше или равно пределу `maxBindGroupIndex` устройства (предел).
  • `index` совпадает с количеством записей в `bindGroupLayout` с установленным `dynamic`.
  • Для `index` записей, где связанная `bindGroupLayout` имеет значение `uniform` (см. `createBindGroupLayout`), каждое число в `dynamicOffsets` является кратным пределу `maxUniformBufferOffsetAlignment` устройства (предел).
  • Для `index` записей, где связанная `bindGroupLayout` имеет значение `storage` или `storageBuffer` (см. `createBindGroupLayout`), каждое число в `dynamicOffsets` является кратным пределу `maxStorageBufferOffsetAlignment` устройства (предел).
  • Для каждой `index` записи, значение `offset` связанной `storageBuffer`, плюс значение `offset` соответствующего элемента макета, плюс соответствующее динамическое смещение, указанное в `dynamicOffsets`, меньше или равно пределу `maxStorageBufferOffset` связанной `storageBuffer`.

Примеры

Установка группы связей

function recordRenderPass(passEncoder) {
  if (settings.dynamicOffsets) {
    passEncoder.setPipeline(dynamicPipeline);
  } else {
    passEncoder.setPipeline(pipeline);
  }
  passEncoder.setVertexBuffer(0, vertexBuffer);
  passEncoder.setBindGroup(0, timeBindGroup);
  const dynamicOffsets = [0];
  for (let i = 0; i < numTriangles; ++i) {
    if (settings.dynamicOffsets) {
      dynamicOffsets[0] = i * alignedUniformBytes;
      passEncoder.setBindGroup(1, dynamicBindGroup, dynamicOffsets);
    } else {
      passEncoder.setBindGroup(1, bindGroups[i]);
    }
    passEncoder.draw(3, 1, 0, 0);
  }
}

Данный фрагмент взят из примера Animometer в WebGPU Samples.

Отключение группы связей

// Set bind group in slot 0
passEncoder.setBindGroup(0, timeBindGroup);

// Later, unset bind group in slot 0
passEncoder.setBindGroup(0, null);

Спецификации

Спецификация
WebGPU
# programmable-passes-bind-groups

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
`GPURenderBundleEncoder`
113В настоящее время поддерживается только на ChromeOS, macOS и Windows.
113В настоящее время поддерживается только на ChromeOS, macOS и Windows.
предварительный просмотрВ настоящее время поддерживается только на Linux и Windows.
99В настоящее время поддерживается только на ChromeOS, macOS и Windows.
предварительный просмотр 121 Нет 81 Нет 25.0 121
`GPURenderBundleEncoder`
117В настоящее время поддерживается только на ChromeOS, macOS и Windows.
117В настоящее время поддерживается только на ChromeOS, macOS и Windows.
Нет
103В настоящее время поддерживается только на ChromeOS, macOS и Windows.
Нет 121 Нет 81 Нет 25.0 121

См. также

  • 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/GPURenderBundleEncoder/setBindGroup

Spec-Zone.ru

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