GPUCommandEncoder: метод beginRenderPass()
Ограниченная доступность
Эта функция не относится к Базовым, так как она не работает во всех широко используемых браузерах.
Экспериментальная: Это экспериментальная технология
Перед использованием в производстве внимательно проверьте таблицу совместимости с браузерами.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS), в некоторых или во всех поддерживающих браузерах.
Примечание: Эта функция доступна в рабочих потоках.
Метод beginRenderPass() интерфейса GPUCommandEncoder начинает кодирование прохода отрисовки, возвращая GPURenderPassEncoder, который можно использовать для управления отрисовкой.
Синтаксис
beginRenderPass(descriptor)
Параметры
descriptor-
Объект, содержащий следующие свойства:
colorAttachments-
Массив объектов (см. Структура объекта прикрепления цвета), определяющих цветовые прикрепления, которые будут выводиться при выполнении этого прохода отрисовки.
depthStencilAttachmentНеобязательно-
Объект (см. Структура объекта прикрепления глубины/маски), определяющий прикрепление глубины/маски, которое будет выводиться и проверяться при выполнении этого прохода отрисовки.
labelНеобязательно-
Строка, предоставляющая метку, которую можно использовать для идентификации объекта, например, в сообщениях
GPUErrorили предупреждениях консоли. maxDrawCountНеобязательно-
Число, указывающее максимальное количество вызовов рисования, которые будут выполнены в проходе отрисовки. Некоторые реализации используют это значение для определения размера работы, вводимой перед проходом отрисовки. Вы должны сохранить значение по умолчанию — 50000000 — если вам не известно, что будет выполнено больше вызовов рисования.
occlusionQuerySetНеобязательно-
GPUQuerySetдля хранения результатов запроса экранирования для этого прохода. timestampWritesНеобязательно-
Массив объектов, определяющих, где и когда будут записываться значения запроса отметки времени для этого прохода. Эти объекты имеют следующие свойства:
-
location: Перечисление, указывающее, когда выполняется отметка времени. Доступные значения:-
"beginning": Отметка времени выполняется вместе с другими закодированными командами в вычислительном проходе после отправки соответствующегоGPUCommandBuffer. -
"end": Отметка времени выполняется в рамках отдельного списка прикреплений отметки времени после завершения прохода.
-
-
queryIndex: Число, указывающее позицию индекса вquerySet, в которую будет записана отметка времени. -
querySet:GPUQuerySetдля записи отметки времени.
Примечание: Для использования запросов отметки времени требуется включение
timestamp-queryфункции. -
Структура объекта прикрепления цвета
Объекты прикрепления цвета могут иметь следующие свойства:
clearValueНеобязательно-
Значение цвета для очистки текстуры
viewперед выполнением прохода отрисовки. Это значение игнорируется, еслиloadOpне установлено в"clear".clearValueпринимает массив или объект, представляющий четыре цветовых компонентаr,g,b, иaв виде десятичных чисел.Вот пример массива:
clearValue: [0.0, 0.5, 1.0, 1.0];
Эквивалентный объект будет выглядеть так:
clearValue: { r: 0.0, g: 0.5, b: 1.0, a: 1.0 }Если
clearValueопущено, оно по умолчанию равно{r: 0, g: 0, b: 0, a: 0}. depthSliceНеобязательно-
Число, представляющее индекс 3D-слоя глубины, который будет выводиться для этого прикрепления цвета в случае 3D-
GPUTextureViewview. При указании этого значения WebGPU может напрямую отрисовывать срезы 3D-текстур в рамках проходов отрисовки. loadOp-
Перечисление, указывающее операцию загрузки, которую нужно выполнить над
viewперед выполнением прохода отрисовки. Возможные значения:-
"clear": ЗагружаетclearValueдля этого прикрепления в проход отрисовки. -
"load": Загружает существующее значение для этого прикрепления в проход отрисовки.
Примечание: Рекомендуется всегда использовать
"clear"в случаях, когда начальное значение не имеет значения, так как это обеспечит лучшую производительность на некоторых устройствах, таких как мобильные. -
storeOp-
Перечисление, указывающее операцию сохранения, которую нужно выполнить над
viewпосле выполнения прохода отрисовки. Возможные значения:-
"discard": Отбрасывает результирующее значение прохода отрисовки для этого прикрепления. -
"store": Сохраняет результирующее значение прохода отрисовки для этого прикрепления.
-
resolveTargetНеобязательно-
Объект
GPUTextureView, представляющий подресурс текстуры, который получит разрешенное выходное значение для этого цветового прикрепления, еслиviewявляется многовыборочным. view-
Объект
GPUTextureView, представляющий подресурс текстуры, который будет выводиться для этого цветового прикрепления.Примечание: Каждое цветовое или глубинно-масковое прикрепление должно быть уникальным подресурсом текстуры, и подресурсы текстур, используемые как прикрепления, не могут использоваться внутри прохода отрисовки.
Структура объекта прикрепления глубины/маски
Объект depthStencilAttachment может иметь следующие свойства:
depthClearValueНеобязательно-
Число, указывающее значение для очистки компоненты глубины
viewперед выполнением прохода рендеринга. Это игнорируется, еслиdepthLoadOpне установлено в"clear".Значение должно быть между 0.0 и 1.0 включительно.
depthLoadOpНеобязательно-
Перечисление, указывающее операцию загрузки для выполнения над компонентой глубины
viewперед выполнением прохода рендеринга. Возможные значения:-
"clear": Загружает значениеclearValueдля данного присоединения в проход рендеринга. -
"load": Загружает существующее значение для данного присоединения в проход рендеринга.
Примечание: Рекомендуется всегда использовать
"clear"в случаях, когда начальное значение не имеет значения, так как это обеспечит лучшую производительность на некоторых устройствах, таких как мобильные. -
depthReadOnlyНеобязательно-
Булево значение. Установка значения в
trueделает компонент глубиныviewтолько для чтения. ЕслиdepthReadOnlyопущено, по умолчанию используетсяfalse. depthStoreOpНеобязательно-
Перечисление, указывающее операцию сохранения для выполнения над компонентой глубины
viewпосле выполнения прохода рендеринга. Возможные значения:-
"discard": Отбрасывает результирующее значение прохода рендеринга для данного присоединения. -
"store": Сохраняет результирующее значение прохода рендеринга для данного присоединения.
-
stencilClearValueНеобязательно-
Число, указывающее значение для очистки компоненты трафарета
viewперед выполнением прохода рендеринга. Это игнорируется, еслиstencilLoadOpне установлено в"clear".Если
stencilClearValueопущено, по умолчанию используется 0. stencilLoadOpНеобязательно-
Перечисление, указывающее операцию загрузки для выполнения над компонентой трафарета
viewперед выполнением прохода рендеринга. Возможные значения:-
"clear": Загружает значениеclearValueдля данного присоединения в проход рендеринга. -
"load": Загружает существующее значение для данного присоединения в проход рендеринга.
Примечание: Рекомендуется всегда использовать
"clear"в случаях, когда начальное значение не имеет значения, так как это обеспечит лучшую производительность на некоторых устройствах, таких как мобильные. -
stencilReadOnlyНеобязательно-
Булево значение. Установка значения в
trueделает компонент трафаретаviewтолько для чтения. ЕслиstencilReadOnlyопущено, по умолчанию используетсяfalse. stencilStoreOpНеобязательно-
Перечисление, указывающее операцию сохранения для выполнения над компонентой трафарета
viewпосле выполнения прохода рендеринга. Возможные значения:-
"discard": Отбрасывает результирующее значение прохода рендеринга для данного присоединения. -
"store": Сохраняет результирующее значение прохода рендеринга для данного присоединения.
-
view-
Объект
GPUTextureView, представляющий подресурс текстуры, который будет выводиться и читаться для данного присоединения глубины/трафарета.
Возвращаемое значение
Экземпляр объекта GPURenderPassEncoder.
Валидация
При вызове beginRenderPass() должны быть соблюдены следующие критерии, иначе будет сгенерирована ошибка GPUValidationError, и будет возвращен недействительный объект GPURenderPassEncoder.
Общие:
-
colorAttachments.lengthменьше или равно пределуmaxColorAttachmentsустройстваGPUDevice(limit). - Если
colorAttachmentsсодержит только значенияnull, то предоставляетсяdepthStencilAttachment. - Все
viewвcolorAttachmentsиdepthStencilAttachmentимеют одинаковые значенияGPUTexture.sampleCountи размеры рендеринга (GPUTexture.height,GPUTexture.widthиGPUTexture.depthOrArrayLayers). - Если
occlusionQuerySetустановлено, связанный объектGPUQuerySetимеет значение"occlusion"дляtype.
Для объектов присоединения цвета
- Объект
viewотображается, и форматview(указанный в описателе исходного вызоваGPUTexture.createView()) — формат, подходящий для рендеринга цвета. - Если
resolveTargetуказано:- Значение
sampleCountисходной текстурыGPUTextureобъектаviewбольше 1. - Значение
sampleCountисходной текстурыGPUTextureобъектаresolveTargetравно 1. -
resolveTargetотображается. - Размеры подресурсов, представленных объектами
viewиresolveTarget, совпадают. -
Форматы
viewиresolveTargetсовпадают.
- Значение
-
Количество байтов на пиксель для присоединений цвета меньше или равно пределу
maxColorAttachmentBytesPerSampleустройстваGPUDevice(limit).
Для объектов присоединения глубины/трафарета:
- Объект
viewотображается, и его формат — формат глубины/трафарета. - Если
depthLoadOpустановлено в"clear", предоставлен допустимый объектdepthClearValue. - Если формат
view— комбинированный формат глубины/трафарета, тоdepthReadOnlyсоответствуетstencilReadOnly. - Если формат
viewсодержит компонент глубины иdepthReadOnlyравноfalse, то предоставленыdepthLoadOpиdepthStoreOp. - Если формат
viewсодержит компонент глубины иdepthReadOnlyравноtrue, тоdepthLoadOpиdepthStoreOpне предоставлены. - Если формат
viewсодержит компонент трафарета иstencilReadOnlyравноfalse, то предоставленыstencilLoadOpиstencilStoreOp. - Если формат
viewсодержит компонент трафарета иstencilReadOnlyравноtrue, тоstencilLoadOpиstencilStoreOpне предоставлены.
Для запросов отметки времени:
- Функция
timestamp-query(feature) включена в устройствеGPUDevice. - Ни у двух объектов
timestampWritesнет одинаковых значенийlocation. - Для каждого запроса отметки времени тип
querySetGPUQuerySet.typeравен"timestamp", и значениеqueryIndexменьше, чемGPUQuerySet.count. - Ни у двух объектов
timestampWritesнет одинаковой пары значенийqueryIndexиquerySet.
Примеры
В нашей демо-версии простейшего рендеринга ряд команд записывается через объект GPUCommandEncoder. Эти команды происходят от объекта GPURenderPassEncoder, созданного с помощью beginRenderPass():
// ...
// Create GPUCommandEncoder
const commandEncoder = device.createCommandEncoder();
// Create GPURenderPassDescriptor to tell WebGPU which texture to draw into, then initiate render pass
const renderPassDescriptor = {
colorAttachments: [
{
clearValue: clearColor,
loadOp: "clear",
storeOp: "store",
view: context.getCurrentTexture().createView(),
},
],
};
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
// Draw a triangle
passEncoder.setPipeline(renderPipeline);
passEncoder.setVertexBuffer(0, vertexBuffer);
passEncoder.draw(3);
// End the render pass
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);
// ...
Спецификации
| Спецификация |
|---|
| WebGPU # dom-gpucommandencoder-beginrenderpass |
Совместимость с браузерами
| Рабочий стол | Мобильный | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
beginRenderPass |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
previewВ настоящее время поддерживается только на Linux и Windows. |
99В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
preview | 121 | Нет | 81 | Нет | 25.0 | 121 |
depthSlice_option |
125В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
125В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 111В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 125 | Нет | 83 | Нет | 27.0 | 125 |
separate_depth_stencil_read-only |
123В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
123В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 109В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 123 | Нет | 82 | Нет | 27.0 | 123 |
timestampWrites |
121В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
121В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 107В настоящее время поддерживается только на 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/GPUCommandEncoder/beginRenderPass