WGSL fragment_depth uzantısı
Geometri yoğunluklu oluşturma geçişlerinde, erken Z optimizasyonları geliştiricilerin en iyi dostudur. GPU'nun pahalı parça gölgelendiricileri çalıştırmadan önce gizli pikselleri atmasına izin vererek büyük bir performans artışı sağlarlar. Rasterleştirilmiş bir derinlik, derinlik testini geçemezse GPU, gölgelendiricinin başka yan etkileri olmaması koşuluyla parça gölgelendiriciyi tamamen atlar.
Donanımın bu durumu nasıl ele aldığını öğrenmek isterseniz MJP'nin When Does Early-Z Have to be Disabled? (Erken Z Ne Zaman Devre Dışı Bırakılmalıdır?) başlıklı mükemmel makalesini inceleyebilirsiniz.
Özel derinlik manipülasyonu yararlı olsa da bunu parça gölgelendiricinizde yapmak gizli bir maliyetle birlikte gelir. Bir parça gölgelendiricinin içinde @builtin(frag_depth)'ya yazmak genellikle sürücüleri, bu erken Z optimizasyonlarını tüm çizim çağrısı için devre dışı bırakmaya zorlar. Bunun nedeni, sürücü sezgisinin, gölgelendiricinin hesaplanan çıkış derinliğinin rasterleştirici tarafından enterpolasyon yapılan derinlikle eşleşmesini garanti edememesidir.
Bu performans cezasını gidermek için WGSL uzantısı fragment_depth, @builtin(frag_depth) üzerinde less veya greater derinlik modu adı belirtmenize olanak tanır. Böylece, yazılan derinliğin enterpolasyonlu derinlikle nasıl karşılaştırıldığı açıkça belirtilir ve GPU'nun erken Z optimizasyonlarını güvenli bir şekilde uygulaması sağlanır.
Bu dil uzantısı, navigator.gpu.wgslLanguageFeatures kullanılarak JavaScript'te özellik olarak algılanabilir. WGSL gölgelendirici kodunuzun en üstünde requires fragment_depth; ile taşınabilirlik dışı olma olasılığını belirtmek için requires-directive kullanmanız önerilir. Aşağıdaki örneğe ve intent to ship'e (gönderime hazırlık) bakın.
if (!navigator.gpu.wgslLanguageFeatures.has("fragment_depth")) {
throw new Error(`WGSL fragment depth is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires fragment_depth;
@fragment
fn main() -> @builtin(frag_depth, less) f32 {
// Explicitly states that the output fragment depth is less than early-Z depth,
// allowing the GPU to safely preserve early-Z optimizations.
return 0.0f;
}`,
});
Doku sıkıştırması hizalanmamış
"texture-compression-unaligned" GPU özelliği, blok boyutunun tam sayı katları olmayan boyutlara (ör. BC, ETC2 ve ASTC biçimleri için 4x4) sahip sıkıştırılmış dokular oluşturulmasına olanak tanır. Daha önce WebGPU, doku boyutlarının bu blok sınırlarıyla kesinlikle uyumlu olmasını gerektiriyordu. Bu özellik, dokuların blok hizalamalarına uyacak şekilde doldurulması veya ölçeklendirilmesi ihtiyacını ortadan kaldırarak ölçeklendirme distorsiyonu olmadan orijinal sıkıştırma doğruluğunu korur. Gönderme amacı başlıklı makaleyi inceleyin.
Aşağıdaki kod snippet'i, adaptörün hizalanmamış doku sıkıştırmayı destekleyip desteklemediğini kontrol eder ve destekliyorsa bu özelliği içeren bir cihaz ister.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("texture-compression-unaligned")) {
throw new Error("Texture compression unaligned support is not available");
}
// Explicitly request texture compression unaligned support.
const device = await adapter.requestDevice({
requiredFeatures: ["texture-compression-unaligned"],
});
Bu özelliği geliştiren harici katkıda bulunan Ignacio Castaño'ya çok teşekkür ederiz.
srgb-linear ve display-p3-linear renk alanları
"srgb-linear" ve "display-p3-linear" önceden tanımlanmış renk alanlarının eklenmesiyle WebGPU tuval bağlamı artık geniş gamlı ekranları desteklemek için doğrudan geniş aralıklı doğrusal renk alanlarına işleyebilir. Bu renk alanları, piksel değerleri ile fiziksel parlaklık arasında doğrusal bir ilişki sürdürür. Bu nedenle, oyunlarda fiziksel ışık oluşturma ve uzamsal işleme görevleri (ör. kenar yumuşatma, enterpolasyon ve azaltma) için idealdirler. Gönderme amacı ve Parçacıklar (HDR) örnek PR #574'e bakın.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const canvas = document.querySelector("canvas");
const context = canvas.getContext("webgpu");
context.configure({
device,
format: "rgba16float",
colorSpace: "display-p3-linear",
});
Ek snorm10-10-10-2 köşe biçimi
"snorm10-10-10-2" köşe biçimi, dört imzalı normalleştirilmiş değeri tutan sıkıştırılmış 32 bitlik bir biçimdir: üç 10 bitlik bileşen (r, g, b) ve bir 2 bitlik bileşen (a). Bu biçimle, bellek bant genişliğinden tasarruf ederken 3D normal vektörler gibi özellikleri ek bir 2 bitlik skaler veya hizalama işaretiyle verimli bir şekilde saklayabilirsiniz. Spec PR 6491'e bakın.
NVIDIA için Linux'ta f16 desteği
WGSL'de 16 bit kayan nokta değerleri için destek sağlayan isteğe bağlı "shader-f16" özelliği artık Linux'ta en yeni NVIDIA GPU sürücülerinde destekleniyor. chromium:42251215 sorununa bakın.
Dawn ile ilgili güncellemeler
Artık WGPUAdapterPropertiesD3D yapısını kullanarak belirli bir GPU bağdaştırıcısı için temel DXGIAdapter'ın LUID'sini sorgulayabilirsiniz. chromium:562849566 sorununa bakın.
Bu bölümde, öne çıkan bazı önemli noktalar ele alınmaktadır. Kapsamlı commit listesine göz atın.
WebGPU'daki yenilikler
WebGPU'daki Yenilikler serisinde ele alınan tüm konuların listesi.
Chrome 155-156
- WGSL fragment_depth uzantısı
- Doku sıkıştırması hizalanmamış
- srgb-linear ve display-p3-linear renk alanları
- Ek snorm10-10-10-2 köşe biçimi
- Vulkan ile NVIDIA'da f16 desteği
- Dawn ile ilgili güncellemeler
Chrome 153-154
- WGSL buffer_view uzantısı
- WGSL swizzle_assignment uzantısı
- WGSL uzantı güncellemeleri
- Dawn ile ilgili güncellemeler
Chrome 151-152
- Alt grup boyutu kontrolü
- setImmediates doğrulama hataları için OperationError
- Dawn ile ilgili güncellemeler
Chrome 149-150
Chrome 147-148
Chrome 146
- OpenGL ES 3.1'de WebGPU uyumluluk modunu destekleme
- Geçici ekler
- WGSL texture_and_sampler_let uzantısı
- Dawn ile ilgili güncellemeler
Chrome 145
- WGSL subgroup_uniformity uzantısı
- Çalışanlarda deneysel eşzamanlı arabellek eşleme
- Dawn ile ilgili güncellemeler
Chrome 144
- WGSL subgroup_id uzantısı
- WGSL uniform_buffer_standard_layout uzantısı
- Linux'ta WebGPU
- Daha hızlı writeBuffer ve writeTexture
- Dawn ile ilgili güncellemeler
Chrome 143
- Doku bileşeni karıştırma
- bgra8unorm salt okunur depolama dokusu kullanımını kaldırma
- Dawn ile ilgili güncellemeler
Chrome 142
Chrome 141
- Tint IR completed (Tonlama IR tamamlandı)
- WGSL derleyicisinde tam sayı aralığı analizi
- Vulkan arka ucu için SPIR-V 1.4 güncellemesi
- Dawn ile ilgili güncellemeler
Chrome 140
- Cihaz istekleri adaptörü tüketiyor
- Doku görünümünün kullanıldığı yerlerde doku kullanmak için kısa yol
- WGSL textureSampleLevel, 1 boyutlu dokuları destekler
- bgra8unorm salt okunur depolama dokusu kullanımını kullanımdan kaldırma
- GPUAdapter isFallbackAdapter özelliğini kaldırma
- Dawn ile ilgili güncellemeler
Chrome 139
- BC ve ASTC sıkıştırılmış biçimleri için 3D doku desteği
- Yeni "core-features-and-limits" özelliği
- WebGPU uyumluluk modu için kaynak denemesi
- Dawn ile ilgili güncellemeler
Chrome 138
- Arabelleği bağlama kaynağı olarak kullanmak için kısa yol
- Oluşturma sırasında eşlenen arabellekler için boyut koşulu değişiklikleri
- Yakın tarihli GPU'lar için mimari raporu
- GPUAdapter isFallbackAdapter özelliğinin desteğini sonlandırma
- Dawn ile ilgili güncellemeler
Chrome 137
- externalTexture bağlama için doku görünümünü kullanma
- Arabellekler, ofsetler ve boyut belirtilmeden kopyalanır
- Atomik işaretçi kullanarak WGSL workgroupUniformLoad
- GPUAdapterInfo powerPreference özelliği
- GPURequestAdapterOptions compatibilityMode özelliğinin kaldırılması
- Dawn ile ilgili güncellemeler
Chrome 136
- GPUAdapterInfo isFallbackAdapter özelliği
- D3D12'de gölgelendirici derleme süresinde iyileştirmeler
- Kanvas görüntülerini kaydetme ve kopyalama
- Artış uyumluluk modu kısıtlamaları
- Dawn ile ilgili güncellemeler
Chrome 135
- Boş bağlama grubu düzeniyle işlem hattı düzeni oluşturmaya izin verme
- Görüntü alanlarının, oluşturma hedefi sınırlarının ötesine geçmesine izin verme
- Android'de deneysel uyumluluk moduna daha kolay erişim
- maxInterStageShaderComponents sınırını kaldırma
- Dawn ile ilgili güncellemeler
Chrome 134
- Alt gruplarla makine öğrenimi iş yüklerini iyileştirme
- Karıştırılabilir olarak kayan filtrelenebilir doku türleri desteğini kaldırma
- Dawn ile ilgili güncellemeler
Chrome 133
- Ek unorm8x4-bgra ve 1 bileşenli köşe biçimleri
- Bilinmeyen sınırların tanımlanmamış değerle istenmesine izin verme
- WGSL hizalama kurallarında yapılan değişiklikler
- WGSL'de discard ile performans artışı
- Harici dokular için VideoFrame displaySize'ı kullanma
- copyExternalImageToTexture kullanarak varsayılan olmayan yönlere sahip resimleri işleme
- Geliştirici deneyimini iyileştirme
- featureLevel ile uyumluluk modunu etkinleştirme
- Deneysel alt grup özelliklerinde temizleme
- maxInterStageShaderComponents sınırının desteğini sonlandırma
- Dawn ile ilgili güncellemeler
Chrome 132
- Doku görünümü kullanımı
- 32 bit kayan nokta dokularını karıştırma
- GPUDevice adapterInfo özelliği
- Geçersiz biçimdeki tuval bağlamını yapılandırma JavaScript hatası veriyor
- Doku üzerinde filtreleme örnekleyici kısıtlamaları
- Genişletilmiş alt grup denemeleri
- Geliştirici deneyimini iyileştirme
- 16 bit normalleştirilmiş doku biçimleri için deneysel destek
- Dawn ile ilgili güncellemeler
Chrome 131
- WGSL'de kırpma mesafeleri
- GPUCanvasContext getConfiguration()
- Nokta ve çizgi temel öğelerinde derinlik önyargısı olmamalıdır
- Alt gruplar için kapsayıcı tarama yerleşik işlevleri
- Çoklu çekme dolaylı reklamı için deneysel destek
- Shader modülü derleme seçeneği strict math
- GPUAdapter requestAdapterInfo() yönteminin kaldırılması
- Dawn ile ilgili güncellemeler
Chrome 130
- Çift kaynaklı karıştırma
- Metal'de gölgelendirici derleme süresinde iyileştirmeler
- GPUAdapter requestAdapterInfo() yönteminin desteğinin sonlandırılması
- Dawn ile ilgili güncellemeler
Chrome 129
Chrome 128
- Alt gruplarla deneme yapma
- Çizgiler ve noktalar için derinlik önyargısı ayarını kullanımdan kaldırma
- preventDefault kullanılıyorsa yakalanmamış hata DevTools uyarısını gizleme
- WGSL, önce örnekleme interpolasyonu
- Dawn ile ilgili güncellemeler
Chrome 127
- Android'de OpenGL ES için deneysel destek
- GPUAdapter info özelliği
- WebAssembly birlikte çalışabilirlik iyileştirmeleri
- İyileştirilmiş komut kodlayıcı hataları
- Dawn ile ilgili güncellemeler
Chrome 126
- maxTextureArrayLayers sınırını artırma
- Vulkan arka ucu için arabellek yükleme optimizasyonu
- Shader derleme süresinde iyileştirmeler
- Gönderilen komut arabellekleri benzersiz olmalıdır
- Dawn ile ilgili güncellemeler
Chrome 125
- Alt gruplar (geliştirme aşamasında olan bir özellik)
- 3D dokunun dilimine oluşturma
- Dawn ile ilgili güncellemeler
Chrome 124
- Salt okunur ve okuma/yazma depolama dokuları
- Hizmet çalışanı ve paylaşılan çalışan desteği
- Yeni adaptör bilgisi özellikleri
- Hata düzeltmeleri
- Dawn ile ilgili güncellemeler
Chrome 123
- WGSL'de DP4a yerleşik işlevleri desteği
- WGSL'de kısıtlanmamış işaretçi parametreleri
- WGSL'de bileşikleri referanssızlaştırmak için söz dizimi kolaylığı
- Şablon ve derinlik yönleri için ayrı salt okunur durum
- Dawn ile ilgili güncellemeler
Chrome 122
- Uyumluluk moduyla erişimi genişletme (geliştirme aşamasında olan bir özellik)
- maxVertexAttributes sınırını artırma
- Dawn ile ilgili güncellemeler
Chrome 121
- Android'de WebGPU'yu destekleme
- Windows'da gölgelendirici derleme için FXC yerine DXC'yi kullanma
- İşleme ve oluşturma geçişlerindeki zaman damgalı sorgular
- Shader modüllerine varsayılan giriş noktaları
- GPUExternalTexture renk alanı olarak display-p3'ü destekleme
- Bellek yığınları bilgileri
- Dawn ile ilgili güncellemeler
Chrome 120
- WGSL'de 16 bitlik kayan nokta değerleri için destek
- Sınırları zorlama
- Derinlik-şablon durumunda yapılan değişiklikler
- Adaptör bilgisi güncellemeleri
- Zaman damgası sorgularının nicelleştirilmesi
- Bahar temizliği özellikleri
Chrome 119
- Filtrelenebilir 32 bit kayan nokta dokular
- unorm10-10-10-2 köşe biçimi
- rgb10a2uint doku biçimi
- Dawn ile ilgili güncellemeler
Chrome 118
copyExternalImageToTexture()içinde HTMLImageElement ve ImageData desteği- Okuma/yazma ve salt okunur depolama dokusu için deneysel destek
- Dawn ile ilgili güncellemeler
Chrome 117
- Köşe arabelleğini ayarlamayı kaldırma
- Bağlama grubunu kaldırma
- Cihaz kaybolduğunda eşzamansız işlem hattı oluşturma işlemindeki hataları yoksayma
- SPIR-V gölgelendirici modülü oluşturma güncellemeleri
- Geliştirici deneyimini iyileştirme
- Otomatik olarak oluşturulan düzene sahip işlem hatlarını önbelleğe alma
- Dawn ile ilgili güncellemeler
Chrome 116
- WebCodecs entegrasyonu
- GPUAdapter
requestDevice()tarafından döndürülen kayıp cihaz importExternalTexture()çağrılırsa video oynatmayı sorunsuz tutma- Şartlara uygunluk
- Geliştirici deneyimini iyileştirme
- Dawn ile ilgili güncellemeler
Chrome 115
- Desteklenen WGSL dil uzantıları
- Direct3D 11 için deneysel destek
- AC gücünde varsayılan olarak ayrı GPU kullanma
- Geliştirici deneyimini iyileştirme
- Dawn ile ilgili güncellemeler
Chrome 114
- JavaScript'i optimize etme
- Yapılandırılmamış tuvalde getCurrentTexture() işlevi InvalidStateError hatası veriyor
- WGSL güncellemeleri
- Dawn ile ilgili güncellemeler
Chrome 113
importExternalTexture()'te WebCodecs VideoFrame kaynağını kullanma