موارد جدید در WebGPU (Chrome 116)

فرانسوا بوفور
François Beaufort

ادغام WebCodecs

WebGPU یک API را برای ایجاد اشیاء "بافت خارجی" مات از HTMLVideoElement از طریق importExternalTexture() در اختیار قرار می‌دهد. می‌توانید از این اشیاء برای نمونه‌برداری کارآمد از فریم‌های ویدیو، به طور بالقوه به روش 0-copy مستقیماً از داده‌های مدل رنگ 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.

برای آشنایی با آن، نمونه آزمایشی «آپلود ویدیو با WebCodecs» را بررسی کنید.

دستگاه گم‌شده توسط تابع requestDevice()‎ از نوع GPUAdapter بازگردانده می‌شود.

اگر متد requestDevice() در GPUAdapter به دلیل اینکه قبلاً برای ایجاد یک GPUDevice استفاده شده است، با شکست مواجه شود، اکنون با یک GPUDevice که بلافاصله به عنوان lost علامت گذاری شده است، به جای بازگرداندن promise که با null رد می‌شود، اجرا می‌شود. به مشکل Chrome: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 فراخوانی می‌شود، پخش ویدیوی مرتبط دیگر وقتی که ویدیو در پنجره نمایش قابل مشاهده نیست، متوقف نمی‌شود. به مشکل chrome:1425252 مراجعه کنید.

انطباق با مشخصات

آرگومان message در سازنده‌ی GPUPipelineError() اختیاری است. به تغییر chrome:4613967 مراجعه کنید.

اگر code منبع WGSL شامل contains \0 باشد، هنگام فراخوانی تابع createShaderModule() خطایی رخ می‌دهد. به شماره dawn:1345 مراجعه کنید.

حداکثر سطح جزئیات پیش‌فرض ( lodMaxClamp ) که هنگام نمونه‌برداری از یک بافت با createSampler() استفاده می‌شود، ۳۲ است. به تغییر chromium:4608063 مراجعه کنید.

بهبود تجربه توسعه‌دهنده

پیامی در کنسول جاوا اسکریپت DevTools نمایش داده می‌شود تا به توسعه‌دهندگان یادآوری کند که چه زمانی از WebGPU در پلتفرمی پشتیبانی‌نشده استفاده می‌کنند. به تغییر کرومیوم:4589369 مراجعه کنید.

پیام‌های خطای اعتبارسنجی بافر، بلافاصله در کنسول جاوا اسکریپت DevTools نمایش داده می‌شوند، زمانی که getMappedRange() بدون مجبور کردن توسعه‌دهندگان به ارسال دستورات به صف، با شکست مواجه می‌شود. به تغییر chrome:4597950 مراجعه کنید.

تصویری از کنسول جاوا اسکریپت DevTools که پیام خطای اعتبارسنجی بافر را نشان می‌دهد.
پیام خطای اعتبارسنجی بافر در کنسول جاوا اسکریپت DevTools.

به‌روزرسانی‌های سپیده‌دم

گزینه اشکال‌زدایی disallow_unsafe_apis به allow_unsafe_apis تغییر نام داده و پیش‌فرض آن غیرفعال است. این گزینه خطاهای اعتبارسنجی را در نقاط ورودی API یا ترکیب پارامترهایی که هنوز امن در نظر گرفته نشده‌اند، سرکوب می‌کند. این گزینه می‌تواند برای اشکال‌زدایی مفید باشد. به شماره dawn:1685 مراجعه کنید.

ویژگی source منسوخ‌شده‌ی wgpu::ShaderModuleWGSLDescriptor به نفع code حذف شده است. به تغییر dawn:130321 مراجعه کنید.

متد wgpu::RenderBundle::SetLabel() که وجود نداشت، پیاده‌سازی شده است. به تغییر dawn:134502 مراجعه کنید.

برنامه‌ها می‌توانند هنگام دریافت آداپتور با گزینه wgpu::RequestAdapterOptionsBackendType یک backend خاص را درخواست کنند. به مثال زیر و صدور 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» پوشش داده شده است.

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳