Android'de WebGPU desteği
Chrome Ekibi olarak, WebGPU'nun artık Qualcomm ve ARM GPU'lar tarafından desteklenen Android 12 ve sonraki sürümleri çalıştıran cihazlarda Chrome 121'de varsayılan olarak etkinleştirildiğini duyurmaktan mutluluk duyuyoruz.
Destek, yakın gelecekte Android 11 çalıştıranlar da dahil olmak üzere daha geniş bir Android cihaz yelpazesini kapsayacak şekilde kademeli olarak genişletilecektir. Bu genişleme, daha geniş bir donanım yapılandırması yelpazesinde sorunsuz bir deneyim sağlamak için daha fazla test ve optimizasyona bağlı olacaktır. chromium:1497815 sorunu bölümüne bakın.
Windows'da gölgelendirici derlemesi için FXC yerine DXC kullanma
Chrome artık, SM6+ grafik donanımına sahip Windows D3D12 makinelerinde gölgelendiricileri derlemek için DXC'nin (DirectX Derleyici) gücünü kullanmaktadır. Daha önce WebGPU, Windows'da gölgelendirici derlemesi için FXC'yi (FX Derleyici) kullanıyordu. FXC işlevsel olsa da DXC'deki özellik grubuna ve performans optimizasyonlarına sahip değildi.
İlk testler, DXC kullanılırken işlem gölgelendirici derleme hızında FXC'ye kıyasla ortalama% 20 artış olduğunu gösteriyor.
Bilgi işlem ve oluşturma geçişlerinde zaman damgası sorguları
Zaman damgası sorguları, WebGPU uygulamalarının GPU komutlarının işleme ve oluşturma geçişlerini yürütmesinin ne kadar sürdüğünü nanosaniyeye kadar hassas bir şekilde ölçmesine olanak tanır. GPU iş yüklerinin performansı ve davranışı hakkında bilgi edinmek için yoğun şekilde kullanılırlar.
"timestamp-query"
özelliği bir GPUAdapter
'ta kullanıma sunulduğunda aşağıdakileri yapabilirsiniz:
"timestamp-query"
özelliğine sahip birGPUDevice
isteyin."timestamp"
türüne sahip birGPUQuerySet
oluşturun.GPUQuerySet
öğesinde zaman damgası değerlerinin nereye yazılacağını tanımlamak içinGPUComputePassDescriptor.timestampWrites
veGPURenderPassDescriptor.timestampWrites
öğelerini kullanın.- Zaman damgası değerlerini
resolveQuerySet()
kullanarakGPUBuffer
biçiminde çözümleyin. GPUBuffer
aracındaki sonuçları CPU'ya kopyalayarak zaman damgası değerlerini tekrar okuyun.- Zaman damgası değerlerinin kodunu
BigInt64Array
olarak çözme.
Aşağıdaki örneğe ve dawn:1800 sorununa bakın.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("timestamp-query")) {
throw new Error("Timestamp query feature is not available");
}
// Explicitly request timestamp query feature.
const device = await adapter.requestDevice({
requiredFeatures: ["timestamp-query"],
});
const commandEncoder = device.createCommandEncoder();
// Create a GPUQuerySet which holds 2 timestamp query results: one for the
// beginning and one for the end of compute pass execution.
const querySet = device.createQuerySet({ type: "timestamp", count: 2 });
const timestampWrites = {
querySet,
beginningOfPassWriteIndex: 0, // Write timestamp in index 0 when pass begins.
endOfPassWriteIndex: 1, // Write timestamp in index 1 when pass ends.
};
const passEncoder = commandEncoder.beginComputePass({ timestampWrites });
// TODO: Set pipeline, bind group, and dispatch work to be performed.
passEncoder.end();
// Resolve timestamps in nanoseconds as a 64-bit unsigned integer into a GPUBuffer.
const size = 2 * BigInt64Array.BYTES_PER_ELEMENT;
const resolveBuffer = device.createBuffer({
size,
usage: GPUBufferUsage.QUERY_RESOLVE | GPUBufferUsage.COPY_SRC,
});
commandEncoder.resolveQuerySet(querySet, 0, 2, resolveBuffer, 0);
// Read GPUBuffer memory.
const resultBuffer = device.createBuffer({
size,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});
commandEncoder.copyBufferToBuffer(resolveBuffer, 0, resultBuffer, 0, size);
// Submit commands to the GPU.
device.queue.submit([commandEncoder.finish()]);
// Log compute pass duration in nanoseconds.
await resultBuffer.mapAsync(GPUMapMode.READ);
const times = new BigInt64Array(resultBuffer.getMappedRange());
console.log(`Compute pass duration: ${Number(times[1] - times[0])}ns`);
resultBuffer.unmap();
Zamanlama saldırısı endişeleri nedeniyle zaman damgası sorguları 100 mikrosaniyelik bir çözünürlükle kesirli hale getirilir. Bu, hassasiyet ve güvenlik arasında iyi bir uzlaşma sağlar. Chrome tarayıcıda, uygulamanızı geliştirirken chrome://flags/#enable-webgpu-developer-features
adresindeki "WebGPU Geliştirici Özellikleri" işaretini etkinleştirerek zaman damgası nicelemesini devre dışı bırakabilirsiniz. Daha fazla bilgi edinmek için Zaman damgası sorgularının nicelenmesine bakın.
GPU'lar zaman damgası sayacını zaman zaman sıfırlayabilir. Bu da zaman damgaları arasındaki negatif değişimler gibi beklenmedik değerlere neden olabilir. Aşağıdaki Compute Boids örneğine zaman damgası sorgu desteği ekleyen git diff değişikliklerine göz atmanızı öneririz.
Gölgelendirici modüllerinin varsayılan giriş noktaları
Geliştirici deneyimini iyileştirmek için artık bilgi işlem veya oluşturma ardışık düzeni oluştururken gölgelendirici modülünüzün entryPoint
kısmını çıkarabilirsiniz. Gölgelendirici kodunda gölgelendirici aşaması için benzersiz bir giriş noktası bulunamazsa GPUValidationError tetiklenir. Aşağıdaki örneği ve sorun şafak:2254 bilgisini inceleyin.
const code = `
@vertex fn vertexMain(@builtin(vertex_index) i : u32) ->
@builtin(position) vec4f {
const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
return vec4f(pos[i], 0, 1);
}
@fragment fn fragmentMain() -> @location(0) vec4f {
return vec4f(1, 0, 0, 1);
}`;
const module = myDevice.createShaderModule({ code });
const format = navigator.gpu.getPreferredCanvasFormat();
const pipeline = await myDevice.createRenderPipelineAsync({
layout: "auto",
vertex: { module, entryPoint: "vertexMain" },
fragment: { module, entryPoint: "fragmentMain", targets: [{ format }] },
vertex: { module },
fragment: { module, targets: [{ format }] },
});
GPUExternalTexture renk alanı olarak display-p3 desteği
Artık importExternalTexture()
ile HDR videolardan GPUExternalTexture içe aktarırken "display-p3"
hedef renk alanını ayarlayabilirsiniz. WebGPU'nun renk alanlarını nasıl işlediğine göz atın. Aşağıdaki örneğe ve chromium:1330250 sorununa bakın.
// Create texture from HDR video.
const video = document.querySelector("video");
const texture = myDevice.importExternalTexture({
source: video,
colorSpace: "display-p3",
});
Bellek yığınları bilgileri
Uygulamanızı geliştirirken büyük miktarlar ayırırken bellek sınırlamalarını öngörmenize yardımcı olmak için requestAdapterInfo()
artık adaptörde bulunan bellek yığınlarının boyutu ve türü gibi memoryHeaps
bilgilerini gösteriyor. Bu deneysel özelliğe yalnızca chrome://flags/#enable-webgpu-developer-features
adresindeki "WebGPU Geliştirici Özellikleri" işareti etkinleştirildiğinde erişilebilir. Aşağıdaki örneğe ve sorun şafak:2249 bölümüne bakın.
const adapter = await navigator.gpu.requestAdapter();
const adapterInfo = await adapter.requestAdapterInfo();
for (const { size, properties } of adapterInfo.memoryHeaps) {
console.log(size); // memory heap size in bytes
if (properties & GPUHeapProperty.DEVICE_LOCAL) { /* ... */ }
if (properties & GPUHeapProperty.HOST_VISIBLE) { /* ... */ }
if (properties & GPUHeapProperty.HOST_COHERENT) { /* ... */ }
if (properties & GPUHeapProperty.HOST_UNCACHED) { /* ... */ }
if (properties & GPUHeapProperty.HOST_CACHED) { /* ... */ }
}
Şafak güncellemeleri
wgpu::Instance
üzerindeki HasWGSLLanguageFeature
ve EnumerateWGSLLanguageFeatures
yöntemleri, WGSL dil özelliklerini işlemek için eklendi. dawn:2260 sorununa bakın.
Standart olmayan wgpu::Feature::BufferMapExtendedUsages
özelliği, wgpu::BufferUsage::MapRead
veya wgpu::BufferUsage::MapWrite
ve başka bir wgpu::BufferUsage
ile GPU arabelleği oluşturmanıza olanak tanır. Aşağıdaki örneğe ve dawn:2204 sorununu inceleyin.
wgpu::BufferDescriptor descriptor = {
.size = 128,
.usage = wgpu::BufferUsage::MapWrite | wgpu::BufferUsage::Uniform
};
wgpu::Buffer uniformBuffer = device.CreateBuffer(&descriptor);
uniformBuffer.MapAsync(wgpu::MapMode::Write, 0, 128,
[](WGPUBufferMapAsyncStatus status, void* userdata)
{
wgpu::Buffer* buffer = static_cast<wgpu::Buffer*>(userdata);
memcpy(buffer->GetMappedRange(), data, sizeof(data));
},
&uniformBuffer);
Şu özellikler belgelenmiştir: ANGLE Doku Paylaşımı, D3D11 çoklu iş parçacığı korumalı, Dolaylı Cihaz Senkronizasyonu, Norm16 doku biçimleri, Zaman Damgası İçin Geçiş Kartları, Pixel Yerel Depolama, Gölgesel Özellikler ve Çoklu Düzlemsel Biçimler.
Chrome ekibi, Dawn için resmi bir GitHub deposu oluşturdu.
Bu, önemli noktalardan yalnızca bazılarını kapsar. Kapsamlı commit listesine göz atın.
WebGPU'daki Yenilikler
WebGPU'daki Yenilikler serisinde ele alınan tüm konuların listesi.
Chrome 131
- Mesafeleri WGSL'de kırp
- GPUCanvasContext getConfiguration()
- Nokta ve çizgi primitiflerinde derinlik önyargısı olmamalıdır
- Alt gruplar için dahili kapsayıcı tarama işlevleri
- Çoklu çizim için deneysel destek
- Shader modülü derleme seçeneği katı matematik
- GPUAdapter requestAdapterInfo() yöntemini kaldırın
- Dawn güncellemeleri
Chrome 130
- Çift kaynak karıştırma
- Metal'de gölgelendirici derleme süresiyle ilgili iyileştirmeler
- GPUAdapter requestAdapterInfo() işlevinin kullanımdan kaldırılması
- Dawn güncellemeleri
Chrome 129 sürümü
Chrome 128
- Alt gruplarla deneme yapma
- Çizgiler ve noktalar için derinlik önyargısı ayarlama özelliğini kullanımdan kaldırma
- preventDefault ise yakalanmamış hata olan Geliştirici Araçları uyarısını gizle
- WGSL ilk olarak örneklemeyi
- Gün doğumu güncellemeleri
Chrome 127 sürümü
- Android'de OpenGL ES için deneysel destek
- GPUAdapter bilgi özelliği
- WebAssembly birlikte çalışabilirlik iyileştirmeleri
- Komut kodlayıcı hataları iyileştirildi
- Gün doğumu güncellemeleri
Chrome 126
- maxTextureArrayLayers sınırını artırma
- Vulkan arka uç için arabellek yükleme optimizasyonu
- Gölgelendirici derleme süresiyle ilgili iyileştirmeler
- Gönderilen komut arabellekleri benzersiz olmalıdır
- Dawn güncellemeleri
Chrome 125
Chrome 124
- Salt okunur ve okuma/yazma depolama alanı dokuları
- Hizmet çalışanları ve paylaşılan çalışanlar desteği
- Yeni adaptör bilgileri özellikleri
- Hata düzeltmeleri
- Dawn güncellemeleri
Chrome 123
- WGSL'de DP4a yerleşik işlevleri desteği
- WGSL'de sınırsız işaretçi parametreleri
- WGSL'de bileşimlerin referansını kaldırmak için söz dizimi
- Şablon ve derinlik özellikleri için ayrı salt okunur durum
- Dawn güncellemeleri
Chrome 122
- Uyumluluk modu ile erişimi genişletin (geliştirme aşamasındaki özellik)
- maxVertexAttributes sınırını artırma
- Dawn güncellemeleri
Chrome 121
- Android'de WebGPU desteği
- Windows'da gölgelendirici derlemesi için FXC yerine DXC'yi kullanın
- Bilgi işlem ve oluşturma kartlarında zaman damgası sorguları
- Gölgelendirici modüllerinin varsayılan giriş noktaları
- display-p3'ü GPUExternalTexture renk alanı olarak destekle
- Bellek yığınları bilgileri
- Gün doğumu güncellemeleri
Chrome 120
- WGSL'de 16 bitlik kayan nokta değerleri için destek
- Sınırları zorlayın
- Derinlik-gölge durumuyla ilgili değişiklikler
- Adaptör bilgileri güncellemeleri
- Zaman damgası sorgularının nicelenmesi
- Bahar temizliği özellikleri
Chrome 119
- Filtrelenebilir 32 bit kayan noktalı dokular
- unorm10-10-10-2 köşe noktası biçimi
- AdX10a2uint doku biçimi
- Gün doğumu güncellemeleri
Chrome 118 sürümü
copyExternalImageToTexture()
'te HTMLImageElement ve ImageData desteği- Okunma-yazma ve salt okunur depolama dokusu için deneysel destek
- Dawn güncellemeleri
Chrome 117
- Köşe noktası arabelleğinin ayarını kaldırma
- Bağlama grubunu kaldırma
- Cihaz kaybolduğunda eşzamansız ardışık düzen oluşturma işlemlerinden kaynaklanan hataları yoksayma
- SPIR-V gölgelendirici modülü oluşturma güncellemeleri
- Geliştirici deneyimini iyileştirme
- Otomatik olarak oluşturulan düzenle ardışık düzenleri önbelleğe alma
- Dawn güncellemeleri
Chrome 116
- WebCodecs entegrasyonu
- Kayıp cihaz, GPUAdapter
requestDevice()
tarafından döndürüldü importExternalTexture()
çağrılırsa video oynatmanın sorunsuz olmasını sağlama- Spesifikasyon uygunluğu
- Geliştirici deneyimini iyileştirme
- Dawn güncellemeleri
Chrome 115
- Desteklenen WGSL dil uzantıları
- Direct3D 11 için deneysel destek
- AC güç kaynağında varsayılan olarak ayrı GPU'yu etkinleştirme
- Geliştirici deneyimini iyileştirme
- Dawn güncellemeleri
Chrome 114
- JavaScript'i optimize etme
- Yapılandırılmamış kanvasta getCurrentTexture() InvalidStateError hatası veriyor
- WGSL ile ilgili güncellemeler
- Dawn güncellemeleri
Chrome 113
importExternalTexture()
dosyasında WebCodecs VideoFrame kaynağını kullanma