Spec-Zone.ru › Web APIs

GPUComputePassEncoder: метод setBindGroup()

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

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

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

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

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

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

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

Синтаксис

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

Параметры

index

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

bindGroup

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

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.

Проверка

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

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

Примеры

Установка bind group

В нашем демо вычислений несколько команд записываются с помощью GPUCommandEncoder. Большинство этих команд исходят от GPUComputePassEncoder, созданного с помощью beginComputePass(). Вызов setBindGroup() здесь в самом простом виде, просто указывая индекс и bind group.

const BUFFER_SIZE = 1000;

// ...

// Create GPUCommandEncoder to encode commands to issue to the GPU
const commandEncoder = device.createCommandEncoder();

// Initiate render pass
const passEncoder = commandEncoder.beginComputePass();

// Issue commands
passEncoder.setPipeline(computePipeline);
passEncoder.setBindGroup(0, bindGroup);
passEncoder.dispatchWorkgroups(Math.ceil(BUFFER_SIZE / 64));

// End the render pass
passEncoder.end();

// Copy output buffer to staging buffer
commandEncoder.copyBufferToBuffer(
  output,
  0, // Source offset
  stagingBuffer,
  0, // Destination offset
  BUFFER_SIZE,
);

// End frame by passing array of command buffers to command queue for execution
device.queue.submit([commandEncoder.finish()]);

// ...

Сброс bind group

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

// 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

См. также

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

Spec-Zone.ru

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