Ngày xuất bản: 3 tháng 6 năm 2025
Việc triển khai API WebGPU của Chrome bao gồm các tính năng chỉ dành cho mục đích phát triển và kiểm thử. Các tính năng này nằm ngoài quy cách WebGPU chuẩn và không được sử dụng trong môi trường sản xuất.
Tài liệu này trình bày chi tiết cách bật các tính năng dành cho nhà phát triển WebGPU và cung cấp danh sách toàn diện.
Điều kiện tiên quyết
Để bật các tính năng dành cho nhà phát triển WebGPU trong Chrome, hãy làm theo các bước sau:
- Bật cờ "Tính năng dành cho nhà phát triển WebGPU" tại
chrome://flags/#enable-webgpu-developer-features
. - Khởi động lại trình duyệt Chrome.
Tắt tính năng lượng tử hoá truy vấn dấu thời gian
Truy vấn dấu thời gian cho phép các ứng dụng WebGPU đo lường chính xác (tính đến nano giây) thời gian thực thi các lệnh GPU trong quá trình tính toán và kết xuất. Những truy vấn này rất cần thiết để phân tích hiệu suất và hành vi của khối lượng công việc GPU. Để biết thêm thông tin chi tiết, hãy tham khảo phần Truy vấn dấu thời gian trong các lượt kết xuất và kết xuất.
Do lo ngại về tấn công theo thời gian, các truy vấn dấu thời gian được lượng tử hoá với độ phân giải là 100 micro giây, mang lại sự cân bằng tốt giữa độ chính xác và tính bảo mật. Quá trình lượng tử hoá này sẽ tự động tắt khi bạn bật cờ "Tính năng dành cho nhà phát triển WebGPU".
Thông tin mở rộng về bộ chuyển đổi
Để hiểu rõ hơn về bộ chuyển đổi đang được sử dụng, GPUAdapterInfo hiển thị các thuộc tính sau:
- Thuộc tính
device
(được chuẩn hoá) là giá trị nhận dạng bộ chuyển đổi dành riêng cho nhà cung cấp. - Thuộc tính
description
(được chuẩn hoá) là một chuỗi ký tự mà con người đọc được, cung cấp thông tin chi tiết về bộ chuyển đổi. - Thuộc tính
driver
(không chuẩn hoá) là một chuỗi ký tự mà con người đọc được, dùng để mô tả trình điều khiển. - Thuộc tính
backend
(không được chuẩn hoá) cho biết phần phụ trợ đồ hoạ, chẳng hạn như"WebGPU"
,"D3D11"
,"D3D12"
,"metal"
,"vulkan"
,"openGL"
,"openGLES"
hoặc"null"
. - Thuộc tính
type
(không được chuẩn hoá) xác định loại GPU:"discrete GPU"
,"integrated GPU"
,"CPU"
hoặc"unknown"
. - Thuộc tính
d3dShaderModel
(không được chuẩn hoá) chỉ định số mô hình chương trình đổ bóng D3D tối đa được hỗ trợ, ví dụ: 62 cho biết hỗ trợ HLSL SM 6.2. - Thuộc tính
vkDriverVersion
(không chuẩn hoá) là phiên bản trình điều khiển Vulkan do nhà cung cấp chỉ định. - Thuộc tính
powerPreference
(không được chuẩn hoá) là"low-power"
hoặc"high-performance"
, dựa trên GPUPowerPreference trong GPURequestAdapterOptions.
Để dự đoán các giới hạn về bộ nhớ khi phân bổ lượng lớn trong quá trình phát triển ứng dụng, GPUAdapterInfo hiển thị thông tin không chuẩn hoá memoryHeaps
, chẳng hạn như kích thước và loại vùng nhớ khối xếp có sẵn trên bộ chuyển đổi.
const adapter = await navigator.gpu.requestAdapter();
for (const { size, properties } of adapter.info.memoryHeaps) {
console.log(size); // memory heap size in bytes
if (properties & GPUHeapProperty.DEVICE_LOCAL) { /* ... */ }
if (properties & GPUHeapProperty.HOST_VISIBLE) { /* ... */ }
if (properties & GPUHeapProperty.HOST_COHERENT) { /* ... */ }
if (properties & GPUHeapProperty.HOST_UNCACHED) { /* ... */ }
if (properties & GPUHeapProperty.HOST_CACHED) { /* ... */ }
}
Tuỳ chọn biên dịch mô-đun chương trình đổ bóng toán học nghiêm ngặt
GPUShaderModuleDescriptor bao gồm một tuỳ chọn boolean không chuẩn hoá strictMath
, cho phép hoặc tắt độ chính xác toán học nghiêm ngặt trong quá trình biên dịch mô-đun chương trình đổ bóng. Tuỳ chọn này được hỗ trợ trên Metal và Direct3D. Khi strictMath
được bật, trình biên dịch sẽ tuân thủ các quy tắc toán học chính xác. Ngược lại, việc tắt tính năng này cho phép trình biên dịch tối ưu hoá chương trình đổ bóng bằng cách:
- Bỏ qua khả năng có các giá trị NaN và Infinity.
- Xử lý -0 dưới dạng +0.
- Thay thế phép chia bằng phép nhân nhanh hơn bằng phép nhân nghịch đảo.
- Sắp xếp lại các phép toán dựa trên các thuộc tính liên kết và phân phối.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const code = `
// Examines the bit pattern of the floating-point number to
// determine if it represents a NaN according to the IEEE 754 standard.
fn isNan(x : f32) -> bool {
bool ones_exp = (bitcast<u32>(x) & 0x7f8) == 0x7f8;
bool non_zero_sig = (bitcast<u32>(x) & 0x7ffff) != 0;
return ones_exp && non_zero_sig;
}
// ...
`;
// Enable strict math during shader compilation.
const shaderModule = device.createShaderModule({ code, strictMath: true });
Nhập video không cần sao chép
Thuộc tính boolean không chuẩn hoá GPUExternalTexture isZeroCopy
cho bạn biết liệu GPU có truy cập trực tiếp vào video được nhập bằng importExternalTexture() mà không cần bản sao trung gian hay không.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const video = document.querySelector('video');
const externalTexture = device.importExternalTexture({ source: video });
if (externalTexture.isZeroCopy) {
console.log('Video frame was accessed directly by the GPU');
}