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 (ör. do-while loops) eklenmesi bekleniyor. issue dawn:1777 başlıklı makaleyi 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 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. issue dawn:1705 başlıklı makaleyi inceleyin.

Prize takılıyken varsayılan olarak ayrı GPU'yu kullanma

Çift GPU'lu macOS cihazlarda, requestAdapter() seçeneği powerPreference 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. issue chromium:1440900 adresine bakın.

GPUBlendComponent hem açık hem de varsayılan üyeler içeriyorsa da uyarı gösterilir. dawn:1785 sorununu inceleyin.

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 numaralı soruna 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 numaralı sorunu inceleyin.

Yok edilen 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 başlıklı makaleyi inceleyin.

depthStencil doğrulanırken derinlik şablonu durumunun geçersiz kısmı artık hata mesajında belirtiliyor. issue dawn:1735 başlıklı makaleyi inceleyin.

minBindingSize doğrulama hata mesajı artık doğrulama hatası veren bağlamanın grubunu ve numarasını, arabellekle birlikte bildiriyor. issue dawn:1604 başlıklı makaleyi inceleyin.

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ği inceleyin ve chromium:1431622 sorununu bildirin.

// 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. Bundan sonra, hata ayıklama için etkinleştirdiğinizde macOS'te daha iyi bir hata ayıklama deneyimi sunulacak. issue dawn:1784 başlıklı makaleye bakın.

macOS'teki Instruments uygulamasının, WebGPU'dan gelen özel etiketleri içeren 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. issue dawn:1681 başlıklı makaleyi inceleyin.

Dawn güncellemeleri

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 numaralı soruna 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. 1695 numaralı soruna 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 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