Veröffentlicht: 8. Januar 2025
Nutzung der Texturansichten
GPU-Texturansichten übernehmen derzeit alle Nutzungsflags von der Quell-GPU-Textur. Das kann problematisch sein, da einige Ansichtsformate für bestimmte Verwendungen nicht geeignet sind. Um dieses Problem zu beheben, können Sie createView()
mit dem optionalen Mitglied usage
aufrufen, um explizit eine Teilmenge der Nutzungsflags der Quelltextur anzugeben, die mit dem ausgewählten Ansichtsformat kompatibel sind.
Diese Änderung ermöglicht eine Vorabprüfung und eine detailliertere Kontrolle darüber, wie die Ansicht verwendet wird. Außerdem ist sie mit anderen Grafik-APIs kompatibel, in denen Nutzungsflags gängige Parameter beim Erstellen von Ansichten sind, was Optimierungsmöglichkeiten bietet.
Weitere Informationen finden Sie im folgenden Snippet, im chromestatus-Eintrag und in Problem 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-Bit-Gleitkommatextur-Mischung
32-Bit-Fließkommatextur sind für das HDR-Rendering unerlässlich, um einen großen Bereich von Farbwerten zu erhalten und Farbbanding-Artefakte zu vermeiden. Zum Beispiel bei der wissenschaftlichen Visualisierung.
Mit der neuen GPU-Funktion "float32-blendable"
können GPU-Texturen mit den Formaten "r32float"
, "rg32float"
und "rgba32float"
überlagert werden. Wenn Sie ein GPU-Gerät mit dieser Funktion anfordern, ist es jetzt möglich, eine Renderpipeline zu erstellen, die das Mischen mit beliebigen Anhängen im Float32-Format verwendet.
Weitere Informationen finden Sie im folgenden Snippet, im chromestatus-Eintrag und in Problem 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-Attribut adapterInfo
Für Bibliotheken, die von Nutzern bereitgestellte GPUDevice
-Objekte verwenden, ist es wichtig, auf Informationen zur physischen GPU zuzugreifen, da sie je nach GPU-Architektur optimiert oder Umgehungslösungen implementiert werden müssen. Es ist zwar möglich, über das GPUAdapter
-Objekt auf diese Informationen zuzugreifen, aber es gibt keine direkte Möglichkeit, sie nur über ein GPUDevice
abzurufen. Das kann ärgerlich sein, da Nutzer möglicherweise neben der GPUDevice
zusätzliche Informationen angeben müssen.
Um dieses Problem zu beheben, wird GPUAdapterInfo
jetzt über das Attribut GPUDevice
adapterInfo
freigegeben. Sie ähneln dem vorhandenen Attribut GPUAdapter
info
.
Weitere Informationen finden Sie im folgenden Snippet, im chromestatus-Eintrag und im Problem 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.
}
}
Beim Konfigurieren des Canvas-Kontexts mit einem ungültigen Format wird ein JavaScript-Fehler geworfen
Bisher führte die Verwendung eines ungültigen Texturformats mit der Methode configure()
des GPU-Canvas-Kontexts zu einem GPU-Validierungsfehler. Dies wurde geändert, um eine JavaScript-TypeError
zu werfen. So wird verhindert, dass getCurrentTexture()
eine gültige GPU-Textur zurückgibt, obwohl der GPU-Canvas-Kontext falsch konfiguriert ist. Weitere Informationen finden Sie unter Problem 372837859.
Einschränkungen für Sampler bei Texturen filtern
Bisher war es zulässig, Texturen im "sint"
-, "uint"
- und depth"
-Format mit Filterproben zu verwenden. Die Verwendung einer Textur im Format "sint"
oder "uint"
mit einem Filter-Sampler ist jetzt korrekt nicht zulässig. Derzeit wird eine Warnung ausgegeben, wenn Sie eine depth"
-Textur mit einem Filter-Sampler verwenden, da dies in Zukunft nicht mehr zulässig sein wird. Siehe Problem 376497143.
Aufgrund dieser Einschränkungen müssen Bindungsgruppenlayouts manuell erstellt werden, wenn eine Tiefentextur mit einem nicht filternden Sampler verwendet wird. Das liegt daran, dass diese Kombination von den automatisch generierten Bindungsgruppenlayouts noch nicht unterstützt wird. Spezifikationsproblem 4952 enthält einen Vorschlag, wie diese Einschränkung in Zukunft behoben werden könnte.
Erweiterte Tests von Untergruppen
Der Test für Untergruppen, der ursprünglich mit Chrome 131 enden sollte, wurde bis Chrome 133 verlängert und endet am 16. April 2025. Während sich der erste Test auf die Leistung konzentrierte, fehlten ihm wichtige Sicherheitsmaßnahmen für die Portabilität. Diese Sicherheitsmaßnahmen werden jetzt hinzugefügt, was möglicherweise zu Fehlern im vorhandenen Code führt.
Verbesserung der Entwicklerfreundlichkeit
In den DevTools wird jetzt eine Warnung angezeigt, wenn die Option powerPreference
unter Windows mit requestAdapter()
verwendet wird. Diese Warnung wird entfernt, sobald Chrome weiß, wie zwei verschiedene GPUs verwendet und die Ergebnisse zusammengeführt werden. Siehe Problem 369219127.
Die Größe des GPU-Buffers wird jetzt in der Fehlermeldung angezeigt, wenn ein zu großer GPU-Buffer erstellt wird. Siehe Problem 374167798.
Experimentelle Unterstützung für 16-Bit-normalisierte Texturformate
16-Bit-normalisierte Texturformate mit Vorzeichen und ohne Vorzeichen sind jetzt experimentell über die "chromium-experimental-snorm16-texture-formats"
- und "chromium-experimental-unorm16-texture-formats"
-GPU-Funktionen verfügbar, während sie für die Standardisierung diskutiert werden.
Diese Funktionen unterstützen 16‑Bit-normalisierte Texturformate mit COPY_SRC
-, COPY_DST
-, TEXTURE_BINDING
- und RENDER_ATTACHMENT
-Nutzung, Multisampling und Auflösungsfunktionen. Die zusätzlichen Formate sind "r16unorm"
, "rg16unorm"
, "rgba16unorm"
, "r16snorm"
, "rg16snorm"
und "rgba16snorm"
.
Bis diese experimentellen Funktionen standardisiert sind, aktivieren Sie das Flag „Unsafe WebGPU Support“ (Unterstützung für unsichere WebGPU) unter chrome://flags/#enable-unsafe-webgpu
, um sie in Chrome verfügbar zu machen.
Weitere Informationen finden Sie im folgenden Snippet und in Issue 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
Die EnumerateFeatures(FeatureName * features)
-Methoden von wgpu::Adapter
und wgpu::Device
wurden zugunsten von GetFeatures(SupportedFeatures * features)
eingestellt. Siehe Problem 368672123.
In der C-API „webgpu.h“ wurde char const *
in eine WGPUStringView
-Struktur geändert, die eine Ansicht in einen UTF-8-codierten String definiert. Er fungiert als Zeiger auf die Daten des Strings, gekoppelt mit einer Länge. So können Sie mit Teilen eines Strings arbeiten, ohne ihn kopieren zu müssen. Siehe Problem 42241188.
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 132
- Verwendung der Texturansicht
- 32-Bit-Gleitkommatextur-Mischverfahren
- Attribut „adapterInfo“ von „GPUDevice“
- Bei der Konfiguration des Canvas-Kontexts mit einem ungültigen Format wird ein JavaScript-Fehler geworfen
- Einschränkungen für Filter-Sampler bei Texturen
- Erweiterte Tests mit Untergruppen
- Entwicklerfreundlichkeit verbessern
- Experimentelle Unterstützung für 16-Bit-normalisierte Texturformate
- Updates zu Dawn
Chrome 131
- Entfernungen in WGSL zuschneiden
- GPUCanvasContext getConfiguration()
- Punkt- und Linienprimitive dürfen keine Tiefenverzerrung haben.
- Integrierte Funktionen für inklusiven Scan für Untergruppen
- Experimentelle Unterstützung für indirekte Multi-Draw-Anweisungen
- Shader-Modul-Kompilierungsoption „strict math“
- GPUAdapter-Methode „requestAdapterInfo()“ entfernen
- Updates zu Dawn
Chrome 130
- Zusammenführen von zwei Quellen
- Verbesserte Shader-Kompilierungszeiten unter Metal
- Einstellung der GPUAdapter-Methode „requestAdapterInfo()“
- Updates zu Dawn
Chrome 129
- HDR-Unterstützung mit Canvas-Tone-Mapping-Modus
- Erweiterter Support für Untergruppen
- Updates zu Dawn
Chrome 128
- Mit Untergruppen experimentieren
- Einstellung der Tiefenverzerrung für Linien und Punkte eingestellt
- Nicht erfasste Fehlerwarnung in den Entwicklertools bei preventDefault ausblenden
- WGSL interpoliert zuerst die Stichprobe und
- Updates zu Dawn
Chrome 127
- Experimenteller Support für OpenGL ES auf Android-Geräten
- Attribut „info“ von „GPUAdapter“
- Verbesserungen bei der WebAssembly-Interoperabilität
- Verbesserte Fehlermeldungen beim Befehls-Encoder
- Updates zu Dawn
Chrome 126
- Maximale Anzahl von Texture-Array-Ebenen erhöhen
- Optimierung des Pufferuploads für das Vulkan-Backend
- Verbesserte Shader-Kompilierungszeiten
- Eingereichte Befehlspuffere müssen eindeutig sein.
- Updates zu Dawn
Chrome 125
Chrome 124
- Lese- und Lese-/Schreibspeichertextur
- Unterstützung für Dienst- und freigegebene Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Updates zu Dawn
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
- Updates zu Dawn
Chrome 122
- Reichweite mit Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- Limit für maxVertexAttributes erhöhen
- Updates zu Dawn
Chrome 121
- Unterstützung von WebGPU auf Android-Geräten
- DXC anstelle von FXC für die Shaderkompilierung unter Windows verwenden
- Zeitstempelabfragen in Compute- und Rendering-Passes
- Standardeinstiegspunkte in Shadermodule
- Unterstützung von display-p3 als GPUExternalTexture-Farbraum
- Informationen zu Speicherheaps
- Updates zu Dawn
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
- Updates zu Dawn
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture()
- Experimentelle Unterstützung für Lese-/Schreib- und schreibgeschützte Speichertextur
- Updates zu Dawn
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
- Updates zu Dawn
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter
requestDevice()
zurückgegeben wurde - Videowiedergabe bei Aufruf von
importExternalTexture()
flüssig halten - Einhaltung der Spezifikationen
- Entwicklerfreundlichkeit verbessern
- Updates zu Dawn
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 zu Dawn
Chrome 114
- JavaScript optimieren
- Bei nicht konfiguriertem Canvas wird bei getCurrentTexture() ein InvalidStateError geworfen
- WGSL-Updates
- Updates zu Dawn