מה'חדש ב-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 של כלי הפיתוח מוצגת הודעה שמזכירה למפתחים שהם משתמשים ב-WebGPU בפלטפורמה שלא נתמכת. ראו שינוי chromium:4589369.

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

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

עדכונים של Dawn

השם של מתג ניפוי הבאגים של 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() חדשה עם שימושים נוספים במרקמים להחלפת מרקם, כדי שאפשר יהיה להשתמש בהחזרה 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