Neuigkeiten bei WebGPU (Chrome 142)

François Beaufort
François Beaufort

Veröffentlicht: 22. Oktober 2025

Unterstützung von Texturformaten erweitert

Mit der neuen GPU-Funktion texture-formats-tier1 können Entwickler vorhandene Inhalte ins Web portieren, ohne sie für die geringeren Funktionen von WebGPU neu schreiben zu müssen. Es unterstützt die neuen Texturformate "r16unorm", "r16snorm", "rg16unorm", "rg16snorm", "rgba16unorm" und "rgba16snorm" mit Render-Attachment, Mischfunktionen, Multisample-Funktionen und "read-only"- oder "write-only"-Speichertexturzugriff. Außerdem werden die vorhandenen Texturformate "r8snorm", "rg8snorm" und "rgba8snorm" mit Render-Attachment-, Blendable-, Multisampling- und Resolve-Funktionen unterstützt. Mit dem Speichertexturzugriff über "read-only" oder "write-only" können auch mehr Texturformate verwendet werden.

Das neue GPU-Feature texture-formats-tier2 ermöglicht den "read-write"-Speichertexturzugriff für bestimmte Formate, was für Projekte wie die Portierung von Unreal Engine ins Web entscheidend ist. Wenn Sie "texture-formats-tier2" bei der Geräteerstellung aktivieren, wird "texture-formats-tier1" automatisch aktiviert.

Weitere Informationen finden Sie im folgenden Snippet und im Chrome-Status-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 Intel-Mitarbeiter für ihre Arbeit!

Primitiver Index in WGSL

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

Wenn die "primitive-index"-Funktion in einem GPUAdapter verfügbar ist, fordern Sie ein GPUDevice mit dieser Funktion an, um die Unterstützung von primitiven Indexen in WGSL zu erhalten, und 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 Primitiv 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 Primitive 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...

Weitere Informationen finden Sie im Beispiel für die Auswahl von Primitiven und im Chrome-Status-Eintrag.

Die Dreiecke des 3D-Teekannenmodells sind entsprechend ihren primitiven Indexwerten gefärbt.
Das Beispiel „Primitive Picking“ 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 zu STATIC geändert, sodass standardmäßig die libwebgpu*-Dateien generiert werden.

Dawn verarbeitet jetzt die wgpu::PresentMode::Undefined-Standardeinstellung beim Konfigurieren einer wgpu::Surface korrekt. Weitere Informationen finden Sie unter Problem 441410668.

Dies sind nur einige der wichtigsten Neuerungen. Vollständige Liste der Commits

Neues zu WebGPU

Eine Liste aller Themen, die in der Reihe Neu in WebGPU behandelt wurden.

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