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 bepaald gebruik. Om dit probleem op te lossen, kunt u createView()
aanroepen met het optionele usage
, zodat u expliciet een subset van de gebruiksvlaggen van de brontextuur kunt opgeven die compatibel zijn met het gekozen weergaveformaat.
Deze wijziging maakt voorafgaande validatie en een nauwkeurigere controle mogelijk over hoe de weergave wordt gebruikt. Het sluit ook aan bij andere grafische API's waarbij gebruiksvlaggen algemene parameters zijn bij het maken van weergaven, wat optimalisatiemogelijkheden biedt.
Zie het volgende fragment, de chromestatus-invoer en uitgave 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 zwevende texturen mengen
32-bits drijvende-kommatexturen zijn essentieel voor HDR-weergave om een breed scala aan kleurwaarden te behouden en kleurbandartefacten te voorkomen. Bijvoorbeeld in wetenschappelijke visualisatie.
De nieuwe "float32-blendable"
GPU-functie maakt GPU-texturen met de formaten "r32float"
, "rg32float"
en "rgba32float"
mengbaar. Het maken van een renderpijplijn die gebruikmaakt van blending met elke bijlage in float32-formaat is nu mogelijk 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 dat bibliotheken die door de gebruiker geleverde GPUDevice
objecten gebruiken, toegang 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 alleen van een GPUDevice
te verkrijgen. Dit kan lastig zijn, omdat gebruikers mogelijk naast GPUDevice
aanvullende informatie moeten opgeven.
Om dit probleem op te lossen, wordt GPUAdapterInfo
nu weergegeven via het kenmerk GPUDevice
adapterInfo
. Deze zijn vergelijkbaar met het bestaande GPUAdapter
info
-attribuut.
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 canvascontext met een ongeldig formaat levert een JavaScript-fout op
Voorheen resulteerde het gebruik van een ongeldig textuurformaat met de configure()
-methode van de GPU-canvascontext in een GPU-validatiefout. Dit is gewijzigd om een JavaScript TypeError
te genereren. Dit voorkomt scenario's waarin getCurrentTexture()
een geldige GPU-textuur retourneert, ondanks dat de GPU-canvascontext onjuist is geconfigureerd. Meer informatie vindt u in nummer 372837859 .
Filteren van samplerbeperkingen op texturen
Het gebruik van texturen in de formaten "sint"
, "uint"
en " depth"
met filtermonsters was eerder toegestaan. Het staat nu correct het gebruik van een "sint"
of "uint"
formaattextuur met een filterende sampler toe. Houd er rekening mee dat er momenteel een waarschuwing wordt weergegeven als u een " depth"
-textuur gebruikt met een filterende sampler, aangezien dit in de toekomst niet meer zal worden toegestaan. Zie uitgave 376497143 .
Deze beperkingen betekenen dat het gebruik van een dieptetextuur met een niet-filterende sampler het handmatig maken van bindingsgroeplay-outs vereist. Dit komt omdat de automatisch gegenereerde bindingsgroeplay-outs deze combinatie nog niet ondersteunen. Specificatienummer 4952 bevat een voorstel dat wordt overwogen om deze beperking in de toekomst aan te pakken.
Uitgebreide experimenten met subgroepen
Het experiment met subgroepen , dat aanvankelijk zou eindigen in Chrome 131, is uitgebreid naar Chrome 133 en eindigt op 16 april 2025. Hoewel de eerste origin-proef zich richtte op prestaties, ontbrak het aan cruciale waarborgen voor draagbaarheid . Deze beveiligingen worden nu toegevoegd, waardoor mogelijk fouten in de bestaande code kunnen ontstaan.
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 hij twee verschillende GPU's moet gebruiken en de resultaten daartussen moet samenstellen. Zie uitgave 369219127 .
De grootte van de GPU-buffer is nu aanwezig in de foutmelding bij het maken van een te grote GPU-buffer. Zie uitgave 374167798 .
Experimentele ondersteuning voor 16-bits genormaliseerde textuurformaten
16-bit ondertekende genormaliseerde en niet-ondertekende genormaliseerde textuurformaten zijn nu experimenteel beschikbaar achter de GPU-functies "chromium-experimental-snorm16-texture-formats"
en "chromium-experimental-unorm16-texture-formats"
terwijl ze worden besproken voor standaardisatie .
Deze functies voegen ondersteuning toe voor 16-bits genormaliseerde textuurformaten met COPY_SRC
, COPY_DST
, TEXTURE_BINDING
, RENDER_ATTACHMENT
gebruiksmogelijkheden, multisampling en oplossingsmogelijkheden. De aanvullende formaten zijn "r16unorm"
, "rg16unorm"
, "rgba16unorm"
"r16snorm"
"rg16snorm"
en "rgba16snorm"
.
Totdat deze experimentele functies zijn gestandaardiseerd, schakelt u de vlag 'Onveilige WebGPU-ondersteuning' 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 ten gunste van het gebruik van GetFeatures(SupportedFeatures * features)
. Zie uitgave 368672123 .
De webgpu.h C API heeft alle char const *
gewijzigd in een WGPUStringView
-structuur die een weergave definieert in een UTF-8-gecodeerde tekenreeks. Het fungeert als een verwijzing naar de gegevens van de string, gekoppeld aan een lengte. Hierdoor kunt u met delen van een string werken zonder deze te hoeven kopiëren. Zie uitgave 42241188 .
Dit behandelt slechts enkele van de belangrijkste hoogtepunten. Bekijk de uitgebreide lijst met commits .
Wat is er nieuw in WebGPU
Een lijst met alles wat aan bod komt in de What's New in WebGPU -serie.
Chroom 132
- Gebruik van textuurweergave
- 32-bits zwevende texturen mengen
- GPUDevice adapterInfo-kenmerk
- Het configureren van canvascontext met een ongeldig formaat levert een JavaScript-fout op
- Filteren van samplerbeperkingen op texturen
- Uitgebreide experimenten met subgroepen
- 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 diepteafwijking hebben
- Inclusief ingebouwde scanfuncties voor subgroepen
- Experimentele ondersteuning voor indirecte meertrekking
- Shader-module compilatie-optie strikte wiskunde
- GPUAdapter requestAdapterInfo() verwijderen
- Dawn-updates
Chroom 130
- Mengen met dubbele bron
- Verbeteringen in de compilatietijd van Shader op Metal
- Beëindiging van GPUAdapter requestAdapterInfo()
- Dawn-updates
Chroom 129
- HDR-ondersteuning met canvas-tone mapping-modus
- Uitgebreide ondersteuning voor subgroepen
- Dawn-updates
Chroom 128
- Experimenteren met subgroepen
- Beëindig het instellen van diepteafwijking voor lijnen en punten
- Niet-opgevangen fout verbergen DevTools-waarschuwing als preventieDefault
- WGSL interpoleert eerst de bemonstering en een van beide
- Dawn-updates
Chroom 127
- Experimentele ondersteuning voor OpenGL ES op Android
- GPUAdapter info-kenmerk
- Verbeteringen in de interoperabiliteit van WebAssembly
- Verbeterde opdracht-encoderfouten
- Dawn-updates
Chroom 126
- Verhoog de maxTextureArrayLayers-limiet
- Bufferuploadoptimalisatie voor Vulkan-backend
- Verbeteringen in de compilatietijd van Shader
- Ingezonden opdrachtbuffers moeten uniek zijn
- Dawn-updates
Chroom 125
Chroom 124
- Alleen-lezen en lezen-schrijven opslagtexturen
- Ondersteuning van servicemedewerkers en gedeelde medewerkers
- Nieuwe attributen voor adapterinformatie
- Bugfixes
- Dawn-updates
Chroom 123
- DP4a ingebouwde functies ondersteunen in WGSL
- Onbeperkte pointerparameters in WGSL
- Syntaxissuiker voor het derefereren van composieten in WGSL
- Afzonderlijke alleen-lezen-status 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 WebGPU op Android
- Gebruik DXC in plaats van FXC voor shader-compilatie op Windows
- Tijdstempelquery's in reken- en renderpassen
- Standaardingangspunten voor shadermodules
- Ondersteuning display-p3 als GPUExternalTexture-kleurruimte
- Informatie over geheugenheaps
- Dawn-updates
Chroom 120
- Ondersteuning voor 16-bit drijvende-kommawaarden in WGSL
- Verleg de grenzen
- Veranderingen in de staat van de diepte-stencil
- Updates van adapterinformatie
- Kwantisering van tijdstempelquery's
- Lenteschoonmaakfuncties
Chroom 119
- Filterbare 32-bit float-texturen
- unorm10-10-10-2 hoekpuntformaat
- 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
- Schakel hoekpuntbuffer uit
- Schakel de bindingsgroep uit
- Stil fouten bij het maken van asynchrone pijplijnen wanneer het apparaat verloren gaat
- Updates voor het maken van SPIR-V-shadermodules
- Verbetering van de ontwikkelaarservaring
- Caching van pijplijnen met automatisch gegenereerde lay-out
- Dawn-updates
Chroom 116
- WebCodecs-integratie
- Verloren apparaat geretourneerd door GPUAdapter
requestDevice()
- Houd het afspelen van video soepel als
importExternalTexture()
wordt aangeroepen - Spec-conformiteit
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chroom 115
- Ondersteunde WGSL-taalextensies
- Experimentele ondersteuning voor Direct3D 11
- Krijg standaard een discrete GPU op wisselstroom
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chroom 114
- Optimaliseer JavaScript
- getCurrentTexture() op een niet-geconfigureerd canvas genereert InvalidStateError
- WGSL-updates
- Dawn-updates