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 nesnelerinin oluşturulmasına 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ılmasını destekler. 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 reddeden 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.

Spesifikasyona uygunluk

GPUPipelineError() oluşturucusundaki message bağımsız değişkeni isteğe bağlıdır. change chromium:4613967 sorununa 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ının JavaScript konsolunda bir mesaj gösterilir. change chromium:4589369 konusuna 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. change chromium:4597950'yi inceleyin.

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

Dawn ile ilgili güncellemeler

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 kabul edilmeyen API giriş noktalarındaki veya parametre kombinasyonlarındaki doğrulama hatalarını bastırır. Bu, hata ayıklama için yararlı olabilir. dawn:1685 sorununa bakın.

Desteği sonlandırılan wgpu::ShaderModuleWGSLDescriptor source özelliği, code lehine kaldırıldı. change dawn:130321 konusuna bakın.

Eksik 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 yönelik ek kullanımların yer aldığı yeni bir SwapChain::GetCurrentTexture() yöntemi eklendi. Aşağıdaki örneğe ve dawn:1551 numaralı soruna bakın.

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

Bu özet yalnızca önemli noktaların bir kısmını kapsar. Kapsamlı işleme listesine göz atın.

WebGPU'daki yenilikler

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

Chrome 153-154

Chrome 151-152

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

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