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