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ęzykowych WGSL. Obsługiwane rozszerzenia językowe WGSL są włączane automatycznie, więc nie musisz ich wyraź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 Direct3D 11. Możesz teraz eksperymentować z tą funkcją lokalnie, uruchamiając Chrome w Windows z flagami wiersza poleceń --enable-unsafe-webgpu --use-webgpu-adapter=d3d11. Zobacz issue dawn:1705.

Domyślnie używaj osobnego procesora graficznego na zasilaniu z sieci

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ż, gdy GPUBlendComponent zawiera zarówno użytkowników, którzy mają ustawione domyślne, jak i wyraźne adresy e-mail. Zobacz issue dawn:1785.

Mimo że wysyłanie i wybieranie danych o rozmiarze 0 jest prawidłowe, wyświetlane jest ostrzeżenie, które zachęca deweloperów do unikania takich sytuacji. Zobacz issue dawn:1786.

ulepszone komunikaty o błędach.

Używając funkcji GPUCommandEncoder, otrzymasz teraz ulepszony komunikat o błędzie, jeśli funkcja finish() została już wywołana. 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. Zobacz issue dawn: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 informacje o grupie i numerze powiązania, które nie przeszło weryfikacji, a także o buforze. Zobacz issue dawn:1604.

Aby ułatwić deweloperom debugowanie, ulepszono komunikaty o błędach zwracane przez metodę mapAsync() obiektu GPUBuffer. 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, będziesz mieć lepszy dostęp do funkcji debugowania na komputerze Mac. Zobacz issue dawn:1784

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

W przypadku niepowodzenia kompilacji zapisz plik HLS

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

Aktualizacje świtu

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 pozwalają operacjom na renderowaniu pozostać w pamięci kafelków, unikając ruchu VRAM i potencjalnie unikając przydzielania VRAM dla tekstur przez ustawienie użycia 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.

Budowanie bez depot_tools

Nowa opcja CMake 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 z nich korzystają. 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