GPURenderPassEncoder: метод executeBundles()
Ограниченная доступность
Эта функция не является базовой, так как она не работает в некоторых из самых широко используемых браузеров.
Экспериментальная функция: Это экспериментальная технология
Перед использованием в продакшене внимательно проверьте таблицу совместимости с браузерами.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Примечание: Эта функция доступна в Web Workers.
Метод executeBundles() интерфейса GPURenderPassEncoder выполняет команды, ранее записанные в указанные объекты GPURenderBundle, в рамках этого рендеринга.
Примечание: После вызова executeBundles() текущие настроенные буферы вершин, буферы индексов, группы связей и конвейер очищаются, даже если команды из наборов реально не выполнялись.
Синтаксис
executeBundles(bundles)
Параметры
bundles-
Массив объектов
GPURenderBundle, содержащих предварительно записанные команды для выполнения.
Возвращаемое значение
None (Undefined).
Проверка
При вызове executeBundles() должны быть соблюдены следующие критерии, иначе генерируется исключение GPUValidationError, и объект GPURenderPassEncoder становится недопустимым.
Для каждого объекта GPURenderBundle:
- Если свойство
depthReadOnlyпрохода рендеринга (как указано в описателе исходного вызоваGPUCommandEncoder.beginRenderPass()) равноtrue, то свойствоdepthReadOnlyнабора (как указано в описателе вызоваGPUDevice.createRenderBundleEncoder(), создавшего исходный объектGPURenderBundleEncoder) также равноtrue. - Если свойство
stencilReadOnlyпрохода рендеринга (как указано в описателе исходного вызоваGPUCommandEncoder.beginRenderPass()) равноtrue, то свойствоstencilReadOnlyнабора (как указано в описателе вызоваGPUDevice.createRenderBundleEncoder(), создавшего исходный объектGPURenderBundleEncoder) также равноtrue. - Макет конвейера рендеринга, указанный в
GPURenderPassEncoder.setPipeline()(как определено в описателе исходного вызоваGPUDevice.createRenderPipeline()), равен макету конвейера набора рендеринга, указанному вGPURenderBundleEncoder.setPipeline().
Примеры
В примере Animometer из примеров WebGPU много подобных операций выполняется одновременно на многих разных объектах. executeBundles() используется для повторного использования работы над несколькими проходами рендеринга, чтобы улучшить производительность. Изучите пример кода для полного контекста.
// ...
return function doDraw(timestamp) {
if (startTime === undefined) {
startTime = timestamp;
}
uniformTime[0] = (timestamp - startTime) / 1000;
device.queue.writeBuffer(uniformBuffer, timeOffset, uniformTime.buffer);
renderPassDescriptor.colorAttachments[0].view = context
.getCurrentTexture()
.createView();
const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
if (settings.renderBundles) {
passEncoder.executeBundles([renderBundle]);
} else {
recordRenderPass(passEncoder);
}
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);
};
// ...
Спецификации
| Спецификация |
|---|
| WebGPU # dom-gpurenderpassencoder-executebundles |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari в IOS | Samsung Internet | WebView Android | |
executeBundles |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
предварительная версияВ настоящее время поддерживается только на Linux и Windows. |
99В настоящее время поддерживается только на 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/executeBundles