GPURenderPassEncoder: executeBundles() 方法

实验性: 这是一个 实验性技术
在生产环境中使用此功能前,请仔细查看 浏览器兼容性表格

安全上下文: 此功能仅在 安全上下文(HTTPS)下可用,并且仅在部分或全部 支持的浏览器 中可用。

executeBundles()GPURenderPassEncoder 接口的方法,用于在此渲染传递过程中执行先前记录到引用的 GPURenderBundle 中的命令。

注意: 调用 executeBundles() 后,当前设置的顶点缓冲区、索引缓冲区、绑定组和管道都将被清除,即使实际上没有执行任何捆绑包也是如此。

语法

js
executeBundles(bundles)

参数

bundles

一个包含要执行的预记录命令的 GPURenderBundle 对象数组。

返回值

无 (Undefined)。

验证

调用 executeBundles() 时必须满足以下条件,否则将生成 GPUValidationError,并且 GPURenderPassEncoder 将变为无效。

对于每个 GPURenderBundle

示例

在 WebGPU 示例 Animometer 示例 中,许多类似的操作同时在许多不同的对象上执行。executeBundles() 用于在多个渲染传递中重用工作以提高性能。请研究示例代码列表以了解完整上下文。

js
// ...

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

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅