GPUQueue

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

Note: This feature is available in Web Workers.

Giao diện GPUQueue của WebGPU API kiểm soát việc thực thi các lệnh đã mã hóa trên GPU.

Hàng đợi chính của thiết bị được truy cập thông qua thuộc tính GPUDevice.queue.

Thuộc tính phiên bản

label

Một chuỗi cung cấp nhãn có thể dùng để nhận diện đối tượng, ví dụ trong thông báo GPUError hoặc cảnh báo console.

Phương thức phiên bản

copyExternalImageToTexture()

Sao chép một ảnh chụp từ ảnh nguồn, video, hoặc canvas vào một GPUTexture được chỉ định.

onSubmittedWorkDone()

Trả về một Promise phân giải khi tất cả công việc được gửi lên GPU thông qua GPUQueue này tại thời điểm phương thức được gọi đã được xử lý xong.

submit()

Lên lịch thực thi các command buffer được đại diện bởi một hoặc nhiều đối tượng GPUCommandBuffer trên GPU.

writeBuffer()

Ghi một nguồn dữ liệu được cung cấp vào một GPUBuffer được chỉ định.

writeTexture()

Ghi một nguồn dữ liệu được cung cấp vào một GPUTexture được chỉ định.

Ví dụ

Trong basic render demo, chúng ta định nghĩa dữ liệu đỉnh trong một Float32Array để dùng vẽ một tam giác:

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,
]);

Để sử dụng dữ liệu này trong render pipeline, ta cần đưa nó vào GPUBuffer. Đầu tiên tạo buffer:

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

Để đưa dữ liệu vào buffer, ta có thể dùng hàm writeBuffer(), cho phép tác nhân người dùng xác định cách sao chép dữ liệu hiệu quả nhất:

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

Sau đó, một tập hợp lệnh được mã hóa vào GPUCommandBuffer bằng phương thức GPUCommandEncoder.finish(). Command buffer được truyền vào hàng đợi thông qua lệnh gọi submit(), sẵn sàng để GPU xử lý.

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

Note: Hãy nghiên cứu WebGPU samples để tìm thêm các ví dụ về hàng đợi.

Thông số kỹ thuật

Specification
WebGPU
# gpuqueue

Tương thích trình duyệt

Xem thêm