GPUDevice: метод createRenderPipelineAsync()
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.
Экспериментально: Это экспериментальная технология
Перед использованием в производстве тщательно проверьте таблицу совместимости с браузерами.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Примечание: Эта функция доступна в Web Workers.
Метод createRenderPipelineAsync() интерфейса GPUDevice возвращает Promise, который выполняется с GPURenderPipeline, который может контролировать этапы шейдеров вершин и фрагментов и использоваться в GPURenderPassEncoder или GPURenderBundleEncoder, как только конвейер можно использовать без задержек.
Примечание: В идеале следует использовать этот метод вместо GPUDevice.createRenderPipeline() всякий раз, когда это возможно, поскольку это предотвращает блокировку выполнения операций GPU при компиляции конвейера.
Синтаксис
createRenderPipelineAsync(descriptor)
Параметры
descriptor-
См. определение дескриптора для метода
GPUDevice.createRenderPipeline().
Возвращаемое значение
Promise, который выполняется с экземпляром объекта GPURenderPipeline, когда созданный конвейер готов к использованию без дополнительных задержек.
Валидация
Если создание конвейера завершится ошибкой, и созданный конвейер окажется недействительным, возвращённое обещание отклонится с GPUPipelineError:
- Если это внутренняя ошибка, у
GPUPipelineErrorбудетreasonзначение"internal". - Если это ошибка валидации, у
GPUPipelineErrorбудетreasonзначение"validation".
Ошибка валидации может возникнуть, если любое из следующих условий ложно:
- Для объектов
depthStencil:-
format— это форматdepth-or-stencil. - Свойства
depthBias,depthBiasClampиdepthBiasSlopeScaleустановлены в значения0для линий и точек, т. е. еслиtopologyустановлено в значения"line-list","line-strip", или"point-list". - Если
depthWriteEnabled—trueилиdepthCompareне равно"always", уformatесть глубинная составляющая. - Если свойства
stencilFrontилиstencilBackне соответствуют значениям по умолчанию, уformatесть составляющая глубины.
-
- Для объектов
fragment:-
targets.lengthменьше или равноmaxColorAttachmentsGPUDeviceпределу. - Для каждого
target, численное значениеwriteMaskменьше или равно 16. - Если любая из операций смешения использует альфа-канал источника (например,
"src-alpha-saturated"), у результата есть альфа-канал (то есть это должен бытьvec4). - Если свойство
entryPointопущено, код шейдера содержит единственную функцию точки входа для фрагментного шейдера, которую браузер использует в качестве функции точки входа по умолчанию.
-
- Для объектов
primitive:- Если используется свойство
unclippedDepth, тоdepth-clip-controlфункция включена.
- Если используется свойство
- Для объектов
vertex:- Если свойство
entryPointопущено, код шейдера содержит единственную функцию точки входа для вершинного шейдера, которую браузер использует в качестве функции точки входа по умолчанию.
- Если свойство
Примеры
Примечание: В примерах WebGPU содержится множество других примеров.
Базовый пример
В следующем примере показан базовый пример построения объекта дескриптора конвейера рендеринга, который затем используется для создания GPURenderPipeline с помощью вызова createRenderPipelineAsync().
async function init() {
// ...
const vertexBuffers = [
{
attributes: [
{
shaderLocation: 0, // position
offset: 0,
format: "float32x4",
},
{
shaderLocation: 1, // color
offset: 16,
format: "float32x4",
},
],
arrayStride: 32,
stepMode: "vertex",
},
];
const pipelineDescriptor = {
vertex: {
module: shaderModule,
entryPoint: "vertex_main",
buffers: vertexBuffers,
},
fragment: {
module: shaderModule,
entryPoint: "fragment_main",
targets: [
{
format: navigator.gpu.getPreferredCanvasFormat(),
},
],
},
primitive: {
topology: "triangle-list",
},
layout: "auto",
};
const renderPipeline =
await device.createRenderPipelineAsync(pipelineDescriptor);
// ...
}
Спецификации
| Спецификация |
|---|
| WebGPU # dom-gpudevice-createrenderpipelineasync |
Совместимость с браузерами
| Рабочий стол | Мобильный | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
createRenderPipelineAsync |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
113В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
previewВ настоящее время поддерживается только на Linux и Windows. |
99В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
preview | 121 | Нет | 81 | Нет | 25.0 | 121 |
dual-source-blending |
130В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
130В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 115В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 130 | Нет | 86 | Нет | Нет | 130 |
optional_depthcompare_depthwriteenabled |
120В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
120В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 106В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
optional_entryPoint |
121В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
121В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 107В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 121В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 81В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 25.0В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
121В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
texture_rgb10a2uint |
119В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
119В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 105В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 121 | Нет | 81 | Нет | 25.0 | 121 |
validates_depth_bias_for_line_and_point_topologies |
131В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
131В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 116В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 131В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | Нет | Нет | Нет | 131В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
vertex_unorm10-10-10-2 |
119В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
119В настоящее время поддерживается только на ChromeOS, macOS и Windows. |
Нет | 105В настоящее время поддерживается только на 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/GPUDevice/createRenderPipelineAsync