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 danych naukowych.
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 Chrome Status 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 GPUDeviceadapterInfo
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 próbkowania filtrowania 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 próbkującym filtrowaniem, 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 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. Pierwszy okres próbny skupiał 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 dyskutowane pod kątem standaryzacji.
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 udostępnić je 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 o świcie
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 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