GPUCommandEncoder: beginComputePass() 方法
beginComputePass()
方法是 GPUCommandEncoder
接口的一部分,用于开始编码计算传递,并返回一个GPUComputePassEncoder
,可用于控制计算。
语法
js
beginComputePass()
beginComputePass(descriptor)
参数
descriptor
可选-
包含以下属性的对象
label
可选-
提供用于标识对象的标签的字符串,例如在
GPUError
消息或控制台警告中。 timestampWrites
可选-
一个对象数组,定义了此传递中将写入时间戳查询值的位置和时间。这些对象具有以下属性
location
:一个枚举值,指定何时执行时间戳。可用的值是"beginning"
:时间戳与计算传递中的其他编码命令一起执行,一旦相应的GPUCommandBuffer
被提交。"end"
:时间戳作为单独的时间戳附件列表的一部分执行,一旦传递结束。
queryIndex
:一个数字,指定时间戳将写入querySet
中的索引位置。querySet
:将写入时间戳的GPUQuerySet
。
返回值
一个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 的浏览器中加载。