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 açıkça istek göndermeniz gerekmez. Bu liste şu anda boş ancak gelecekte bu tür uygulamaların çok sayıda olmasını bekleyebilirsiniz (örneğin, do-while loops). Sorun şafak:1777 bölümünü inceleyin.

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 ekleme üzerinde çalışmaktadır. 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'i inceleyin.

AC gücünde ayrık GPU'yu varsayılan olarak alın

Çift GPU macOS cihazlarda requestAdapter(), powerPreference seçeneği olmadan çağrılırsa kullanıcının cihazı AC güçle çalıştığında ayrı 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ı GPUExtend3DDict öğesinde kullanılırsa doğru anahtar depthOrArrayLayers olduğundan Geliştirici Araçları Konsolu'nda uyarı gösterilir. chromium:1440900 sorunu bölümüne bakın.

GPUBlendComponent açıkça ve varsayılan olarak ayarlanmış üyeler içeriyorsa de uyarı verilir. Issue dawn:1785'i inceleyin.

Sıfır boyutlu dağıtımlar ve çekimler geçerli olsa da bir uyarı ile geliştiriciler mümkün olduğunda bunlardan kaçınmaya teşvik edilir. Issue dawn:1786'yı inceleyin.

Daha iyi hata mesajları

finish() daha önce çağrılmışsa GPUCommandEncoder kullanılırken artık iyileştirilmiş bir hata mesajı sağlanıyor. Issue dawn:1736'yı inceleyin.

Bozuk nesneler içeren komut arabelleklerini gönderirken, submit() içinde kullanılan komut arabelleklerinin etiketleri artık hata mesajında görünür. Sorun şafak:1747 bölümünü inceleyin.

Derinlik şablon durumunun geçersiz kısmı artık depthStencil doğrulanırken hata mesajında belirtiliyor. Sorun şafak:1735 bölümünü inceleyin.

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 mesajını inceleyin.

GPUBuffer nesnesinde mapAsync() yöntemi tarafından döndürülen hata mesajları, hata ayıklama sırasında geliştiricilere yardımcı olacak şekilde iyileştirildi. Aşağıdaki örneğe ve chromium:1431622 sorunu bölümüne 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'i hata ayıklama için etkinleştirdiğinizde daha iyi bir hata ayıklama deneyimi sunulur. Sorun şafak:1784 sayfasına bakın

WebGPU'dan gelen özel etiketlerin bulunduğu 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 kaydet

dump_shaders hata ayıklama açma/kapatma düğmesi, giriş WGSL gölgelendiricilerini ve çevrilmiş arka uç gölgelendiricilerini günlüğe kaydetmenize olanak tanır. Bundan sonra, hata ayıklama için etkinleştirdiğinizde, derleme işlemi başarısız olursa HLSL dökümü atılır. Sorun şafak:1681 bölümünü inceleyin

Şafak güncellemeleri

Köşe arabelleği ayarı kaldırıldı

wgpu::RenderPassEncoder veya wgpu::RenderBundleEncoder üzerinde SetVertexBuffer() öğesine wgpu::Buffer yerine nullptr iletmek, belirli bir slotta daha önce ayarlanmış bir köşe arabelleğinin ayarını iptal etmenize 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 izin veren ekler oluşturabilirsiniz. Böylece, VRAM trafiği engellenir ve dokular için VRAM ayrılmasından kaçınabilirsiniz. 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, DEPS dosyalarını okuyan bir Python komut dosyası kullanarak Dawn bağımlılıklarını getirmenizi sağlar. Bu komut dosyasına bağlı olan tüm projelerde depot_tools yüklemesi yapılması gerekmez. change 131750'ye bakın.

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