Obsługa HDR w trybie mapowania tonacji
Deweloperzy witryn mają ograniczone możliwości dostarczania treści HDR, ponieważ polegają głównie na elementach <img>
i <video>
. Element <canvas>
pozostaje jednak ograniczony do SDR. Generowanie dynamicznych treści HDR na kanwie wymaga zakodowania ich jako obrazu HDR przed wyświetleniem (przykład: prezentacja).
Nowy parametr GPUCanvasToneMappingMode
w konfiguracji WebGPU canvas umożliwia teraz WebGPU rysowanie kolorów jaśniejszych niż biały (#FFFFFF
). Wykorzystuje do tego te tryby:
"standard"
: domyślne zachowanie 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 odpowiada"standard"
w zakresie[0, 1]
ekranu. Docisk lub rzutowanie jest wykonywane w przypadku rozszerzonego zakresu dynamicznego ekranu, ale nie w przypadku parametru[0, 1]
.
Fragment kodu poniżej pokazuje, jak skonfigurować obszar roboczy pod kątem szerokiego 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" },
});
Aby zapoznać się z HDR w WebGPU, otwórz przykład Particle (HDR) i WebGPU HDR oraz przeczytaj wpisy w chromestatus.
Obsługa rozszerzonych podgrup
W związku z zapowiedzią eksperymentowania z podgrupami wbudowane funkcje podgrup są teraz dostępne do użycia zarówno w cieniowaniu obliczeń, jak i w cieniowanie fragmentów. Nie są już ograniczone tylko do shaderów obliczeniowych. Zobacz problem 354738715.
Zwróć uwagę, że wartość wbudowana parametru subgroup_size
jest obecnie błędna w cieniowanie fragmentów. Na razie nie używaj go.
Dodano też te wbudowane funkcje podgrupy:
subgroupAdd(value)
: zwraca sumę wszystkich aktywnych wywołańvalue
w podgrupie.subgroupExclusiveAdd(value)
: zwraca sumę wyników skanowania wszystkich aktywnych wywołańvalue
w podgrupie.subgroupMul(value)
: zwraca mnożenie wszystkich aktywnych wywołańvalue
w podgrupie.subgroupExclusiveMul(value)
: zwraca mnożnik skanowania wykluczającego wszystkich aktywnych wywołańvalue
w podgrupie.subgroupAnd(value)
: zwraca binarne AND wszystkich aktywnych wywołańvalue
w podgrupie.subgroupOr(value)
: zwraca wartość binarną LUB wszystkich aktywnych wywołańvalue
w podgrupie.subgroupXor(value)
: zwraca binarny parametr XOR wszystkich aktywnych wywołańvalue
w podgrupie.subgroupMin(value)
: zwraca minimalną wartość wszystkich aktywnych wywołańvalue
w podgrupie.subgroupMax(value)
: zwraca maksymalną wartość wszystkich aktywnych wywołańvalue
w podgrupie.subgroupAll(value)
: zwraca wartość prawda, jeślivalue
ma wartość prawda dla wszystkich aktywnych wywołań w podgrupie.subgroupAny(value)
: zwraca wartość prawda, jeślivalue
ma wartość prawda dla dowolnego aktywnego wywołania w podgrupie.subgroupElect()
: zwraca wartość „prawda”, jeśli to wywołanie ma najniższą wartośćsubgroup_invocation_id
spośród aktywnych wywołań w podgrupie.subgroupBroadcastFirst(value)
: rozgłaszavalue
z aktywnej wywołania o najniższymsubgroup_invocation_id
w podgrupie do wszystkich innych aktywnych wywołań.subgroupShuffle(value, id)
: zwracavalue
z aktywnej wywołania, któregosubgroup_invocation_id
jest zgodne zid
.subgroupShuffleXor(value, mask)
: zwracavalue
z aktywnej wywołania, któregosubgroup_invocation_id
jest zgodne zsubgroup_invocation_id ^ mask
. Polemask
musi być dynamiczne jednostajnie.subgroupShuffleUp(value, delta)
: zwracavalue
z aktywnej wywołania, któregosubgroup_invocation_id
jest zgodne zsubgroup_invocation_id - delta
.subgroupShuffleDown(value, delta)
: zwracavalue
z aktywnej wywołania, któregosubgroup_invocation_id
jest zgodne zsubgroup_invocation_id + delta
.quadBroadcast(value, id)
: przesyłavalue
z poczwórnego wywołania o identyfikatorzeid
.id
musi być wyrażeniem statycznym.quadSwapX(value)
: przełączavalue
między wywołaniami w kwartecie w kierunku osi X.quadSwapY(value)
: zamieniavalue
między wywołaniami w kwadrze w kierunku osi Y.quadSwapDiagonal(value)
: powoduje zamianęvalue
między wywołaniami na czwórce po przekątnej.
Aktualizacje świtu
Struktura wgpu::PrimitiveState
zawiera teraz ustawienie kontroli klipu głębi, co eliminuje potrzebę korzystania z osobnej struktury wgpu::PrimitiveDepthClipControl
. Więcej informacji znajdziesz w tym fragmencie kodu i PR 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 najważniejsze informacje. Zapoznaj się z pełną listą commitów.
Co nowego w WebGPU
Lista wszystkich tematów omawianych w cyklu Co nowego w WebGPU.
Chrome 131
- Odcinki odległości w WGSL
- GPUCanvasContext getConfiguration()
- Punkty i linie nie mogą mieć ustawienia głębi
- Funkcje wbudowane w skanowanie z uwzględnieniem wszystkich grup
- Dodanie eksperymentalnej obsługi pośredniego rysowania wielokrotnego
- Opcja kompilacji modułu shadera: ścisłe obliczenia matematyczne
- Usuwanie metody requestAdapterInfo() klasy GPUAdapter
- Aktualizacje dotyczące Dawn
Chrome 130
- Mieszanie dwóch źródeł
- Skrócenie czasu kompilacji shaderów na Metalu
- Wycofanie metody requestAdapterInfo() klasy GPUAdapter
- Aktualizacje dotyczące Dawn
Chrome 129
- Obsługa HDR w trybie mapowania tonalnego obszaru roboczego
- Rozszerzona obsługa podgrup
- Aktualizacje dotyczące Dawn
Chrome 128
- Eksperymentowanie z podgrupami
- Wycofanie obsługi ustawiania głębi dla linii i punktów
- Ukryj nieprzechwycony błąd w Narzędziach deweloperskich w przypadku funkcji preventDefault
- WGSL interpoluje próbkowanie najpierw i potem
- Aktualizacje dotyczące Dawn
Chrome 127
- Eksperymentalna obsługa OpenGL ES na Androidzie
- Atrybut informacji o GPUAdapter
- Ulepszenia współpracy WebAssembly
- Poprawione błędy kodera poleceń
- Aktualizacje dotyczące Dawn
Chrome 126
- Zwiększanie limitu maxTextureSlateWarstwy
- Optymalizacja przesyłania bufora dla backendu Vulkana
- Ulepszenia dotyczące czasu kompilacji shaderów
- Przesłane bufory poleceń muszą być unikalne
- Informacje o świcie
Chrome 125
- Podgrupy (funkcja w trakcie opracowywania)
- Renderowanie na potrzeby wycinka tekstury 3D
- Aktualizacje dotyczące Dawn
Chrome 124
- Tekstury tylko do odczytu i do odczytu i zapisu
- Obsługa pracowników usług i pracowników wspólnych
- Nowe atrybuty informacji o adapterze
- Poprawki błędów.
- Informacje o świcie
Chrome 123
- Obsługa wbudowanych funkcji DP4a w języku WGSL
- Parametry wskaźnika bez ograniczeń w WGSL
- Składnia cukrowa do odwoływania się do elementów złożonych w WGSL
- Oddzielny stan tylko do odczytu dla stempli i aspektów głębi
- Aktualizacje dotyczące Dawn
Chrome 122
- Zwiększenie zasięgu dzięki trybowi zgodności (funkcja w trakcie tworzenia)
- Zwiększenie limitu maxVertexAttributes
- Informacje o świcie
Chrome 121
- Obsługa WebGPU na Androidzie
- Używanie DXC zamiast FXC do kompilowania shaderów w systemie Windows
- Zapytania dotyczące sygnatury czasowej w kartach obliczeń i renderowania
- Domyślne punkty wejścia do modułów shaderów
- Obsługa przestrzeni barw display-p3 jako przestrzeni barw GPUExternalTexture
- Informacje o kupach pamięci
- Aktualizacje dotyczące Dawn
Chrome 120
- Obsługa 16-bitowych wartości zmiennoprzecinkowych w WGSL
- Przekraczanie limitów
- Zmiany stanu głębi cieniowania
- Aktualizacje informacji o adapterze
- Kwantyzacja zapytań dotyczących sygnatury czasowej
- Funkcje wiosenne porządki
Chrome 119
- Filtrowane tekstury 32-bitowe zmiennoprzecinkowe
- format wierzchołkowy unorm10-10-10-2
- Format tekstury rgb10a2uint
- Aktualizacje dotyczące Dawn
Chrome 118
- Obsługa HTMLImageElement i ImageData w
copyExternalImageToTexture()
- Eksperymentalna obsługa tekstury pamięci do odczytu i zapisu oraz tylko do odczytu
- Informacje o świcie
Chrome 117
- Nieskonfigurowany bufor wierzchołkowy
- Cofnij grupę wiązania
- Błędy w przypadku tworzenia asynchronicznego potoku, gdy urządzenie jest utracone
- Aktualizacje dotyczące tworzenia modułów shaderów SPIR-V
- Ułatwienie pracy programistom
- Przetwarzanie za pomocą przepływów z automatycznie wygenerowanym układem
- Aktualizacje dotyczące Dawn
Chrome 116
- Integracja z WebCodecs
- Utracone urządzenie zwrócone przez GPUAdapter
requestDevice()
- Odtwarzaj płynnie, gdy wywoływany jest
importExternalTexture()
- Zgodność ze specyfikacją
- Ułatwienie pracy programistom
- Aktualizacje dotyczące Dawn
Chrome 115
- Obsługiwane rozszerzenia językowe WGSL
- Wstępna obsługa Direct3D 11
- Uzyskaj oddzielny procesor graficzny domyślnie na zasilaniu z sieci
- Polepszanie wrażeń programistów
- Informacje o świcie
Chrome 114
- Optymalizacja kodu JavaScript
- getCurrentTexture() na nieskonfigurowanym płótnie powoduje błąd InvalidStateError
- Aktualizacje WGSL
- Aktualizacje dotyczące Dawn