WGSL fragment_depth-extensie
In render-passes met veel geometrie zijn early-Z-optimalisaties de beste vriend van ontwikkelaars. Ze zorgen voor een enorme prestatieboost door de GPU verborgen pixels te laten weggooien voordat dure fragment-shaders worden uitgevoerd. Als een gerasterde diepte de dieptetest niet doorstaat, slaat de GPU de fragment-shader helemaal over, op voorwaarde dat de shader geen andere bijwerkingen heeft.
Als je wilt weten hoe hardware hiermee omgaat, heeft MJP een uitstekend artikel geschreven over When Does Early-Z Have to be Disabled?.
Hoewel aangepaste dieptemanipulatie nuttig is, brengt het gebruik ervan in je fragment-shader een verborgen belasting met zich mee. Als je naar @builtin(frag_depth) schrijft in een fragment-shader, dwing je stuurprogramma's meestal om deze vroege Z-optimalisaties uit te zetten voor de hele tekenaanroep. Dit gebeurt omdat heuristieken van stuurprogramma's niet kunnen garanderen dat de berekende uitvoerdiepte van de shader overeenkomt met de diepte die is geïnterpoleerd door de rasterizer.
Om deze prestatiebeperking op te lossen, kun je met de WGSL-extensie fragment_depth een less- of greater-dieptemodusnaam opgeven op @builtin(frag_depth) om expliciet aan te geven hoe de geschreven diepte zich verhoudt tot de geïnterpoleerde diepte. Zo kan de GPU veilig vroege Z-optimalisaties toepassen.
Deze taalextensie kan worden gedetecteerd in JavaScript met navigator.gpu.wgslLanguageFeatures. We raden je aan een requires-instructie te gebruiken om de mogelijkheid van niet-overdraagbaarheid aan te geven met requires fragment_depth; bovenaan je WGSL-shadercode. Bekijk het volgende voorbeeld en de intentie om te verzenden.
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;
}`,
});
Textuurcompressie niet uitgelijnd
Met de GPU-functie texture-compression-unaligned kun je gecomprimeerde texturen maken met afmetingen die geen gehele veelvouden van de blokgrootte zijn (zoals 4x4 voor de indelingen BC, ETC2 en ASTC). Eerder vereiste WebGPU strikt dat textuurgrootten overeenkwamen met deze blokgrenzen. Omdat je texturen niet meer hoeft op te vullen of te schalen om ze aan te passen aan blokuitlijningen, behoudt deze functie de oorspronkelijke compressiegetrouwheid zonder schaalvervorming te introduceren. Bekijk de intentie tot verzending.
Het volgende codefragment controleert of de adapter niet-uitgelijnde textuurcompressie ondersteunt en vraagt, indien beschikbaar, een apparaat aan dat dit ondersteunt.
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"],
});
Met dank aan externe bijdrager Ignacio Castaño van spark.js voor het aansturen van deze functie, specificatie en CTS-werk.
srgb-linear en display-p3-linear kleurruimtes
Met de toevoeging van de vooraf gedefinieerde kleurruimtes srgb-linear en display-p3-linear kan de WebGPU-canvascontext nu rechtstreeks worden gerenderd in lineaire kleurruimtes met een uitgebreid bereik om schermen met een breed kleurengamma te ondersteunen. Deze kleurruimten behouden een lineaire relatie tussen pixelwaarden en fysieke luminantie. Daardoor zijn ze ideaal voor fysieke lichtrendering in games en ruimtelijke verwerkingstaken zoals anti-aliasing, interpolatie en decimering. Bekijk de intentie om te verzenden en het voorbeeld van Particles (HDR) PR #574.
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",
});
Aanvullende snorm10-10-10-2-vertexindeling
De vertexindeling snorm10-10-10-2 is een verpakte 32-bits indeling met 4 genormaliseerde waarden met teken: 3 10-bits componenten (r, g, b) en 1 2-bits component (a). Met deze indeling kun je kenmerken, zoals 3D-normale vectoren met een extra 2-bits scalaire of uitlijningsvlag, efficiënt opslaan terwijl je geheugenbandbreedte bespaart. Ga naar spec PR 6491.
f16-ondersteuning op Linux voor NVIDIA
De optionele functie shader-f16, die ondersteuning biedt voor 16-bits zwevende-kommawaarden in WGSL, wordt nu ondersteund op Linux voor recente NVIDIA GPU-stuurprogramma's. Ga naar probleem chromium:42251215.
Updates voor Dawn
Je kunt nu de LUID van de onderliggende DXGIAdapter voor een bepaalde GPU-adapter opvragen met de structuur WGPUAdapterPropertiesD3D. Ga naar probleem chromium:562849566.
Dit zijn enkele van de belangrijkste hoogtepunten. Check de volledige lijst met commits.
Wat is er nieuw in WebGPU?
Een lijst met alles wat is behandeld in de serie Wat is er nieuw in WebGPU.
Chrome 155-156
- WGSL fragment_depth-extensie
- Textuurcompressie niet uitgelijnd
- Kleurruimtes srgb-linear en display-p3-linear
- Aanvullende snorm10-10-10-2-vertexindeling
- f16-ondersteuning op Linux voor NVIDIA
- Updates voor Dawn
Chrome 153-154
- WGSL buffer_view-extensie
- WGSL swizzle_assignment-extensie
- Updates voor WGSL-extensies
- Updates voor Dawn
Chrome 151-152
Chrome 149-150
Chrome 147-148
Chrome 146
- Ondersteuning voor de WebGPU-compatibiliteitsmodus op OpenGL ES 3.1
- Tijdelijke bijlagen
- WGSL texture_and_sampler_let-extensie
- Updates voor Dawn
Chrome 145
- WGSL-extensie subgroup_uniformity
- Experimentele synchrone buffertoewijzing in workers
- Updates voor Dawn
Chrome 144
- WGSL subgroup_id-extensie
- WGSL uniform_buffer_standard_layout-extensie
- WebGPU op Linux
- Snellere writeBuffer en writeTexture
- Updates voor Dawn
Chrome 143
- Swizzle van textuurcomponent
- Gebruik van bgra8unorm-opslagtextuur met alleen-lezenrechten verwijderen
- Updates voor Dawn
Chrome 142
Chrome 141
- Tint IR afgerond
- Analyse van bereik van gehele getallen in WGSL-compiler
- SPIR-V 1.4-update voor Vulkan-backend
- Updates voor Dawn
Chrome 140
- Adapter voor apparaatverzoeken
- Korte notatie voor het gebruik van textuur waar textuurweergave wordt gebruikt
- WGSL textureSampleLevel ondersteunt 1D-texturen
- Gebruik van bgra8unorm-opslagtextuur met alleen-lezenrechten beëindigen
- GPUAdapter-kenmerk isFallbackAdapter verwijderen
- Updates voor Dawn
Chrome 139
- Ondersteuning voor 3D-textuur voor gecomprimeerde BC- en ASTC-indelingen
- Nieuwe functie core-features-and-limits
- Origin trial voor WebGPU-compatibiliteitsmodus
- Updates voor Dawn
Chrome 138
- Shorthand for using buffer as a binding resource
- Wijzigingen in de groottevereisten voor buffers die zijn toegewezen bij het maken
- Architectuurrapport voor recente GPU's
- GPUAdapter-kenmerk isFallbackAdapter beëindigen
- Updates voor Dawn
Chrome 137
- Textuurweergave gebruiken voor externalTexture-binding
- Buffers kopiëren zonder offsets en grootte te specificeren
- WGSL workgroupUniformLoad met pointer naar atomic
- Kenmerk powerPreference van GPUAdapterInfo
- Kenmerk compatibilityMode van GPURequestAdapterOptions verwijderen
- Updates voor Dawn
Chrome 136
- GPUAdapterInfo-kenmerk isFallbackAdapter
- Verbeteringen in de compilatietijd van shaders op D3D12
- Canvasafbeeldingen opslaan en kopiëren
- Beperkingen voor de compatibiliteitsmodus opheffen
- Updates voor Dawn
Chrome 135
- Het maken van een pipeline-indeling met een null-bindgroeplay-out toestaan
- Toestaan dat viewports de grenzen van de weergavedoelen overschrijden
- Makkelijkere toegang tot de experimentele compatibiliteitsmodus op Android
- Limiet maxInterStageShaderComponents verwijderen
- Updates voor Dawn
Chrome 134
- Machinelearning-workloads verbeteren met subgroepen
- Ondersteuning voor filterbare float-textuurtypen verwijderen als mengbaar
- Updates voor Dawn
Chrome 133
- Aanvullende unorm8x4-bgra- en 1-component vertex-indelingen
- Toestaan dat onbekende limieten worden aangevraagd met een ongedefinieerde waarde
- Wijzigingen in de WGSL-uitlijningsregels
- WGSL-prestatieverbeteringen met discard
- VideoFrame displaySize gebruiken voor externe texturen
- Afbeeldingen met niet-standaard standen verwerken met copyExternalImageToTexture
- De ontwikkelaarservaring verbeteren
- Compatibiliteitsmodus aanzetten met featureLevel
- Experimental subgroup features cleanup
- Limiet maxInterStageShaderComponents beëindigen
- Updates voor Dawn
Chrome 132
- Gebruik van textuurweergave
- 32-bits float-texturen mengen
- GPUDevice adapterInfo-kenmerk
- Als je de canvascontext instelt met een ongeldige indeling, wordt er een JavaScript-fout geactiveerd
- Beperkingen voor filteringsampler voor texturen
- Uitgebreide experimenten met subgroepen
- De ontwikkelaarservaring verbeteren
- Experimentele ondersteuning voor genormaliseerde 16-bits textuurindelingen
- Updates voor Dawn
Chrome 131
- Afstanden knippen in WGSL
- GPUCanvasContext getConfiguration()
- Punt- en lijnprimitieven mogen geen dieptebias hebben
- Ingebouwde functies voor inclusieve scans voor subgroepen
- Experimentele ondersteuning voor indirecte multi-draw
- Compilatieoptie voor shader-module: strikte wiskunde
- GPUAdapter requestAdapterInfo() verwijderen
- Updates voor Dawn
Chrome 130
- Mengen van 2 bronnen
- Verbeteringen in de compilatietijd van shaders in Metal
- Beëindiging van GPUAdapter requestAdapterInfo()
- Updates voor Dawn
Chrome 129
- HDR-ondersteuning met de modus voor tinttoewijzing van canvas
- Uitgebreide ondersteuning voor subgroepen
- Updates voor Dawn
Chrome 128
- Experimenteren met subgroepen
- Dieptebias instellen voor lijnen en punten wordt beëindigd
- DevTools-waarschuwing voor niet-vastgelegde fout verbergen als preventDefault
- WGSL interpolate sampling first and either
- Updates voor Dawn
Chrome 127
- Experimentele support voor OpenGL ES op Android
- GPUAdapter-kenmerk info
- Verbeteringen in de interoperabiliteit van WebAssembly
- Verbeterde fouten in de opdrachtcoderingsfunctie
- Updates voor Dawn
Chrome 126
- De limiet voor maxTextureArrayLayers verhogen
- Optimalisatie van bufferupload voor Vulkan-backend
- Verbeteringen in de compilatietijd van shaders
- Ingediende opdrachtbuffers moeten uniek zijn
- Updates voor Dawn
Chrome 125
Chrome 124
- Alleen-lezen en lezen/schrijven-opslagtexturen
- Ondersteuning voor serviceworkers en gedeelde workers
- Nieuwe kenmerken voor adapterinformatie
- Bug fixes
- Updates voor Dawn
Chrome 123
- Ondersteuning voor ingebouwde DP4a-functies in WGSL
- Onbeperkte pointerparameters in WGSL
- Syntactische suiker voor het derefereren van composieten in WGSL
- Afzonderlijke alleen-lezen status voor stencil- en diepteaspecten
- Updates voor Dawn
Chrome 122
- Bereik uitbreiden met de compatibiliteitsmodus (functie in ontwikkeling)
- Limiet voor maxVertexAttributes verhogen
- Updates voor Dawn
Chrome 121
- WebGPU ondersteunen op Android
- DXC gebruiken in plaats van FXC voor shadercompilatie in Windows
- Tijdstempelquery's in berekenings- en weergavefasen
- Standaard toegangspunten tot shader-modules
- Ondersteuning voor display-p3 als GPUExternalTexture-kleurruimte
- Informatie over geheugenheaps
- Updates voor Dawn
Chrome 120
- Ondersteuning voor 16-bits zwevende-kommawaarden in WGSL
- Verleg je grenzen
- Wijzigingen in de dieptestencilstatus
- Updates van adapterinformatie
- Kwantisering van tijdstempelquery's
- Functies voor de voorjaarsschoonmaak
Chrome 119
- Filterbare 32-bits float-texturen
- unorm10-10-10-2 vertex-indeling
- rgb10a2uint-textuurindeling
- Updates voor Dawn
Chrome 118
- Ondersteuning voor HTMLImageElement en ImageData in
copyExternalImageToTexture() - Experimentele ondersteuning voor opslagtexturen met lees- en schrijfrechten en alleen-lezenrechten
- Updates voor Dawn
Chrome 117
- Vertexbuffer niet ingesteld
- Bindingsgroep ongedaan maken
- Fouten negeren bij het maken van een asynchrone pipeline als het apparaat verloren is gegaan
- Updates voor het maken van SPIR-V-shadermodules
- De ontwikkelaarservaring verbeteren
- Caching-pipelines met automatisch gegenereerde indeling
- Updates voor Dawn
Chrome 116
- WebCodecs-integratie
- Verloren apparaat geretourneerd door GPUAdapter
requestDevice() - Zorg dat de video vloeiend wordt afgespeeld als
importExternalTexture()wordt aangeroepen - Overeenstemming met specificaties
- De ontwikkelaarservaring verbeteren
- Updates voor Dawn
Chrome 115
- Ondersteunde WGSL-taalextensies
- Experimentele ondersteuning voor Direct3D 11
- Standaard een discrete GPU krijgen bij netvoeding
- De ontwikkelaarservaring verbeteren
- Updates voor Dawn
Chrome 114
- JavaScript optimaliseren
- getCurrentTexture() op niet-geconfigureerd canvas retourneert InvalidStateError
- WGSL-updates
- Updates voor Dawn