Gepubliceerd: 8 januari 2025
Gebruik van textuurweergave
GPU-textuurweergaven nemen momenteel alle gebruiksvlaggen over van hun bron-GPU-textuur. Dit kan problematisch zijn, omdat sommige weergaveformaten niet compatibel zijn met bepaalde toepassingen. 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 opgeven die compatibel zijn met het gekozen weergaveformaat.
Deze wijziging maakt voorafgaande validatie en meer gedetailleerde controle over hoe de weergave wordt gebruikt mogelijk. Het sluit ook aan bij andere grafische API's waar gebruiksvlaggen veelgebruikte parameters zijn bij het maken van weergaven, wat mogelijkheden voor optimalisatie biedt.
Zie het volgende fragment, de chromestatus-invoer 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 kleurbandartefacten te voorkomen. Bijvoorbeeld bij wetenschappelijke visualisatie.
De nieuwe "float32-blendable"
GPU-functie maakt GPU-texturen met de formaten "r32float"
, "rg32float"
en "rgba32float"
blendable. Het is nu mogelijk om een renderpijplijn te creëren die blending gebruikt met elke float32-formaatbijlage bij het aanvragen van een GPU-apparaat met deze functie.
Zie het volgende fragment, de chromestatus-invoer 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
kenmerk
Het is belangrijk voor bibliotheken die GPUDevice
-objecten van de gebruiker gebruiken om toegang te krijgen tot informatie over de fysieke GPU, omdat ze mogelijk oplossingen moeten optimaliseren of implementeren op basis van de GPU-architectuur. Hoewel het mogelijk is om toegang te krijgen tot deze informatie via het GPUAdapter
-object, is er geen directe manier om deze informatie alleen van een GPUDevice
te verkrijgen. Dit kan onhandig zijn, omdat gebruikers mogelijk aanvullende informatie moeten opgeven naast het GPUDevice
.
Om dit probleem op te lossen, wordt GPUAdapterInfo
nu weergegeven via het adapterInfo
kenmerk GPUDevice
. Deze zijn vergelijkbaar met het bestaande GPUAdapter
info
-kenmerk.
Zie het volgende fragment, de chromestatus-invoer 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 ongeldige indeling levert een JavaScript-fout op
Voorheen resulteerde het gebruik van een ongeldige textuurindeling met de configure()
-methode van de GPU-canvascontext in een GPU-validatiefout. Dit is gewijzigd en genereert nu een JavaScript TypeError
. Dit voorkomt scenario's waarin getCurrentTexture()
een geldige GPU-textuur retourneert, ondanks dat de GPU-canvascontext onjuist is geconfigureerd. Meer informatie is te vinden in issue 372837859 .
Filteren van samplerbeperkingen op texturen
Het gebruik van texturen in de formaten "sint"
, "uint"
en " depth"
met filterende samples was voorheen toegestaan. Het staat nu correct het gebruik van een "sint"
of "uint"
-textuur met een filterende sampler niet toe. Merk op dat er momenteel een waarschuwing wordt weergegeven als u een " depth"
-textuur met een filterende sampler gebruikt, aangezien dit in de toekomst niet meer is toegestaan. 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. Spec 4952 bevat een voorstel dat wordt overwogen om deze beperking in de toekomst aan te pakken.
Uitgebreide subgroepsexperimenten
De experimenten met de subgroepen , die aanvankelijk zouden eindigen in Chrome 131, zijn uitgebreid naar Chrome 133 en eindigen op 16 april 2025. Hoewel de eerste proef zich richtte op prestaties, ontbraken er cruciale overdraagbaarheidsmaatregelen . Deze maatregelen worden nu toegevoegd, wat mogelijk fouten in bestaande code veroorzaakt.
Verbetering van de ontwikkelaarservaring
Er is nu een waarschuwing zichtbaar in DevTools wanneer de optie powerPreference
wordt gebruikt met requestAdapter()
op Windows. Deze waarschuwing wordt verwijderd wanneer Chrome weet hoe twee verschillende GPU's moeten worden gebruikt en de resultaten tussen deze GPU's moeten worden samengesteld. Zie probleem 369219127 .
De grootte van de GPU-buffer wordt nu weergegeven in de foutmelding bij het aanmaken van een te grote GPU-buffer. Zie probleem 374167798 .
Experimentele ondersteuning voor 16-bits genormaliseerde textuurformaten
16-bit signed genormaliseerde en unsigned genormaliseerde textuurformaten zijn nu experimenteel beschikbaar achter respectievelijk de GPU-functies "chromium-experimental-snorm16-texture-formats"
en "chromium-experimental-unorm16-texture-formats"
terwijl er discussie is over standaardisatie .
Deze functies voegen ondersteuning toe voor 16-bits genormaliseerde textuurformaten met COPY_SRC
, COPY_DST
, TEXTURE_BINDING
, RENDER_ATTACHMENT
-gebruik, multisampling en resolutiemogelijkheden. De aanvullende formaten zijn "r16unorm"
, "rg16unorm"
, "rgba16unorm"
, "r16snorm"
, "rg16snorm"
en "rgba16snorm"
.
Totdat deze experimentele functies gestandaardiseerd zijn, schakelt u de vlag 'Ondersteuning voor onveilige WebGPU' in op 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 probleem 368672123 .
De webgpu.h C API heeft alle char const *
gewijzigd in een WGPUStringView
-structuur die een weergave definieert in een UTF-8-gecodeerde string. Deze structuur fungeert als een pointer naar de data van de string, gekoppeld aan een lengte. Hierdoor kunt u met delen van een string werken zonder deze te hoeven kopiëren. Zie issue 42241188 .
Dit behandelt slechts enkele van de belangrijkste hoogtepunten. Bekijk de volledige lijst met commits .
Wat is er nieuw in WebGPU
Een lijst met alles wat in de serie Wat is er nieuw in WebGPU is behandeld.
Chroom 140
- Apparaatverzoeken verbruiken adapter
- Afkorting voor het gebruik van textuur waar textuurweergave wordt gebruikt
- WGSL textureSampleLevel ondersteunt 1D-texturen
- Verouder het gebruik van bgra8unorm-alleen-lezen-opslagtextuur
- GPUAdapter isFallbackAdapter-kenmerk verwijderen
- Dawn-updates
Chroom 139
- 3D-textuurondersteuning voor gecomprimeerde BC- en ASTC-formaten
- Nieuwe functie 'kernfuncties en beperkingen'
- Origin-proefversie voor WebGPU-compatibiliteitsmodus
- Dawn-updates
Chroom 138
- Afkorting voor het gebruik van buffer als bindingsbron
- Wijzigingen in de groottevereisten voor buffers die bij het aanmaken in kaart zijn gebracht
- Architectuurrapport voor recente GPU's
- Verouder GPUAdapter isFallbackAdapter-kenmerk
- Dawn-updates
Chroom 137
- Gebruik textuurweergave voor externe textuurbinding
- Buffers kopiëren zonder offsets en grootte op te geven
- WGSL-werkgroepUniformLoad met behulp van een pointer naar atomaire
- GPUAdapterInfo powerPreference-kenmerk
- Verwijder GPURequestAdapterOptions compatibilityMode-kenmerk
- Dawn-updates
Chroom 136
- GPUAdapterInfo isFallbackAdapter-kenmerk
- Verbeteringen in de shadercompilatietijd op D3D12
- Canvasafbeeldingen opslaan en kopiëren
- Beperkingen voor de liftcompatibiliteitsmodus
- Dawn-updates
Chroom 135
- Toestaan om pijplijnlay-out te maken met een lay-out voor null-bindgroepen
- Laat viewports zich uitstrekken voorbij de grenzen van de renderdoelen
- Gemakkelijkere toegang tot de experimentele compatibiliteitsmodus op Android
- Verwijder maxInterStageShaderComponents-limiet
- Dawn-updates
Chroom 134
- Verbeter machine learning-workloads met subgroepen
- Verwijder float-filterbare textuurtypen die ondersteuning bieden als mengbaar
- Dawn-updates
Chroom 133
- Extra unorm8x4-bgra en 1-component vertex-formaten
- Toestaan dat onbekende limieten worden aangevraagd met een ongedefinieerde waarde
- Wijzigingen in de WGSL-uitlijningsregels
- WGSL-prestatiewinst met weggooien
- Gebruik VideoFrame displaySize voor externe texturen
- Verwerk afbeeldingen met niet-standaardoriëntaties met copyExternalImageToTexture
- Verbetering van de ontwikkelaarservaring
- Compatibiliteitsmodus inschakelen met featureLevel
- Opschonen van experimentele subgroepkenmerken
- Verouder maxInterStageShaderComponents-limiet
- Dawn-updates
Chroom 132
- Gebruik van textuurweergave
- 32-bits float-texturen mengen
- GPUDevice adapterInfo-kenmerk
- Het configureren van de canvascontext met een ongeldige indeling levert een JavaScript-fout op
- Filteren van samplerbeperkingen op texturen
- Uitgebreide subgroepsexperimenten
- Verbetering van de ontwikkelaarservaring
- Experimentele ondersteuning voor 16-bits genormaliseerde textuurformaten
- Dawn-updates
Chroom 131
- Clipafstanden in WGSL
- GPUCanvasContext getConfiguration()
- Punt- en lijnprimitieven mogen geen dieptebias hebben
- Inclusief ingebouwde scanfuncties voor subgroepen
- Experimentele ondersteuning voor multi-draw indirect
- Shadermodule-compilatieoptie strikte wiskunde
- GPUAdapter requestAdapterInfo() verwijderen
- Dawn-updates
Chroom 130
- Menging van dubbele bronnen
- Verbeteringen in de shadercompilatietijd op Metal
- Veroudering van GPUAdapter requestAdapterInfo()
- Dawn-updates
Chroom 129
Chroom 128
- Experimenteren met subgroepen
- Diepteafwijking voor lijnen en punten afschaffen
- Verberg niet-vastgelegde fout DevTools-waarschuwing als preventDefault
- WGSL interpoleert eerst de bemonstering en ofwel
- Dawn-updates
Chroom 127
- Experimentele ondersteuning voor OpenGL ES op Android
- GPUAdapter info-kenmerk
- Verbeteringen in WebAssembly-interoperabiliteit
- Verbeterde opdrachtencoderfouten
- Dawn-updates
Chroom 126
- Verhoog maxTextureArrayLayers-limiet
- Bufferuploadoptimalisatie voor Vulkan-backend
- Verbeteringen in de compilatietijd van shaders
- Ingediende opdrachtbuffers moeten uniek zijn
- Dawn-updates
Chroom 125
Chroom 124
- Alleen-lezen en lees-schrijf opslagtexturen
- Ondersteuning van servicemedewerkers en gedeelde werknemers
- Nieuwe adapterinformatie-attributen
- Bugfixes
- Dawn-updates
Chroom 123
- Ondersteuning voor ingebouwde DP4a-functies in WGSL
- Onbeperkte pointerparameters in WGSL
- Syntaxissuiker voor het derefereren van composieten in WGSL
- Afzonderlijke alleen-lezenstatus voor stencil- en diepteaspecten
- Dawn-updates
Chroom 122
- Vergroot het bereik met de compatibiliteitsmodus (functie in ontwikkeling)
- Verhoog de maxVertexAttributes-limiet
- Dawn-updates
Chroom 121
- Ondersteuning voor WebGPU op Android
- Gebruik DXC in plaats van FXC voor shadercompilatie op Windows
- Tijdstempelquery's in compute- en renderpassen
- Standaard toegangspunten tot shadermodules
- Ondersteuning display-p3 als GPUExternalTexture-kleurruimte
- Geheugenstapels info
- Dawn-updates
Chroom 120
- Ondersteuning voor 16-bits drijvende-kommawaarden in WGSL
- Verleg de grenzen
- Wijzigingen in de dieptestencilstatus
- Adapterinformatie-updates
- Kwantificering van tijdstempelquery's
- Voorjaarsschoonmaakfuncties
Chroom 119
- Filterbare 32-bits float-texturen
- unorm10-10-10-2 vertex-formaat
- rgb10a2uint textuurformaat
- Dawn-updates
Chroom 118
- HTMLImageElement en ImageData-ondersteuning in
copyExternalImageToTexture()
- Experimentele ondersteuning voor lees-schrijf- en alleen-lezen-opslagtextuur
- Dawn-updates
Chroom 117
- Vertexbuffer ongedaan maken
- Bindgroep ongedaan maken
- Fouten bij het maken van een asynchrone pijplijn uitschakelen wanneer het apparaat verloren gaat
- Updates voor het maken van SPIR-V shadermodules
- Verbetering van de ontwikkelaarservaring
- Caching-pipelines met automatisch gegenereerde lay-out
- Dawn-updates
Chroom 116
- WebCodecs-integratie
- Verloren apparaat geretourneerd door GPUAdapter
requestDevice()
- Zorg ervoor dat de videoweergave vloeiend blijft als
importExternalTexture()
wordt aangeroepen - Specificatieconformiteit
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chroom 115
- Ondersteunde WGSL-taalextensies
- Experimentele ondersteuning voor Direct3D 11
- Standaard discrete GPU op netstroom
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chroom 114
- JavaScript optimaliseren
- getCurrentTexture() op een niet-geconfigureerd canvas genereert InvalidStateError
- WGSL-updates
- Dawn-updates