GPUCommandEncoder: beginComputePass() 方法

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

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

beginComputePass() 方法是 GPUCommandEncoder 接口的一部分,用于开始编码计算传递,并返回一个GPUComputePassEncoder,可用于控制计算。

语法

js
beginComputePass()
beginComputePass(descriptor)

参数

descriptor 可选

包含以下属性的对象

label 可选

提供用于标识对象的标签的字符串,例如在GPUError 消息或控制台警告中。

timestampWrites 可选

一个对象数组,定义了此传递中将写入时间戳查询值的位置和时间。这些对象具有以下属性

  • location:一个枚举值,指定何时执行时间戳。可用的值是
    • "beginning":时间戳与计算传递中的其他编码命令一起执行,一旦相应的GPUCommandBuffer 被提交。
    • "end":时间戳作为单独的时间戳附件列表的一部分执行,一旦传递结束。
  • queryIndex:一个数字,指定时间戳将写入querySet 中的索引位置。
  • querySet:将写入时间戳的GPUQuerySet

注意:要使用时间戳查询,timestamp-query 功能 必须在GPUDevice 中启用。

返回值

一个GPUComputePassEncoder 对象实例。

验证

调用beginComputePass() 时必须满足以下条件,否则将生成GPUValidationError,并返回一个无效的GPUComputePassEncoder

  • timestamp-query 功能GPUDevice 中启用。
  • 没有两个timestampWrites 对象具有相同location。实际上,这意味着您每个渲染传递只能运行两个时间戳查询。
  • 对于每个时间戳查询,querySet GPUQuerySet.type"timestamp"queryIndex 值小于GPUQuerySet.count

示例

在我们的基本计算演示 中,通过GPUCommandEncoder 记录了几个命令。这些命令中的大多数来自通过beginComputePass() 创建的GPUComputePassEncoder

js
// ...

// Create GPUCommandEncoder to encode commands to issue to the GPU
const commandEncoder = device.createCommandEncoder();

// Initiate render pass
const passEncoder = commandEncoder.beginComputePass();

// Issue commands
passEncoder.setPipeline(computePipeline);
passEncoder.setBindGroup(0, bindGroup);
passEncoder.dispatchWorkgroups(Math.ceil(BUFFER_SIZE / 64));

// End the render pass
passEncoder.end();

// Copy output buffer to staging buffer
commandEncoder.copyBufferToBuffer(
  output,
  0, // Source offset
  stagingBuffer,
  0, // Destination offset
  BUFFER_SIZE,
);

// End frame by passing array of command buffers to command queue for execution
device.queue.submit([commandEncoder.finish()]);

// ...

规范

规范
WebGPU
# dom-gpucommandencoder-begincomputepass

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅