Tính năng mới trong WebGPU (Chrome 119)

François Beaufort
François Beaufort

Hoạ tiết nổi 32 bit có thể lọc

Hoạ tiết dấu phẩy động 32 bit được dùng để lưu trữ dữ liệu có độ chính xác cao, chẳng hạn như hình ảnh HDR và bản đồ độ sâu. Chúng đặc biệt quan trọng đối với GPU dùng trong các ứng dụng chuyên nghiệp và trò chơi cao cấp.

Hỗ trợ hoạ tiết nổi 32 bit có thể lọc mô tả khả năng của GPU lọc được hoạ tiết dấu phẩy động 32 bit. Điều này có nghĩa là GPU có thể làm mịn các cạnh của hoạ tiết dấu phẩy động, giúp các cạnh này xuất hiện ít răng cưa hơn. Phần mở rộng này tương tự như phần mở rộng "OES_texture_float_linear" trong WebGL.

Không phải GPU nào cũng hỗ trợ hoạ tiết nổi 32 bit có thể lọc. Giờ đây, khi tính năng "float32-filterable" có trong GPUAdapter, bạn có thể yêu cầu GPUDevice cho tính năng này và lọc hoạ tiết ở định dạng "r32float", "rg32float" và "rgba32float". Hãy xem ví dụ sau và vấn đề dawn:1664.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-filterable")) {
  throw new Error("Filterable 32-bit float textures support is not available");
}
// Explicitly request filterable 32-bit float textures support.
const device = await adapter.requestDevice({
  requiredFeatures: ["float32-filterable"],
});

// Create a sampler with linear filtering.
const sampler = device.createSampler({
  magFilter: "linear",
});

// Create a texture with rgba32float format.
const texture = device.createTexture({
  size: [100, 100],
  format: "rgba32float",
  usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
});

// Write data to texture, create a bindgroup with sampler and texture and
// send the appropriate commands to the GPU....

định dạng đỉnh unorm10-10-10-2

Định dạng đỉnh mới có tên là "unorm10-10-10-2" còn gọi là "rgb10a2" đã được thêm vào thông số kỹ thuật của WebGPU. Nó bao gồm một giá trị 32 bit được đóng gói với bốn giá trị số nguyên không dấu được chuẩn hoá, được sắp xếp như 10 bit, 10 bit, 10 bit và 2 bit. Hãy xem ví dụ sau và vấn đề bình minh:2044.

// Define the layout of vertex attribute data with unorm10-10-10-2 format.
const buffers = [
  {
    arrayStride: 0,
    attributes: [
      { format: "unorm10-10-10-2", offset: 0, shaderLocation: 0 },
    ],
  },
];

// Describe the vertex shader entry point and its input buffer layouts.
const vertex = {
  module: myVertexShaderModule,
  entryPoint: "main",
  buffers,
};

// Pass vertex to device.createRenderPipeline() and
// use vec4<f32> type in WGSL shader code to manipulate data.

rgb10a2uint định dạng hoạ tiết

Định dạng hoạ tiết mới có tên là "rgb10a2uint" đã được thêm vào thông số kỹ thuật của WebGPU. Nó bao gồm một định dạng pixel đóng gói 32 bit với bốn thành phần số nguyên không dấu: đỏ 10 bit, xanh lục 10 bit, xanh lam 10 bit và alpha 2 bit. Hãy xem ví dụ sau và vấn đề bình minh:1936.

// Create a texture with rgb10a2uint format.
const texture = device.createTexture({
  size: [100, 100],
  format: "rgb10a2uint",
  usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
});

// Write data to texture, create a bindgroup with texture and
// send the appropriate commands to the GPU....

Thông tin cập nhật vào Bình minh

Truy vấn dấu thời gian cho phép các ứng dụng WebGPU đo chính xác (đến nano giây) thời gian thực thi các lệnh GPU. Hình dạng API để ghi lại các truy vấn dấu thời gian ở đầu và cuối quá trình truyền đã được cập nhật cho phù hợp với thông số kỹ thuật của WebGPU. Hãy xem ví dụ sau và vấn đề Dawn:1800.

// Create a timestamp query set that will store the timestamp values.
wgpu::QuerySetDescriptor querySetDescriptor = {
    .count = 2,
    .type = wgpu::QueryType::Timestamp};
wgpu::QuerySet querySet = device.CreateQuerySet(&querySetDescriptor);

wgpu::RenderPassTimestampWrites timestampWrites = {
    .querySet = querySet,
    .beginningOfPassWriteIndex = 0,
    .endOfPassWriteIndex = 1};
wgpu::ComputePassDescriptor pass{.timestampWrites = &timestampWrites};

// Write the queue timestamp into beginningOfPassWriteIndex and
// endOfPassWriteIndex of myQuerySet respectively before and after the pass
// commands execute.
myEncoder.BeginComputePass(&pass);

Bài viết này chỉ bao gồm một số điểm nổi bật chính. Xem danh sách đầy đủ các thay đổi.

Tính năng mới trong WebGPU

Danh sách tất cả nội dung được đề cập trong loạt bài Có gì mới trong WebGPU.

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