Gepubliceerd: 8 januari 2025
Gebruik van textuurweergave
GPU-textuurweergaven erven momenteel alle gebruiksvlaggen van hun bron-GPU-textuur. Dit kan problematisch zijn, omdat sommige weergaveformaten incompatibel zijn met bepaalde gebruikswijzen. Om dit probleem op te lossen, kunt u door createView() aan te roepen met het optionele usage expliciet een subset van de gebruiksvlaggen van de brontextuur specificeren die compatibel zijn met het gekozen weergaveformaat.
Deze wijziging maakt voorafgaande validatie en meer gedetailleerde controle over het gebruik van de weergave mogelijk. Het sluit ook aan bij andere grafische API's waar gebruiksvlaggen veelgebruikte parameters zijn bij het maken van weergaven, wat optimalisatiemogelijkheden biedt.
Zie het volgende fragment, de chromestatus-vermelding en probleem 363903526 .
const texture = myDevice.createTexture({
size: [4, 4],
format: "rgba8unorm",
usage:
GPUTextureUsage.RENDER_ATTACHMENT |
GPUTextureUsage.TEXTURE_BINDING |
GPUTextureUsage.STORAGE_BINDING,
viewFormats: ["rgba8unorm-srgb"],
});
const view = texture.createView({
format: 'rgba8unorm-srgb',
usage: GPUTextureUsage.RENDER_ATTACHMENT, // Restrict allowed usage.
});
32-bits float-texturen mengen
32-bits floating-point texturen zijn essentieel voor HDR-rendering om een breed scala aan kleurwaarden te behouden en kleurafwijkingen te voorkomen. Bijvoorbeeld in wetenschappelijke visualisaties.
De nieuwe GPU-functie "float32-blendable" maakt het mogelijk om GPU-texturen met de formaten "r32float" , "rg32float" en "rgba32float" te mengen. Het is nu mogelijk om een renderpipeline te creëren die gebruikmaakt van blending met elk type float32-texturen wanneer een GPU-apparaat met deze functie wordt aangevraagd.
Zie het volgende fragment, de chromestatus-vermelding en probleem 369649348 .
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-blendable")) {
throw new Error("32-bit float textures blending support is not available");
}
// Explicitly request 32-bit float textures blending support.
const device = await adapter.requestDevice({
requiredFeatures: ["float32-blendable"],
});
// ... Creation of shader modules is omitted for readability.
// Create a render pipeline that uses blending for the rgba32float format.
device.createRenderPipeline({
vertex: { module: myVertexShaderModule },
fragment: {
module: myFragmentShaderModule,
targets: [
{
format: "rgba32float",
blend: { color: {}, alpha: {} },
},
],
},
layout: "auto",
});
// Create the GPU texture with rgba32float format and
// send the appropriate commands to the GPU...
GPUDevice adapterInfo attribuut
Voor bibliotheken die gebruikmaken van door de gebruiker aangeleverde GPUDevice objecten is het belangrijk om toegang te hebben tot informatie over de fysieke GPU, omdat ze mogelijk optimalisaties moeten uitvoeren of oplossingen moeten implementeren op basis van de GPU-architectuur. Hoewel het mogelijk is om deze informatie via het GPUAdapter object te verkrijgen, is er geen directe manier om deze rechtstreeks van een GPUDevice te halen. Dit kan onhandig zijn, omdat gebruikers dan mogelijk aanvullende informatie naast de GPUDevice moeten verstrekken.
Om dit probleem op te lossen, wordt GPUAdapterInfo nu beschikbaar gesteld via het GPUDevice adapterInfo attribuut. Deze zijn vergelijkbaar met het bestaande GPUAdapter info attribuut.
Zie het volgende fragment, de chromestatus-vermelding en probleem 376600838 .
function optimizeForGpuDevice(device) {
if (device.adapterInfo.vendor === "amd") {
// Use AMD-specific optimizations.
} else if (device.adapterInfo.architecture.includes("turing")) {
// Optimize for NVIDIA Turing architecture.
}
}
Het configureren van de canvascontext met een ongeldig formaat veroorzaakt een JavaScript-fout.
Voorheen resulteerde het gebruik van een ongeldig textuurformaat met de configure() -methode van de GPU-canvascontext in een GPU-validatiefout. Dit is gewijzigd, zodat er nu een JavaScript TypeError wordt gegenereerd. Dit voorkomt situaties waarin getCurrentTexture() een geldige GPU-textuur retourneert, ondanks dat de GPU-canvascontext onjuist is geconfigureerd. Meer informatie is te vinden in issue 372837859 .
Beperkingen van de sampler op texturen filteren
Het gebruik van texturen in de formaten "sint" , "uint" en " depth" met filterende samples was voorheen toegestaan. Het is nu correct verboden om een textuur in het formaat "sint" of "uint" te gebruiken met een filterende sampler. Houd er rekening mee dat er momenteel een waarschuwing wordt weergegeven als u een " depth" -textuur gebruikt met een filterende sampler, omdat dit in de toekomst verboden zal worden. Zie probleem 376497143 .
Deze beperkingen betekenen dat het gebruik van een dieptetextuur met een niet-filterende sampler handmatige aanmaak van bindgroeplay-outs vereist. Dit komt doordat de automatisch gegenereerde bindgroeplay-outs deze combinatie nog niet ondersteunen. Specificatie-issue 4952 bevat een voorstel dat momenteel in behandeling is om deze beperking in de toekomst aan te pakken.
Uitgebreide subgroepsexperimenten
De experimenten met subgroepen , die aanvankelijk zouden eindigen in Chrome 131, zijn verlengd tot Chrome 133 en eindigen op 16 april 2025. Hoewel de eerste test met origin zich richtte op prestaties, ontbraken cruciale waarborgen voor portabiliteit . Deze waarborgen zullen nu worden toegevoegd, wat mogelijk fouten in bestaande code kan veroorzaken.
Verbetering van de ontwikkelaarservaring
Er verschijnt nu een waarschuwing in DevTools wanneer de optie powerPreference wordt gebruikt met requestAdapter() op Windows. Deze waarschuwing verdwijnt zodra Chrome weet hoe twee verschillende GPU's te gebruiken en de resultaten daarvan te combineren. Zie probleem 369219127 .
De grootte van de GPU-buffer wordt nu weergegeven in het foutbericht wanneer een te grote GPU-buffer wordt aangemaakt. Zie probleem 374167798 .
Experimentele ondersteuning voor 16-bits genormaliseerde textuurformaten
Experimenteel zijn nu 16-bits genormaliseerde textureformaten met teken en zonder teken beschikbaar achter respectievelijk de GPU-functies "chromium-experimental-snorm16-texture-formats" en "chromium-experimental-unorm16-texture-formats" terwijl de standaardisatie ervan wordt besproken .
Deze functies voegen ondersteuning toe voor 16-bits genormaliseerde textuurformaten met COPY_SRC , COPY_DST , TEXTURE_BINDING , RENDER_ATTACHMENT gebruik, multisampling en resolutiemogelijkheden. De extra formaten zijn "r16unorm" , "rg16unorm" , "rgba16unorm" , "r16snorm" , "rg16snorm" en "rgba16snorm" .
Totdat deze experimentele functies gestandaardiseerd zijn, kunt u de vlag "Unsafe WebGPU Support" inschakelen via chrome://flags/#enable-unsafe-webgpu om ze beschikbaar te maken in Chrome.
Zie het volgende fragment en probleem 374790898 .
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-snorm16-texture-formats")) {
throw new Error("16-bit signed normalized formats support is not available");
}
// Explicitly request 16-bit signed normalized formats support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-snorm16-texture-formats"],
});
// Create a texture with the rgba16snorm format which consists of four
// components, each of which is a 16-bit, normalized, signed integer value.
const texture = device.createTexture({
size: [4, 4],
format: "rgba16snorm",
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
// Send the appropriate commands to the GPU...
Dawn-updates
De methoden EnumerateFeatures(FeatureName * features) van wgpu::Adapter en wgpu::Device zijn verouderd en vervangen door GetFeatures(SupportedFeatures * features) . Zie issue 368672123 .
De C API van webgpu.h heeft alle char const * vervangen door een WGPUStringView -structuur die een weergave definieert van een UTF-8-gecodeerde tekenreeks. Deze structuur fungeert als een pointer naar de gegevens van de tekenreeks, in combinatie met een lengte. Hierdoor kunt u met delen van een tekenreeks werken zonder deze te hoeven kopiëren. Zie issue 42241188 .
Dit is slechts een greep uit de belangrijkste hoogtepunten. Bekijk de volledige lijst met commits .
Wat is er nieuw in WebGPU?
Een lijst van alles wat in de serie ' Wat is nieuw in WebGPU' aan bod is gekomen.
Chrome 145
Chrome 144
- WGSL subgroup_id-extensie
- WGSL uniform_buffer_standard_layout-extensie
- WebGPU op Linux
- Snellere writeBuffer en writeTexture
- Dawn-updates
Chrome 143
- Textuurcomponent swizzel
- Verwijder het gebruik van de alleen-lezen opslagtextuur bgra8unorm
- Dawn-updates
Chrome 142
Chrome 141
- Tint IR voltooid
- Analyse van gehele getallenbereiken in de WGSL-compiler
- SPIR-V 1.4-update voor Vulkan-backend
- Dawn-updates
Chrome 140
- Apparaatverzoeken verbruiken de adapter.
- Verkorte notatie voor het gebruik van texturen waar de textuurweergave wordt gebruikt.
- WGSL textureSampleLevel ondersteunt 1D-texturen.
- Het gebruik van de alleen-lezen opslagtextuur bgra8unorm wordt afgekeurd.
- Verwijder het isFallbackAdapter-attribuut van GPUAdapter.
- Dawn-updates
Chrome 139
- Ondersteuning voor 3D-texturen in de gecomprimeerde formaten BC en ASTC.
- Nieuwe functie voor "kernfuncties en -beperkingen".
- Origin-proefversie voor WebGPU-compatibiliteitsmodus
- Dawn-updates
Chrome 138
- Verkorte notatie voor het gebruik van buffer als bindingsbron.
- De vereiste grootte voor buffers die bij de aanmaak worden toegewezen, verandert.
- Architectuurrapport voor recente GPU's
- Het attribuut `isFallbackAdapter` van GPUAdapter wordt afgeschaft.
- Dawn-updates
Chrome 137
- Gebruik de textuurweergave voor het binden van externe texturen.
- Buffers kopiëren zonder specificatie van offsets en grootte.
- WGSL workgroupUniformLoad gebruikt een pointer naar een atomisch object.
- GPUAdapterInfo PowerPreference-attribuut
- Verwijder het compatibilityMode-attribuut van GPURequestAdapterOptions
- Dawn-updates
Chrome 136
- GPUAdapterInfo isFallbackAdapter-attribuut
- Verbeteringen in de compilatietijd van shaders in D3D12
- Canvasafbeeldingen opslaan en kopiëren
- Compatibiliteitsmodusbeperkingen opheffen
- Dawn-updates
Chrome 135
- Maakt het mogelijk om een pipeline-layout te creëren met een null-bindgroep-layout.
- Sta toe dat viewports buiten de grenzen van de render targets uitsteken.
- Gemakkelijkere toegang tot de experimentele compatibiliteitsmodus op Android.
- Verwijder de maxInterStageShaderComponents-limiet
- Dawn-updates
Chrome 134
- Optimaliseer machine learning-workloads met subgroepen.
- Verwijder de ondersteuning voor filterbare textuurtypen met zwevende deeltjes als mengbaar.
- Dawn-updates
Chrome 133
- Aanvullende unorm8x4-bgra- en 1-component-vertexformaten
- Sta toe dat onbekende limieten worden aangevraagd met een ongedefinieerde waarde.
- Wijzigingen in de WGSL-uitlijningsregels
- WGSL-prestatieverbeteringen met discard-effect
- Gebruik VideoFrame displaySize voor externe texturen.
- Verwerk afbeeldingen met een niet-standaardoriëntatie met behulp van copyExternalImageToTexture.
- Verbetering van de ontwikkelaarservaring
- Schakel de compatibiliteitsmodus in met featureLevel.
- Opschoning van experimentele subgroepfuncties
- De limiet maxInterStageShaderComponents wordt afgeschaft.
- Dawn-updates
Chrome 132
- Gebruik van textuurweergave
- 32-bits float-texturen mengen
- GPUDevice adapterInfo-attribuut
- Het configureren van de canvascontext met een ongeldig formaat veroorzaakt een JavaScript-fout.
- Beperkingen van de sampler op texturen filteren
- Uitgebreide subgroepsexperimenten
- Verbetering van de ontwikkelaarservaring
- Experimentele ondersteuning voor 16-bits genormaliseerde textuurformaten
- Dawn-updates
Chrome 131
- Clipafstanden in WGSL
- GPUCanvasContext getConfiguration()
- Punt- en lijnprimitieven mogen geen dieptevoorkeur hebben.
- Inclusieve scan met ingebouwde functies voor subgroepen
- Experimentele ondersteuning voor indirecte meervoudige trekking
- Shadermodule-compilatieoptie strikte wiskunde
- Verwijder GPUAdapter requestAdapterInfo()
- Dawn-updates
Chrome 130
- Mengen met twee bronnen
- Verbeteringen in de compilatietijd van shaders op Metal
- De functie GPUAdapter requestAdapterInfo() wordt afgeschaft.
- Dawn-updates
Chrome 129
Chrome 128
- Experimenteren met subgroepen
- Het instellen van dieptevoorkeur voor lijnen en punten wordt afgeraden.
- Verberg niet-vastgelegde DevTools-foutwaarschuwing als preventDefault is ingeschakeld.
- WGSL interpoleert eerst de bemonstering en of
- Dawn-updates
Chrome 127
- Experimentele ondersteuning voor OpenGL ES op Android
- GPUAdapter-info-attribuut
- Verbeteringen in de interoperabiliteit met WebAssembly
- Verbeterde fouten in de commando-encoder
- Dawn-updates
Chrome 126
- Verhoog de maxTextureArrayLayers-limiet
- Buffer-uploadoptimalisatie voor Vulkan-backend
- Verbeteringen in de compilatietijd van shaders
- De ingediende commandobuffers moeten uniek zijn.
- Dawn-updates
Chrome 125
Chrome 124
- Alleen-lezen en lees-schrijf opslagtexturen
- Ondersteuning voor servicepersoneel en deeltijdwerkers
- Nieuwe adapterinformatie-attributen
- Bugfixes
- Dawn-updates
Chrome 123
- Ondersteuning voor ingebouwde DP4a-functies in WGSL.
- Onbeperkte pointerparameters in WGSL
- Syntactische suiker voor het dereferentiëren van samengestelde typen in WGSL
- Aparte alleen-lezen-status voor stencil- en diepteaspecten
- Dawn-updates
Chrome 122
- Vergroot uw bereik met de compatibiliteitsmodus (functie in ontwikkeling).
- Verhoog de maxVertexAttributes-limiet
- Dawn-updates
Chrome 121
- WebGPU-ondersteuning op Android
- Gebruik DXC in plaats van FXC voor shadercompilatie op Windows.
- Tijdstempelquery's in de reken- en weergavefasen
- Standaard toegangspunten tot shadermodules
- Ondersteuning voor display-p3 als GPUExternalTexture-kleurruimte
- Informatie over geheugenhops
- Dawn-updates
Chrome 120
- Ondersteuning voor 16-bits drijvende-kommawaarden in WGSL
- Verleg de grenzen
- Wijzigingen in de diepte-sjabloonstatus
- Updates van adapterinformatie
- Tijdstempelquery's kwantisering
- Kenmerken van de voorjaarsschoonmaak
Chrome 119
- Filterbare 32-bits float-texturen
- unorm10-10-10-2 vertex-formaat
- rgb10a2uint textuurformaat
- Dawn-updates
Chrome 118
- Ondersteuning voor HTMLImageElement en ImageData in
copyExternalImageToTexture() - Experimentele ondersteuning voor lees-schrijf- en alleen-lezen-opslagtexturen
- Dawn-updates
Chrome 117
- Vertexbuffer niet ingesteld
- Bindingsgroep niet instellen
- Onderdruk fouten bij het aanmaken van asynchrone pipelines wanneer het apparaat verloren gaat.
- Updates over het maken van SPIR-V shader-modules
- Verbetering van de ontwikkelaarservaring
- Caching-pipelines met automatisch gegenereerde lay-out
- Dawn-updates
Chrome 116
- WebCodecs-integratie
- Verloren apparaat geretourneerd door GPUAdapter
requestDevice() - Zorg ervoor dat de videoweergave soepel blijft als
importExternalTexture()wordt aangeroepen. - conformiteit met specificaties
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chrome 115
- Ondersteunde WGSL-taalextensies
- Experimentele ondersteuning voor Direct3D 11
- De aparte grafische kaart wordt standaard ingeschakeld bij gebruik van netstroom.
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chrome 114
- Optimaliseer JavaScript
- getCurrentTexture() op een niet-geconfigureerd canvas geeft een InvalidStateError.
- WGSL-updates
- Dawn-updates