Obsługa HDR w trybie mapowania odcieni na płótnie
Deweloperzy stron internetowych mają ograniczone możliwości dostarczania treści HDR, głównie za pomocą elementów <img> i <video>. Element <canvas> pozostaje jednak ograniczony do SDR. Generowanie dynamicznych treści HDR w obszarze roboczym wymaga zakodowania ich zawartości jako obrazu HDR przed wyświetleniem (przykład znajdziesz w tym demo).
Nowy parametr GPUCanvasToneMappingMode w konfiguracji obszaru rysowania WebGPU umożliwia teraz rysowanie kolorów jaśniejszych niż biały (#FFFFFF). Odbywa się to w tych trybach:
"standard": domyślne działanie ogranicza treści do zakresu SDR ekranu. Ten tryb jest realizowany przez ograniczenie wszystkich wartości kolorów w przestrzeni kolorów ekranu do przedziału[0, 1]."extended": odblokowuje pełny zakres HDR ekranu. Ten tryb dopasowuje"standard"do[0, 1]zakresu ekranu. Ograniczanie lub projekcja jest wykonywana w przypadku rozszerzonego zakresu dynamicznego ekranu, ale nie w przypadku[0, 1].
Poniższy fragment kodu pokazuje, jak skonfigurować obszar roboczy pod kątem wysokiego zakresu dynamiki.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const canvas = document.querySelector("canvas");
const context = canvas.getContext("webgpu");
context.configure({
device,
format: "rgba16float",
toneMapping: { mode: "extended" },
});
Poznaj HDR w WebGPU, sprawdzając przykładowe cząsteczki (HDR) i przykład HDR w WebGPU, oraz zapoznaj się z wpisem w chromestatus.
Obsługa rozwiniętych podgrup
Po ogłoszeniu eksperymentów z podgrupami funkcje wbudowane podgrup są teraz dostępne do użycia zarówno w shaderach obliczeniowych, jak i w shaderach fragmentów. Nie są już ograniczone tylko do shaderów obliczeniowych. Zobacz problem 354738715.
Pamiętaj, że wbudowana wartość subgroup_size jest obecnie wadliwa w shaderach fragmentów. Na razie unikaj tego.
Dodano też te wbudowane funkcje podgrup:
subgroupAdd(value): zwraca sumę wszystkich aktywnych wywołańvalues w podgrupie.subgroupExclusiveAdd(value): zwraca sumę skanowania wyłącznego wszystkich aktywnych wywołańvalues w podgrupie.subgroupMul(value): zwraca iloczyn wszystkich aktywnych wywołańvalues w podgrupie.subgroupExclusiveMul(value): Zwraca wyłączny iloczyn skanowania wszystkich aktywnych wywołańvalues w podgrupie.subgroupAnd(value): zwraca binarną operację AND wszystkich aktywnych wywołańvalues w podgrupie.subgroupOr(value): zwraca binarną operację OR wszystkich aktywnych wywołańvalues w podgrupie.subgroupXor(value): zwraca binarną operację XOR wszystkich aktywnych wywołańvalues w podgrupie.subgroupMin(value): zwraca minimalną wartość wszystkich aktywnych wywołańvalues w podgrupie.subgroupMax(value): zwraca maksymalną wartość wszystkich aktywnych wywołańvalues w podgrupie.subgroupAll(value): zwraca wartość „prawda”, jeśli warunekvaluejest spełniony we wszystkich aktywnych wywołaniach w podgrupie.subgroupAny(value): zwraca wartość „true” (prawda), jeśli warunekvaluejest spełniony w przypadku dowolnego aktywnego wywołania w podgrupie.subgroupElect(): zwraca wartość „prawda”, jeśli to wywołanie ma najniższą wartośćsubgroup_invocation_idspośród aktywnych wywołań w podgrupie.subgroupBroadcastFirst(value): Rozsyłavaluez aktywnego wywołania z najniższymsubgroup_invocation_idw podgrupie do wszystkich innych aktywnych wywołań.subgroupShuffle(value, id): zwraca wartośćvaluez aktywnego wywołania, którego argumentsubgroup_invocation_idpasuje do argumentuid.subgroupShuffleXor(value, mask): zwraca wartośćvaluez aktywnego wywołania, którego argumentsubgroup_invocation_idpasuje do argumentusubgroup_invocation_id ^ mask.maskmusi być dynamicznie jednolity.subgroupShuffleUp(value, delta): zwraca wartośćvaluez aktywnego wywołania, którego argumentsubgroup_invocation_idpasuje do argumentusubgroup_invocation_id - delta.subgroupShuffleDown(value, delta): zwraca wartośćvaluez aktywnego wywołania, którego argumentsubgroup_invocation_idpasuje do argumentusubgroup_invocation_id + delta.quadBroadcast(value, id): emitujevaluez wywołania funkcji quad o identyfikatorzeid.idmusi być wyrażeniem stałym.quadSwapX(value): zamieniavaluemiędzy wywołaniami w czwórce w kierunku X.quadSwapY(value): zamieniavaluemiędzy wywołaniami w kwadracie w kierunku osi Y.quadSwapDiagonal(value): zamieniavaluemiędzy wywołaniami w kwadracie po przekątnej.
Aktualizacje o świcie
Struktura wgpu::PrimitiveState zawiera teraz bezpośrednio ustawienie sterowania przycinaniem głębi, co eliminuje potrzebę stosowania osobnej struktury wgpu::PrimitiveDepthClipControl. Więcej informacji znajdziesz w tym fragmencie kodu i w żądaniu wycofania webgpu-headers.
// Before
wgpu::PrimitiveState primitive = {};
wgpu::PrimitiveDepthClipControl depthClipControl;
depthClipControl.unclippedDepth = true;
primitive.nextInChain = &depthClipControl;
// Now
wgpu::PrimitiveState primitive = {};
primitive.unclippedDepth = true;
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 142
- Rozszerzone możliwości obsługi formatów tekstur
- Indeks typu pierwotnego w WGSL
- Aktualizacje dotyczące Dawn
Chrome 141
- Tint IR completed
- 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 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
- 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-składnikowe
- Zezwalanie na żądanie nieznanych limitów 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 wywołaniach
- Opcja kompilacji modułu cieniowania ścisła matematyka
- 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 metody 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 operacji obliczeniowych 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 grupy powiązań
- Wyciszanie błędów podczas asynchronicznego tworzenia potoku, gdy urządzenie zostanie utracone
- Aktualizacje tworzenia modułu 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 przy zasilaniu z sieci
- Poprawianie komfortu pracy programistó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