Filterbare 32-Bit-Float-Texturen
32-Bit-Gleitkommatexturen werden verwendet, um Daten mit hoher Genauigkeit wie HDR-Bilder und Tiefenkarten zu speichern. Sie sind besonders wichtig für GPUs, die in High-End-Gaming- und professionellen Anwendungen verwendet werden.
Die Unterstützung für filterbare 32-Bit-Gleitkommatexturen beschreibt die Fähigkeit einer GPU, 32-Bit-Gleitkommatexturen zu filtern. Das bedeutet, dass die GPU die Ränder der Gleitkommatexturen glätten kann, sodass sie weniger zerklüftet erscheinen. Sie ähnelt der Erweiterung „OES_texture_float_linear“ in WebGL.
Nicht alle GPUs unterstützen filterbare 32-Bit-Float-Texturen. Wenn die "float32-filterable"
-Funktion in einer GPUAdapter
verfügbar ist, kannst du jetzt eine GPUDevice
mit dieser Funktion anfordern und Texturen mit den Formaten „r32float“, „rg32float“ und „rgba32float“ filtern. Sehen Sie sich das folgende Beispiel und issue dawn:1664 an.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-filterable")) {
throw new Error("Filterable 32-bit float textures support is not available");
}
// Explicitly request filterable 32-bit float textures support.
const device = await adapter.requestDevice({
requiredFeatures: ["float32-filterable"],
});
// Create a sampler with linear filtering.
const sampler = device.createSampler({
magFilter: "linear",
});
// Create a texture with rgba32float format.
const texture = device.createTexture({
size: [100, 100],
format: "rgba32float",
usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
});
// Write data to texture, create a bindgroup with sampler and texture and
// send the appropriate commands to the GPU....
Unorm10-10-10-2-Vertexformat
Der WebGPU-Spezifikation wurde ein neues Vertex-Format namens „unorm10-10-10-2“ (auch „rgb10a2“) hinzugefügt. Er besteht aus einem komprimierten 32‑Bit-Wert mit vier normalisierten vorzeichenlosen Ganzzahlwerten, die als 10 Bit, 10 Bit, 10 Bit und 2 Bit angeordnet sind. Sehen Sie sich das folgende Beispiel und issue dawn:2044 an.
// Define the layout of vertex attribute data with unorm10-10-10-2 format.
const buffers = [
{
arrayStride: 0,
attributes: [
{ format: "unorm10-10-10-2", offset: 0, shaderLocation: 0 },
],
},
];
// Describe the vertex shader entry point and its input buffer layouts.
const vertex = {
module: myVertexShaderModule,
entryPoint: "main",
buffers,
};
// Pass vertex to device.createRenderPipeline() and
// use vec4<f32> type in WGSL shader code to manipulate data.
rgb10a2uint-Texturformat
Der WebGPU-Spezifikation wurde ein neues Texturformat namens „rgb10a2uint“ hinzugefügt. Es besteht aus einem 32-Bit-Pixelformat mit vier vorzeichenlosen Ganzzahlkomponenten: 10-Bit-Rot, 10-Bit-Grün, 10-Bit-Blau und 2-Bit-Alpha. Siehe das folgende Beispiel und issue dawn:1936.
// Create a texture with rgb10a2uint format.
const texture = device.createTexture({
size: [100, 100],
format: "rgb10a2uint",
usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
});
// Write data to texture, create a bindgroup with texture and
// send the appropriate commands to the GPU....
Updates zur Morgendämmerung
Mit Zeitstempelabfragen können WebGPU-Anwendungen genau (bis auf die Nanosekunde) messen, wie lange die Ausführung ihrer GPU-Befehle dauert. Die API-Form zum Erfassen von Zeitstempelabfragen am Anfang und Ende von Karten/Tickets wurde an die WebGPU-Spezifikation angepasst. Weitere Informationen finden Sie im folgenden Beispiel und unter issue dawn:1800.
// Create a timestamp query set that will store the timestamp values.
wgpu::QuerySetDescriptor querySetDescriptor = {
.count = 2,
.type = wgpu::QueryType::Timestamp};
wgpu::QuerySet querySet = device.CreateQuerySet(&querySetDescriptor);
wgpu::RenderPassTimestampWrites timestampWrites = {
.querySet = querySet,
.beginningOfPassWriteIndex = 0,
.endOfPassWriteIndex = 1};
wgpu::ComputePassDescriptor pass{.timestampWrites = ×tampWrites};
// Write the queue timestamp into beginningOfPassWriteIndex and
// endOfPassWriteIndex of myQuerySet respectively before and after the pass
// commands execute.
myEncoder.BeginComputePass(&pass);
Dies sind nur einige der wichtigsten Highlights. Eine vollständige Liste der Commits
Das ist neu bei WebGPU
Eine Liste aller Themen, die in der Reihe Was ist neu in WebGPU? behandelt wurden.
Chrome 131
- Entfernungen in WGSL zuschneiden
- GPUCanvasContext getConfiguration()
- Punkt- und Linienprimitive dürfen keine Tiefenverzerrung haben
- Integrierte Funktionen für inklusive Stichprobenerhebungen für Untergruppen
- Experimentelle Unterstützung für indirekte Multi-Draw-Anweisungen
- Strikte Mathematik bei der Option für die Shader-Modulkompilierung
- GPUAdapter requestAdapterInfo() entfernen
- Dawn-Updates
Chrome 130
- Zusammenführen von zwei Quellen
- Verbesserte Shader-Kompilierungszeiten unter Metal
- Einstellung der GPUAdapter-Methode „requestAdapterInfo()“
- Updates zur Morgendämmerung
Chrome 129
- HDR-Unterstützung mit Canvas-Tone-Mapping-Modus
- Erweiterter Support für Untergruppen
- Updates zur Morgendämmerung
Chrome 128
- Mit Untergruppen experimentieren
- Einstellung der Tiefenverzerrung für Linien und Punkte eingestellt
- Nicht erfasste Fehlerwarnung in den Entwicklertools bei preventDefault ausblenden
- WGSL-interpolierte Stichprobenerhebung
- Dawn-Updates
Chrome 127
- Experimentelle Unterstützung für OpenGL ES auf Android-Geräten
- Attribut „info“ von „GPUAdapter“
- Verbesserungen der WebAssembly-Interoperabilität
- Verbesserte Fehlermeldungen beim Befehls-Encoder
- Updates zur Morgendämmerung
Chrome 126
- Limit für „maxTextureArrayLayers“ erhöht
- Optimierung des Pufferuploads für das Vulkan-Backend
- Schnellere Kompilierungszeiten
- Eingereichte Befehlspuffere müssen eindeutig sein.
- Dawn-Updates
Chrome 125
Chrome 124
- Schreibgeschützte Speichertexturen
- Unterstützung für Dienst- und freigegebene Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Dawn-Updates
Chrome 123
- Unterstützung für integrierte DP4a-Funktionen in WGSL
- Uneingeschränkte Zeigerparameter in WGSL
- Syntax-Optimierung für die Dereferenzierung von Kompositen in WGSL
- Separater schreibgeschützter Status für Stencil- und Tiefenansichten
- Dawn-Updates
Chrome 122
- Reichweite mit Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- Limit für maxVertexAttributes erhöhen
- Dawn-Updates
Chrome 121
- Unterstützung von WebGPU auf Android-Geräten
- DXC anstelle von FXC für die Shader-Kompilierung unter Windows verwenden
- Zeitstempelabfragen in Compute- und Rendering-Passes
- Standardeinstiegspunkte für Shader-Module
- Unterstützung von „display-p3“ als GPUExternalTexture-Farbraum
- Informationen zu Speicherheaps
- Dawn-Updates
Chrome 120
- Unterstützung von 16‑Bit-Gleitkommawerten in WGSL
- Grenzen überschreiten
- Änderungen am Tiefen-/Schatten-Status
- Aktualisierte Informationen zu Adaptern
- Quantisierung von Zeitstempelabfragen
- Funktionen für den Frühjahrsputz
Chrome 119
- Filterbare 32-Bit-Gleitkommatextur
- unorm10-10-10-2-Vertex-Format
- rgb10a2uint-Texturformat
- Dawn-Updates
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture()
- Experimentelle Unterstützung für nicht schreibgeschützte und schreibgeschützte Speichertexturen
- Dawn-Updates
Chrome 117
- Vertex-Buffer zurücksetzen
- Bindungsgruppe aufheben
- Fehler bei der Erstellung einer asynchronen Pipeline bei verlorenem Gerät ignorieren
- Änderungen beim Erstellen von SPIR-V-Shadermodulen
- Entwicklerfreundlichkeit verbessern
- Pipelines mit automatisch generiertem Layout im Cache speichern
- Dawn-Updates
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter
requestDevice()
zurückgegeben wurde - Videowiedergabe ruckelfrei, wenn
importExternalTexture()
aufgerufen wird - Einhaltung der Spezifikationen
- Entwicklerfreundlichkeit verbessern
- Dawn-Updates
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Unterstützung für diskrete GPU standardmäßig bei Wechselstromversorgung
- Entwicklerfreundlichkeit verbessern
- Updates zur Morgendämmerung
Chrome 114
- JavaScript optimieren
- Bei nicht konfiguriertem Canvas wird bei getCurrentTexture() ein InvalidStateError geworfen
- WGSL-Updates
- Updates zur Morgendämmerung