GPUQueue

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

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

GPUQueueWebGPU API 的一个接口,用于控制在 GPU 上执行编码命令。

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

实例属性

label 实验性

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

实例方法

copyExternalImageToTexture() 实验性

将从源图像、视频或画布中截取的快照复制到给定的 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
# gpu-queue

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅