Spec-Zone.ru › Web APIs

GPURenderPassEncoder: метод setBindGroup()

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

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

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

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

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

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

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

Синтаксис

setBindGroup(index, bindGroup)
setBindGroup(index, bindGroup, dynamicOffsets)
setBindGroup(index, bindGroup, dynamicOffsets, dynamicOffsetsStart,
             dynamicOffsetsLength)

Параметры

index

Индекс, по которому устанавливается группа связей. Он соответствует значению индекса n соответствующего атрибута @group(n) в коде шейдера (GPUShaderModule), используемом в связанной конвейерной линии.

bindGroup

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

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

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

  • Массив чисел, определяющих различные смещения.
  • Массив Uint32Array, содержащий числа, определяющие смещения.

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

dynamicOffsetsStart

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

dynamicOffsetsLength

Число, определяющее количество значений динамического смещения, которые будут считываться из dynamicOffsetsData.

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

None (Undefined).

Исключения

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

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

Валидация

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

  • index меньше или равно предельному значению maxBindGroups устройства GPUDevice (см. пределы).
  • dynamicOffsets.length совпадает с количеством записей в bindGroup со значением hasDynamicOffset: true.
  • Для записей bindGroup, где связанная группа buffer имеет значение "uniform" (см. GPUDevice.createBindGroupLayout()), каждое число в dynamicOffsets кратно предельному значению minUniformBufferOffsetAlignment устройства GPUDevice (см. пределы).
  • Для записей bindGroup, где связанная группа buffer имеет значение "storage" или "read-only-storage" (см. GPUDevice.createBindGroupLayout()), каждое число в dynamicOffsets кратно предельному значению minStorageBufferOffsetAlignment устройства GPUDevice (см. пределы).
  • Для каждой записи bindGroup, связанная группа buffer со значением offset, плюс значение соответствующего элемента макета minBindingSize, плюс соответствующее значение динамического смещения, указанное в dynamicOffsets, меньше или равно предельному значению size связанной группы buffer.

Примеры

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

В примере Textured Cube из WebGPU Samples, setBindGroup() используется для привязки uniformBindGroup к индексу 0. Обратитесь к примеру для полного контекста.

// ...

const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
passEncoder.setPipeline(pipeline);
passEncoder.setBindGroup(0, uniformBindGroup);
passEncoder.setVertexBuffer(0, verticesBuffer);
passEncoder.draw(cubeVertexCount, 1, 0, 0);
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);

// ...

Примечание: Изучите другие Примеры WebGPU для получения дополнительных примеров использования setBindGroup().

Сброс группы связей

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

// 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
setBindGroup
113В настоящее время поддерживается только на ChromeOS, macOS и Windows.
113В настоящее время поддерживается только на ChromeOS, macOS и Windows.
превьюВ настоящее время поддерживается только на Linux и Windows.
99В настоящее время поддерживается только на ChromeOS, macOS и Windows.
превью 121 Нет 81 Нет 25.0 121
unset_bind_group
117В настоящее время поддерживается только на ChromeOS, macOS и Windows.
117В настоящее время поддерживается только на ChromeOS, macOS и Windows.
Нет
103В настоящее время поддерживается только на ChromeOS, macOS и Windows.
Нет 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/GPURenderPassEncoder/setBindGroup

Spec-Zone.ru

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