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 w przyszłości możesz się spodziewać wielu takich problemów (np. do-while loops). Zobacz issue dawn:1777.

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

Eksperymentalna obsługa Direct3D 11

Zespół Chromium pracuje nad dodaniem obsługi WebGPU dla interfejsu Direct3D 11. Możesz teraz eksperymentować z tą funkcją lokalnie, uruchamiając Chrome na komputerze z Windows z flagami wiersza poleceń --enable-unsafe-webgpu --use-webgpu-adapter=d3d11. Zobacz issue dawn:1705.

Domyślnie dyskretny GPU przy zasilaniu sieciowym

Na urządzeniach z systemem macOS z podwójnym procesorem graficznym, jeśli wywołanie requestAdapter() nie zawiera opcji powerPreference, zwracany jest procesor graficzny z oddzielną pamięcią, gdy urządzenie użytkownika jest zasilane z sieci. W przeciwnym razie zwracany jest zintegrowany procesor graficzny. Zobacz zmianę 4499307.

Ulepszenie środowiska programisty

Nowe ostrzeżenia w Narzędziach deweloperskich

Jeśli w elementach GPUExtend3DDict jest używany klucz depth, w konsoli Narzędzia deweloperskie wyświetla się ostrzeżenie, ponieważ poprawnym kluczem jest depthOrArrayLayers. Zobacz problem chromium:1440900.

Ostrzeżenie pojawia się też wtedy, gdy GPUBlendComponent zawiera zarówno użytkowników wulgarnych, jak i domyślnych. Zobacz issue dawn:1785.

Mimo że wysyłanie i wybieranie danych o rozmiarze 0 jest prawidłowe, wyświetlane jest ostrzeżenie, aby zachęcić deweloperów do unikania takich sytuacji. Zobacz issue dawn: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 issue dawn:1736.

Podczas przesyłania zasobników poleceń z zniszczonymi obiektami etykiety zasobników poleceń, które były używane w submit(), są teraz widoczne w komunikacie o błędzie. Zapoznaj się z problemem świt:1747.

Nieprawidłowa część stanu szablonu głębi jest teraz określana w komunikacie o błędzie podczas weryfikacji depthStencil. Zobacz issue dawn: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 issue dawn:1604.

Komunikaty o błędach zwracane przez metodę mapAsync() w obiekcie GPUBuffer zostały ulepszone, aby ułatwić deweloperom debugowanie. Poniżej znajdziesz przykład i problem 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 debugowania w systemie macOS

Przełącznik debugowania use_user_defined_labels_in_backend umożliwia przekierowywanie etykiet obiektów do backendu, aby były widoczne w narzędziach debugowania dla poszczególnych platform, takich jak RenderDoc, PIX czy Instruments. Od teraz, gdy włączysz debugowanie w systemie macOS, będziesz mieć lepsze możliwości debugowania. Zobacz problem o świcie:1784

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

W przypadku niepowodzenia kompilacji zapisz plik HLS

Przełącznik debugowania w trybie dump_shaders umożliwia rejestrowanie wejściowych cieniowania WGSL i tłumaczonych backendów cieniowania. Od teraz, gdy włączysz tę opcję na potrzeby debugowania, kod HLSL zostanie zdumpowany, jeśli nie uda się go skompilować. Zobacz problem o świcie:1681

Aktualizacje o świcie

Nieskonfigurowany bufor wierzchołka

Przekazywanie wartości nullptr zamiast wgpu::Buffer do funkcji SetVertexBuffer() w funkcji wgpu::RenderPassEncoder lub wgpu::RenderBundleEncoder umożliwia zresetowanie wcześniej ustawionego bufora wierzchołków w danym gnieździe. Zobacz issue dawn:1675.

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

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

Załączniki przejściowe

Możesz tworzyć załączniki, które umożliwiają operacjom na renderowaniu pozostawanie w pamięci płytek, unikając ruchu VRAM i możliwie przydzielanie VRAM do tekstur, ustawiając użycie wgpu::TextureUsage::TransientAttachment. Ta funkcja jest obsługiwana tylko w przypadku Metal i Vulkan. Zobacz problem dawn: 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 wszystkich tematów omawianych w cyklu Co nowego w WebGPU.

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