GPUCommandEncoder

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 GPUCommandEncoder của WebGPU API đại diện cho một bộ mã hóa thu thập một chuỗi các lệnh GPU để gửi tới GPU.

Một thể hiện GPUCommandEncoder được tạo thông qua GPUDevice.createCommandEncoder().

Thuộc tính thể hiện

label

Một chuỗi dùng làm nhãn để nhận dạng đối tượng, ví dụ trong thông báo GPUError hoặc cảnh báo trên console.

Phương thức thể hiện

beginComputePass()

Bắt đầu mã hóa một compute pass, trả về một GPUComputePassEncoder có thể dùng để điều khiển tính toán.

beginRenderPass()

Bắt đầu mã hóa một render pass, trả về một GPURenderPassEncoder có thể dùng để điều khiển quá trình kết xuất.

clearBuffer()

Mã hóa một lệnh điền một vùng của GPUBuffer bằng các số 0.

copyBufferToBuffer()

Mã hóa một lệnh sao chép dữ liệu từ một GPUBuffer sang một buffer khác.

copyBufferToTexture()

Mã hóa một lệnh sao chép dữ liệu từ một GPUBuffer sang một GPUTexture.

copyTextureToBuffer()

Mã hóa một lệnh sao chép dữ liệu từ một GPUTexture sang một GPUBuffer.

copyTextureToTexture()

Mã hóa một lệnh sao chép dữ liệu từ một GPUTexture sang một texture khác.

finish()

Hoàn tất việc ghi chuỗi lệnh đã được mã hóa trên GPUCommandEncoder này, trả về một GPUCommandBuffer tương ứng.

insertDebugMarker()

Đánh dấu một điểm cụ thể trong chuỗi lệnh đã mã hóa bằng một nhãn.

popDebugGroup()

Kết thúc một debug group, được bắt đầu bằng lệnh gọi pushDebugGroup().

pushDebugGroup()

Bắt đầu một debug group, được gắn bằng một nhãn chỉ định và sẽ chứa tất cả các lệnh đã mã hóa tiếp theo cho đến khi phương thức popDebugGroup() được gọi.

resolveQuerySet()

Mã hóa một lệnh phân giải một GPUQuerySet, sao chép kết quả vào một GPUBuffer được chỉ định.

writeTimestamp() Non-standard Deprecated

Mã hóa một lệnh ghi dấu thời gian vào một GPUQuerySet sau khi các lệnh trước đó đã được ghi vào cùng GPUCommandBuffer đang xếp hàng được GPU thực thi.

Ví dụ

Trong bản demo kết xuất cơ bản của chúng tôi, nhiều lệnh được ghi qua một GPUCommandEncoder:

js
// …

// Tạo GPUCommandEncoder
const commandEncoder = device.createCommandEncoder();

// Tạo GPURenderPassDescriptor để báo cho WebGPU biết texture nào sẽ được vẽ vào, rồi khởi tạo render pass

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

const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);

// Vẽ một tam giác

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

// Kết thúc render pass

passEncoder.end();

// …

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

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

Note: Hãy xem các WebGPU samples để tìm thêm ví dụ về mã hóa lệnh.

Thông số kỹ thuật

Specification
WebGPU
# gpucommandencoder

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

Xem thêm