מה חדש ב-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 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