WGSL'de kırpma mesafeleri
Kırpma mesafeleri, köşe aşamasının çıkışında kullanıcı tanımlı yarım boşluklarla temel öğelerin kırpma hacmini kısıtlamanıza olanak tanır. Kendi kırpma düzlemlerinizi tanımlamak, WebGPU sahnelerinizde görünür olanlar üzerinde daha fazla kontrol sağlar. Bu teknik, özellikle görselleştirme üzerinde hassas kontrolün çok önemli olduğu CAD yazılımları gibi uygulamalar için faydalıdır.
"clip-distances"
özelliği bir GPUAdapter'da kullanılabildiğinde, WGSL'de kırpma mesafesi desteği almak için bu özelliği içeren bir GPUDevice isteyin ve enable clip_distances;
ile bu uzantıyı WGSL kodunuzda açıkça etkinleştirin. Etkinleştirildikten sonra, köşe gölgelendiricinizde clip_distances
yerleşik diziyi kullanabilirsiniz. Bu dizi, kullanıcı tanımlı bir kırpma düzlemine olan mesafeleri içerir:
- 0 olan bir kırpma mesafesi, köşe noktasının düzlem üzerinde olduğu anlamına gelir.
- Pozitif mesafe, köşe noktasının kırpma yarı alanının içinde (tutmak istediğiniz taraf) olduğunu gösterir.
- Negatif uzaklık, köşe noktasının kırpma yarı alanının dışında (atmak istediğiniz taraf) olduğu anlamına gelir.
Aşağıdaki snippet'e, chromestatus girişine 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. device
, format
, usage
, viewFormats
, colorSpace
, toneMapping
ve alphaMode
üyeleri dahildir. Bu, Parçacıklar (HDR) örneğinde gösterildiği gibi tarayıcının HDR tuvali destekleyip desteklemediğini kontrol etme gibi görevler için kullanışlıdır. Aşağıdaki snippet'e, chromestatus girişine ve 370109829 numaralı soruna bakın.
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 öğelerinde derinlik önyargısı olmamalıdır.
Daha önce duyurulduğu gibi, WebGPU spesifikasyonu artık bir oluşturma işlem hattının topolojisi bir çizgi veya nokta türü olduğunda depthBias
, depthBiasSlopeScale
ve depthBiasClamp
değerlerinin sıfır olmayan bir değere ayarlanmasını doğrulama hatası olarak kabul ediyor. 352567424 numaralı soruna bakın.
Alt gruplar için kapsayıcı tarama yerleşik işlevleri
Alt gruplarla ilgili deneme kapsamında, 361330160 numaralı sorunda aşağıdaki alt grup yerleşik işlevleri eklenmiştir:
subgroupInclusiveAdd(value)
: Alt gruptaki tüm etkin çağrılarınvalue
kapsayıcı tarama toplamını döndürür.subgroupInclusiveMul(value)
: Alt gruptaki tüm etkin çağırma işlemlerininvalue
kapsayıcı tarama çarpımını döndürür.
Çoklu çekme dolaylı için deneysel destek
Çoklu çizim dolaylı GPU özelliği, tek bir GPU komutuyla birden fazla çizim çağrısı yapmanıza olanak tanır. Bu özellik, özellikle parçacık sistemleri, örnekleme ve büyük sahneler gibi çok sayıda nesnenin oluşturulması gereken durumlarda yararlıdır. drawIndirect()
ve drawIndexedIndirect()
GPURenderPassEncoder yöntemleri, GPU arabelleğinin belirli bir bölgesinden tek seferde yalnızca tek bir çizim çağrısı yayınlayabilir.
Bu deneysel özellik standartlaştırılana kadar Chrome'da kullanılabilmesi için chrome://flags/#enable-unsafe-webgpu
adresinde "Unsafe WebGPU Support" (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ği içeren bir GPUDevice isteyin. Ardından, çizim çağrılarını depolamak için GPUBufferUsage.INDIRECT
kullanımıyla bir GPUBuffer oluşturun. Daha sonra, oluşturma geçişi içinde çizim çağrıları yayınlamak için yeni multiDrawIndirect()
ve multiDrawIndexedIndirect()
GPURenderPassEncoder yöntemlerinde 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();
Shader modülü derleme seçeneği strict math
GPUShaderModuleDescriptor'a, gölgelendirici modülü derleme sırasında katı matematik işlemlerini etkinleştirmenize veya devre dışı bırakmanıza olanak tanıyan bir boolean strictMath
geliştirici seçeneği eklendi. Bu özellik, chrome://flags/#enable-webgpu-developer-features
adresindeki "WebGPU Developer Features" (WebGPU Geliştirici Özellikleri) işaretinin arkasında bulunur. Bu nedenle, yalnızca geliştirme sırasında kullanılmak üzere tasarlanmıştır. 42241455 numaralı soruna bakın.
Bu seçenek şu anda Metal ve Direct3D'de desteklenmektedir. Kesin matematik devre dışı bırakıldığında derleyici, gölgelendiricilerinizi şu şekilde optimize edebilir:
- NaN ve Infinity değerlerinin olasılığını yoksayma.
- -0, +0 olarak değerlendirilir.
- Bölme işlemini, karşılıklı çarpma işlemiyle değiştirme.
- Birleşme ve dağılma özelliklerine göre işlemleri 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önteminin kaldırılması
GPUAdapter requestAdapterInfo()
eşzamansız yöntemi gereksizdir. Çünkü GPUAdapter info
özelliğini kullanarak GPUAdapterInfo'yu eşzamanlı olarak alabilirsiniz. Bu nedenle, standart olmayan GPUAdapter requestAdapterInfo()
yöntemi artık kaldırıldı. Kaldırma amacı başlıklı makaleyi inceleyin.
Dawn güncellemeleri
tint_benchmark
yürütülebilir dosyası, gölgelendiricilerin WGSL'den her arka uç diline çevrilmesinin maliyetini ölçer. Bu özellik hakkında daha fazla bilgi edinmek için yeni belgelere göz atın.
Bu özet yalnızca önemli noktalardan bazılarını kapsar. Kapsamlı commit listesine göz atın.
WebGPU'daki yenilikler
WebGPU'daki Yenilikler serisinde ele alınan her şeyin listesi.
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ırın
- Dawn ile ilgili güncellemeler
Chrome 139
- BC ve ASTC sıkıştırılmış biçimleri için 3D doku desteği
- Yeni "temel özellikler ve sınırlar" özelliği
- WebGPU uyumluluk modu için kaynak denemesi
- Dawn ile ilgili güncellemeler
Chrome 138
- Arabellek bağlama kaynağı olarak kullanma için kısa yol
- Oluşturma sırasında eşlenen arabellekler için boyut şartı 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, ofset ve boyut belirtilmeden kopyalanıyor
- Atomik işaretçi kullanarak WGSL workgroupUniformLoad
- GPUAdapterInfo powerPreference özelliği
- GPURequestAdapterOptions compatibilityMode özelliğini kaldırma
- 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 ver
- Görüntü alanlarının, oluşturma hedefi sınırlarının ötesine geçmesine izin ver
- 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 ver
- WGSL hizalama kurallarındaki değişiklikler
- Silme işlemiyle WGSL performansında 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 noktalı doku 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 denemesi
- 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ı desteği (deneysel)
- Shader modülü derleme seçeneği strict math
- GPUAdapter requestAdapterInfo() yöntemini kaldırın
- 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 örneklemeyi enterpolasyon yapar ve ardından
- 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
- Komut kodlayıcı hatalarında iyileştirme
- 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ında olan bir özellik)
- 3D dokunun dilimine göre oluşturma
- Dawn ile ilgili güncellemeler
Chrome 124
- Salt okunur ve okuma-yazma depolama dokuları
- Service worker'lar ve shared worker'lar için destek
- Yeni bağdaştırıcı 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özdizimi 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 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ı zorlayın
- Derinlik-şablon durumundaki değişiklikler
- Adaptör bilgisi güncellemeleri
- Zaman damgası sorgularının nicemleme işlemi
- Bahar temizliği özellikleri
Chrome 119
- Filtrelenebilir 32 bit kayan noktalı 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
- Köşe arabelleğini ayarlamayı kaldırma
- Bağlama grubunu kaldırma
- Cihaz kaybolduğunda eşzamansız işlem hattı oluşturma işleminden kaynaklanan hataları sessize alma
- 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()
aranırsa video oynatmayı sorunsuz tutma- Spesifikasyona 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üçte 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