Liczba funkcji WebGPU może wydawać się tym razem uciążliwa, ale wkrótce nastąpią istotne postępy. Przyszłe wersje będą zawierać funkcje takie jak poprawa szybkości kompilacji shaderów i zmiany w modelu asynchronicznym implementacji za pomocą WGPUFuture.
Podgrupy (funkcja w fazie rozwoju)
Funkcja podgrup umożliwia równoległość na poziomie SIMD, umożliwiając wątkom w grupie komunikację i wykonywanie zbiorczych operacji matematycznych (np. sumowanie 16 liczb). Jest to bardzo wydajna forma udostępniania danych w różnych wątkach.
Operacje dotyczące podgrup są obsługiwane przez nowoczesne interfejsy API GPU, ale szczegóły dotyczące nazewnictwa i implementacji różnią się. Zespół Chrome zidentyfikował podobieństwa i pracuje teraz nad ujednoliceniem tej funkcji. Jeśli masz pytania, zapoznaj się z ofertą pakietową i komentarzem.
W flagach „Funkcje eksperymentalnej platformy internetowej” chrome://flags/#enable-experimental-web-platform-features
jest minimalna i niestandardowa implementacja podgrup, aby deweloperzy mogli je wypróbować i przekazać opinię. W kontekście WebGPU korzyści w praktyce nie zostały jeszcze udowodnione.
Gdy funkcja "chromium-experimental-subgroups"
będzie dostępna w GPUAdapter
, poproś o GPUDevice
z tą funkcją, aby uzyskać wsparcie dla eksperymentalnych podgrup w WGSL, i sprawdź limity minSubgroupSize
i maxSubgroupSize
.
Rozszerzenie musisz też włączyć w kodzie WGSL za pomocą atrybutu enable chromium_experimental_subgroups
. Po włączeniu tej opcji uzyskasz dostęp do tych funkcji:
subgroup_invocation_id
: wbudowana wartość indeksu wątku w podgrupie.subgroup_size
: wbudowana wartość dostępu do rozmiaru podgrupy.subgroupBallot(value):
zwraca zestaw pól bitowych, gdzie bit odpowiadający funkcjisubgroup_invocation_id
ma wartość 1, jeśli parametrvalue
ma wartość prawda w przypadku tego aktywnego wywołania, lub 0 w przeciwnym razie.subgroupBroadcast(value, id)
: rozgłaszavalue
z wywołania zsubgroup_invocation_id
pasującym doid
we wszystkich wywołaniach w podgrupie. Uwaga:id
musi być stałą wartościową kompilacji.
Poniższy fragment kodu stanowi podstawę do eksperymentowania i odkrywania możliwości podgrup.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable chromium_experimental_subgroups;
@compute @workgroup_size(64) fn main(
@builtin(global_invocation_id) global_id : vec3u,
@builtin(subgroup_size) sg_size : u32,
@builtin(subgroup_invocation_id) sg_id : u32) {
// TODO: Use subgroupBallot() and subgroupBroadcast().
}`,
});
Renderowanie na potrzeby wycinka tekstury 3D
Dzięki nowemu parametrowi depthSlice
w GPURenderPassColorAttachment
możesz teraz renderować bezpośrednio na slajdy tekstur 3D w ramach przejść renderowania, co zwiększa możliwości programu poza zwykłym renderowaniem tekstur 2D. Dzięki temu można na przykład tworzyć sceny i efekty oparte na wokselach, renderując je bezpośrednio do objętości tekstur 3D. Zobacz problem: świt:1020.
Aktualizacje o świcie
Zobacz pełną listę zatwierdzeń.
Co nowego w WebGPU
Lista wszystkich tematów omawianych w cyklu Co nowego w WebGPU.
Chrome 131
- Odcinki odległości w WGSL
- GPUCanvasContext getConfiguration()
- Elementy podstawowe punktowe i liniowe nie mogą mieć efektu głębi
- Funkcje wbudowane w skanowanie z uwzględnieniem wszystkich grup
- Dodanie eksperymentalnej obsługi pośredniego rysowania wielokrotnego
- Opcja kompilacji modułu shadera: ścisłe obliczenia matematyczne
- Usuwanie metody requestAdapterInfo() klasy GPUAdapter
- Aktualizacje dotyczące Dawn
Chrome 130
- Mieszanie dwóch źródeł
- Skrócenie czasu kompilacji shaderów na Metalu
- Wycofanie metody requestAdapterInfo() klasy GPUAdapter
- Aktualizacje dotyczące Dawn
Chrome 129
- Obsługa HDR w trybie mapowania tonalnego obszaru roboczego
- Rozszerzona obsługa podgrup
- Aktualizacje dotyczące Dawn
Chrome 128
- Eksperymentowanie z podgrupami
- Wycofanie obsługi ustawiania głębi dla linii i punktów
- Ukrywanie ostrzeżenia DevTools o nieuwzględnionym błędzie, jeśli wywołano funkcję preventDefault
- Najpierw spróbuj interpolować próbkowanie WGSL, a następnie:
- Aktualizacje dotyczące Dawn
Chrome 127
- Doświadczalna obsługa OpenGL ES na Androidzie
- Atrybut informacji o karcie GPU
- Ulepszenia współpracy WebAssembly
- Poprawione błędy kodowania poleceń
- Aktualizacje dotyczące Dawn
Chrome 126
- Zwiększenie limitu maxTextureArrayLayers
- Optymalizacja przesyłania bufora dla backendu Vulkana
- Ulepszenia dotyczące czasu kompilacji shaderów
- Przesłane bufory poleceń muszą być unikalne
- Aktualizacje dotyczące Dawn
Chrome 125
- Podgrupy (funkcja w trakcie tworzenia)
- Renderowanie na potrzeby wycinka tekstury 3D
- Aktualizacje dotyczące Dawn
Chrome 124
- Tekstury tylko do odczytu i do odczytu i zapisu
- Obsługa pracowników usług i pracowników wspólnych
- Nowe atrybuty informacji o adapterze
- Poprawki błędów.
- Aktualizacje dotyczące Dawn
Chrome 123
- Obsługa wbudowanych funkcji DP4a w języku WGSL
- Nieograniczone parametry wskaźnika w WGSL
- Składnia cukrowa do odwoływania się do elementów złożonych w WGSL
- Oddzielny stan tylko do odczytu dla stempli i aspektów głębi
- Aktualizacje dotyczące Dawn
Chrome 122
- Zwiększenie zasięgu dzięki trybowi zgodności (funkcja w trakcie tworzenia)
- Zwiększenie limitu maxVertexAttributes
- Informacje o świcie
Chrome 121
- Obsługa WebGPU na Androidzie
- Używanie DXC zamiast FXC do kompilowania shaderów w systemie Windows
- Zapytania o sygnatury czasowe w przelotach obliczeniowych i renderowania
- Domyślne punkty wejścia do modułów shaderów
- Obsługa przestrzeni barw display-p3 jako przestrzeni barw GPUExternalTexture
- Informacje o stertach pamięci
- Aktualizacje dotyczące Dawn
Chrome 120
- Obsługa 16-bitowych wartości zmiennoprzecinkowych w WGSL
- Przesuwaj granice
- Zmiany stanu głębi cieniowania
- Aktualizacje informacji o adapterze
- Kwantyzacja zapytań dotyczących sygnatury czasowej
- Funkcje wiosenne porządki
Chrome 119
- Filtrowalne 32-bitowe tekstury zmiennoprzecinkowe
- Format wierzchołka unorm10-10-10-2
- Format tekstury rgb10a2uint
- Aktualizacje dotyczące Dawn
Chrome 118
- Obsługa HTMLImageElement i ImageData w
copyExternalImageToTexture()
- Eksperymentalna obsługa tekstury pamięci do odczytu i zapisu oraz tylko do odczytu
- Informacje o świcie
Chrome 117
- Bufor wierzchołka nieustawiony
- Cofnij grupę wiązania
- Błędy w przypadku tworzenia asynchronicznego potoku, gdy urządzenie jest utracone
- Aktualizacje dotyczące tworzenia modułów shaderów SPIR-V
- Ułatwienie pracy programistom
- Przetwarzanie za pomocą przepływów z automatycznie wygenerowanym układem
- Informacje o świcie
Chrome 116
- Integracja z WebCodecs
- Urządzenie zgubione zwrócone przez GPUAdapter
requestDevice()
- Odtwarzaj płynnie, gdy wywoływany jest
importExternalTexture()
- Zgodność ze specyfikacją
- Polepszanie wrażeń programistów
- Informacje o świcie
Chrome 115
- Obsługiwane rozszerzenia językowe WGSL
- Wstępna obsługa Direct3D 11
- Uzyskaj oddzielny procesor graficzny domyślnie na zasilaniu z sieci
- Ułatwienie pracy programistom
- Informacje o świcie
Chrome 114
- Optymalizacja kodu JavaScript
- getCurrentTexture() na nieskonfigurowanym płótnie powoduje błąd InvalidStateError
- Aktualizacje WGSL
- Aktualizacje dotyczące Dawn