מה חדש ב-WebGPU (Chrome 119)

François Beaufort
François Beaufort

מרקמים של מספרים ממשיים (float) ב-32 ביט שניתנים לסינון

טקסטורות של 32 ביט עם נקודה צפה משמשות לאחסון נתונים ברמת דיוק גבוהה, כמו תמונות HDR ומפות עומק. הם חשובים במיוחד למעבדי GPU שמשמשים לגיימינג מתקדם ובאפליקציות מקצועיות.

התמיכה בתמונות טקסטורה של 32 ביט שניתנות לסינון מתארת את היכולת של GPU לסנן תמונות טקסטורה של 32 ביט עם נקודת צפה. המשמעות היא ש-GPU יכול להחליק את הקצוות של טקסטורות של נקודות צפות, כך שהן ייראו פחות חדות. הוא דומה לתוסף 'OES_texture_float_linear' ב-WebGL.

לא כל המעבדים הגרפיים תומכים בטקסטורות של 32 ביט מסוג float שניתנות לסינון. כשהתכונה "float32-filterable" זמינה ב-GPUAdapter, אפשר עכשיו לבקש GPUDevice עם התכונה הזו ולסנן טקסטורות בפורמטים 'r32float', 'rg32float' ו-'rgba32float'. אפשר לראות את הדוגמה הבאה ואת הבעיה 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....

פורמט קודקוד unorm10-10-10-2

פורמט קודקוד חדש שנקרא 'unorm10-10-10-2', נקרא גם 'rgb10a2', נוסף למפרט WebGPU. הוא מורכב מערך אחד של 32 ביט עם ארבעה ערכים שלמים רגולריים ללא סימן, שמאורגנים כ-10 ביט, 10 ביט, 10 ביט ו-2 ביט. אפשר לעיין בדוגמה הבאה ובבעיה dawn: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

נוסף פורמט טקסטורה חדש בשם 'rgb10a2uint' למפרט WebGPU. הוא מורכב מפורמט פיקסלים דחוס של 32 סיביות שמכיל ארבעה רכיבים של מספרים שלמים לא חתומים: אדום 10 סיביות, ירוק 10 סיביות, כחול 10 סיביות ואלפא 2 סיביות. אפשר לראות את הדוגמה הבאה ואת הבעיה dawn: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....

עדכונים של Dawn

שאילתות של חותמות זמן מאפשרות לאפליקציות WebGPU למדוד במדויק (עד לנאונואדה) את משך הזמן שלקח לביצוע פקודות ה-GPU שלהן. צורת ה-API לתיעוד שאילתות של חותמות זמן בתחילת המעבר ובסופו עודכנה בהתאם למפרט של WebGPU. אפשר לעיין בדוגמה הבאה ובבעיה 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);

הסקירה הזו כוללת רק חלק מהנקודות העיקריות. רשימת ההצהרות המלאה

מה חדש ב-WebGPU

רשימה של כל מה שדיברנו עליו בסדרה מה חדש ב-WebGPU.

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