Nowości w WebGPU (Chrome 142)

François Beaufort
François Beaufort

Data publikacji: 22 października 2025 r.

Rozszerzone możliwości obsługi formatów tekstur

Nowa funkcja GPU „texture-formats-tier1” umożliwia deweloperom przenoszenie istniejących treści do internetu bez konieczności ich ponownego pisania pod kątem mniejszych możliwości WebGPU. Obsługuje nowe formaty tekstur "r16unorm", "r16snorm", "rg16unorm", "rg16snorm", "rgba16unorm""rgba16snorm" z załącznikiem renderowania, możliwością mieszania, próbkowaniem wielokrotnym i dostępem do tekstur pamięci "read-only" lub "write-only". Umożliwia też korzystanie z dotychczasowych formatów tekstur "r8snorm", "rg8snorm""rgba8snorm" z możliwością dołączania renderowania, mieszania, multisamplingu i rozwiązywania. Więcej formatów tekstur można też używać z dostępem do tekstur pamięci "read-only" lub "write-only".

Nowa funkcja GPU „texture-formats-tier2” umożliwia dostęp do tekstur pamięci "read-write" w przypadku określonych formatów, co jest kluczowe w projektach takich jak przenoszenie Unreal Engine do internetu. Pamiętaj, że włączenie "texture-formats-tier2" podczas tworzenia urządzenia automatycznie włącza "texture-formats-tier1".

Zobacz ten fragment kodu i wpis w chromestatus.

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...
}

Wielkie podziękowania dla zespołu firmy Intel za ich pracę.

Indeks typu pierwotnego w WGSL

primitive_index to wbudowana wartość WGSL, która jednoznacznie identyfikuje bieżący element pierwotny (np. punkt, linię lub trójkąt) przetwarzany przez shader fragmentów. Zaczyna się od 0, zwiększa się o 1 po przetworzeniu każdego elementu pierwotnego i resetuje się do 0 między każdą narysowaną instancją.

Gdy funkcja "primitive-index" jest dostępna w obiekcie GPUAdapter, poproś o obiekt GPUDevice z tą funkcją, aby uzyskać obsługę indeksu pierwotnego w WGSL, i wyraźnie włącz to rozszerzenie w kodzie WGSL za pomocą enable primitive_index;. Po włączeniu tej funkcji możesz użyć primitive_indexwbudowanej wartości całkowitej w programie cieniującym fragmentyprimitive_index, aby uzyskać dostęp do danych poszczególnych elementów lub wykonać logikę, która różni się w zależności od renderowanego kształtu geometrycznego.

Poniższy fragment kodu pokazuje shader fragmentów, który renderuje drugi element pierwotny na czerwono, a wszystkie pozostałe elementy pierwotne na niebiesko.

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...

Więcej informacji znajdziesz w przykładzie wyboru elementów oraz w wpisie na chromestatus.

Trójkąty modelu czajnika 3D są pokolorowane na podstawie wartości indeksu pierwotnego.
Przykładowy kod Primitive Picking w trybie „primitive indexes”.

Aktualizacje o świcie

Zmienna CMake DAWN_BUILD_MONOLITHIC_LIBRARY używana do obsługi typu monolitycznej biblioteki do skompilowania zmieniła wartość domyślną z OFF na STATIC, dzięki czemu domyślnie będą generowane pliki libwebgpu*.

Dawn prawidłowo obsługuje teraz domyślne ustawienia wgpu::PresentMode::Undefined podczas konfigurowania wgpu::Surface. Zobacz problem 441410668.

Obejmuje to tylko niektóre z najważniejszych informacji. Zapoznaj się z pełną listą zatwierdzeń.

Nowości w WebGPU

Lista wszystkich tematów omówionych w serii Nowości w WebGPU.

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