Spec-Zone.ru › Web APIs

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 меньше или равно maxColorAttachments GPUDevice пределу.
    • Для каждого 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

Spec-Zone.ru

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