WebGPU'daki Yenilikler (Chrome 116)

François Beaufort
François Beaufort

WebCodecs entegrasyonu

WebGPU, opak "dış doku" oluşturmak için bir API sunar HTMLVideoElement ile importExternalTexture() arasındaki nesneler. Video karelerinden verimli bir şekilde örneklendirmek için bu nesneleri kullanabilirsiniz. Örnek olarak doğrudan kaynak YUV renk modeli verilerinden 0 kopya kullanabilirsiniz.

Ancak, ilk WebGPU spesifikasyonu WebCodecs VideoFrame nesnelerinden GPUExternalTexture nesnelerinin oluşturulmasına izin vermiyordu. Bu özellik, halihazırda WebCodecs'i kullanan ve WebGPU'yu video işleme ardışık düzenine 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 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.

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 birlikte ç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 hatası konusuna bakın.

Spesifikasyon uygunluğu

GPUPipelineError() kurucusundaki message bağımsız değişkeni isteğe bağlıdır. Chromium:4613967 değiştirme konusuna bakın.

code WGSL kaynağı \0 içeriyorsa createShaderModule() çağrılırken bir hata oluşur. Sorun şafak:1345 bölümünü inceleyin.

createSampler() ile doku örneklemede kullanılan varsayılan maksimum ayrıntı düzeyi (lodMaxClamp) 32'dir. Chromium:4608063 değiştirme konusuna 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. Chrome:4589369 değiştirme bölümüne bakın.

getMappedRange(), geliştiricileri sıraya komut göndermeye zorlamadan başarısız olduğunda arabellek doğrulama hata mesajları, Geliştirici Araçları 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, API giriş noktalarındaki veya henüz güvenli olarak kabul edilmeyen parametre kombinasyonlarındaki doğrulama hatalarını gizler. Hata ayıklama için faydalı olabilir. Issue dawn:1685'i inceleyin.

wgpu::ShaderModuleWGSLDescriptor için desteği sonlandırılmış source özelliği, code yerine kaldırıldı. şafak vaktini değiştirme:130321 bölümüne bakın.

Eksik wgpu::RenderBundle::SetLabel() yöntemi uygulandı. şafak vaktini değiştirme:134502 bölümüne 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'i inceleyin.

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ımlarla birlikte yeni bir SwapChain::GetCurrentTexture() yöntemi eklendi. Böylece, wgpu::Texture dönüşü kopyalarda kullanılabilir. 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. Taahhütlerin kapsamlı listesini inceleyin.

WebGPU'daki Yenilikler

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

Chrome 127 sürümü

Chrome 126

Chrome 125 sürümü

Chrome 124 sürümü

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119 sürümü

Chrome 118 sürümü

Chrome 117 sürümü

Chrome 116

Chrome 115 sürümü

Chrome 114 sürümü

Chrome 113