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.

Video Uploading with WebCodecs deneysel örneğini inceleyerek bu özelliği deneyebilirsiniz.

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

GPUAdapter üzerindeki requestDevice() yöntemi, GPUDevice oluşturmak için daha önce kullanıldığı için başarısız olursa null ile reddeden bir söz döndürmek yerine hemen kayıp olarak işaretlenen bir GPUDevice ile tamamlanır. issue chromium:1234617 başlıklı makaleye 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. issue chromium:1425252 başlıklı makaleyi inceleyin.

Spesifikasyon uygunluğu

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

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

createSampler() ile doku örneği alınırken kullanılan varsayılan maksimum ayrıntı düzeyi (lodMaxClamp) 32'dir. change chromium:4608063 başlıklı makaleyi inceleyin.

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. change chromium:4589369 başlıklı makaleye göz atı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 başlıklı makaleye bakı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 güncellemeleri

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, hata ayıklama için yararlı olabilir. dawn:1685 numaralı sorunu inceleyin.

wgpu::ShaderModuleWGSLDescriptor kullanımdan kaldırılan source özniteliği, code özniteliği lehine kaldırıldı. change dawn:130321 başlıklı makaleyi inceleyin.

Eksik olan wgpu::RenderBundle::SetLabel() yöntemi uygulandı. change dawn:134502 başlıklı makaleyi inceleyin.

Uygulamalar, wgpu::RequestAdapterOptionsBackendType seçeneğiyle bağdaştırıcı alırken belirli bir arka uç isteyebilir. Aşağıdaki örneği inceleyin ve issue dawn:1875 komutunu çalıştırı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ürme 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ği inceleyin ve dawn:1551 sorununu gönderin.

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 her şeyin listesi.

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