Neuigkeiten bei WebGPU (Chrome 142)

François Beaufort
François Beaufort

Veröffentlicht am 22. Oktober 2025

Erweiterte Unterstützung für Texturformate

Mit dem neuen "texture-formats-tier1" GPU-Feature können Entwickler vorhandene Inhalte ins Web portieren, ohne sie für die geringeren Möglichkeiten von WebGPU neu schreiben zu müssen. Es unterstützt die neuen Texturformate "r16unorm", "r16snorm", "rg16unorm", "rg16snorm", "rgba16unorm" und "rgba16snorm" mit Renderanhang, Mischbarkeit, Multisample-Funktionen und "read-only" oder "write-only" Speichertexturzugriff. Außerdem werden die vorhandenen Texturformate "r8snorm", "rg8snorm" und "rgba8snorm" mit Renderanhang, Mischbarkeit, Multisample- und Auflösungsfunktionen unterstützt. Weitere Texturformate können auch mit "read-only" oder "write-only" Speichertexturzugriff verwendet werden.

Das neue "texture-formats-tier2" GPU-Feature ermöglicht den "read-write" Speichertexturzugriff für bestimmte Formate, was für Projekte wie das Portieren der Unreal Engine ins Web entscheidend ist. Wenn Sie "texture-formats-tier2" beim Erstellen des Geräts aktivieren, wird automatisch auch "texture-formats-tier1" aktiviert.

Weitere Informationen finden Sie im folgenden Snippet und im chromestatus-Eintrag.

const adapter = await navigator.gpu.requestAdapter();

const requiredFeatures = [];
if (adapter.features.has("texture-format-tier1")) {
  requiredFeatures.push("texture-format-tier1");
}
if (adapter.features.has("texture-format-tier2")) {
  requiredFeatures.push("texture-format-tier2");
}
const device = await adapter.requestDevice({ requiredFeatures });

// Later on, when dealing with "r8unorm" texture formats for example...
if (device.features.has("texture-format-tier2")) {
  // Use "read-write" storage texture access...
} else if (device.features.has("texture-format-tier1")) {
  // Use "read-only" or "write-only" storage texture access...
} else {
  // Fallback: Use another texture format...
}

Vielen Dank an die Mitarbeiter von Intel für ihre Arbeit.

Primitiver Index in WGSL

Der primitive_index ist ein integrierter WGSL-Wert, der das aktuelle Primitive (z. B. einen Punkt, eine Linie oder ein Dreieck) eindeutig identifiziert, das von einem Fragment-Shader verarbeitet wird. Er beginnt bei 0, wird nach der Verarbeitung jedes Primitiven um 1 erhöht und zwischen den einzelnen gezeichneten Instanzen auf 0 zurückgesetzt.

Wenn das Feature "primitive-index" in einem GPUAdapter verfügbar ist, fordern Sie ein GPUDevice mit diesem Feature an, um die Unterstützung für primitive Indizes in WGSL zu erhalten. Aktivieren Sie diese Erweiterung explizit in Ihrem WGSL-Code mit enable primitive_index;. Nach der Aktivierung können Sie den integrierten Ganzzahlwert primitive_index in Ihrem Fragment-Shader verwenden, um auf Daten pro Primitive zuzugreifen oder Logik auszuführen, die sich beispielsweise für jede gerenderte geometrische Form unterscheidet.

Das folgende Code-Snippet zeigt einen Fragment-Shader, der das zweite Primitive rot und alle anderen primitiven Elemente blau rendert.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("primitive-index")) {
  throw new Error("Primitive index support is not available");
}
// Explicitly request primitive index support.
const device = await adapter.requestDevice({
  requiredFeatures: ["primitive-index"],
});

const fragmentShaderModule = device.createShaderModule({ code: `
  enable primitive_index;

  @fragment
  fn main(@builtin(primitive_index) i : u32) -> @location(0) vec4f {
    if (i == 1) {
      return vec4f(1, 0, 0, 1);
    }
    return vec4f(0, 1, 0, 1);
  }`,
});
// Send the appropriate commands to the GPU...

Noch mehr entdecken Sie im Beispiel für die Auswahl von Primitiven und im chromestatus-Eintrag.

Die Dreiecke des 3D-Teekannenmodells sind entsprechend ihren primitiven Indexwerten gefärbt.
Das Beispiel für die Auswahl von Primitiven im Modus „primitive indexes“.

Dawn-Updates

Die CMake-Variable DAWN_BUILD_MONOLITHIC_LIBRARY, die zum Verarbeiten des Typs der zu erstellenden monolithischen Bibliothek verwendet wird, hat ihren Standardwert von OFF in STATIC geändert. Standardmäßig werden also die Dateien libwebgpu* generiert.

Dawn verarbeitet jetzt wgpu::PresentMode::Undefined korrekt, wenn eine wgpu::Surface konfiguriert wird. Weitere Informationen finden Sie unter Problem 441410668.

Hier werden nur einige der wichtigsten Neuerungen behandelt. Eine vollständige Liste der Commits finden Sie hier.

Neues in WebGPU

Eine Liste aller Themen, die in der Reihe „Neues in WebGPU“ behandelt wurden.

Chrome 149–150

Chrome 147–148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113