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 bir uzantı istemeniz gerekmez. Bu liste şu anda boş ancak gelecekte çok sayıda öğe eklenmesi bekleniyor (örneğin, do-while loops). dawn:1777 numaralı soruna 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 Chrome'u --enable-unsafe-webgpu --use-webgpu-adapter=d3d11 komut satırı işaretleriyle çalıştırarak bu özelliği yerel olarak deneyebilirsiniz. dawn:1705 sorununa bakın.

Varsayılan olarak prize takılıyken ayrı GPU'yu kullanma

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

Geliştirici deneyimini iyileştirme

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

depth tuşu GPUExtend3DDict içinde kullanılıyorsa doğru tuş depthOrArrayLayers olduğundan Geliştirici Araçları Konsolu'nda uyarı gösterilir. chromium:1440900 sorununa bakın.

GPUBlendComponent içinde hem açık hem de varsayılan üyeler varsa da uyarı gösterilir. dawn:1785 sorununa bakın.

Sıfır boyutlu göndermeler ve çizimler geçerli olsa da uyarı, geliştiricileri mümkün olduğunda bunları kullanmaktan kaçınmaya teşvik eder. dawn:1786 sorununa bakın.

Daha iyi hata mesajları

finish() daha önce çağrıldıysa GPUCommandEncoder kullanılırken artık daha iyi bir hata mesajı gösteriliyor. dawn:1736 sorununa bakın.

Yok edilen nesnelerle komut arabellekleri gönderilirken submit() içinde kullanılan komut arabelleklerinin etiketleri artık hata mesajında görünür. dawn:1747 sorununa bakın.

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

minBindingSize doğrulama hata mesajı artık doğrulamanın başarısız olduğu bağlamanın grubunu ve numarasını, arabelleği de bildiriyor. dawn:1604 sorununa bakın.

GPUBuffer nesnesindeki 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 iletmenize olanak tanır. Böylece bu etiketler RenderDoc, PIX veya Instruments gibi platforma özgü hata ayıklama araçlarında görülebilir. Artık hata ayıklama için etkinleştirdiğinizde macOS'te daha iyi bir hata ayıklama deneyimi sunuluyor. dawn:1784 sorununa bakın.

macOS'teki Instruments uygulamasının, WebGPU'dan gelen özel etiketleri gösteren 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 başarısız olursa HLSL dökümü oluşturulur. dawn:1681 sorununa bakın.

Dawn ile ilgili güncellemeler

Köşe noktası arabelleğini kaldırma

wgpu::RenderPassEncoder veya wgpu::RenderBundleEncoder üzerinde SetVertexBuffer()'ye wgpu::Buffer yerine nullptr iletmek, belirli bir yuvada daha önce ayarlanmış bir köşe arabelleğini kaldırmanıza olanak tanır. dawn:1675 sorununa 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 döşeme belleğinde kalmasına olanak tanıyan ekler oluşturabilirsiniz. Bu sayede VRAM trafiği ve dokular için VRAM ayırma işlemi önlenebilir. Bu özellik yalnızca Metal ve Vulkan için desteklenir. dawn: 1695 sorununa 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

Yeni DAWN_FETCH_DEPENDENCIES CMake seçeneği, depot_tools'ın yüklenmesini gerektirmek 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ğe bakın.

WebGPU'daki yenilikler

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

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