Co nowego w WebGPU (Chrome 115)

François Beaufort
François Beaufort

Obsługiwane rozszerzenia języka WGSL

Element wgslLanguageFeatures obiektu GPU zawiera listę nazw obsługiwanych rozszerzeń języka WGSL. Obsługiwane rozszerzenia językowe WGSL są włączane automatycznie, więc nie trzeba o nie prosić. Ta lista jest obecnie pusta, ale możesz się spodziewać wielu takich list w przyszłości (np. do-while loops). Zobacz problem świt:1777.

if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
  // Use unknown-feature in WGSL shader code.
}

Eksperymentalna obsługa interfejsu Direct3D 11

Zespół Chromium pracuje nad dodaniem obsługi WebGPU dla interfejsu Direct3D 11. Możesz teraz eksperymentować z nimi lokalnie – wystarczy uruchomić Chrome w systemie Windows z flagami wiersza poleceń --enable-unsafe-webgpu --use-webgpu-adapter=d3d11. Zobacz problem świt:1705.

Domyślnie dyskretny GPU przy zasilaniu sieciowym

Na urządzeniach z 2 procesorami graficznymi z macOS, jeśli usługa requestAdapter() jest wywoływana bez opcji powerPreference, dyskretny GPU jest zwracany, gdy urządzenie użytkownika jest podłączone do zasilania. W przeciwnym razie zwracany jest zintegrowany GPU. Zobacz zmianę 4499307.

Poprawianie wrażeń deweloperów

Nowe ostrzeżenia w Narzędziach deweloperskich

Jeśli w polu GPUExtend3DDict używany jest klucz depth, w konsoli Narzędzi deweloperskich wyświetla się ostrzeżenie, ponieważ poprawny klucz to depthOrArrayLayers. Zobacz problem chromium:1440900.

Ostrzeżenie pojawia się też wtedy, gdy GPUBlendComponent zawiera zarówno użytkowników wulgarnych, jak i domyślnych. Zapoznaj się z problemem świt:1785.

Chociaż przesyłanie i losowania o zerowym rozmiarze są prawidłowe, deweloperzy mają ostrzeżenie zachęcone do ich unikania, gdy to możliwe. Zapoznaj się z problemem świt:1786.

Lepsze komunikaty o błędach

Jeśli używasz już funkcji GPUCommandEncoder, jeśli aplikacja finish() została już wywołana, wyświetlany jest ulepszony komunikat o błędzie. Zobacz problem świt:1736.

Podczas przesyłania buforów poleceń ze zniszczonymi obiektami etykiety buforów poleceń używanych w narzędziu submit() są teraz widoczne w komunikacie o błędzie. Zapoznaj się z problemem świt:1747.

Podczas weryfikacji depthStencil w komunikacie o błędzie jest teraz określona nieprawidłowa część stanu szablonu głębi. Zobacz problem świt:1735.

Komunikat o błędzie weryfikacji minBindingSize zawiera teraz grupę i numer powiązania, które nie udało się zweryfikować, a także bufor. Zobacz problem: świt:1604.

Komunikaty o błędach zwracane przez metodę mapAsync() w obiekcie GPUBuffer zostały ulepszone, aby ułatwić deweloperom debugowanie. Zobacz przykład poniżej i sprawdź problem z chromium:1431622.

// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);

// Before it has been mapped, request another mapping.
try {
  await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
  // New! Error message tells you mapping is already pending.
  console.warn(error.message);
}

Etykiety w narzędziach do debugowania systemu macOS

Przełącznik debugowania w usłudze use_user_defined_labels_in_backend umożliwia przekazywanie etykiet obiektów do backendu, aby można je było wyświetlać w narzędziach do debugowania związanych z konkretną platformą, takich jak RenderDoc, PIX czy Instruments. Od teraz, gdy włączysz debugowanie w systemie macOS, będziesz mieć dostęp do lepszych funkcji debugowania. Zobacz problem o świcie:1784

Zrzut ekranu aplikacji Instruments na urządzeniu z macOS z etykietami własnymi pochodzącymi z WebGPU.
Etykiety zdefiniowane przez użytkownika w aplikacji Instruments na urządzeniu z macOS.

Rejestruj HLSL, jeśli kompilacja się nie uda

Przełącznik debugowania w trybie dump_shaders umożliwia rejestrowanie wejściowych cieniowania WGSL i tłumaczonych backendów cieniowania. Od tej pory, gdy włączysz ją do debugowania, plik HLSL będzie zrzucany, jeśli kompilacja się nie uda. Zobacz problem o świcie:1681

Aktualizacje o świcie

Nieskonfigurowany bufor wierzchołków

Przekazanie nullptr zamiast wgpu::Buffer na SetVertexBuffer() na wgpu::RenderPassEncoder lub wgpu::RenderBundleEncoder umożliwia cofnięcie ustawionego wcześniej bufora wierzchołków w danym boksie. Zapoznaj się z problemem świt:1675.

// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);

Przyłącza tymczasowe

Możesz tworzyć załączniki, które pozwalają na pozostawienie operacji renderowania w pamięci kafelków w pamięci kafelków, co pozwala uniknąć ruchu VRAM i potencjalnie omijania alokacji VRAM dla tekstur przez ustawienie użycia funkcji wgpu::TextureUsage::TransientAttachment. Ta funkcja jest obsługiwana tylko w przypadku Metal i Vulkan. Zobacz problem: 1695.

wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
             wgpu::TextureUsage::TransientAttachment;

auto transientTexture = device.CreateTexture(&desc);

// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.

Budynek bez depot_tools

Nowa opcja CMake w DAWN_FETCH_DEPENDENCIES umożliwia pobieranie zależności Dawn za pomocą skryptu Pythona, który odczytuje pliki DEPS, zamiast wymagać instalacji depot_tools we wszystkich projektach, które od niego zależą. Zobacz zmianę 131750.

Co nowego w WebGPU

Lista wszystkiego, co zostało omówione w serii Co nowego w WebGPU.

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