מה חדש ב-WebGPU (Chrome124)

François Beaufort
François Beaufort

מרקמי אחסון לקריאה בלבד ולקריאה-כתיבה

סוג הקישור של טקסטורת האחסון מאפשר לתוכנות הצללה לקרוא ממרקמים של אחסון מבלי להוסיף את השימוש ב-TEXTURE_BINDING, ולבצע קריאה וכתיבה מעורבים בפורמטים מסוימים. כשתוסף השפה של WGSL "readonly_and_readwrite_storage_textures" מופיע ב-navigator.gpu.wgslLanguageFeatures, אפשר עכשיו להגדיר הרשאת גישה GPUStorageTexture ל-"read-write" או ל-"read-only" בזמן יצירת פריסה של קבוצת קישור. בעבר האפשרות הזו הוגבלה ל-"write-only".

לאחר מכן, קוד ההצללה (shader) של WGSL יכול להשתמש בתוחם הגישה read_write ו-read למרקמים של אחסון, הפונקציות המובנות textureLoad() ו-textureStore() פועלות בהתאם, ויש פונקציה מובנית חדשה textureBarrier() שזמינה לסנכרון הרשאות הגישה לזיכרון טקסטורות בקבוצת עבודה.

מומלץ להשתמש ב-דורש-הוראת כדי לאותת שיכול להיות שאי-ניידות באמצעות requires readonly_and_readwrite_storage_textures; בחלק העליון של קוד תוכנת ההצללה (shader) של WGSL. אפשר לראות את הדוגמה הבאה ואת הבעיה dawn:1972.

if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
  throw new Error("Read-only and read-write storage textures are not available");
}

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const bindGroupLayout = device.createBindGroupLayout({
  entries: [{
    binding: 0,
    visibility: GPUShaderStage.COMPUTE,
    storageTexture: {
      access: "read-write", // <-- New!
      format: "r32uint",
    },
  }],
});

const shaderModule = device.createShaderModule({ code: `
  requires readonly_and_readwrite_storage_textures;

  @group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;

  @compute @workgroup_size(1, 1)
  fn main(@builtin(local_invocation_id) local_id: vec3u) {
    var data = textureLoad(tex, vec2i(local_id.xy));
    data.x *= 2;
    textureStore(tex, vec2i(local_id.xy), data);
  }`
});

// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.

תמיכה בעובדי שירות ובעובדים משותפים

WebGPU ב-Chrome מעלה את התמיכה של עובדי האינטרנט לרמה הבאה, שמציעה עכשיו תמיכה גם לעובדי שירות וגם לעובדים משותפים. תוכלו להשתמש ב-Service Worker כדי לשפר משימות ברקע וביכולות אופליין, וב-Service Workers כדי לשתף משאבים בין סקריפטים ביעילות. ראו בעיה ב-chromium:41494731.

כדאי לעיין בדוגמה של תוסף ל-Chrome ובתוסף WebLLM ל-Chrome כדי לראות איך להשתמש ב-WebGPU ב-Service Worker לשירות תוספים.

צילום מסך של התוסף WebLLM ל-Chrome.
תוסף WebLLM ל-Chrome.

מאפיינים חדשים של פרטי מתאם

מאפיינים של פרטי מתאמים d3dShaderModel ו-vkDriverVersion לא סטנדרטיים זמינים עכשיו בקריאה requestAdapterInfo() אם המשתמש הפעיל את 'תכונות למפתחים של WebGPU' סימון ב-chrome://flags/#enable-webgpu-developer-features. כשיש תמיכה:

צילום מסך של https://webgpureport.org שכולל את vkDriverVersion בפרטי המתאם.
פרטי המתאם vkDriverVersion מוצגים בכתובת https://webgpureport.org.

תיקוני באגים

יצירת שני צינורות עיבוד נתונים עם קבוצות קישור תואמות באמצעות layout: "auto", ואז יצירת קבוצת קישור עם צינור עיבוד נתונים ראשון ושימוש בו בצינור עיבוד הנתונים השני, מעלה עכשיו GPUValidationError. האירוע היה באג בהטמעה שתוקן עכשיו באמצעות בדיקות מתאימות. ראו גיליון dawn:2402.

עדכונים לגבי זריחה

ב-Dawn API, הקריאה החוזרת של השגיאה שלא תועדה ומוגדרת לערך wgpuDeviceSetUncapturedErrorCallback לא מופעלת עכשיו אחרי שמכשיר ה-GPU אבד. התיקון הזה מתאים את Dawn למפרט של JavaScript API ולהטמעה של Blink. ראו גיליון dawn:2459.

זה כולל רק חלק מהעדכונים העיקריים. אתם מוזמנים לעיין ברשימה המלאה של ההתחייבויות.

מה חדש ב-WebGPU

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

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