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

François Beaufort
François Beaufort

שילוב של WebCodecs

‫WebGPU חושף API ליצירת אובייקטים אטומים של 'טקסטורה חיצונית' מ-HTMLVideoElement דרך importExternalTexture(). אתם יכולים להשתמש באובייקטים האלה כדי לדגום את מסגרות הסרטון בצורה יעילה, ואולי גם בשיטה שבה לא מתבצעת העתקה, ישירות מנתוני מודל הצבעים 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

מה חדש ב-WebGPU

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

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