WGSL fragment_depth uzantısı
Geometri yoğunluklu oluşturma geçişlerinde, erken Z optimizasyonları geliştiricilerin en iyi dostudur. GPU'nun, maliyetli parça gölgelendiricileri çalıştırmadan önce gizli pikselleri silmesine olanak tanıyarak performansı önemli ölçüde artırır. Rasterleştirilmiş bir derinlik, derinlik testinde başarısız olursa GPU, gölgelendiricinin başka yan etkileri olmaması koşuluyla parça gölgelendiriciyi tamamen atlar.
Donanımın bu işlemi nasıl gerçekleştirdiğini öğrenmek istiyorsanız MJP'nin When Does Early-Z Have to be Disabled? (Early-Z Ne Zaman Devre Dışı Bırakılmalıdır?) başlıklı mükemmel makalesini okuyabilirsiniz.
Özel derinlik manipülasyonu faydalı olsa da bunu parça gölgelendiricinizde yapmanın gizli bir bedeli vardır. Parça gölgelendirici içinde @builtin(frag_depth) değerine yazma işlemi, genellikle sürücüleri tüm çekim çağrısı için bu erken Z optimizasyonlarını devre dışı bırakmaya zorlar. Bunun nedeni, sürücü sezgisel yöntemlerinin, gölgelendiricinin hesaplanan çıkış derinliğinin rasterleştirici tarafından enterpolasyon yapılan derinlikle eşleştiğini garanti edememesidir.
Bu performans kaybını gidermek için WGSL uzantısı fragment_depth, @builtin(frag_depth) üzerinde bir less veya greater derinlik modu adı belirtmenize olanak tanır. Böylece, yazılı derinliğin interpolasyonlu derinlikle nasıl karşılaştırılacağını açıkça belirtebilir ve GPU'nun erken Z optimizasyonlarını güvenli bir şekilde uygulamasını sağlayabilirsiniz.
Bu dil uzantısı, navigator.gpu.wgslLanguageFeatures kullanılarak JavaScript'te özellik 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 (gönderme niyeti) bölümüne 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ırma hizalanmamış
<p>"texture-compression-unaligned" GPU özelliği, boyutları blok boyutunun tam sayı katları olmayan (BC, ETC2 ve ASTC biçimleri için 4x4 gibi) sıkıştırılmış dokuların oluşturulmasını sağlar. Daha önce WebGPU, doku boyutlarının bu blok sınırlarıyla tam olarak eşleşmesini gerektiriyordu. Bu özellik, dokuları blok hizalamalarına uyacak şekilde doldurma veya ölçeklendirme ihtiyacını ortadan kaldırarak ölçeklendirme bozulması olmadan orijinal sıkıştırma doğruluğunu korur. Gönderim niyeti bölümüne bakın.
Aşağıdaki kod snippet'i, adaptörün hizalanmamış doku sıkıştırmayı destekleyip desteklemediğini kontrol eder ve varsa 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ğin, spesifikasyonun ve CTS çalışmasının geliştirilmesine katkıda bulunan spark.js'den harici katkıda bulunan Ignacio Castaño'ya çok teşekkür ederiz.
srgb-linear ve display-p3-linear renk uzayları
"srgb-linear" ve "display-p3-linear" önceden tanımlanmış renk alanlarının eklenmesiyle WebGPU tuval bağlamı, geniş gamutlu ekranları desteklemek için artık doğrudan genişletilmiş aralıklı doğrusal renk alanlarında oluşturulabilir. Bu renk alanları, piksel değerleri ile fiziksel parlaklık arasında doğrusal bir ilişki sağlar. Bu sayede, oyunlarda fiziksel ışık oluşturma ve kenar yumuşatma, enterpolasyon ve desimasyon gibi uzamsal işleme görevleri için idealdir. Gönderim amacını ve Parçacıklar (HDR) örnek PR #574'ü inceleyin.
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 işaretli normalleştirilmiş değer içeren paketlenmiş 32 bitlik bir biçimdir: üç adet 10 bitlik bileşen (r, g, b) ve bir adet 2 bitlik bileşen (a). Bu biçim sayesinde, bellek bant genişliğinden tasarruf ederken ekstra 2 bitlik skaler içeren 3D normal vektörler veya hizalama işareti gibi özellikleri verimli bir şekilde depolayabilirsiniz. PR 6491 spesifikasyonuna 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 son NVIDIA GPU sürücüleri için Linux'ta destekleniyor. chromium:42251215 sorununa bakın.
Dawn ile ilgili güncellemeler
Artık WGPUAdapterPropertiesD3D yapısını kullanarak belirli bir GPU adaptörü için temel DXGIAdapter'ın LUID'sini sorgulayabilirsiniz. chromium:562849566 sorununa bakın.
Bu, öne çıkan konulardan bazılarını kapsar. İşlemelerin kapsamlı listesine göz atın.
WebGPU'daki yenilikler
WebGPU'daki yenilikler serisinde ele alınan her şeyin listesi.
Chrome 155-156
- WGSL fragment_depth uzantısı
- Doku sıkıştırması hizalanmamış
- srgb-linear ve display-p3-linear renk uzayları
- Ek snorm10-10-10-2 köşe biçimi
- NVIDIA için Linux'ta f16 desteği
- Dawn ile ilgili güncellemeler
Chrome 153-154
- WGSL buffer_view uzantısı
- WGSL swizzle_assignment uzantısı
- WGSL uzantısı 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 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 tüketim adaptörü
- Doku görünümünün kullanıldığı yerlerde doku kullanmak için kısayol
- WGSL textureSampleLevel, 1D dokuları destekler
- bgra8unorm salt okunur depolama dokusu kullanımının desteğini sonlandırma
- GPUAdapter isFallbackAdapter özelliğinin kaldırılması
- 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
- Tamponu bağlama kaynağı olarak kullanmanın kısa yolu
- Oluşturma sırasında eşlenen arabellekler için boyut koşulu değişiklikleri
- Yeni GPU'lar için mimari raporu
- GPUAdapter isFallbackAdapter özelliğinin desteği sonlandırılıyor
- Dawn ile ilgili güncellemeler
Chrome 137
- externalTexture bağlama için doku görünümünü kullanma
- Ofset ve boyut belirtmeden arabellek kopyalama
- Atomik işaretçi kullanan 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üresi iyileştirmeleri
- Tuval resimlerini 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
- Kayan noktalı filtrelenebilir doku türleri için karıştırılabilir 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
- Atma ile WGSL performans kazanımları
- 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 özelliklerini temizleme
- maxInterStageShaderComponents sınırının desteği sonlandırıldı
- Dawn ile ilgili güncellemeler
Chrome 132
- Doku görünümü kullanımı
- 32 bit kayan doku karıştırma
- GPUDevice adapterInfo özelliği
- Tuval bağlamını geçersiz biçimle yapılandırmak JavaScript hatasına neden olur
- Dokularda 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 klip mesafeleri
- GPUCanvasContext getConfiguration()
- Nokta ve çizgi temel öğelerinde derinlik sapması olmamalıdır
- Alt gruplar için kapsayıcı tarama yerleşik işlevleri
- Çoklu dolaylı çizim için deneysel destek
- Gölgeleyici modülü derleme seçeneği katı matematik
- GPUAdapter requestAdapterInfo() yönteminin kaldırılması
- Dawn ile ilgili güncellemeler
Chrome 130
- Çift kaynaklı harmanlama
- Metal'de gölgelendirici derleme süresi iyileştirmeleri
- GPUAdapter requestAdapterInfo() desteğinin sonlandırılması
- Dawn ile ilgili güncellemeler
Chrome 129
Chrome 128
- Alt gruplarla deneme yapma
- Çizgiler ve noktalar için derinlik sapması ayarını kullanımdan kaldırma
- preventDefault ise yakalanmayan hata DevTools uyarısını gizle
- 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
- Gölgeleyici 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ındaki özellik)
- 3D doku dilimine dönüştürme
- 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 bağdaştırıcı bilgileri ö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şiklerin referansını kaldırmak için söz dizimi kolaylığı
- Şablon ve derinlik özellikleri için ayrı salt okunur durum
- Dawn ile ilgili güncellemeler
Chrome 122
- Uyumluluk moduyla erişimi genişletme (geliştirme aşamasındaki özellik)
- maxVertexAttributes sınırını artırma
- Dawn ile ilgili güncellemeler
Chrome 121
- Android'de WebGPU'yu destekleme
- Windows'da gölgelendirici derlemesi için FXC yerine DXC kullanma
- Hesaplama ve oluşturma geçişlerinde zaman damgası sorguları
- Gölgeleyici modüllerine varsayılan giriş noktaları
- GPUExternalTexture renk alanı olarak display-p3 desteği
- Bellek yığınları bilgileri
- Dawn ile ilgili güncellemeler
Chrome 120
- WGSL'de 16 bit kayan nokta değerleri için destek
- Sınırları zorlama
- Derinlik kalıbı durumunda yapılan değişiklikler
- Adaptör bilgileri güncellemeleri
- Zaman damgası sorgularını niceleme
- 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 okuma depolama dokusu için deneysel destek
- Dawn ile ilgili güncellemeler
Chrome 117
- Tepe arabelleğini kaldırma
- Bağlama grubunu kaldırma
- Cihaz kaybolduğunda eş zamansız ardışık düzen oluşturma hatalarını sessize alma
- SPIR-V gölgelendirici modülü oluşturma güncellemeleri
- Geliştirici deneyimini iyileştirme
- Otomatik olarak oluşturulan düzene sahip ardışık düzenleri ö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- Spesifikasyon uygunluğu
- 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 kullan
- Geliştirici deneyimini iyileştirme
- Dawn ile ilgili güncellemeler
Chrome 114
- JavaScript'i optimize etme
- Yapılandırılmamış tuvalde getCurrentTexture() InvalidStateError hatası veriyor
- WGSL güncellemeleri
- Dawn ile ilgili güncellemeler