WGSLLanguageFeatures
Khả dụng hạn chế
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 WGSLLanguageFeatures của WebGPU API là một đối tượng giống set báo cáo các phần mở rộng ngôn ngữ WGSL được hỗ trợ bởi triển khai WebGPU.
Đối tượng WGSLLanguageFeatures được truy cập qua thuộc tính GPU.wgslLanguageFeatures.
Note: Không phải tất cả các phần mở rộng ngôn ngữ WGSL đều có sẵn cho WebGPU trong tất cả các trình duyệt hỗ trợ API. Chúng tôi khuyến nghị bạn kiểm tra kỹ lưỡng bất kỳ phần mở rộng nào bạn chọn sử dụng.
Các tính năng có sẵn
Các phần mở rộng ngôn ngữ WGSL sau được định nghĩa tại WGSL language extensions trong đặc tả WGSL. Hãy nhớ rằng tập hợp tính năng chính xác có sẵn sẽ khác nhau tùy theo các triển khai và thiết bị vật lý, và có thể thay đổi theo thời gian.
packed_4x8_integer_dot_product-
Cho phép sử dụng các lệnh GPU DP4a (Dot Product of 4 Elements and Accumulate) thông qua mã WGSL của bạn. Chúng thực hiện hiệu quả các phép dot product số nguyên 8-bit để tăng tốc tính toán, tiết kiệm bộ nhớ và băng thông mạng, cải thiện hiệu suất so với các phiên bản
f32tương đương. Chúng thường được sử dụng trong các mô hình học máy trong suy luận, trong các framework AI.Cụ thể, khi
packed_4x8_integer_dot_productcó sẵn, mã WGSL có thể sử dụng:- Các scalar số nguyên 32-bit đóng gói 4 thành phần vector của số nguyên 8-bit để được sử dụng làm đầu vào cho các lệnh dot product (thông qua các hàm tích hợp
dot4U8Packed()vàdot4I8Packed()). - Các lệnh đóng gói và giải nén với các vector 4 thành phần đóng gói của số nguyên 8-bit (thông qua các hàm tích hợp như
pack4xI8()vàpack4xI8Clamp()).
- Các scalar số nguyên 32-bit đóng gói 4 thành phần vector của số nguyên 8-bit để được sử dụng làm đầu vào cho các lệnh dot product (thông qua các hàm tích hợp
pointer_composite_access-
Cho phép mã shader WGSL truy cập các thành phần của các kiểu dữ liệu phức tạp bằng cú pháp dấu chấm (
.) giống nhau dù bạn đang làm việc trực tiếp với dữ liệu hay với con trỏ đến nó.Khi
pointer_composite_accesscó sẵn:- Nếu
foolà con trỏ:foo.barcó sẵn như một cách thuận tiện hơn để viết(*foo).bar. Dấu hoa thị (*) thông thường cần thiết để chuyển con trỏ thành "tham chiếu" có thể được giải tham chiếu, nhưng giờ đây cả con trỏ và tham chiếu gần như có thể hoán đổi cho nhau. - Nếu
fookhông phải là con trỏ: Toán tử dấu chấm (.) hoạt động chính xác như bạn đã quen để truy cập trực tiếp các thành viên. - Nếu
palà con trỏ lưu trữ địa chỉ bắt đầu của mảng, thìpa[i]cung cấp cho bạn truy cập trực tiếp vào vị trí bộ nhớ nơi phần tử thứicủa mảng đó được lưu trữ.
Xem Cú pháp đường tắt cho việc giải tham chiếu composite trong WGSL để biết thêm chi tiết và ví dụ.
- Nếu
readonly_and_readwrite_storage_textures-
Khi có sẵn, cho phép đặt các giá trị
"read-only"và"read-write"storageTexture.accesskhi chỉ định các loại mục nhập bind group texture lưu trữ trong bind group layout. Chúng cho phép mã WGSL đọc texture lưu trữ, và đọc/ghi texture lưu trữ, tương ứng. subgroup_id-
Khi có sẵn, các giá trị tích hợp WGSL
subgroup_idvànum_subgroupscó thể sử dụng trong các compute shader. Chúng cải thiện quá trình lên lịch công việc trên các subgroup, bằng cách lập chỉ mục bộ nhớ để tránh các truy cập bộ nhớ chồng chéo. Xem Phần mở rộng subgroup_id WGSL để biết thêm chi tiết.Note: Để tính năng WGSL
subgroup_idcó thể sử dụng được, phần mở rộngsubgroupscần được bật trongGPUDevice(xemGPUSupportedFeatures). uniform_buffer_standard_layout-
Khi có sẵn, các uniform buffer sử dụng cùng ràng buộc bố cục bộ nhớ như các storage buffer, điều này giúp dễ dàng chia sẻ các cấu trúc dữ liệu trên cả hai loại buffer. Điều này có nghĩa là các uniform buffer không còn cần phải có căn chỉnh 16 byte trên các phần tử mảng, hoặc đệm các offset cấu trúc lồng nhau thành bội số của 16 byte.
Xem Phần mở rộng uniform_buffer_standard_layout WGSL để biết thêm chi tiết.
unrestricted_pointer_parameters-
Nới lỏng các hạn chế đối với con trỏ được truyền vào các hàm WGSL. Khi có sẵn, các điều sau được phép:
-
Con trỏ tham số vào các không gian địa chỉ lưu trữ, uniform và workgroup được truyền vào các hàm do người dùng khai báo.
-
Con trỏ đến các thành viên cấu trúc và phần tử mảng được truyền vào các hàm do người dùng khai báo.
Xem Con trỏ Như Tham số Hàm để biết thêm chi tiết.
-
Thuộc tính phiên bản
Các thuộc tính sau có sẵn cho tất cả các đối tượng giống set chỉ đọc:
size-
Trả về số lượng giá trị trong set.
Phương thức phiên bản
Các phương thức sau có sẵn cho tất cả các đối tượng giống set chỉ đọc:
has()-
Trả về một boolean khẳng định có hay không một phần tử có giá trị đã cho có trong set.
values()-
Trả về một đối tượng iterator mới tạo ra các giá trị cho mỗi phần tử trong set theo thứ tự chèn.
keys()-
Bí danh cho
values(). entries()-
Trả về một đối tượng iterator mới chứa một mảng
[value, value]cho mỗi phần tử trong set theo thứ tự chèn. forEach()-
Gọi hàm callback được cung cấp một lần cho mỗi giá trị có trong set theo thứ tự chèn.
Ví dụ
>Kiểm tra xem phần mở rộng có sẵn không
if (
navigator.gpu.wgslLanguageFeatures.has(
"readonly_and_readwrite_storage_textures",
)
) {
console.log("Read-only and read-write storage textures are available");
}
Trả về kích thước set và lặp qua các giá trị
const wgslFeatures = navigator.gpu.wgslLanguageFeatures;
// Return the size of the set
console.log(wgslFeatures.size);
// Iterate through all the set values using values()
const valueIterator = wgslFeatures.values();
for (const value of valueIterator) {
console.log(value);
}
// …
Thông số kỹ thuật
| Thông số kỹ thuật |
|---|
| WebGPU> # gpuwgsllanguagefeatures> |