ویژگی‌های جدید WebGPU (‏Chrome 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.

برای کار با آن، نمونه آزمایشی بارگذاری ویدیو با 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 فراخوانده می‌شود، بازپخش ویدیو مرتبط دیگر زمانی که ویدیو در درگاه دید قابل مشاهده نیست، محدود نمی‌شود. issue chromium:1425252 را ببینید.

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

متغیر مستقل message در سازنده GPUPipelineError() اختیاری است. change chromium:4613967 را ببینید.

اگر منبع WGSL code حاوی \0 باشد، هنگام فراخوانی createShaderModule() خطایی ایجاد می‌شود. طلوع مشکل:۱۳۴۵ را ببینید.

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

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

وقتی توسعه‌دهندگان از WebGPU در پلاتفرم پشتیبانی‌نشده استفاده می‌کنند، پیامی در کنسول JavaScript «ابزارهای توسعه‌دهندگان» نمایش داده می‌شود تا به آن‌ها یادآوری کند. change chromium:4589369 را ببینید.

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

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

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

کلید تغییر وضعیت اشکال‌زدایی disallow_unsafe_apis به allow_unsafe_apis تغییر نام داده شده است و پیش‌فرض آن غیرفعال است. این کلید خطاها را در نقاط ورودی میانای برنامه‌سازی کاربردی یا ترکیب‌های پارامتری که هنوز امن درنظر گرفته نمی‌شوند سرکوب می‌کند. این ویژگی می‌تواند برای اشکال‌زدایی مفید باشد. طلوع مشکل:۱۶۸۵ را ببینید.

مشخصه source منسوخ‌شده wgpu::ShaderModuleWGSLDescriptor به‌نفع code برداشته شد. تغییر سپیده دم:۱۳۰۳۲۱ را ببینید.

روش 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() با کاربردهای اضافی برای بافت‌های زنجیره مبادله اضافه شده است تا بتوان از wgpu::Texture برگشتی در نسخه‌ها استفاده کرد. نمونه‌ای را در زیر ببینید و issue dawn:1551.

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

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

ویژگی‌های جدید WebGPU

فهرستی از همه مواردی که در مجموعه ویژگی‌های جدید WebGPU پوشش داده شده است.

‫۱۵۵-۱۵۶ Chrome

‫۱۵۳-۱۵۴ Chrome

Chrome 151-152

‫۱۴۹-۱۵۰ Chrome

‫۱۴۷-۱۴۸ Chrome

‫۱۴۶ Chrome

‫Chrome 145

‫۱۴۴ Chrome

‫۱۴۳ Chrome

‫۱۴۲ Chrome

Chrome 141

‫۱۴۰ Chrome

Chrome 139

‫Chrome 138

Chrome 137

‫Chrome 136

‫۱۳۵ Chrome

‫۱۳۴ Chrome

‫Chrome 133

‫۱۳۲ Chrome

‫۱۳۱ Chrome

‫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