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

François Beaufort
François Beaufort

שילוב של WebCodecs

‫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.

כדאי לעיין בדוגמה הניסיונית Video Uploading with WebCodecs כדי להתנסות בה.

המאפיין isFallbackAdapter של ‎GPUAdapter

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

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 בבונה GPUPipelineError() הוא אופציונלי. ראו שינוי chromium:4613967.

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

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

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

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

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

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

עדכונים של Dawn

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

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

השיטה wgpu::RenderBundle::SetLabel() החסרה יושמה. מידע נוסף

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

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

המידע הזה כולל רק נקודות עיקריות. רשימה מלאה של קומיטים

מה חדש ב-WebGPU

רשימה של כל הנושאים שמופיעים בסדרת המאמרים מה חדש ב-WebGPU.

‫Chrome 149-150

‫Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

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