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

François Beaufort
François Beaufort

שילוב עם WebCodecs

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

עם זאת, במפרט המקורי של WebGPU לא ניתן היה ליצור אובייקטים מסוג GPUExternalTexture מאובייקטים מסוג VideoFrame של WebCodecs. היכולת הזו חשובה לאפליקציות מתקדמות לעיבוד וידאו שכבר משתמשות ב-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 כדי לנסות את התכונה.

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

אם השיטה requestDevice() ב-GPUAdapter נכשלת כי כבר השתמשו בה כדי ליצור GPUDevice, היא ממלאת עכשיו את ה-GPUDevice שסומן מיד כ'אבוד', במקום להחזיר הבטחה שנדחית עם null. בעיה chromium: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, קצב ההפעלה של הסרטון המשויך לא יואט יותר כשהסרטון לא גלוי באזור התצוגה. פרטים נוספים בבעיה chromium:1425252

תאימות למפרט

הארגומנט message ב-constructor‏ GPUPipelineError() הוא אופציונלי. ראו שינוי chromium:4613967.

מתרחשת שגיאה כשקוראים ל-createShaderModule() אם מקור ה-WGSL code מכיל את \0. issue dawn:1345

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

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

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

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

צילום מסך של מסוף JavaScript ב-DevTools עם הודעת שגיאה באימות מאגר.
הודעה על שגיאה באימות מאגר במסוף JavaScript של כלי הפיתוח.

עדכונים של Dawn

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

המאפיין source, שהוצא משימוש, הוסר לטובת code.wgpu::ShaderModuleWGSLDescriptor ראו change dawn:130321.

השיטה wgpu::RenderBundle::SetLabel() שחסרה הוטמעה. ראו change dawn:134502.

אפליקציות יכולות לבקש קצה עורפי מסוים כשהן מקבלות מתאם עם האפשרות wgpu::RequestAdapterOptionsBackendType. דוגמה: issue dawn: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() עם שימושים נוספים לתמונות מרקע של swapchain, כך שאפשר להשתמש ב-wgpu::Texture המוחזר בהעתקות. דוגמה מופיעה בהמשך, וגם בבעיה dawn:1551.

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

כאן מפורטות רק חלק מהנקודות העיקריות. רשימת ההצהרות המלאה

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