Data publikacji: 8 stycznia 2025 r.
Wykorzystanie widoku tekstury
Widoki tekstur GPU dziedziczą obecnie wszystkie flagi użycia z tekstury GPU źródła. Może to być problematyczne, ponieważ niektóre formaty widoku są niezgodne z określonymi zastosowaniami. Aby rozwiązać ten problem, wywołaj funkcję createView() z opcjonalnym elementem usage, aby jawnie określić podzbiór flag użycia tekstury źródłowej, które są zgodne z wybranym formatem widoku.
Ta zmiana umożliwia wstępną weryfikację i bardziej szczegółową kontrolę nad sposobem wykorzystania widoku. Jest on też zgodny z innymi interfejsami API grafiki, w których flagi użycia są typowymi parametrami podczas tworzenia widoku, co daje możliwości optymalizacji.
Zobacz ten fragment kodu, wpis w chromestatus i zgłoszenie 363903526.
const texture = myDevice.createTexture({
size: [4, 4],
format: "rgba8unorm",
usage:
GPUTextureUsage.RENDER_ATTACHMENT |
GPUTextureUsage.TEXTURE_BINDING |
GPUTextureUsage.STORAGE_BINDING,
viewFormats: ["rgba8unorm-srgb"],
});
const view = texture.createView({
format: 'rgba8unorm-srgb',
usage: GPUTextureUsage.RENDER_ATTACHMENT, // Restrict allowed usage.
});
Mieszanie tekstur zmiennoprzecinkowych 32-bitowych
Tekstury 32-bitowe zmiennoprzecinkowe są niezbędne do renderowania HDR, aby zachować szeroki zakres wartości kolorów i zapobiec powstawaniu artefaktów w postaci pasów kolorów. Na przykład w wizualizacji naukowej.
Nowa funkcja "float32-blendable" GPU umożliwia mieszanie tekstur GPU w formatach "r32float", "rg32float" i "rgba32float". Tworzenie potoku renderowania, który używa mieszania z dowolnym załącznikiem w formacie float32, jest teraz możliwe podczas wysyłania żądania urządzenia GPU z tą funkcją.
Zobacz ten fragment kodu, wpis w chromestatus i zgłoszenie 369649348.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-blendable")) {
throw new Error("32-bit float textures blending support is not available");
}
// Explicitly request 32-bit float textures blending support.
const device = await adapter.requestDevice({
requiredFeatures: ["float32-blendable"],
});
// ... Creation of shader modules is omitted for readability.
// Create a render pipeline that uses blending for the rgba32float format.
device.createRenderPipeline({
vertex: { module: myVertexShaderModule },
fragment: {
module: myFragmentShaderModule,
targets: [
{
format: "rgba32float",
blend: { color: {}, alpha: {} },
},
],
},
layout: "auto",
});
// Create the GPU texture with rgba32float format and
// send the appropriate commands to the GPU...
Atrybut GPUDevice adapterInfo
W przypadku bibliotek, które przyjmują obiekty GPUDevice dostarczone przez użytkownika, ważne jest, aby miały dostęp do informacji o fizycznym procesorze graficznym, ponieważ mogą one wymagać optymalizacji lub wdrożenia obejść w zależności od architektury procesora graficznego. Chociaż dostęp do tych informacji jest możliwy za pomocą obiektu GPUAdapter, nie ma bezpośredniego sposobu na uzyskanie ich z samego obiektu GPUDevice. Może to być niewygodne, ponieważ może wymagać od użytkowników podania dodatkowych informacji wraz z obiektem GPUDevice.
Aby rozwiązać ten problem, GPUAdapterInfo jest teraz udostępniany za pomocą atrybutu GPUDevice adapterInfo. Są one podobne do istniejącego atrybutu GPUAdapter info.
Zapoznaj się z tym fragmentem kodu, wpisem w chromestatus i problemem 376600838.
function optimizeForGpuDevice(device) {
if (device.adapterInfo.vendor === "amd") {
// Use AMD-specific optimizations.
} else if (device.adapterInfo.architecture.includes("turing")) {
// Optimize for NVIDIA Turing architecture.
}
}
Konfigurowanie kontekstu elementu canvas w nieprawidłowym formacie powoduje błąd JavaScript
Wcześniej użycie nieprawidłowego formatu tekstury w metodzie configure() kontekstu płótna GPU powodowało błąd weryfikacji GPU. Zmieniliśmy to tak, aby zgłaszać błąd JavaScriptu TypeError. Zapobiega to sytuacjom, w których interfejs getCurrentTexture() zwraca prawidłową teksturę procesora graficznego, mimo że kontekst obszaru rysowania procesora graficznego jest nieprawidłowo skonfigurowany. Więcej informacji znajdziesz w zgłoszeniu 372837859.
Ograniczenia dotyczące filtrowania próbnika w przypadku tekstur
Wcześniej można było używać tekstur w formatach "sint", "uint" i „depth" z próbkami filtrowania. Teraz prawidłowo blokuje używanie tekstury w formacie "sint" lub "uint" z próbkownikiem filtrowania. Obecnie wyświetla ostrzeżenie, jeśli używasz „depth" tekstury z filtrującym samplerem, ponieważ w przyszłości będzie to niedozwolone. Zobacz problem 376497143.
Ograniczenia te oznaczają, że używanie tekstury głębi z samplerem bez filtrowania wymaga ręcznego tworzenia układów grup wiązań. Dzieje się tak, ponieważ automatycznie generowane układy grup wiązań nie obsługują jeszcze tej kombinacji. Specyfikacja problemu 4952 zawiera propozycję, która jest rozpatrywana w celu rozwiązania tego ograniczenia w przyszłości.
Eksperymentowanie z rozszerzonymi podgrupami
Eksperymentowanie z podgrupami, które początkowo miało zakończyć się w Chrome 131, zostało przedłużone do Chrome 133 i zakończy się 16 kwietnia 2025 r. Pierwsze testowanie origin skupiało się na wydajności, ale brakowało w nim kluczowych zabezpieczeń związanych z przenoszeniem. Te zabezpieczenia zostaną teraz dodane, co może spowodować błędy w istniejącym kodzie.
Ulepszanie środowiska programistycznego
W narzędziach deweloperskich jest teraz widoczne ostrzeżenie, gdy opcja powerPreference jest używana z requestAdapter() w systemie Windows. Ten komunikat ostrzegawczy zostanie usunięty, gdy Chrome będzie wiedzieć, jak używać 2 różnych procesorów graficznych i łączyć wyniki. Zobacz problem 369219127.
W komunikacie o błędzie podczas tworzenia zbyt dużego bufora GPU jest teraz podawany jego rozmiar. Zobacz problem 374167798.
Eksperymentalna obsługa 16-bitowych znormalizowanych formatów tekstur
16-bitowe formaty tekstur ze znakiem i bez znaku są obecnie dostępne eksperymentalnie odpowiednio w ramach funkcji GPU "chromium-experimental-snorm16-texture-formats" i "chromium-experimental-unorm16-texture-formats", podczas gdy trwają dyskusje nad ich standaryzacją.
Te funkcje dodają obsługę 16-bitowych znormalizowanych formatów tekstur z użyciem COPY_SRC, COPY_DST, TEXTURE_BINDING, RENDER_ATTACHMENT, multisamplingiem i możliwościami rozwiązywania problemów. Dodatkowe formaty to "r16unorm", "rg16unorm", "rgba16unorm", "r16snorm", "rg16snorm" i "rgba16snorm".
Zanim te eksperymentalne funkcje zostaną ustandaryzowane, włącz flagę „Unsafe WebGPU Support” (Niebezpieczna obsługa WebGPU) na stronie chrome://flags/#enable-unsafe-webgpu, aby były dostępne w Chrome.
Zapoznaj się z tym fragmentem kodu i problemem 374790898.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-snorm16-texture-formats")) {
throw new Error("16-bit signed normalized formats support is not available");
}
// Explicitly request 16-bit signed normalized formats support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-snorm16-texture-formats"],
});
// Create a texture with the rgba16snorm format which consists of four
// components, each of which is a 16-bit, normalized, signed integer value.
const texture = device.createTexture({
size: [4, 4],
format: "rgba16snorm",
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
// Send the appropriate commands to the GPU...
Aktualizacje Dawn
Metody EnumerateFeatures(FeatureName * features) z wgpu::Adapter i wgpu::Device zostały wycofane na rzecz GetFeatures(SupportedFeatures * features). Zobacz problem 368672123.
W interfejsie C API webgpu.h wszystkie typy char const * zostały zmienione na strukturę WGPUStringView, która definiuje widok ciągu znaków zakodowanego w UTF-8. Działa ona jak wskaźnik danych ciągu znaków w połączeniu z długością. Umożliwia to pracę z częściami ciągu znaków bez konieczności jego kopiowania. Więcej informacji znajdziesz w tym artykule.
To tylko niektóre z najważniejszych zmian. Pełną listę zmian znajdziesz w repozytorium.
Nowości w WebGPU
Lista wszystkich tematów omówionych w serii Nowości w WebGPU.
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 wątkach 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
- Przetasowanie 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
- 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 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 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 z użyciem wskaźnika do typu 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
- Usunięcie 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 zgodności 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
- 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 filtrowania próbek 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
- Mieszanie dwóch ź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 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
- 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 shadera
- 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ółpracownikó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
- 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 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 32-bitowe zmiennoprzecinkowe
- 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 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 używanie dyskretnego GPU po podłączeniu do zasilania sieciowego
- Poprawianie komfortu pracy programistów
- Aktualizacje dotyczące Dawn
Chrome 114
- Optymalizacja JavaScriptu
- getCurrentTexture() w nieskonfigurowanym obszarze roboczym zgłasza błąd InvalidStateError
- Aktualizacje WGSL
- Aktualizacje dotyczące Dawn