WebGPU'daki Yenilikler (Chrome 115)

François Beaufort
François Beaufort

Desteklenen WGSL dil uzantıları

GPU nesnesinin wgslLanguageFeatures üyesi, desteklenen WGSL dil uzantılarının adlarını listeler. Desteklenen WGSL dil uzantıları otomatik olarak etkinleştirilir. Bu nedenle, bu uzantıları açıkça istemeniz gerekmez. Bu liste şu anda boş olsa da gelecekte çok sayıda eklenebilir (örneğin, do-while loops). issue dawn:1777 konusuna bakın.

if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
  // Use unknown-feature in WGSL shader code.
}

Direct3D 11 için deneysel destek

Chromium ekibi, Direct3D 11 için WebGPU desteği eklemek üzere çalışıyor. Artık Windows'da --enable-unsafe-webgpu --use-webgpu-adapter=d3d11 komut satırı işaretleriyle Chrome'u çalıştırarak bu uygulamayı yerel olarak deneyebilirsiniz. issue dawn:1705 konusuna bakın.

AC güç kaynağında varsayılan olarak ayrı GPU alma

Çift GPU'lu macOS cihazlarda, requestAdapter() powerPreference seçeneği olmadan çağrılırsa kullanıcının cihazı AC güçteyken ayrık GPU döndürülür. Aksi takdirde entegre GPU döndürülür. 4499307 numaralı değişikliği inceleyin.

Geliştirici deneyimini iyileştirme

Yeni Geliştirici Araçları uyarıları

depth anahtarı bir GPUExtend3DDict içinde kullanılıyorsa doğru anahtar depthOrArrayLayers olduğundan DevTools Konsolu'nda uyarı gösterilir. chromium:1440900 numaralı soruna bakın.

GPUBlendComponent'de uygunsuz ve varsayılan üyeler varsa da uyarı gösterilir. Issue dawn:1785'i inceleyin.

Sıfır boyutunda dağıtımlar ve çizimler geçerli olsa da geliştiriciler mümkün olduğunda bu tür dağıtımlardan ve çizimlerden kaçınmaya teşvik edilir. issue dawn:1786 konusuna bakın.

Daha iyi hata mesajları

finish() daha önce çağrılmışsa GPUCommandEncoder kullanılırken artık iyileştirilmiş bir hata mesajı sağlanmaktadır. Sorun şafak:1736 bölümünü inceleyin.

İmha edilmiş nesnelerle komut arabellekleri gönderilirken submit() içinde kullanılan komut arabelleklerinin etiketleri artık hata mesajında görünür. issue dawn:1747 konusuna bakın.

Derinlik şablonu durumunun geçersiz kısmı artık depthStencil doğrulanırken hata mesajında belirtiliyor. issue dawn:1735 konusuna bakın.

minBindingSize doğrulama hata mesajı, artık doğrulamayı başarısız olan bağlamanın grubunu, numarasını ve arabelleği bildirir. issue dawn:1604 konusuna bakın.

GPUBuffer nesnesinde mapAsync() yöntemi tarafından döndürülen hata mesajları, geliştiricilerin hata ayıklama sırasında yardımcı olması için iyileştirildi. Aşağıdaki örneğe ve chromium:1431622 numaralı soruna bakın.

// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);

// Before it has been mapped, request another mapping.
try {
  await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
  // New! Error message tells you mapping is already pending.
  console.warn(error.message);
}

macOS hata ayıklama araçlarındaki etiketler

use_user_defined_labels_in_backend hata ayıklama açma/kapatma düğmesi, nesne etiketlerini arka uca yönlendirmenizi sağlar. Böylece bu etiketler RenderDoc, PIX veya Instruments gibi platforma özgü hata ayıklama araçlarında görülebilir. Artık macOS'te hata ayıklama için etkinleştirdiğinizde daha iyi bir hata ayıklama deneyimi sunulur. issue dawn:1784 adresine bakın

WebGPU'den gelen özel etiketlerin yer aldığı macOS'teki Instruments uygulamasının ekran görüntüsü.
macOS'teki Instruments uygulamasında kullanıcı tanımlı etiketler.

Derleme başarısız olursa HLSL'yi günlüğe kaydetme

dump_shaders hata ayıklama düğmesi, giriş WGSL gölgelendiricilerini ve çevrilmiş arka uç gölgelendiricilerini kaydetmenize olanak tanır. Bundan sonra, hata ayıklama için etkinleştirdiğinizde, derlemede başarısız olursa HLSL dökümü alınır. issue dawn:1681 konusuna bakın

Şafak güncellemeleri

Köşe noktası tamponunun ayarını kaldırın

wgpu::RenderPassEncoder veya wgpu::RenderBundleEncoder'te SetVertexBuffer()'ye wgpu::Buffer yerine nullptr göndermek, belirli bir yuvada daha önce ayarlanmış bir köşe düğümü arabelleğinin ayarını kaldırmanıza olanak tanır. Sorun şafak:1675 bölümünü inceleyin.

// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);

Geçici ekler

wgpu::TextureUsage::TransientAttachment kullanımını ayarlayarak, oluşturma geçişi işlemlerinin karo belleğinde kalmasına olanak tanıyan ekler oluşturabilirsiniz. Böylece VRAM trafiğini ve muhtemelen dokular için VRAM ayırmayı önleyebilirsiniz. Bu özellik yalnızca Metal ve Vulkan için desteklenir. Sorun şafak: 1695 bölümünü inceleyin.

wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
             wgpu::TextureUsage::TransientAttachment;

auto transientTexture = device.CreateTexture(&desc);

// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.

depot_tools olmadan bina

Yeni bir DAWN_FETCH_DEPENDENCIES CMake seçeneği, depot_tools'in kendisine bağlı tüm projeler tarafından yüklenmesi yerine DEPS dosyalarını okuyan bir Python komut dosyası kullanarak Dawn bağımlılıklarını getirmenize olanak tanır. 131750 numaralı değişikliği inceleyin.

WebGPU'daki Yenilikler

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

Chrome 130

Chrome 129 sürümü

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118 sürümü

Chrome 117

Chrome 116

Chrome 115 sürümü

Chrome 114

Chrome 113