Tym razem liczba funkcji korzystających z WebGPU może wydawać się nieco niewystarczająca, ale kilka kolejnych ulepszeń jest już w fazie rozwoju. W kolejnych wersjach wprowadzimy takie funkcje jak ulepszenia szybkości kompilacji programu do cieniowania i zmiany w asynchronicznym modelu implementacji korzystającej z WGPUFuture.
Podgrupy (funkcja w trakcie opracowywania)
Funkcja podgrup umożliwia równoległość na poziomie SIMD, umożliwiając wątkom w grupie komunikację i wykonywanie zbiorowych operacji matematycznych (na przykład obliczanie sumy 16 liczb). Zapewnia to bardzo skuteczną formę udostępniania danych między wątkami.
Operacje na podgrupach są obsługiwane przez nowoczesne interfejsy API GPU, ale nazwy i szczegóły implementacji są różne. Zespół Chrome dostrzegł cechy wspólne i pracuje teraz nad ujednoliceniem tej funkcji. Jeśli masz pytania, zapoznaj się z propozycją i komentarzem.
Flaga „Eksperymentalne funkcje platformy internetowej” na chrome://flags/#enable-experimental-web-platform-features
obejmuje minimalne i niestandaryzowane podgrupy, dzięki czemu deweloperzy mogą wypróbować tę funkcję i podzielić się opinią, ponieważ rzeczywiste korzyści nie zostały jeszcze potwierdzone w kontekście WebGPU.
Gdy funkcja "chromium-experimental-subgroups"
będzie dostępna w GPUAdapter
, poproś o GPUDevice
z tą funkcją, aby uzyskać pomoc dotyczącą podgrup eksperymentalnych w WGSL i sprawdzić limity minSubgroupSize
i maxSubgroupSize
.
Musisz też wyraźnie włączyć to rozszerzenie w kodzie WGSL za pomocą enable chromium_experimental_subgroups
. Gdy włączysz tę funkcję, uzyskasz dostęp do tych dodatków:
subgroup_invocation_id
: wbudowana wartość indeksu wątku w podgrupie.subgroup_size
: wbudowana wartość dostępu do rozmiaru podgrupy.subgroupBallot(value):
zwraca zbiór pól bitowych, w których bit odpowiadający bitowisubgroup_invocation_id
ma wartość 1, jeśli dla danego aktywnego wywołania zasadavalue
ma wartość prawda. W przeciwnym razie zwraca wartość 0.subgroupBroadcast(value, id)
: rozgłaszavalue
z wywołania z wartościąsubgroup_invocation_id
odpowiadającąid
do wszystkich wywołań w podgrupie. Uwaga:id
musi być stałą w czasie kompilacji.
Poniższy fragment kodu stanowi podstawę do majsterkowania i odkrywania potencjału 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().
}`,
});
Renderuj na wycinku tekstury 3D
Dzięki nowemu elementowi depthSlice
w GPURenderPassColorAttachment
możesz teraz renderować bezpośrednio na wycinkach tekstur 3D w ramach procesów renderowania, co wykracza poza typowe renderowanie tekstur 2D. Umożliwia to na przykład tworzenie scen i efektów opartych na woksele przez renderowanie bezpośrednio w objętości tekstur 3D. Zobacz Data wydania:1020.
Powiadomienia o świcie
Zobacz pełną listę zatwierdzeń.
Co nowego w WebGPU
Lista wszystkich zagadnień omówionych w serii Co nowego w WebGPU.
Chrome 125
Chrome 124
- Tekstury pamięci masowej tylko do odczytu i do odczytu i zapisu
- Skrypty service worker i współdzielone zasoby robocze – pomoc
- Nowe atrybuty informacji o adapterze
- Poprawki błędów
- Informacje o Dawn
Chrome 123
- Obsługa wbudowanych funkcji DP4a w języku WGSL
- Nieograniczone parametry wskaźnika w WGSL
- Cukier składniowy do usuwania linków do kompozytów w WGSL
- Oddzielny stan tylko do odczytu dla aspektów szablonu i głębi
- Informacje o Dawn
Chrome 122
- Rozszerzanie zasięgu dzięki trybowi zgodności (funkcja w fazie opracowywania)
- Zwiększ limit maxVertexAttributes
- Informacje o Dawn
Chrome 121
- Obsługa WebGPU na urządzeniach z Androidem
- Do kompilacji programu do cieniowania w systemie Windows użyj DXC zamiast FXC
- Zapytania o sygnaturę czasową podczas obliczeń obliczeniowych i renderowania
- Domyślne punkty wejścia do modułów cieniowania
- Obsługuj parametr display-p3 jako przestrzeń kolorów GPUExternalTexture
- Informacje o sterach pamięci
- Informacje o Dawn
Chrome 120
- Obsługa 16-bitowych wartości zmiennoprzecinkowych w języku WGSL
- Przekrocz granice
- Zmiany stanu szablonu głębi
- Aktualizacje informacji o adapterze
- Kwantyzowanie zapytań dotyczących sygnatury czasowej
- Funkcje Wiosenne porządki
Chrome 119
- Filtrowanie 32-bitowych tekstur pływających
- formacie wierzchołków unorm10-10-10-2
- Format tekstury rgb10a2uint
- Informacje o Dawn
Chrome 118
- Obsługa formatów HTMLImageElement i ImageData w interfejsie
copyExternalImageToTexture()
- Eksperymentalna obsługa tekstur pamięci masowej tylko do odczytu i zapisu oraz tylko do odczytu
- Informacje o Dawn
Chrome 117
- Nieustawiony bufor wierzchołków
- Cofnij ustawienie grupy powiązań
- Wyciszanie błędów podczas tworzenia potoku asynchronicznego w przypadku utraty urządzenia
- Aktualizacje dotyczące tworzenia modułu cieniowania SPIR-V
- Poprawianie wrażeń deweloperów
- Potoki w pamięci podręcznej z układem generowanym automatycznie
- Informacje o Dawn
Chrome 116
- Integracja z WebCodecs
- Zgubione urządzenie zwrócone przez GPUAdapter
requestDevice()
- Zapewniaj płynne odtwarzanie filmu, jeśli zostanie wywołany element
importExternalTexture()
- Zgodność ze specyfikacją
- Poprawianie wrażeń deweloperów
- Informacje o Dawn
Chrome 115
- Obsługiwane rozszerzenia języka WGSL
- Eksperymentalna obsługa Direct3D 11
- Domyślnie korzystaj z dyskretnego GPU na zasilaniu sieciowym
- Poprawianie wrażeń deweloperów
- Informacje o Dawn
Chrome 114
- Optymalizacja JavaScriptu
- Funkcja getCurrentTexture() w nieskonfigurowanym obszarze roboczym zgłasza nieprawidłową wartość błędu
- Aktualizacje WGSL
- Informacje o Dawn