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

הפעלת הסרטון צריכה לפעול בצורה חלקה אם מפעילים את הפונקציה 'ייבואExternalText() '

כשמתבצעת קריאה ל-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 של כלי הפיתוח כאשר getMappedRange() נכשל בלי לאלץ את המפתחים לשלוח פקודות לתור. ראו שינוי chromium:4597950.

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

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

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

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

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

אפליקציות יכולות לבקש קצה עורפי מסוים כשהם מקבלים מתאם עם האפשרות wgpu::RequestAdapterOptionsBackendType. אפשר לראות דוגמה למטה ואת הבעיה 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 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