GPUQueue

可用性有限

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

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

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

GPUQueue 接口是 WebGPU API 的一部分,用于控制 GPU 上已编码命令的执行。

可以通过 GPUDevice.queue 属性访问设备的**主队列**。

实例属性

label

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

实例方法

copyExternalImageToTexture()

将从源图像、视频或 Canvas 捕获的快照复制到指定的 GPUTexture 中。

onSubmittedWorkDone()

返回一个 Promise,当通过此 GPUQueue 在调用方法时已提交到 GPU 的所有工作都已处理完毕时,该 Promise 将解析。

submit()

调度 GPU 执行由一个或多个 GPUCommandBuffer 对象表示的命令缓冲区。

writeBuffer()

将提供的数据源写入指定的 GPUBuffer 中。

writeTexture()

将提供的数据源写入指定的 GPUTexture 中。

示例

在我们 基础渲染演示中,我们使用 Float32Array 定义了一些顶点数据,我们将用它来绘制一个三角形。

js
const vertices = new Float32Array([
  0.0, 0.6, 0, 1, 1, 0, 0, 1, -0.5, -0.6, 0, 1, 0, 1, 0, 1, 0.5, -0.6, 0, 1, 0,
  0, 1, 1,
]);

要将这些数据用于渲染管线,我们需要将其放入 GPUBuffer。首先,我们创建该缓冲区。

js
const vertexBuffer = device.createBuffer({
  size: vertices.byteLength, // make it big enough to store vertices in
  usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
});

要将数据放入缓冲区,我们可以使用 writeBuffer() 函数,它允许用户代理确定复制数据的最高效方式。

js
device.queue.writeBuffer(vertexBuffer, 0, vertices, 0, vertices.length);

稍后,使用 GPUCommandEncoder.finish() 方法将一组命令编码到 GPUCommandBuffer 中。然后通过 submit() 调用将命令缓冲区传递给队列,准备由 GPU 处理。

js
device.queue.submit([commandEncoder.finish()]);

注意:研究 WebGPU 示例以查找更多队列示例。

规范

规范
WebGPU
# gpuqueue

浏览器兼容性

另见