Mesafeleri WGSL biçiminde kırp
Klip mesafeleri, köşe noktası çıkışında temel öğelerin klip ses düzeyini kullanıcı tanımlı yarım boşluklarla kısıtlamanıza olanak tanır. Kendi kırpma düzlemlerinizi tanımlamak, WebGPU sahnelerinizde nelerin görüneceği konusunda daha fazla kontrol sahibi olmanızı sağlar. Bu teknik, özellikle görselleştirme üzerinde hassas kontrolün önemli olduğu CAD yazılımı gibi uygulamalarda yararlıdır.
"clip-distances"
özelliği bir GPUAdapter'da mevcut olduğunda, WGSL'de kırpma mesafesi desteği almak için bu özelliğe sahip bir GPUDevice isteyin ve WGSL kodunuzda enable clip_distances;
ile bu uzantıyı açıkça etkinleştirin. Etkinleştirildikten sonra, clip_distances
yerleşik dizisini köşe üstü gölgelendiricinizde kullanabilirsiniz. Bu dizi, kullanıcı tanımlı bir klip düzlemine olan mesafeleri tutar:
- 0 olan kırpma mesafesi, köşenin düzlemde olduğu anlamına gelir.
- Pozitif mesafe, köşenin klip yarı alanının (tutmak istediğiniz taraf) içinde olduğu anlamına gelir.
- Negatif mesafe, köşenin kırpma yarı uzayının (atlamak istediğiniz taraf) dışında olduğu anlamına gelir.
Aşağıdaki snippet'e, chromestatus girişi'ne ve 358408571 numaralı soruna bakın.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("clip-distances")) {
throw new Error("Clip distances support is not available");
}
// Explicitly request clip distances support.
const device = await adapter.requestDevice({
requiredFeatures: ["clip-distances"],
});
const vertexShaderModule = device.createShaderModule({ code: `
enable clip_distances;
struct VertexOut {
@builtin(clip_distances) my_clip_distances : array<f32, 1>,
@builtin(position) my_position : vec4f,
}
@vertex fn main() -> VertexOut {
var output : VertexOut;
output.my_clip_distances[0] = 1;
output.my_position = vec4f(0, 0, 0, 1);
return output;
}
`,
});
// Send the appropriate commands to the GPU...
GPUCanvasContext getConfiguration()
GPUCanvasContext configure()
bir yapılandırma sözlüğüyle çağrıldıktan sonra GPUCanvasContext getConfiguration()
yöntemi, tuval bağlamı yapılandırmasını kontrol etmenize olanak tanır. Bu grupta device
, format
, usage
, viewFormats
, colorSpace
, toneMapping
ve alphaMode
üye yer alıyor. Bu, Parçacıklar (HDR) örneğinde gösterildiği gibi, tarayıcıda HDR kanvası desteği olup olmadığını kontrol etmek gibi görevler için kullanışlıdır. Aşağıdaki snippet'i, chromestatus girişini ve 370109829 numaralı sorunu inceleyin.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const canvas = document.querySelector("canvas");
const context = canvas.getContext("webgpu");
// Configure the canvas for HDR.
context.configure({
device,
format: "rgba16float",
toneMapping: { mode: "extended" },
});
const configuration = context.getConfiguration();
if (configuration.toneMapping.mode === "extended") {
// The browser supports HDR canvas.
// Warning! The user still needs a HDR display to enjoy HDR content.
}
Nokta ve çizgi temel öğeleri derinlik sapmasına sahip olmamalıdır
Daha önce duyurulduğu gibi, WebGPU spesifikasyonu artık bir oluşturma ardışık düzeninin topolojisi çizgi veya nokta türü olduğunda depthBias
, depthBiasSlopeScale
ve depthBiasClamp
'i sıfır olmayan bir değere ayarlamayı doğrulama hatası olarak kabul ediyor. 352567424 numaralı soruna bakın.
Alt gruplar için dahil edici tarama yerleşik işlevleri
Alt grup denemesi kapsamında, 361330160 numaralı sürüme aşağıdaki alt grup yerleşik işlevleri eklendi:
subgroupInclusiveAdd(value)
: Alt gruptaki tüm etkin çağrılarınvalue
'lerinin kapsayıcı tarama toplamını döndürür.subgroupInclusiveMul(value)
: Alt gruptaki tüm etkin çağrılarınvalue
'lerinin kapsayıcı tarama çarpımını döndürür.
Çoklu çizim için deneysel dolaylı destek
Birden fazla çizim için dolaylı GPU özelliği, tek bir GPU komutuyla birden fazla çizim çağrısı göndermenize olanak tanır. Bu özellikle, partikül sistemleri, örnekleme ve büyük sahneler gibi çok sayıda nesnenin oluşturulması gereken durumlarda faydalıdır. drawIndirect()
ve drawIndexedIndirect()
GPURenderPassEncoder yöntemleri, bir GPU arabelleğinin belirli bir bölgesinden tek seferde yalnızca bir çizim çağrısı yayınlayabilir.
Bu deneysel özellik standartlaştırılana kadar, özelliği Chrome'da kullanılabilir hale getirmek için chrome://flags/#enable-unsafe-webgpu
adresindeki "Güvenli Olmayan WebGPU Desteği" işaretini etkinleştirin.
GPUAdapter'da bulunan "chromium-experimental-multi-draw-indirect"
standart dışı GPU özelliğiyle bu özelliğe sahip bir GPUDevice isteyin. Ardından, çizim çağrılarını depolamak için GPUBufferUsage.INDIRECT
kullanımıyla bir GPUBuffer oluşturun. Daha sonra, yeni multiDrawIndirect()
ve multiDrawIndexedIndirect()
GPURenderPassEncoder yöntemlerinde bir oluşturma geçişi içinde çizim çağrıları göndermek için kullanabilirsiniz. Aşağıdaki snippet'i ve 356461286 numaralı sorunu inceleyin.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-multi-draw-indirect")) {
throw new Error("Experimental multi-draw indirect support is not available");
}
// Explicitly request experimental multi-draw indirect support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-multi-draw-indirect"],
});
// Draw call have vertexCount, instanceCount, firstVertex, and firstInstance parameters.
const drawData = new Uint32Array([
3, 1, 0, 0, // First draw call
3, 1, 3, 0, // Second draw call
]);
// Create a buffer to store the draw calls.
const drawBuffer = device.createBuffer({
size: drawData.byteLength,
usage: GPUBufferUsage.INDIRECT | GPUBufferUsage.COPY_DST,
});
device.queue.writeBuffer(drawBuffer, 0, drawData);
// Create a render pipeline, a vertex buffer, and a render pass encoder...
// Inside a render pass, issue the draw calls.
myPassEncoder.setPipeline(myPipeline);
myPassEncoder.setVertexBuffer(0, myVertexBuffer);
myPassEncoder.multiDrawIndirect(drawBuffer, /*offset=*/ 0, /*maxDrawCount=*/ 2);
myPassEncoder.end();
Gölgelendirici modülü derleme seçeneği katı matematik
Gölgelendirici modülü derlemesi sırasında katı hesaplamayı etkinleştirmenize veya devre dışı bırakmanıza olanak tanımak için GPUShaderModuleDescriptor'a bir boole strictMath
geliştirici seçeneği eklendi. Bu özellik, chrome://flags/#enable-webgpu-developer-features
adresindeki "WebGPU Geliştirici Özellikleri" işaretinin arkasındadır. Bu, özelliğin yalnızca geliştirme sırasında kullanılması amaçlandığı anlamına gelir. 42241455 numaralı sorunu inceleyin.
Bu seçenek şu anda Metal ve Direct3D'de desteklenmektedir. Yüksek düzey matematik devre dışı bırakıldığında derleyici, gölgelendiricilerinizi aşağıdaki yöntemlerle optimize edebilir:
- NaN ve Infinity değerlerinin olasılığı göz ardı ediliyor.
- -0 değerinin +0 olarak değerlendirilmesi.
- Bölme işlemini, ters değerle çarpma işlemiyle değiştirme.
- İşlemleri ilişkilendirme ve dağıtma özelliklerine göre yeniden düzenleme.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const code = `
// Examines the bit pattern of the floating-point number to
// determine if it represents a NaN according to the IEEE 754 standard.
fn isNan(x : f32) -> bool {
bool ones_exp = (bitcast<u32>(x) & 0x7f8) == 0x7f8;
bool non_zero_sig = (bitcast<u32>(x) & 0x7ffff) != 0;
return ones_exp && non_zero_sig;
}
// ...
`;
// Enable strict math during shader compilation.
const shaderModule = device.createShaderModule({ code, strictMath: true });
GPUAdapter requestAdapterInfo() yöntemini kaldırın
GPUAdapter info
özelliğini kullanarak GPUAdapterInfo'yu zaten senkronize olarak alabildiğiniz için GPUAdapter requestAdapterInfo()
asynkron yöntemi gereksizdir. Bu nedenle, standart olmayan GPUAdapter requestAdapterInfo()
yöntemi kaldırıldı. Kaldırma niyetini öğrenin.
Şafak güncellemeleri
tint_benchmark
yürütülebilir dosyası, gölgelendiricilerin WGSL'den her arka uç diline çevrilmesinin maliyetini ölçer. Bu konu hakkında daha fazla bilgi edinmek için yeni dokümanlara göz atın.
Bunlar, öne çıkan özelliklerden yalnızca bazılarıdır. Kapsamlı commit listesine göz atın.
WebGPU'daki Yenilikler
WebGPU'daki Yenilikler serisinde ele alınan her şeyin listesi.
Chrome 131
- WGSL'de mesafeleri kırpma
- GPUCanvasContext getConfiguration()
- Nokta ve çizgi primitiflerinde derinlik önyargısı olmamalıdır
- Alt gruplar için kapsayıcı tarama yerleşik işlevleri
- Çoklu çizim için deneysel destek
- Shader modülü derleme seçeneği katı matematik
- GPUAdapter requestAdapterInfo() yöntemini kaldırın
- Gün doğumu güncellemeleri
Chrome 130
- Çift kaynak karıştırma
- Metal'de gölgelendirici derleme süresiyle ilgili iyileştirmeler
- GPUAdapter requestAdapterInfo() desteğinin sonlandırılması
- Gün doğumu güncellemeleri
Chrome 129
Chrome 128
- Alt gruplarla deneme yapma
- Çizgiler ve noktalar için derinlik önyargısı ayarının desteği sonlandırıldı
- preventDefault ise yakalanmayan hata DevTools uyarısını gizleme
- WGSL, önce örneklemeyi enterpolasyona tabi tutar ve ardından
- Dawn güncellemeleri
Chrome 127
- Android'de OpenGL ES için deneysel destek
- GPUAdapter bilgi özelliği
- WebAssembly birlikte çalışabilirlik iyileştirmeleri
- İyileştirilmiş komut kodlayıcı hataları
- 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ölgelendirme derleme zamanı iyileştirmeleri
- Gönderilen komut arabellekleri benzersiz olmalıdır
- Gün doğumu 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 bağdaştırıcı bilgi özellikleri
- Hata düzeltmeleri
- Dawn güncellemeleri
Chrome 123
- WGSL'de DP4a yerleşik işlev 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 unsurları için ayrı salt okunur durum
- Gün doğumu 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'ta gölgelendirici derleme için FXC yerine DXC kullanma
- İşleme ve oluşturma geçişlerinde zaman damgası sorguları
- Gölgelendirici modüllerinin varsayılan giriş noktaları
- GPUExternalTexture renk alanı olarak display-p3 desteği
- 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 şablonu durumunda yapılan değişiklikler
- Bağdaştırıcı bilgisi güncellemeleri
- Zaman damgası sorgularının nicelenmesi
- Bahar temizliği özellikleri
Chrome 119
- Filtrelenebilir 32 bit kayan noktalı dokular
- unorm10-10-10-2 tepe noktası biçimi
- rgb10a2uint doku biçimi
- Dawn güncellemeleri
Chrome 118
copyExternalImageToTexture()
'te HTMLImageElement ve ImageData desteği- Okuma/yazma ve salt okuma 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
- Gün doğumu 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- Spesifikasyona uygunluk
- 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 sürümü
- JavaScript'i optimize edin
- Yapılandırılmamış kanvasta getCurrentTexture() InvalidStateError hatası veriyor
- WGSL ile ilgili güncellemeler
- Gün doğumu güncellemeleri