GPUQueue: submit() method

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.

Phương thức submit() của giao diện GPUQueue 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.

Cú pháp

js
submit(commandBuffers)

Tham số

commandBuffers

Một mảng các đối tượng GPUCommandBuffer chứa các lệnh cần xếp vào hàng đợi để GPU xử lý. Mảng không được chứa các đối tượng GPUCommandBuffer trùng lặp, mỗi đối tượng chỉ có thể được gửi một lần trong mỗi lần gọi submit().

Giá trị trả về

Không có (Undefined).

Xác thực

Các tiêu chí sau phải được đáp ứng khi gọi submit(), nếu không sẽ tạo ra GPUValidationErrorGPUQueue trở nên không hợp lệ:

  • Mảng các đối tượng GPUCommandBuffer được tham chiếu trong lệnh gọi submit() không chứa trùng lặp.
  • Mọi đối tượng GPUBuffer, GPUTexture, và GPUQuerySet được dùng trong các lệnh đã mã hóa phải sẵn sàng để sử dụng, tức là không bị không khả dụng (các GPUBuffer không khả dụng nếu đang được mapped) hoặc bị hủy (bằng phương thức destroy()).
  • Mọi đối tượng GPUExternalTexture được dùng trong các lệnh đã mã hóa không bị hết hạn (chúng hết hạn tự động ngay sau khi được nhập qua importExternalTexture()).
  • Nếu đối tượng GPUQuerySet được dùng trong lệnh đã mã hóa thuộc loại truy vấn "occlusion", nó chưa được sử dụng, ngoại trừ bởi GPURenderPassEncoder.beginOcclusionQuery().

Ví dụ

Trong basic render demo, một số lệnh được ghi lại thông qua GPUCommandEncoder:

js
// …

// Create GPUCommandEncoder
const commandEncoder = device.createCommandEncoder();

// Create GPURenderPassDescriptor to tell WebGPU which texture to draw into, then initiate render pass

const renderPassDescriptor = {
  colorAttachments: [
    {
      clearValue: clearColor,
      loadOp: "clear",
      storeOp: "store",
      view: context.getCurrentTexture().createView(),
    },
  ],
};

const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);

// Draw a triangle

passEncoder.setPipeline(renderPipeline);
passEncoder.setVertexBuffer(0, vertexBuffer);
passEncoder.draw(3);

// End the render pass

passEncoder.end();

// …

Các lệnh được mã hóa bởi GPUCommandEncoder được ghi vào GPUCommandBuffer bằng phương thức GPUCommandEncoder.finish(). Command buffer sau đó đượ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
# dom-gpuqueue-submit

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

Xem thêm