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

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

یکپارچه سازی WebCodecs

WebGPU یک API را برای ایجاد اشیاء "بافت خارجی" مات از HTMLVideoElement از طریق importExternalTexture() در معرض دید قرار می دهد. می‌توانید از این اشیاء برای نمونه‌برداری کارآمد از فریم‌های ویدیویی، به‌طور بالقوه به روش 0-کپی، مستقیماً از داده‌های مدل رنگی منبع YUV استفاده کنید.

با این حال، مشخصات اولیه WebGPU اجازه ایجاد اشیاء GPUExternalTexture از اشیاء WebCodecs VideoFrame را نمی داد. این قابلیت برای برنامه‌های پردازش ویدیوی پیشرفته که قبلاً از WebCodec استفاده می‌کنند و می‌خواهند 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 رد می‌کند برگرداند. به شماره 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() اختیاری است. تغییر کرومیوم:4613967 را ببینید.

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

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

بهبود تجربه توسعه دهندگان

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

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

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

به روز رسانی سحر

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

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

روش گمشده wgpu::RenderBundle::SetLabel() پیاده سازی شده است. تغییر سپیده دم:134502 را ببینید.

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

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

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

چه چیزی در WebGPU جدید است

فهرستی از همه چیزهایی که در سری What's New in WebGPU پوشش داده شده است.

کروم 125

کروم 124

کروم 123

کروم 122

کروم 121

کروم 120

کروم 119

کروم 118

کروم 117

کروم 116

کروم 115

کروم 114

کروم 113