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

François Beaufort
François Beaufort

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

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

התמיכה באפשרות לסנן טקסטורות של 32 ביט מסוג float מתארת את היכולת של GPU לסנן טקסטורות של 32 ביט מסוג floating-point. המשמעות היא ש-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