Data publikacji: 29 stycznia 2025 r.
Dodatkowe formaty wierzchołków unorm8x4-bgra i 1-component
Dodano "unorm8x4-bgra"
format wierzchołka i te formaty wierzchołków 1-elementowych: "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 żądanie nieznanych limitów 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, używając wartości undefined
. Jest to przydatne np. w tym kodzie aplikacji, w którym 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
w przypadku 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 dostarczonej 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ł obiekt ImageBitmap z imageOrientation
"from-image"
lub obraz o orientacji innej niż domyślna. Zobacz problem 384858956.
Ulepszanie środowiska programistycznego
Może Cię zaskoczyć, gdy wartość adapter.limits
jest 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 podczas wywoływania funkcji requestDevice()
należy wyraźnie poprosić o wyższy limit, jeśli w parametrze requiredLimits
nie określono żadnego limitu. 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"
(domyślny) 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, na razie musisz 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 powodu kilku czynników:
- Nadmiarowość z
maxInterStageShaderVariables
: ten limit służy już do podobnego celu, kontrolując ilość 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
maxInterStageShaderComponents
upraszcza interfejs shadera i zmniejsza złożoność dla deweloperów. Zamiast zarządzać 2 osobnymi limitami o niewielkich różnicach, 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 Co nowego w WebGPU.
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 shaderów w D3D12
- Zapisywanie i kopiowanie obrazów z płótna
- Ograniczenia trybu zgodności pomiaru wzrostu
- Aktualizacje dotyczące Dawn
Chrome 135
- Zezwalaj 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
- Usunięcie obsługi typów tekstur z możliwością filtrowania zmiennoprzecinkowego jako mieszalnych
- Aktualizacje dotyczące Dawn
Chrome 133
- Dodatkowe formaty wierzchołków unorm8x4-bgra i 1-component
- Zezwalaj na żądanie nieznanych limitów z niezdefiniowaną wartością
- Zmiany w regułach wyrównywania 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
- Opcja kompilacji modułu cieniowania strict math
- Usunięcie metody GPUAdapter requestAdapterInfo()
- Aktualizacje dotyczące Dawn
Chrome 130
- Miksowanie z 2 źródeł
- Krótszy czas kompilacji cieniowania w Metal
- Wycofanie metody GPUAdapter requestAdapterInfo()
- Aktualizacje dotyczące Dawn
Chrome 129
- Obsługa HDR w trybie mapowania tonów 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 pracowników usługowych i współdzielonych
- 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
- 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 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 dotyczące tworzenia modułów cieniowania 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 korzystanie z osobnego procesora graficznego po podłączeniu do zasilania sieciowego
- Poprawianie komfortu pracy programistów
- Aktualizacje dotyczące Dawn
Chrome 114
- Optymalizacja JavaScript
- getCurrentTexture() w nieskonfigurowanym elemencie canvas zgłasza błąd InvalidStateError
- Aktualizacje WGSL
- Aktualizacje dotyczące Dawn