Tính năng mới trong WebGPU (Chrome 149-150)

François Beaufort
François Beaufort

Xuất bản: Ngày 17 tháng 6 năm 2026

Immediates

Giá trị tức thì (còn gọi là hằng số đẩy hoặc hằng số gốc) cho phép bạn truyền trực tiếp một lượng nhỏ dữ liệu thường xuyên thay đổi đến các chương trình đổ bóng. Quy trình này bỏ qua chi phí chung của việc tạo vùng đệm GPU và quản lý các nhóm liên kết.

Việc cập nhật các liên kết bộ đệm đồng nhất cho dữ liệu thay đổi trong mỗi hàm gọi vẽ (chẳng hạn như mã nhận dạng đối tượng duy nhất hoặc ma trận biến đổi 3D cho hàng trăm đối tượng) sẽ tạo ra chi phí CPU. Chèn các giá trị thô trực tiếp vào bộ mã hoá đường chuyền để tránh ghi dữ liệu vào bộ nhớ và quản lý các lượt tìm kiếm trên GPU.

Các biến tức thời cung cấp một đường dẫn nhanh cho các biến nhỏ, có tính động cao. Hãy sử dụng vùng đệm đồng nhất hoặc vùng đệm lưu trữ cho các mảng dữ liệu lớn, cấu trúc chiếu sáng phức tạp hoặc ma trận lớn.

Trong chương trình đổ bóng WGSL, không gian địa chỉ <immediate> cho phép bạn xác định dữ liệu tức thì có thể được truyền trực tiếp đến bộ mã hoá truyền. Gọi setImmediates() trong JavaScript trước hàm gọi vẽ để cung cấp dữ liệu này mà không cần liên kết một nhóm. Để kiểm tra xem có hỗ trợ hay không, hãy phát hiện tính năng của tiện ích ngôn ngữ immediate_address_space WGSL thông qua navigator.gpu.wgslLanguageFeatures. Hãy xem ví dụ sau và ý định phát hành.

if (!navigator.gpu.wgslLanguageFeatures.has('immediate_address_space')) {
   throw new Error(`WGSL immediate address space is not available`);
}

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const module = device.createShaderModule({ code: `
  requires immediate_address_space;

  var<immediate> color: vec4f;

  @vertex fn vertexMain(@builtin(vertex_index) i : u32) -> @builtin(position) vec4f {
    const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
    return vec4f(pos[i], 0, 1);
  }

  @fragment fn fragmentMain() -> @location(0) vec4f {
    return color;
  }`,
});

// Create render pass encoder (omitted)...

// By using layout: 'auto', WebGPU will automatically infer the `immediateSize`
// required by the pipeline layout from the WGSL module.
const pipeline = device.createRenderPipeline({
  layout: 'auto',
  vertex: { module },
  fragment: { module, targets: [{ format }] },
});
myRenderPassEncoder.setPipeline(pipeline);

// Send immediate data to the GPU, then issue a draw call
myRenderPassEncoder.setImmediates(/*rangeOffset=*/0, new Float32Array([255, 0, 0, 255]));
myRenderPassEncoder.draw(3);
myRenderPassEncoder.end();

Để tìm hiểu sâu hơn về tính năng này, hãy xem WebGPUFundamentals Immediates.

Xin cảm ơn nhóm tại Microsoft vì những đóng góp của họ!

Xác thực nghiêm ngặt hơn đối với tệp đính kèm tạm thời

WebGPU gần đây đã giới thiệu cờ TRANSIENT_ATTACHMENT GPUTextureUsage. Cờ này cho phép nhà phát triển tạo các tệp đính kèm kết xuất tạm thời, chẳng hạn như vùng đệm độ sâu-khuôn tô hoặc các mục tiêu được lấy mẫu nhiều lần. Các tệp đính kèm này vẫn nằm trong bộ nhớ ô nhanh trên chip mà không cần phân bổ VRAM chính.

Các bản cập nhật gần đây (#6248#6267) tinh chỉnh các quy tắc xác thực để ngăn chặn việc sử dụng sai các tệp đính kèm kết cấu tiết kiệm bộ nhớ này:

  • Do các hạn chế của nền tảng, viewFormats phải là một mảng trống khi tạo hoạ tiết tạm thời. Bạn không cần định dạng khung hiển thị thay thế vì kết cấu tạm thời chỉ dùng để kết xuất.
  • Việc tạo một khung hiển thị kết cấu không thu hẹp các cờ sử dụng. Khi gọi createView() trên một hoạ tiết tạm thời, khung hiển thị không thể thay đổi cách sử dụng.
  • Bạn không thể dùng tệp đính kèm tạm thời làm resolveTarget bên trong một lượt kết xuất.

Thông tin cập nhật về Dawn

Đây chỉ là một số điểm nổi bật chính. Xem danh sách đầy đủ các cam kết.

Tính năng mới trong WebGPU

Danh sách mọi nội dung đã được đề cập trong loạt bài Tính năng mới trong WebGPU.

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113