מה'חדש ב-WebGPU (Chrome {8/}116)

François Beaufort
François Beaufort

שילוב של רכיבי WebCodec

WebGPU חושף API כדי ליצור אובייקטים אטומים מסוג 'מרקם חיצוני' מ-HTMLVideoElement דרך importExternalTexture(). אפשר להשתמש באובייקטים האלה כדי לדגום את הפריימים של הסרטון ביעילות, אולי באמצעות 0 העתקה ישירות מנתוני מודל הצבע של המקור YUV.

עם זאת, המפרט הראשוני של ה-WebGPU לא אפשר ליצור אובייקטים מסוג GPUExternalTexture מאובייקטים של WebCodecs VideoFrame. היכולת הזו חשובה לאפליקציות מתקדמות לעיבוד וידאו שכבר משתמשות ב-WebCodecs ומעוניינות לשלב את WebGPU בצינור עיבוד הווידאו. השילוב של WebCodecs כולל תמיכה בשימוש ב-VideoFrame כמקור לשיחות GPUExternalTexture ולשיחת copyExternalImageToTexture(). אפשר לעיין בדוגמה הבאה וברשומת chromestatus.

// Access the GPU device.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

// Create VideoFrame from HTMLVideoElement.
const video = document.querySelector("video");
const videoFrame = new VideoFrame(video);

// Create texture from VideoFrame.
const texture = device.importExternalTexture({ source: videoFrame });
// TODO: Use texture in bind group creation.

נסה את הדוגמה הניסיונית העלאת סרטונים באמצעות WebCodecs כדי לשחק איתה.

מכשיר שאבד הוחזר על ידי GPUAdapter requestDevice()

אם השיטה requestDevice() ב-GPUAdapter נכשלת כי כבר נעשה בה שימוש ליצירת GPUDevice, היא משלימה עכשיו GPUDevice מיד עם סימון כ'אבד', במקום להחזיר הבטחה שדוחה באמצעות null. מידע נוסף על בעיה כרום:1234617.

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

// New! The promise is not rejected anymore with null.
const device2 = await adapter.requestDevice();
// And the device is immediately marked as lost.
const info = await device2.lost;

הפעלת סרטון חלקה אם מתבצעת קריאה ל-ImportExternalTexture()

כשמפעילים את importExternalTexture() באמצעות HTMLVideoElement, הפעלת הסרטון המשויך לא מווסתת יותר כשאי אפשר לראות את הסרטון באזור התצוגה. מידע נוסף על בעיה כרום:1425252.

תאימות למפרט

הארגומנט message ב-GPUPipelineError() הוא אופציונלי. מידע נוסף מופיע בקטע שינוי של Chromium:4613967.

מופעלת שגיאה במהלך הקריאה ל-createShaderModule() אם מקור WGSL code מכיל \0. לעיון בעלות השחר:1345.

רמת הפירוט המקסימלית המוגדרת כברירת מחדל (lodMaxClamp) בעת דגימת מרקם עם createSampler() היא 32. מידע נוסף מופיע בקטע שינוי של Chromium:4608063.

שיפור חוויית המפתחים

תוצג הודעה בלוח ה-JavaScript של DevTools כדי להזכיר למפתחים כשהם משתמשים ב-WebGPU בפלטפורמה לא נתמכת. מידע נוסף מופיע בקטע שינוי של Chromium:4589369.

הודעות שגיאה של אימות מאגר הנתונים הזמני מוצגות באופן מיידי במסוף ה-JavaScript של כלי הפיתוח, כאשר הקוד getMappedRange() נכשל, בלי לאלץ את המפתחים לשלוח פקודות לתור. מידע נוסף זמין בקטע שינוי כ-Chromium:4597950.

צילום מסך של לוח JavaScript של כלי פיתוח, הכולל הודעת שגיאה של אימות מאגר נתונים זמני.
הודעת שגיאה באימות מאגר הנתונים הזמני בלוח JavaScript של כלי הפיתוח.

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

השם של מתג ניפוי הבאגים disallow_unsafe_apis השתנה ל-allow_unsafe_apis ומושבת כברירת מחדל. המתג הזה מבטל שגיאות אימות בנקודות כניסה ב-API או בשילובי פרמטרים שעדיין לא נחשבים מאובטחים. הקטע הזה יכול להיות שימושי לניפוי באגים. להצגת השחר:1685.

המאפיין source wgpu::ShaderModuleWGSLDescriptor שהוצא משימוש הוסר לטובת code. להצגת שינוי שחר:130321.

שיטת wgpu::RenderBundle::SetLabel() החסרה יושמה. אפשר לקרוא על שינוי dawn:134502.

אפליקציות יכולות לבקש קצה עורפי מסוים כשמקבלים מתאם עם האפשרות wgpu::RequestAdapterOptionsBackendType. למטה אפשר לראות דוגמה ולעלות השחר:1875.

wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
backendTypeOptions.backendType = wgpu::BackendType::D3D12;

wgpu::RequestAdapterOptions options = {};
options.nextInChain = &backendTypeOptions;

// Request D3D12 adapter.
myInstance.RequestAdapter(&options, myCallback, myUserData);

נוספה שיטת SwapChain::GetCurrentTexture() חדשה עם שימושים נוספים במרקמים של החלפה, כדי שניתן יהיה להשתמש ב-wgpu::Texture שמוחזר בעותקים. למטה מוצגת דוגמה ומעלות השחר:1551.

wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();

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

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