Eksperymentowanie z podgrupami
Funkcja podgrup umożliwia równoległość na poziomie SIMD, dzięki czemu wątki w grupie mogą się komunikować i wykonywać zbiorcze operacje matematyczne (np. obliczać sumę 16 liczb). Zapewnia to bardzo wydajną formę udostępniania danych między wątkami.
Minimalna implementacja propozycji podgrup jest dostępna do testowania lokalnego za flagą „Unsafe WebGPU Support” (Niebezpieczne wsparcie WebGPU) pod adresem chrome://flags/#enable-unsafe-webgpu.
Możesz też wypróbować podgrupy w swojej witrynie z udziałem prawdziwych użytkowników, rejestrując się w programie testowania origin. Instrukcje dotyczące przygotowania witryny do korzystania z okresów próbnych znajdziesz w artykule Rozpoczynanie korzystania z okresów próbnych. Testowanie origin będzie prowadzone od Chrome 128 do 131 (zakończy się 19 lutego 2025 r.). Zobacz Zamiar przeprowadzenia eksperymentu.
Gdy funkcja "subgroups" będzie dostępna w GPUAdapter, poproś o GPUDevice z tą funkcją, aby uzyskać obsługę podgrup w WGSL, i sprawdź jej limity minSubgroupSize i maxSubgroupSize.
Musisz też wyraźnie włączyć to rozszerzenie w kodzie WGSL za pomocą enable subgroups;. Po włączeniu tej opcji 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 zestaw pól bitowych, w którym bit odpowiadający wartościsubgroup_invocation_idma wartość 1, jeślivaluema wartość true w przypadku aktywnego wywołania, a w przeciwnym razie – 0.subgroupBroadcast(value, id): wysyłavaluez wywołania z parametremsubgroup_invocation_idpasującym doiddo wszystkich wywołań w podgrupie. Uwaga:idmusi być stałą w czasie kompilacji.
W przyszłości dodamy więcej wbudowanych funkcji, takich jak subgroupAdd, subgroupAll, subgroupElect i subgroupShuffle. Zobacz problem 354738715.
Aby zezwolić na f16 w operacjach podgrup, poproś o GPUDevice z funkcjami "subgroups", "subgroups-f16" i "shader-f16", a następnie włącz go w kodzie WGSL za pomocą enable f16, subgroups, subgroups_f16;.
Poniższy fragment kodu to podstawa, na której możesz eksperymentować i odkrywać potencjał podgrup.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
throw new Error("Subgroups support is not available");
}
// Explicitly request subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable subgroups;
var<workgroup> wgmem : u32;
@group(0) @binding(0)
var<storage, read> inputs : array<u32>;
@group(0) @binding(1)
var<storage, read_write> output : array<u32>;
@compute @workgroup_size(64)
fn main(@builtin(subgroup_size) subgroupSize : u32,
@builtin(subgroup_invocation_id) id : u32,
@builtin(local_invocation_index) lid : u32) {
// One thread per workgroup writes the value to workgroup memory.
if (lid == 0) {
wgmem = inputs[lid];
}
workgroupBarrier();
var v = 0u;
// One thread per subgroup reads the value from workgroup memory
// and shares that value with every other thread in the subgroup
// to reduce local memory bandwidth.
if (id == 0) {
v = wgmem;
}
v = subgroupBroadcast(v, 0);
output[lid] = v;
}`,
});
// Send the appropriate commands to the GPU...
Wycofanie ustawiania odchylenia głębi dla linii i punktów
Zmiana specyfikacji WebGPU powoduje, że ustawienie wartości depthBias, depthBiasSlopeScale i depthBiasClamp na wartość inną niż zero, gdy topologia potoku renderowania jest typu linia lub punkt, jest błędem weryfikacji. Aby dać deweloperom wystarczająco dużo czasu na zaktualizowanie kodu, w konsoli Narzędzi deweloperskich wyświetlane jest ostrzeżenie o nadchodzącej weryfikacji, a w tych okolicznościach wartości są wymuszane na 0. Zobacz problem 352567424.
Ukrywanie ostrzeżenia Narzędzi deweloperskich o nieprzechwyconym błędzie, jeśli użyto metody preventDefault
W konsoli Narzędzi deweloperskich nie są już wyświetlane ostrzeżenia dotyczące zdarzeń uncapturederror, jeśli zarejestrowano detektor zdarzeń uncapturederror, a w wywołaniu zwrotnym detektora zdarzeń wywołano metodę preventDefault() zdarzenia. Działa to tak samo jak obsługa zdarzeń w JavaScript. Zapoznaj się z tym przykładem i problemem 40263619.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
device.addEventListener("uncapturederror", (event) => {
// Prevents browser warning to show up in the DevTools Console.
event.preventDefault();
// TODO: Handle event.error
});
Najpierw próbkowanie interpolacyjne WGSL, a następnie:
Atrybut WGSL interpolate umożliwia zarządzanie interpolacją danych wejścia/wyjścia zdefiniowanych przez użytkownika. Nowe parametry próbkowania interpolacyjnego first (domyślny) i either zapewniają dodatkową kontrolę: first używa wartości z pierwszego wierzchołka prymitywu, a either umożliwia użycie pierwszego lub ostatniego wierzchołka. Zobacz problem 340278447.
Aktualizacje Dawn
Wdrożenie WGPUFuture w Dawn do obsługi operacji asynchronicznych zostało zakończone. Kluczowe koncepcje obejmują wgpuInstanceProcessEvents do oportunistycznego przetwarzania zdarzeń i WGPUCallbackMode do definiowania lokalizacji wywołań zwrotnych. WGPUFuture oznacza jednorazowe zdarzenia o nieskończonym czasie trwania, a wgpuInstanceWaitAny czeka na zakończenie dowolnego przyszłego zdarzenia lub na upłynięcie limitu czasu. Zobacz problem 42240932.
Wartość CompositeAlphaMode::Auto nie jest już raportowana przez Surface::GetCapabilities(). Jest nadal ważny i odpowiada wartości Surface::GetCapabilities().alphaMode[0]. Zobacz problem 292.
Backend OpenGL obsługuje teraz Surface z operacją blit z odwróceniem w osi Y dla każdego wywołania Present(). Zobacz problem 344814083.
Metoda Adapter::GetProperties() została wycofana na rzecz metody Adapter::GetInfo().
Jaswant, zewnętrzny współtwórca, przepisał wszystkie pliki CMake, dzięki czemu łatwiej je aktualizować i umożliwiają one wstępne kompilowanie. Zapoznaj się z krótkim przewodnikiem po używaniu Dawn w projektach CMake.
To tylko niektóre z najważniejszych informacji. Zapoznaj się z pełną listą zatwierdzeń.
Co nowego w WebGPU
Lista wszystkich tematów omówionych w serii Nowości w WebGPU.
Chrome 155–156
- Rozszerzenie WGSL fragment_depth
- Niezgodna kompresja tekstur
- przestrzenie kolorów srgb-linear i display-p3-linear
- Dodatkowy format wierzchołka snorm10-10-10-2
- Obsługa formatu f16 w systemie Linux na urządzeniach NVIDIA
- Aktualizacje dotyczące Dawn
Chrome 153–154
- Rozszerzenie WGSL buffer_view
- Rozszerzenie WGSL swizzle_assignment
- Aktualizacje rozszerzeń WGSL
- Aktualizacje dotyczące Dawn
Chrome 151–152
- Kontrola rozmiaru podgrupy
- OperationError w przypadku błędów weryfikacji setImmediates
- Aktualizacje dotyczące Dawn
Chrome 149-150
Chrome 147–148
Chrome 146
- Obsługa trybu zgodności WebGPU w OpenGL ES 3.1
- Załączniki tymczasowe
- Rozszerzenie WGSL texture_and_sampler_let
- Aktualizacje dotyczące Dawn
Chrome 145
- Rozszerzenie WGSL subgroup_uniformity
- Eksperymentalne synchroniczne mapowanie bufora w procesach roboczych
- Aktualizacje dotyczące Dawn
Chrome 144
- Rozszerzenie WGSL subgroup_id
- Rozszerzenie WGSL uniform_buffer_standard_layout
- WebGPU w systemie Linux
- Szybsze funkcje writeBuffer i writeTexture
- Aktualizacje dotyczące Dawn
Chrome 143
- Przekształcenie komponentu tekstury
- Usuwanie użycia tekstury pamięci tylko do odczytu bgra8unorm
- Aktualizacje dotyczące Dawn
Chrome 142
- Rozszerzone możliwości obsługi formatów tekstur
- Indeks typu pierwotnego w WGSL
- Aktualizacje dotyczące Dawn
Chrome 141
- Zakończono kalibrację odcieni IR
- Analiza zakresu liczb całkowitych w kompilatorze WGSL
- Aktualizacja SPIR-V 1.4 dla backendu Vulkan
- Aktualizacje dotyczące Dawn
Chrome 140
- Żądania dotyczące urządzeń wykorzystują adapter
- Skrót do używania tekstury w miejscu, w którym używany jest widok tekstury
- Funkcja WGSL textureSampleLevel obsługuje tekstury 1D
- Wycofanie użycia tekstury pamięci tylko do odczytu bgra8unorm
- Usunięcie atrybutu GPUAdapter isFallbackAdapter
- Aktualizacje dotyczące Dawn
Chrome 139
- Obsługa tekstur 3D w przypadku formatów skompresowanych BC i ASTC
- Nowa funkcja „core-features-and-limits”
- Testowanie origin trybu zgodności WebGPU
- Aktualizacje dotyczące Dawn
Chrome 138
- Skrót do używania bufora jako zasobu wiążącego
- Zmiany wymagań dotyczących rozmiaru buforów zmapowanych podczas tworzenia
- Raport o architekturze najnowszych układów GPU
- Wycofanie atrybutu GPUAdapter isFallbackAdapter
- Aktualizacje dotyczące Dawn
Chrome 137
- Używanie widoku tekstury do powiązania externalTexture
- Kopiowanie buforów bez określania przesunięć i rozmiaru
- WGSL workgroupUniformLoad using pointer to atomic
- Atrybut powerPreference interfejsu GPUAdapterInfo
- Usunięcie atrybutu compatibilityMode z interfejsu GPURequestAdapterOptions
- Aktualizacje dotyczące Dawn
Chrome 136
- Atrybut GPUAdapterInfo isFallbackAdapter
- Krótszy czas kompilacji shaderów w D3D12
- Zapisywanie i kopiowanie obrazów z płótna
- Ograniczenia trybu zgodności pomiaru wzrostu
- Aktualizacje dotyczące Dawn
Chrome 135
- Zezwalanie na tworzenie układu potoku z układem grupy wiązań o wartości null
- Zezwalaj na wykraczanie obszarów widoku poza granice docelowych obszarów renderowania
- Łatwiejszy dostęp do eksperymentalnego trybu zgodności na Androidzie
- Usunięcie limitu maxInterStageShaderComponents
- Aktualizacje dotyczące Dawn
Chrome 134
- Ulepszanie zadań uczenia maszynowego za pomocą podgrup
- Usuwanie obsługi typów tekstur z możliwością filtrowania zmiennoprzecinkowego jako mieszanych
- Aktualizacje dotyczące Dawn
Chrome 133
- Dodatkowe formaty wierzchołków unorm8x4-bgra i 1-component
- Zezwalaj na wysyłanie próśb o nieznane limity z niezdefiniowaną wartością
- Zmiany w regułach wyrównania WGSL
- Wzrost wydajności WGSL dzięki odrzucaniu
- Używanie parametru displaySize w przypadku tekstur zewnętrznych
- Obsługa obrazów o orientacji innej niż domyślna za pomocą funkcji copyExternalImageToTexture
- Zwiększanie komfortu pracy deweloperów
- Włączanie trybu zgodności za pomocą parametru featureLevel
- Usuwanie funkcji eksperymentalnych podgrup
- Wycofanie limitu maxInterStageShaderComponents
- Aktualizacje dotyczące Dawn
Chrome 132
- Wykorzystanie widoku tekstury
- Mieszanie tekstur zmiennoprzecinkowych 32-bitowych
- Atrybut adapterInfo interfejsu GPUDevice
- Konfigurowanie kontekstu elementu canvas w nieprawidłowym formacie powoduje błąd JavaScriptu
- Ograniczenia dotyczące próbkowania tekstur
- Eksperymentowanie z rozszerzonymi podgrupami
- Zwiększanie komfortu pracy deweloperów
- Eksperymentalna obsługa 16-bitowych znormalizowanych formatów tekstur
- Aktualizacje dotyczące Dawn
Chrome 131
- Obcinanie odległości w WGSL
- GPUCanvasContext getConfiguration()
- Elementy pierwotne punktów i linii nie mogą mieć odchylenia głębi
- Wbudowane funkcje skanowania uwzględniającego podgrupy
- Eksperymentalna obsługa pośredniego pobierania wielu środków
- Opcja kompilacji modułu cieniowania ścisłe obliczenia matematyczne
- Usunięcie metody GPUAdapter requestAdapterInfo()
- Aktualizacje dotyczące Dawn
Chrome 130
- Miksowanie z 2 źródeł
- Krótszy czas kompilacji shaderów w Metal
- Wycofanie metody GPUAdapter requestAdapterInfo()
- Aktualizacje dotyczące Dawn
Chrome 129
- Obsługa HDR w trybie mapowania odcieni na płótnie
- Rozszerzona obsługa podgrup
- Aktualizacje dotyczące Dawn
Chrome 128
- Eksperymentowanie z podgrupami
- Wycofanie ustawiania odchylenia głębi dla linii i punktów
- Ukrywanie ostrzeżenia Narzędzi deweloperskich o nieprzechwyconym błędzie, jeśli użyto metody preventDefault
- WGSL interpolate sampling first and either
- Aktualizacje dotyczące Dawn
Chrome 127
- Eksperymentalna obsługa OpenGL ES na Androidzie
- Atrybut info interfejsu GPUAdapter
- Ulepszenia interoperacyjności WebAssembly
- Ulepszone błędy kodera poleceń
- Aktualizacje dotyczące Dawn
Chrome 126
- Zwiększanie limitu maxTextureArrayLayers
- Optymalizacja przesyłania bufora w przypadku backendu Vulkan
- Ulepszenia czasu kompilacji shaderów
- Przesłane bufory poleceń muszą być unikalne
- Aktualizacje dotyczące Dawn
Chrome 125
- Podgrupy (funkcja w trakcie opracowywania)
- Renderowanie do wycinka tekstury 3D
- Aktualizacje dotyczące Dawn
Chrome 124
- Tekstury pamięci tylko do odczytu i do odczytu i zapisu
- Obsługa skryptów service worker i shared worker
- Nowe atrybuty informacji o adapterze
- Poprawki błędów
- Aktualizacje dotyczące Dawn
Chrome 123
- Obsługa wbudowanych funkcji DP4a w WGSL
- Parametry wskaźnika bez ograniczeń w WGSL
- Lukier składniowy dla dereferencji typów złożonych w WGSL
- Oddzielny stan tylko do odczytu dla aspektów szablonu i głębi
- Aktualizacje dotyczące Dawn
Chrome 122
- Zwiększanie zasięgu dzięki trybowi zgodności (funkcja w trakcie opracowywania)
- Zwiększanie limitu maxVertexAttributes
- Aktualizacje dotyczące Dawn
Chrome 121
- Obsługa WebGPU na Androidzie
- Używanie DXC zamiast FXC do kompilacji shaderów w systemie Windows
- Zapytania o sygnaturę czasową w przypadku obliczeń i renderowania
- Domyślne punkty wejścia do modułów cieniowania
- Obsługa przestrzeni kolorów display-p3 jako przestrzeni kolorów GPUExternalTexture
- Informacje o obszarach pamięci
- Aktualizacje dotyczące Dawn
Chrome 120
- Obsługa 16-bitowych wartości zmiennoprzecinkowych w WGSL
- Przekraczaj granice
- Zmiany stanu bufora głębi i szablonu
- Aktualizacje informacji o adapterze
- Kwantyzacja zapytań dotyczących sygnatur czasowych
- Funkcje wiosennych porządków
Chrome 119
- Filtrowane tekstury zmiennoprzecinkowe 32-bitowe
- unorm10-10-10-2 vertex format
- Format tekstury rgb10a2uint
- Aktualizacje dotyczące Dawn
Chrome 118
- Obsługa elementów HTMLImageElement i ImageData w
copyExternalImageToTexture() - Eksperymentalna obsługa tekstury pamięci masowej do odczytu i zapisu oraz tylko do odczytu
- Aktualizacje dotyczące Dawn
Chrome 117
- Usuwanie bufora wierzchołków
- Usuwanie grupy powiązań
- Wyciszanie błędów podczas tworzenia asynchronicznego potoku, gdy urządzenie zostanie utracone
- Aktualizacje tworzenia modułu cieniowania SPIR-V
- Zwiększanie komfortu pracy deweloperów
- Buforowanie potoków z automatycznie generowanym układem
- Aktualizacje dotyczące Dawn
Chrome 116
- Integracja WebCodecs
- Utracone urządzenie zwrócone przez GPUAdapter
requestDevice() - Zapewnij płynne odtwarzanie filmu, jeśli wywołana zostanie funkcja
importExternalTexture() - Zgodność ze specyfikacją
- Zwiększanie komfortu pracy deweloperów
- Aktualizacje dotyczące Dawn
Chrome 115
- Obsługiwane rozszerzenia języka WGSL
- Eksperymentalna obsługa Direct3D 11
- Domyślne korzystanie z osobnego procesora graficznego po podłączeniu do zasilania sieciowego
- Zwiększanie komfortu pracy deweloperów
- Aktualizacje dotyczące Dawn
Chrome 114
- Optymalizacja JavaScriptu
- getCurrentTexture() w przypadku nieskonfigurowanego elementu canvas zgłasza błąd InvalidStateError
- Aktualizacje WGSL
- Aktualizacje dotyczące Dawn