Data publikacji: 29 stycznia 2025 r.
Dodatkowe formaty wierzchołków unorm8x4-bgra i 1-komponentowe
Dodano "unorm8x4-bgra"format wierzchołka i te formaty wierzchołków z 1 komponentem: "uint8", "sint8", "unorm8", "snorm8", "uint16", "sint16", "unorm16", "snorm16" i "float16".
Format wierzchołka "unorm8x4-bgra" nieco ułatwia wczytywanie kolorów wierzchołków zakodowanych w formacie BGRA przy zachowaniu tego samego shadera. Dodatkowo format wierzchołka 1-elementowego umożliwia żądanie tylko niezbędnych danych, podczas gdy wcześniej w przypadku 8- i 16-bitowych typów danych wymagana była co najmniej dwukrotnie większa ilość. Zobacz wpis na chromestatus i problem 376924407.
Zezwalanie na wysyłanie próśb o nieznane limity z niezdefiniowaną wartością
Aby interfejs WebGPU API był mniej podatny na błędy w miarę jego rozwoju, możesz teraz podczas wysyłania żądania urządzenia GPU poprosić o nieznane limity, podając wartość undefined. Jest to przydatne np. w tym kodzie aplikacji, gdzie adapter.limits.someLimit może być undefined, jeśli someLimit już nie istnieje. Zobacz specyfikację PR 4781.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice({
requiredLimits: { someLimit: adapter.limits.someLimit }, // someLimit can be undefined
});
Zmiany w regułach wyrównywania WGSL
Nie można już podać zbyt małej wartości wyrównania dla elementu struktury, ponieważ teraz wymagane jest, aby @align(n) dzieliło RequiredAlignOf dla wszystkich struktur. Ta zmiana upraszcza korzystanie z języka WGSL i zwiększa jego zgodność z przeglądarkami Firefox i Safari. Przykładowy kod pokazujący różnice między kompilatorami Tint, Naga i WebKit znajdziesz w specyfikacji PR.
Wzrost wydajności WGSL dzięki instrukcji discard
Ze względu na znaczny spadek wydajności podczas renderowania złożonego efektu odbić w przestrzeni ekranu (SSR) implementacja instrukcji discard korzysta z semantyki dostarczanej przez platformę w celu obniżenia poziomu do wywołania pomocniczego, gdy jest to możliwe. Zwiększa to wydajność shaderów, które używają funkcji discard. Zobacz problem 372714384.
Używanie parametru displaySize w przypadku tekstur zewnętrznych
Wymiary displayWidth i displayHeight powinny być używane jako widoczny rozmiar obiektu GPUExternalTexture podczas importowania obiektu VideoFrame zgodnie ze specyfikacją WebGPU. Jednak nieprawidłowo użyto widocznego rozmiaru, co powodowało problemy podczas próby użycia textureLoad() w obiekcie GPUExternalTexture. Problem został już rozwiązany. Zobacz problem 377574981.
Obsługa obrazów o orientacji innej niż domyślna za pomocą funkcji copyExternalImageToTexture
Metoda copyExternalImageToTexture() GPUQueue służy do kopiowania zawartości obrazu lub obszaru roboczego do tekstury. Obecnie prawidłowo obsługuje obrazy o orientacji innej niż domyślna. Wcześniej tak nie było, gdy źródłem była wartość ImageBitmap z imageOrientation "from-image" lub obraz z orientacją inną niż domyślna. Zobacz problem 384858956.
Ulepszanie środowiska programistycznego
Wartość adapter.limits może być zaskakująco wysoka, ale nie zdajesz sobie sprawy, że podczas żądania urządzenia GPU musisz wyraźnie poprosić o wyższy limit. Jeśli tego nie zrobisz, możesz później nieoczekiwanie osiągnąć limity.
Aby Ci pomóc, rozszerzyliśmy komunikaty o błędach o wskazówki, które informują, że w przypadku braku limitu określonego w requiredLimits podczas wywoływania requestDevice() należy wyraźnie poprosić o wyższy limit. Zobacz problem 42240683.
Poniższy przykład pokazuje ulepszony komunikat o błędzie rejestrowany w konsoli Narzędzi deweloperskich podczas tworzenia bufora GPU o rozmiarze przekraczającym domyślny limit maksymalnego rozmiaru bufora urządzenia.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
// Create a GPU buffer with a size exceeding the default max buffer size device limit.
const size = device.limits.maxBufferSize + 1;
const buffer = device.createBuffer({ size, usage: GPUBufferUsage.MAP_READ });
device.queue.submit([]);
⚠️ Buffer size (268435457) exceeds the max buffer size limit (268435456). This adapter supports a higher maxBufferSize of 4294967296, which can be specified in requiredLimits when calling requestDevice(). Limits differ by hardware, so always check the adapter limits prior to requesting a higher limit. - While calling [Device].CreateBuffer([BufferDescriptor]).
Włączanie trybu zgodności za pomocą parametru featureLevel
Żądanie adaptera GPU w eksperymentalnym trybie zgodności jest teraz możliwe przez ustawienie standardowej opcji featureLevel na "compatibility". Dozwolone są tylko ciągi "core" (wartość domyślna) i "compatibility". Zapoznaj się z tym przykładem i specyfikacją PR 4897.
// Request a GPU adapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
if (adapter?.featureLevel === "compatibility") {
// Any devices created from this adapter will support only compatibility mode.
}
Opcja featureLevel zastępuje niestandaryzowaną opcję compatibilityMode, a niestandaryzowany atrybut featureLevel zastępuje atrybut isCompatibilityMode.
Ponieważ jest to wciąż funkcja eksperymentalna, musisz na razie uruchamiać Chrome z flagą „Unsafe WebGPU Support” (Niebezpieczna obsługa WebGPU) pod adresem chrome://flags/#enable-unsafe-webgpu. Aby wypróbować tę technologię, odwiedź stronę webgpureport.org.
Czyszczenie funkcji eksperymentalnej podgrupy
Wycofane funkcje podgrup eksperymentalnych "chromium-experimental-subgroups" i "chromium-experimental-subgroup-uniform-control-flow" zostaną usunięte. Zobacz problem 377868468.
"subgroups" Funkcja eksperymentalna jest teraz wszystkim, czego potrzebujesz podczas eksperymentowania z podgrupami. "subgroups-f16" Funkcja eksperymentalna została wycofana i wkrótce zostanie usunięta. Wartości f16 możesz stosować w przypadku podgrup, gdy aplikacja wysyła żądania dotyczące funkcji "shader-f16" i "subgroups". Zobacz problem 380244620.
Wycofanie limitu maxInterStageShaderComponents
Limit maxInterStageShaderComponents został wycofany z kilku powodów:
- Nadmiarowość z
maxInterStageShaderVariables: ten limit służy już do podobnego celu, czyli kontrolowania ilości danych przekazywanych między etapami shadera. - Niewielkie rozbieżności: chociaż sposób obliczania tych 2 limitów nieco się różni, różnice te są niewielkie i można nimi skutecznie zarządzać w ramach limitu
maxInterStageShaderVariables. - Uproszczenie: usunięcie
maxInterStageShaderComponentsupraszcza interfejs shadera i zmniejsza złożoność dla programistów. Zamiast zarządzać 2 osobnymi limitami, które różnią się od siebie w niewielkim stopniu, mogą skupić się na bardziej odpowiednim i wszechstronnym limiciemaxInterStageShaderVariables.
Planujemy całkowite usunięcie tej funkcji w Chrome 135. Zobacz intencję wycofania i problem 364338810.
Aktualizacje o świcie
wgpu::Device::GetAdapterInfo(adapterInfo) umożliwia uzyskanie informacji o adapterze bezpośrednio z wgpu::Device. Zobacz problem 376600838.
Struktura WGPUProgrammableStageDescriptor została zmieniona na WGPUComputeState, aby stan obliczeń był zgodny ze stanami wierzchołków i fragmentów. Zobacz problem 379059434.
Wartość wyliczeniowa wgpu::VertexStepMode::VertexBufferNotUsed została usunięta. Układ bufora wierzchołków, który nie jest używany, można teraz oznaczyć symbolem {.stepMode=wgpu::VertexStepMode::Undefined, .attributeCount=0}. Zobacz problem 383147017.
Obejmuje to tylko niektóre z najważniejszych informacji. Zapoznaj się z pełną listą zatwierdzeń.
Nowości w WebGPU
Lista wszystkich tematów omówionych w serii Nowości w WebGPU.
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 barwienie 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 wersji próbnej 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 mapowanych 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 wią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 cieniowania 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
- Usuwanie limitu maxInterStageShaderComponents
- Aktualizacje dotyczące Dawn
Chrome 134
- Ulepszanie zadań systemów uczących się 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 VideoFrame displaySize w przypadku tekstur zewnętrznych
- Obsługa obrazów o orientacji innej niż domyślna za pomocą funkcji copyExternalImageToTexture
- Poprawianie komfortu pracy programistów
- Włączanie trybu zgodności za pomocą parametru featureLevel
- Usuwanie funkcji eksperymentalnych podgrup
- Wycofanie limitu maxInterStageShaderComponents
- Aktualizacje dotyczące Dawn
Chrome 132
- Korzystanie z 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
- Poprawianie komfortu pracy programistó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 obejmującego podgrupy
- Eksperymentalna obsługa rysowania pośredniego w wielu wątkach
- 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 preventDefault
- WGSL interpolate sampling first and either
- Aktualizacje dotyczące Dawn
Chrome 127
- Eksperymentalna obsługa OpenGL ES na Androidzie
- Atrybut informacji GPUAdapter
- Ulepszenia interoperacyjności WebAssembly
- Poprawione błędy kodera poleceń
- Aktualizacje dotyczące Dawn
Chrome 126
- Zwiększanie limitu maxTextureArrayLayers
- Optymalizacja przesyłania bufora na potrzeby backendu Vulkan
- Ulepszenia czasu kompilacji cieniowania
- 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 service workerów i shared workerów
- 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
- Uproszczona składnia 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 cieniowania w systemie Windows
- Zapytania o sygnatury czasowe 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
- Przekraczanie limitów
- 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
- Format wierzchołka unorm10-10-10-2
- Format tekstury rgb10a2uint
- Aktualizacje dotyczące Dawn
Chrome 118
- Obsługa elementów HTMLImageElement i ImageData w
copyExternalImageToTexture() - Eksperymentalna obsługa tekstur pamięci do odczytu i zapisu oraz tylko do odczytu
- Aktualizacje dotyczące Dawn
Chrome 117
- Usuwanie bufora wierzchołków
- Usuwanie powiązania grupy
- Wyciszanie błędów podczas asynchronicznego tworzenia potoku, gdy urządzenie zostanie utracone
- Aktualizacje tworzenia modułu shadera SPIR-V
- Poprawianie komfortu pracy programistów
- Buforowanie potoków z automatycznie generowanym układem
- Aktualizacje dotyczące Dawn
Chrome 116
- Integracja WebCodecs
- Zwrócono utracone urządzenie przez GPUAdapter
requestDevice() - Zapewnij płynne odtwarzanie wideo, jeśli wywoływana jest funkcja
importExternalTexture() - Zgodność ze specyfikacją
- Poprawianie komfortu pracy programistów
- Aktualizacje dotyczące Dawn
Chrome 115
- Obsługiwane rozszerzenia języka WGSL
- Eksperymentalna obsługa Direct3D 11
- Domyślne używanie dyskretnego procesora graficznego przy zasilaniu z sieci
- Poprawianie komfortu pracy programistów
- Aktualizacje dotyczące Dawn
Chrome 114
- Optymalizacja JavaScriptu
- Metoda getCurrentTexture() w przypadku nieskonfigurowanego elementu canvas zgłasza błąd InvalidStateError
- Aktualizacje WGSL
- Aktualizacje dotyczące Dawn