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

François Beaufort
François Beaufort

שילוב של WebCodec

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

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

תאימות למפרט

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

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

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

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

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

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

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

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

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

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

השיטה החסרה wgpu::RenderBundle::SetLabel() הוטמעה. ראו שינוי 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 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