Data publikacji: 8 stycznia 2025 r.
Użycie widoku tekstury
Widoki tekstur GPU dziedziczą obecnie wszystkie flagi wykorzystania od źródłowej tekstury GPU. Może to być problematyczne, ponieważ niektóre formaty widoku są niezgodne z określonymi zastosowaniami. Aby rozwiązać ten problem, wywołanie funkcji createView()
z opcjonalnym elementem usage
pozwala wyraźnie określić podzbiór flag użycia tekstury źródłowej, które są zgodne z wybranym formatem widoku.
Ta zmiana umożliwia wcześniejszą weryfikację i bardziej szczegółową kontrolę nad sposobem używania widoku. Jest on również zgodny z innymi interfejsami API grafiki, w których flagi użycia są zwykłymi parametrami podczas tworzenia widoku, co daje możliwości optymalizacji.
Zobacz poniższy fragment kodu, entry w chromestatus i problem 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 o typie 32-bitowe liczby zmiennoprzecinkowe;
Tekstury 32-bitowe z liczbami zmiennoprzecinkowymi są niezbędne do renderowania HDR, ponieważ umożliwiają zachowanie szerokiego zakresu wartości kolorów i zapobiegają artefaktom w postaci pasów kolorów. Na przykład w wizualizacji naukowej.
Nowa funkcja GPU "float32-blendable"
umożliwia stosowanie cieniowania dla tekstur GPU w formatach "r32float"
, "rg32float"
i "rgba32float"
. Podczas żądania urządzenia z procesorem graficznym z tą funkcją można teraz tworzyć potok renderowania, który używa mieszania z dowolnym załącznikiem w formacie float32.
Zapoznaj się z tym fragmentem kodu, informacją w chromestatus i problemem 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
Jest to ważne w przypadku bibliotek, które korzystają z obiektów GPUDevice
przekazywanych przez użytkownika, ponieważ mogą wymagać optymalizacji lub wdrożenia obejścia na podstawie architektury GPU. Chociaż można uzyskać dostęp do tych informacji 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 oprócz GPUDevice
.
Aby rozwiązać ten problem, GPUAdapterInfo
jest teraz dostępny za pomocą atrybutu GPUDevice
adapterInfo
. Są one podobne do istniejącego atrybutu GPUAdapter
info
.
Zapoznaj się z podanym niżej fragmentem kodu, informacją na stronie chromestatus oraz 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 kanwy z nieprawidłowym formatem powoduje błąd JavaScriptu
Wcześniej używanie nieprawidłowego formatu tekstury w ramach metody configure()
w kontekście płótna GPU powodowało błąd weryfikacji GPU. Zmieniono to, aby wywołać kod JavaScript TypeError
. Zapobiega to sytuacjom, w których funkcja getCurrentTexture()
zwraca prawidłową teksturę GPU, mimo że kontekst kanwy GPU jest nieprawidłowo skonfigurowany. Więcej informacji znajdziesz w problemie 372837859.
Filtrowanie ograniczeń próbkowania w przypadku tekstur
Wcześniej dozwolone było używanie tekstur w formacie "sint"
, "uint"
i „depth"
” z próbkami filtrowania. Teraz poprawnie zabrania używania tekstury w formacie "sint"
lub "uint"
z próbnikiem filtrowania. Pamiętaj, że obecnie wyświetla ono ostrzeżenie, jeśli używasz tekstury „depth"
” z próbnikiem filtrowania, ponieważ w przyszłości nie będzie można tego robić. Zobacz problem 376497143.
Oznacza to, że użycie tekstury głębi z próbnikiem bez filtrowania wymaga ręcznego utworzenia układów grup wiązania. Dzieje się tak, ponieważ generowane automatycznie układy grup wiązania nie obsługują jeszcze tej kombinacji. Problem specyfikacji 4952 zawiera propozycję, która jest obecnie rozpatrywana w celu rozwiązania tego ograniczenia w przyszłości.
Eksperymentowanie z podgrupami
Eksperyment dotyczący podgrup, który miał się zakończyć w Chrome 131, został przedłużony do Chrome 133 i zakończy się 16 kwietnia 2025 r. Chociaż pierwsza wersja próbna koncentrowała się na wydajności, brakowało w niej kluczowych zabezpieczeń dotyczących przenoszenia. Te zabezpieczenia zostaną teraz dodane, co może spowodować błędy w dotychczasowym kodzie.
Ulepszenie środowiska programisty
W przypadku używania opcji powerPreference
w systemie Windows requestAdapter()
w narzędziu DevTools wyświetla się teraz ostrzeżenie. To ostrzeżenie zostanie usunięte, gdy Chrome będzie wiedzieć, jak używać 2 różnych procesorów graficznych i jak łączyć ich wyniki. Zobacz problem 369219127.
Rozmiar bufora GPU jest teraz widoczny w komuniku o błędzie, który pojawia się podczas tworzenia zbyt dużego bufora GPU. Zobacz problem 374167798.
Eksperymentalna obsługa 16-bitowych skompresowanych formatów tekstur
16-bitowe skompresowane i nieskompresowane tekstury są teraz dostępne w wersji eksperymentalnej odpowiednio w funkcjach "chromium-experimental-snorm16-texture-formats"
i "chromium-experimental-unorm16-texture-formats"
procesora graficznego, a ich standaryzacja jest omawiana.
Te funkcje umożliwiają obsługę 16-bitowych sformatowanych tekstur z użyciem COPY_SRC
, COPY_DST
, TEXTURE_BINDING
, RENDER_ATTACHMENT
, multisamplingu i możliwości rozwiązywania. Dodatkowe formaty to "r16unorm"
, "rg16unorm"
, "rgba16unorm"
, "r16snorm"
, "rg16snorm"
i "rgba16snorm"
.
Dopóki te funkcje eksperymentalne nie zostaną ujednolicone, włącz flagę „Niebezpieczne wsparcie WebGPU” na stronie chrome://flags/#enable-unsafe-webgpu
, aby udostępnić je w Chrome.
Zapoznaj się z podanym niżej 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 świtu
Metody EnumerateFeatures(FeatureName * features)
z poziomów wgpu::Adapter
i wgpu::Device
są wycofane na rzecz GetFeatures(SupportedFeatures * features)
. Zobacz problem 368672123.
W interfejsie C webgpu.h zmieniono wszystkie char const *
na strukturę WGPUStringView
, która definiuje widok ciągu znaków zakodowanego w UTF-8. Działa jak wskaźnik do danych ciągu, połączony z długością. Dzięki temu możesz pracować z częściami ciągu znaków bez konieczności ich kopiowania. Zobacz problem 42241188.
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 132
- Użycie widoku tekstury
- Mieszanie tekstur o typie liczby zmiennoprzecinkowej 32-bitowej
- Atrybut adapterInfo obiektu GPUDevice
- Konfigurowanie kontekstu kanwy z nieprawidłowym formatem powoduje błąd JavaScriptu
- Ograniczenia filtra samplera dotyczące tekstur
- Eksperymenty z podgrupami
- Ułatwienie pracy programistom
- Doświadczalna obsługa 16-bitowych normalizowanych formatów tekstur
- Aktualizacje dotyczące Dawn
Chrome 131
- Odcinki odległości w WGSL
- GPUCanvasContext getConfiguration()
- Punkty i linie nie mogą mieć ustawionego domyślnego kierunku głębi
- Funkcje wbudowane w skanowanie z uwzględnieniem wszystkich podgrup
- Dodanie eksperymentalnej obsługi pośredniego rysowania wielokrotnego
- Opcja kompilacji modułu shadera ścisła matematyka
- Usuwanie metody requestAdapterInfo() interfejsu 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
Chrome 128
- Eksperymentowanie z podgrupami
- Wycofanie obsługi ustawiania głębi dla linii i punktów
- Ukrywanie ostrzeżenia DevTools o nieuwzględnionym błędzie, jeśli wywołano preventDefault
- WGSL interpoluje próbkowanie najpierw i potem
- Aktualizacje dotyczące Dawn
Chrome 127
- Doświadczalna obsługa OpenGL ES na Androidzie
- Atrybut informacji o GPUAdapter
- Ulepszenia interoperacyjności WebAssembly
- Poprawione błędy kodowania poleceń
- Aktualizacje dotyczące Dawn
Chrome 126
- Zwiększenie limitu maxTextureArrayLayers
- Optymalizacja przesyłania bufora dla backendu Vulkana
- Ulepszenia dotyczące czasu kompilacji shaderów
- Przesłane bufory poleceń muszą być unikalne
- Aktualizacje dotyczące Dawn
Chrome 125
- Podgrupy (funkcja w trakcie tworzenia)
- 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
- Aktualizacje dotyczące Dawn
Chrome 123
- Obsługa wbudowanych funkcji DP4a w 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 głębi
- Aktualizacje dotyczące Dawn
Chrome 122
- Zwiększenie zasięgu dzięki trybowi zgodności (funkcja w trakcie opracowywania)
- Zwiększenie limitu maxVertexAttributes
- Aktualizacje dotyczące Dawn
Chrome 121
- Obsługa WebGPU na Androidzie
- Używanie DXC zamiast FXC do kompilowania shaderów w systemie Windows
- Zapytania o sygnatury czasowe w przelotach obliczeniowych i renderowania
- Domyślne punkty wejścia do modułów shaderów
- Obsługa przestrzeni barw display-p3 jako przestrzeni barw GPUExternalTexture
- Informacje o stosie 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
- Tekstury 32-bitowe z możliwością filtrowania
- Format wierzchołka unorm10-10-10-2
- Format tekstury rgb10a2uint
- Aktualizacje dotyczące Dawn
Chrome 118
- Obsługa HTMLImageElement i ImageData w
copyExternalImageToTexture()
- Dodatkowa obsługa tekstury pamięci tylko do odczytu i z możliwością zapisu
- Aktualizacje dotyczące Dawn
Chrome 117
- Nieustawienie bufora wierzchołka
- 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
- Urządzenie zgubione zwrócone przez GPUAdapter
requestDevice()
- Utrzymanie płynnego odtwarzania filmu, jeśli wywołana zostanie funkcja
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 przy zasilaniu z sieci
- Ułatwienie pracy programistom
- Aktualizacje dotyczące Dawn
Chrome 114
- Optymalizacja kodu JavaScript
- getCurrentTexture() na nieskonfigurowanym płótnie powoduje błąd InvalidStateError
- Aktualizacje WGSL
- Aktualizacje dotyczące Dawn