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 sunar. Bu nesneleri, video karelerini verimli bir şekilde ve muhtemelen doğrudan kaynak YUV renk modeli verilerinden 0 kopya şeklinde örneklemek için kullanabilirsiniz.

Ancak ilk WebGPU spesifikasyonu WebCodecs VideoFrame nesnelerinden GPUExternalTexture nesnelerinin oluşturulmasına izin vermiyordu. Bu özellik, halihazırda WebCodecs kullanan ve WebGPU'yu video işleme hattına entegre etmek isteyen gelişmiş video işleme uygulamaları için önemlidir. WebCodecs entegrasyonu, GPUExternalTexture ve copyExternalImageToTexture() çağrıları için kaynak olarak VideoFrame kullanma desteği 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.

Bu kodla oynatmak için WebCodecs ile Video Yükleme adlı deneysel örneğe göz atın.

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

GPUAdapter üzerindeki requestDevice() yöntemi zaten bir GPUDevice oluşturmak için kullanılmış olduğundan başarısız olursa null ile reddeden bir sözü geri almak yerine, artık anında kayıp olarak işaretlenen bir GPUDevice ile yerine getirilir. chromium:1234617 sorunu bölümüne 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ğlayın

importExternalTexture() bir 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 sorunu bölümüne bakın.

Spesifikasyon uygunluğu

GPUPipelineError() oluşturucudaki message bağımsız değişkeni isteğe bağlıdır. Chromium'u değiştirme:4613967 bölümüne bakın.

code WGSL kaynağı \0 içeriyorsa createShaderModule() çağrılırken bir hata tetiklenir. issue dawn:1345'i inceleyin.

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

Geliştirici deneyimini iyileştirme

Geliştirici Araçları JavaScript konsolunda, geliştiricilere, WebGPU'yu desteklenmeyen bir platformda kullandıklarını hatırlatan bir mesaj gösterilir. chromium:4589369'u değiştirme bölümüne bakın.

getMappedRange() başarısız olduğunda, geliştiricileri sıraya komut göndermek zorunda kalmadan arabellek doğrulama hata mesajları anında Geliştirici Araçları JavaScript konsolunda gösterilir. chromium:4597950 değiştirme bölümüne bakın.

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

Dawn ile ilgili güncellemeler

disallow_unsafe_apis hata ayıklama anahtarı, 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ındaki veya parametre kombinasyonlarındaki doğrulama hatalarını gizler. Bu, hata ayıklama için faydalı olabilir. issue dawn:1685'i inceleyin.

wgpu::ShaderModuleWGSLDescriptor kullanımdan kaldırılan source özelliği kaldırılarak yerine code getiriliyor. Change dawn:130321 konusuna bakın.

Eksik wgpu::RenderBundle::SetLabel() yöntemi uygulandı. Dawn:134502 konusuna bakın.

Uygulamalar, wgpu::RequestAdapterOptionsBackendType seçeneğiyle bağdaştırıcı alırken belirli bir arka uç isteyebilir. Aşağıdaki örneğe bakın ve issue sawn:1875.

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

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

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

Değişim zinciri dokuları için ek kullanımlar içeren yeni bir SwapChain::GetCurrentTexture() yöntemi eklendi. Bu sayede dönüş wgpu::Texture, kopyalarda kullanılabilecek. Aşağıdaki örneğe göz atın ve issue sawn:1551.

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

Burada, öne çıkan özelliklerin yalnızca bir kısmı ele alınıyor. Kayıtların kapsamlı listesine göz atın.

WebGPU'daki Yenilikler

WebGPU'daki Yenilikler serisinde ele alınan her şeyin listesi.

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