GPURenderPassEncoder: executeBundles() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

注意:此功能在 Web Workers 中可用。

GPURenderPassEncoder 接口的 executeBundles() 方法执行先前记录到引用的 GPURenderBundles 中的命令,作为此渲染通道的一部分。

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

语法

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

浏览器兼容性

另见