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 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ı 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 konusuna bakın.

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ğrulama işlemi başarısız olan bağlamanın grubunu ve sayısının yanı sıra arabelleği de bildirir. Issue dawn:1604 mesajını inceleyin.

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, RenderDoc, PIX veya Instruments gibi platforma özgü hata ayıklama araçlarında görülebilmeleri için nesne etiketlerini arka uca yönlendirmenize olanak tanır. 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 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 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. issue dawn:1675 konusuna bakın.

// 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. Sayı: 1695'e bakın.

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 inşa etme

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. change 131750'ye bakın.

WebGPU'daki Yenilikler

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

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127 sürümü

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119 sürümü

Chrome 118

Chrome 117

Chrome 116

Chrome 115 sürümü

Chrome 114

Chrome 113