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 örneklemek için kullanabilirsiniz. Bu işlem, doğrudan kaynak YUV renk modeli verilerinden 0 kopya olacak şekilde yapılabilir.

Ancak ilk WebGPU spesifikasyonu, WebCodecs VideoFrame nesnelerinden GPUExternalTexture nesneleri oluşturmaya izin vermiyordu. Bu özellik, WebCodecs'i 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() görüşmesi için kaynak olarak VideoFrame kullanımı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.

Bu özelliği 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 üzerindeki requestDevice() yöntemi, daha önce GPUDevice oluşturmak için kullanıldığından başarısız olursa artık null ile reddedilen bir söz döndürmek yerine hemen kayıp olarak işaretlenen bir GPUDevice ile karşılanır. chromium:1234617 sorununa 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 oynatmayı sorunsuz tutma

importExternalTexture(), HTMLVideoElement ile çağrıldığında video, görüntü alanında görünmüyorsa ilişkili video oynatma artık sınırlandırılmaz. chromium:1425252 sorununa bakın.

Spesifikasyon uygunluğu

GPUPipelineError() oluşturucusundaki message bağımsız değişkeni isteğe bağlıdır. chromium:4613967 değişikliğine bakın.

WGSL kaynağı code, \0 içeriyorsa createShaderModule() çağrılırken bir hata tetiklenir. dawn:1345 sorununa bakın.

createSampler() ile doku örneği alınırken kullanılan varsayılan maksimum ayrıntı düzeyi (lodMaxClamp) 32'dir. chromium:4608063 değişikliğine bakın.

Geliştirici deneyimini iyileştirme

Geliştiricilere, WebGPU'yu desteklenmeyen bir platformda kullandıklarında hatırlatma yapmak için Geliştirici Araçları JavaScript konsolunda bir mesaj gösterilir. chromium:4589369 değişikliğine bakın.

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

Arabellek doğrulama hata mesajını içeren Geliştirici Araçları 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 açma/kapatma düğmesinin adı allow_unsafe_apis olarak değiştirildi ve varsayılan olarak devre dışı bırakıldı. Bu açma/kapatma düğmesi, henüz güvenli kabul edilmeyen API giriş noktalarındaki veya parametre kombinasyonlarındaki doğrulama hatalarını bastırır. Bu özellik, hata ayıklama için yararlı olabilir. dawn:1685 sorununa bakın.

Desteği sonlandırılan wgpu::ShaderModuleWGSLDescriptor source özniteliği, code lehine kaldırıldı. dawn:130321 değişikliğine bakın.

Eksik olan wgpu::RenderBundle::SetLabel() yöntemi uygulandı. dawn:134502 değişikliğine 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 ve dawn:1875 numaralı soruna bakın.

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ına ek kullanımlar sağlayan yeni bir SwapChain::GetCurrentTexture() yöntemi eklendi. Aşağıdaki örneği inceleyin ve dawn:1551 numaralı sorunu inceleyin.

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

Bu özet yalnızca önemli noktalardan bazılarını kapsar. Kapsamlı commit listesine göz atın.

WebGPU'daki yenilikler

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

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

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

Chrome 113