מה חדש ב-WebGPU (Chrome124)

François Beaufort
François Beaufort

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

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

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

מומלץ להשתמש בערך requires-directives כדי לציין את הפוטנציאל לאי-ניידות באמצעות requires readonly_and_readwrite_storage_textures; בחלק העליון של הקוד של תוכנת ההצללה (shader) של WGSL. עיין בדוגמה הבאה ובעיה בזריחה: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.

תמיכה ב-Service Workers ובעובדים משותפים

WebGPU ב-Chrome מביא את התמיכה בעובדי אינטרנט לרמה הבאה, ומציע עכשיו תמיכה גם ל-service workers וגם לעובדים משותפים. אפשר להשתמש ב-Service Workers כדי לשפר משימות ברקע ויכולות אופליין, וב-workers משותפים כדי לשתף משאבים ביעילות בין סקריפטים. מידע נוסף על בעיה כרום: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. האישור היה באג בהטמעה, שתוקן עכשיו באמצעות בדיקות מתאימות. יש לעיין בבעיה השחר:2402.

עדכונים בשעות השחר

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

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

מה חדש ב-WebGPU

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

Chrome 125

Chrome 124

Chrome 123

גרסה 122 של Chrome

גרסה 121 של Chrome

Chrome 120

גרסה 119 של Chrome

גרסה 118 של Chrome

גרסה 117 של Chrome

גרסה 116 של Chrome

Chrome 115

Chrome 114

גרסה 113 של Chrome