WebGPU'daki Yenilikler (Chrome 116)

François Beaufort
François Beaufort

WebCodecs entegrasyonu

WebGPU, HTMLVideoElement ile importExternalTexture() arasında opak "harici doku" nesneleri oluşturmak için bir API sağlar. Bu nesneleri, video karelerini verimli bir şekilde örneklemek için kullanabilirsiniz. Bu işlem, doğrudan kaynak YUV renk modeli verilerinden 0 kopya olacak şekilde yapılabilir.

Ancak, başlangıçtaki WebGPU spesifikasyonu, WebCodecs VideoFrame nesnelerinden GPUExternalTexture nesnelerinin oluşturulmasına izin vermiyordu. Bu özellik, halihazırda WebCodecs kullanan ve video işleme ardışık düzenine WebGPU'yu entegre etmek isteyen gelişmiş video işleme uygulamaları için önemlidir. WebCodecs entegrasyonu, GPUExternalTexture ve copyExternalImageToTexture() çağrısı için kaynak olarak VideoFrame kullanılmasına destek ekler. Aşağıdaki örneğe ve chromestatus girişine bakın.

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

Denemek için WebCodecs ile Video Yükleme deneysel örneğine göz atın.

GPUAdapter requestDevice() tarafından döndürülen kayıp cihaz

GPUAdapter için requestDevice() yöntemi, zaten bir GPUDevice oluşturmak üzere kullanıldığı için başarısız olursa artık null ile reddeden bir söz döndürmek yerine, hemen kaybedildi olarak işaretlenen bir GPUDevice ile yerine getiriliyor. Chromium:1234617 hatası konusuna bakın.

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() çağrılırsa video oynatmanın sorunsuz olmasını sağlar

importExternalTexture(), HTMLVideoElement ile çağrıldığında video görüntü alanında görünür olmadığında ilişkili video oynatma artık kısıtlanmaz. chromium:1425252 numaralı sorun konusuna bakın.

Spesifikasyon uygunluğu

GPUPipelineError() kurucusundaki message bağımsız değişkeni isteğe bağlıdır. change chromium:4613967 başlıklı makaleye göz atın.

code WGSL kaynağı \0 içeriyorsa createShaderModule() çağrılırken bir hata oluşur. issue dawn:1345 konusuna bakın.

createSampler() ile bir doku örneklenirken kullanılan varsayılan maksimum ayrıntı düzeyi (lodMaxClamp) 32'dir. Chrome:4608063 değiştirme bölümüne bakın.

Geliştirici deneyimini iyileştirme

Geliştiricilere, desteklenmeyen bir platformda WebGPU kullandıklarında hatırlatma yapmak için Geliştirici Araçları JavaScript konsolunda bir mesaj görüntülenir. Chromium:4589369 değiştirme konusuna bakın.

getMappedRange() geliştiricileri sıraya komut göndermeye zorlamadan başarısız olduğunda, arabellek doğrulama hata mesajları DevTools JavaScript konsolunda anında gösterilir. Chromium:4597950 değiştirme konusuna bakın.

Arabellek doğrulama hata mesajının gösterildiği Geliştirici Araçları JavaScript konsolunun ekran görüntüsü.
Geliştirici Araçları JavaScript konsolunda arabellek doğrulama hata mesajı.

Şafak güncellemeleri

disallow_unsafe_apis hata ayıklama açma/kapatma düğmesi allow_unsafe_apis olarak yeniden adlandırıldı ve varsayılan olarak devre dışı bırakıldı. Bu açma/kapatma düğmesi, henüz güvenli olarak kabul edilmeyen API giriş noktalarında veya parametre kombinasyonlarında doğrulama hatalarını engeller. Hata ayıklama için yararlı olabilir. issue dawn:1685 konusuna bakın.

Desteği sonlandırılan wgpu::ShaderModuleWGSLDescriptor source özelliği, code özelliğinin lehine kaldırılır. change dawn:130321 bölümüne bakın.

Eksik wgpu::RenderBundle::SetLabel() yöntemi uygulandı. change dawn:134502 adresine bakın.

Uygulamalar, wgpu::RequestAdapterOptionsBackendType seçeneğiyle bir adaptör alırken belirli bir arka uç isteyebilir. Aşağıdaki örneği inceleyin ve issue dawn:1875 adresine gidin.

wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
backendTypeOptions.backendType = wgpu::BackendType::D3D12;

wgpu::RequestAdapterOptions options = {};
options.nextInChain = &backendTypeOptions;

// Request D3D12 adapter.
myInstance.RequestAdapter(&options, myCallback, myUserData);

Döndürülen wgpu::Texture değerinin kopyalarda kullanılabilmesi için swapchain dokuları için ek kullanımlar içeren yeni bir SwapChain::GetCurrentTexture() yöntemi eklendi. Aşağıdaki örneği ve sorun şafak:1551 bölümünü inceleyin.

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

Bunlar, öne çıkan özelliklerden yalnızca bazılarıdır. Kapsamlı commit listesine göz atın.

WebGPU'daki Yenilikler

WebGPU'daki Yenilikler serisinde ele alınan tüm konuların listesi.

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 sürümü

Chrome 113