Gepubliceerd: 29 januari 2025
Extra unorm8x4-bgra en 1-component hoekpuntformaten
Het hoekpuntformaat "unorm8x4-bgra"
en de volgende 1-component hoekpuntformaten zijn toegevoegd: "uint8"
, "sint8"
, "unorm8"
" , "snorm8"
, "uint16"
, "sint16"
, "unorm16"
, "snorm16"
en "float16"
. Het "unorm8x4-bgra"
hoekpuntformaat maakt het iets handiger om BGRA-gecodeerde hoekpuntkleuren te laden met behoud van dezelfde arcering. Bovendien kunt u met het 1-component hoekpuntformaat alleen de gegevens opvragen die nodig zijn, terwijl voorheen minstens twee keer zoveel nodig was voor 8- en 16-bits gegevenstypen. Zie de chromestatus-invoer en uitgave 376924407 .
Sta toe dat onbekende limieten worden aangevraagd met een ongedefinieerde waarde
Om de WebGPU API tijdens de ontwikkeling minder broos te maken, kunt u nu onbekende limieten met undefined
waarde aanvragen bij het aanvragen van een GPU-apparaat. Dit is bijvoorbeeld handig in de volgende toepassingscode waarbij adapter.limits.someLimit
undefined
kan zijn als someLimit
niet meer bestaat. Zie specificatie PR 4781 .
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice({
requiredLimits: { someLimit: adapter.limits.someLimit }, // someLimit can be undefined
});
WGSL-uitlijningsregels veranderen
Het is niet langer mogelijk om een te kleine uitlijningswaarde voor een struct-lid op te geven, omdat het nu vereist is dat @align(n)
RequiredAlignOf
voor alle structs verdeelt. Deze baanbrekende wijziging vereenvoudigt het gebruik van de WGSL-taal en maakt deze beter compatibel met Firefox en Safari. U kunt voorbeeldcode vinden die de verschillen laat zien tussen Tint-, Naga- en WebKit-compilers in de specificatie PR .
WGSL-prestaties verbeteren met weggooien
Vanwege een aanzienlijke prestatiedaling die is waargenomen bij het weergeven van een complex SSR-effect (Screen Space Reflections), gebruikt de implementatie van de verwijderinstructie de door het platform geleverde semantiek voor het degraderen naar een helperaanroep, indien beschikbaar. Dit verbetert de prestaties van shaders die gebruik maken van weggooien. Zie uitgave 372714384 .
Gebruik VideoFrame displaySize voor externe texturen
De afmetingen displayWidth
en displayHeight
moeten worden gebruikt als de schijnbare grootte van de GPUExternalTexture bij het importeren van een VideoFrame volgens de WebGPU-specificatie. De zichtbare grootte werd echter onjuist gebruikt, wat problemen veroorzaakte bij het gebruik van textureLoad()
op een GPUExternalTexture. Dit is nu opgelost. Zie uitgave 377574981 .
Verwerk afbeeldingen met een niet-standaardoriëntatie met behulp van copyExternalImageToTexture
De copyExternalImageToTexture()
GPUQueue-methode wordt gebruikt om de inhoud van een afbeelding of canvas naar een textuur te kopiëren. Het verwerkt nu afbeeldingen met een niet-standaardoriëntatie op de juiste manier. Dit was voorheen niet het geval wanneer de bron een ImageBitmap was met imageOrientation
"from-image"
of een afbeelding met een niet-standaardoriëntatie. Zie uitgave 384858956 .
Verbetering van de ontwikkelaarservaring
Het kan verrassend zijn als adapter.limits
hoge waarden weergeeft, maar u realiseert zich niet dat u expliciet een hogere limiet moet aanvragen bij het aanvragen van een GPU-apparaat. Als u dit niet doet, kan dit ertoe leiden dat u later onverwacht tegen de limieten aanloopt.
Om u te helpen zijn de foutmeldingen uitgebreid met hints die u vertellen dat u expliciet een hogere limiet moet aanvragen als er geen limiet is opgegeven in requiredLimits
bij het aanroepen van requestDevice()
. Zie uitgave 42240683 .
In het volgende voorbeeld ziet u een verbeterd foutbericht geregistreerd in de DevTools-console bij het maken van een GPU-buffer met een grootte die groter is dan de standaard maximale apparaatlimiet voor de buffergrootte.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
// Create a GPU buffer with a size exceeding the default max buffer size device limit.
const size = device.limits.maxBufferSize + 1;
const buffer = device.createBuffer({ size, usage: GPUBufferUsage.MAP_READ });
device.queue.submit([]);
⚠️ Buffer size (268435457) exceeds the max buffer size limit (268435456). This adapter supports a higher maxBufferSize of 4294967296, which can be specified in requiredLimits when calling requestDevice(). Limits differ by hardware, so always check the adapter limits prior to requesting a higher limit. - While calling [Device].CreateBuffer([BufferDescriptor]).
Schakel de compatibiliteitsmodus in met featureLevel
Het aanvragen van een GPU-adapter in de experimentele compatibiliteitsmodus is nu mogelijk door de gestandaardiseerde featureLevel
optie in te stellen op "compatibility"
. De tekenreeksen "core"
(standaard) en "compatibility"
zijn de enige toegestane waarden. Zie het volgende voorbeeld en specificatie PR 4897 .
// Request a GPU adapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
if (adapter?.featureLevel === "compatibility") {
// Any devices created from this adapter will support only compatibility mode.
}
De featureLevel
optie vervangt de niet-gestandaardiseerde compatibilityMode
optie, terwijl het niet-gestandaardiseerde featureLevel
attribuut het isCompatibilityMode
attribuut vervangt.
Omdat het nog experimenteel is, moet je Chrome voorlopig uitvoeren met de vlag "Unsafe WebGPU Support" op chrome://flags/#enable-unsafe-webgpu
. Ga naar webgpureport.org om ermee te spelen.
Experimentele subgroep biedt opschoning
De verouderde experimentele "chromium-experimental-subgroups"
en "chromium-experimental-subgroup-uniform-control-flow"
zijn verwijderd. Zie uitgave 377868468 .
De experimentele functie "subgroups"
is alles wat u nu nodig hebt als u met subgroepen experimenteert . De experimentele functie "subgroups-f16"
is verouderd en zal binnenkort worden verwijderd. U kunt f16-waarden gebruiken met subgroepen wanneer uw toepassing zowel "shader-f16"
als "subgroups"
-functie aanvraagt. Zie uitgave 380244620 .
Beëindig de maxInterStageShaderComponents-limiet
De maxInterStageShaderComponents
-limiet is verouderd vanwege een combinatie van factoren:
- Redundantie met
maxInterStageShaderVariables
: deze limiet dient al een soortgelijk doel, namelijk het regelen van de hoeveelheid gegevens die tussen shader-fasen wordt doorgegeven. - Kleine verschillen: Hoewel er kleine verschillen zijn in de manier waarop de twee limieten worden berekend, zijn deze verschillen klein en kunnen ze effectief worden beheerd binnen de
maxInterStageShaderVariables
limiet. - Vereenvoudiging: het verwijderen van
maxInterStageShaderComponents
stroomlijnt de shader-interface en vermindert de complexiteit voor ontwikkelaars. In plaats van twee afzonderlijke limieten met subtiele verschillen te beheren, kunnen ze zich concentreren op de beter benoemde en uitgebreideremaxInterStageShaderVariables
.
Het doel is om het volledig te verwijderen in Chrome 135. Zie het voornemen om het programma te beëindigen en 364338810 uit te geven .
Dawn-updates
Met wgpu::Device::GetAdapterInfo(adapterInfo)
kunt u adapterinformatie rechtstreeks ophalen van een wgpu::Device
. Zie uitgave 376600838 .
De WGPUProgrammableStageDescriptor
-structuur is hernoemd naar WGPUComputeState
om de rekenstatus consistent te maken met hoekpunt- en fragmentstatussen. Zie uitgave 379059434 .
De wgpu::VertexStepMode::VertexBufferNotUsed
enum-waarde is verwijderd. Een hoekpuntbufferindeling die niet wordt gebruikt, kan nu worden uitgedrukt met {.stepMode=wgpu::VertexStepMode::Undefined, .attributeCount=0}
. Zie uitgave 383147017 .
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 133
- Extra unorm8x4-bgra en 1-component hoekpuntformaten
- Sta toe dat onbekende limieten worden aangevraagd met een ongedefinieerde waarde
- WGSL-uitlijningsregels veranderen
- WGSL-prestaties verbeteren met weggooien
- 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
- Experimentele subgroep biedt opschoning
- Beëindig de maxInterStageShaderComponents-limiet
- Dawn-updates
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
- Compilatieoptie Shader-module 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