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 na stronie 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 z reprezentacją zmiennoprzecinkową 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 na stronie 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 dostarczane przez użytkowników, ważne jest, aby miały dostęp do informacji o fizycznym procesorze graficznym, ponieważ mogą one wymagać optymalizacji lub implementacji obejść w zależności od architektury procesora graficznego. Dostęp do tych informacji jest możliwy za pomocą obiektu GPUAdapter, ale nie można ich uzyskać bezpośrednio z samego obiektu GPUDevice. Może to być niewygodne, ponieważ może wymagać od użytkowników podania dodatkowych informacji wraz z 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óbek w teksturach
Wcześniej można było używać tekstur w formatach "sint", "uint" i „depth" z próbkami filtrowania. Teraz prawidłowo uniemożliwia używanie tekstury w formacie "sint" lub "uint" z próbkownikiem filtrowania. Należy pamiętać, że obecnie wyświetla ostrzeżenie, jeśli używasz tekstury „depth"” z filtrującym próbkowaniem, ponieważ w przyszłości będzie to niedozwolone. Zobacz problem 376497143.
Oznacza to, ż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 4952 zawiera propozycję, która jest rozważana 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ń przenośności. 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.
Rozmiar bufora GPU jest teraz podawany w komunikacie o błędzie podczas tworzenia zbyt dużego bufora GPU. Zobacz problem 374167798.
Eksperymentalna obsługa 16-bitowych znormalizowanych formatów tekstur
Eksperymentalnie udostępniliśmy 16-bitowe formaty tekstur ze znakiem i bez znaku, które są odpowiednio powiązane z funkcjami GPU "chromium-experimental-snorm16-texture-formats" i "chromium-experimental-unorm16-texture-formats", a jednocześnie dyskutujemy nad ich standaryzacją.
Te funkcje dodają obsługę 16-bitowych znormalizowanych formatów tekstur z użyciem COPY_SRC, COPY_DST, TEXTURE_BINDING i RENDER_ATTACHMENT, a także możliwości multisamplingu i rozwiązywania. 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 API C 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 jak wskaźnik danych ciągu znaków w połączeniu z długością. Dzięki temu możesz pracować z fragmentami ciągu znaków bez konieczności kopiowania go. Zobacz problem 42241188.
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 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
- 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
- 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 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
- 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
- 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
- Zezwalaj 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
- 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 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 etapach
- 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 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 metody preventDefault
- WGSL najpierw interpoluje próbkowanie i albo
- Aktualizacje dotyczące Dawn
Chrome 127
- Eksperymentalna obsługa OpenGL ES na Androidzie
- Atrybut informacji o 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
- Krótszy czas kompilacji shaderów
- 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
- Nieograniczone parametry wskaźnika 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
- 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 32-bitowe zmiennoprzecinkowe
- unorm10-10-10-2 vertex format
- Format tekstury rgb10a2uint
- Aktualizacje dotyczące Dawn
Chrome 118
- Obsługa 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 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 korzystanie z osobnego procesora graficznego po podłączeniu do zasilania sieciowego
- 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