Data publikacji: 26 maja 2025 r.
Używanie widoku tekstury do powiązania zewnętrznej tekstury
Podczas tworzenia GPUBindGroup można teraz używać zgodnego widoku GPUTexture (2D, pojedynczy zasób podrzędny) zamiast powiązania GPUExternalTexture.
Upraszcza to logikę shadera w pipeline’ach efektów wideo, w których trzeba obsługiwać zarówno GPUExternalTexture (dla filmu źródłowego), jak i GPUTextureView (dla przetwarzania pośredniego). Zmniejsza też potrzebę dynamicznego kompilowania shaderów w zależności od źródła tekstury. Zobacz Intend to Ship: WebGPU: GPUTextureView for externalTexture binding (Intend to Ship: WebGPU: GPUTextureView do wiązania zewnętrznego tekstu).
const texture = myDevice.createTexture({
size: [42, 42],
format: navigator.gpu.getPreferredCanvasFormat(),
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
const code = `
@group(0) @binding(0) var texture : texture_external;
@group(0) @binding(1) var<storage, read_write> buffer: vec2u;
@compute @workgroup_size(1) fn main() {
buffer = textureDimensions(texture);
}`;
const pipeline = myDevice.createComputePipeline({
layout: "auto",
compute: { module: myDevice.createShaderModule({ code }) },
});
const bindGroup = myDevice.createBindGroup({
layout: pipeline.getBindGroupLayout(0),
entries: [
{ binding: 0, resource: texture.createView() }, // Use texture view for an externalTexture binding
{ binding: 1, resource: { buffer: myBuffer } },
],
});
kopiowanie buforów bez określania przesunięć i rozmiaru;
Nowa metoda nakładania GPUCommandEncoder pozwala deweloperom pomijać przesunięcia i parametry rozmiaru podczas używania funkcji copyBufferToBuffer()
w celu uproszczenia kopiowania całych buforów. Zobacz Intencja wydania: WebGPU: przeciążenie copyBufferToBuffer.
const size = 42;
const srcBuffer = myDevice.createBuffer({
size,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});
const dstBuffer = myDevice.createBuffer({
size,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});
// Copy entire buffer.
myCommandEncoder.copyBufferToBuffer(srcBuffer, dstBuffer);
// This is the same as the following.
// myCommandEncoder.copyBufferToBuffer(srcBuffer, 0, dstBuffer, 0, size);
WGSL workgroupUniformLoad za pomocą wskaźnika do atomic
Dla wygody deweloperów do WGSL dodano nową przeciążenie workgroupUniformLoad(ptr)
. Zasób ten wczytuje wartość wskazywaną przez ptr
i zwraca ją we wszystkich wywołaniach w grupie roboczej, gdzie ptr
jest wskaźnikiem do zmiennej w grupie roboczej. Zobacz problem 408241039.
@group(0) @binding(0) var<storage, read_write> buffer : array<u32, 1>;
var<workgroup> wgvar : atomic<u32>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_index) lid: u32) {
if (lid == 0) {
atomicStore(&(wgvar), 42u);
}
buffer[lid] = workgroupUniformLoad(&wgvar);
}
Atrybut powerPreference atrybutu GPUAdapterInfo
Niestandardowy atrybut ciągu znaków powerPreference
GPUAdapterInfo jest teraz dostępny, gdy użytkownik włączy flagę „WebGPU Developer Features” w sekcji chrome://flags/#enable-webgpu-developer-features
. Jeśli jest obsługiwana, wartość powerPreference
może być równa "low-power"
lub "high-performance"
w zależności od wartości GPUPowerPreference użytej w GPURequestAdapterOptions. Zobacz CL 6438860.
function checkPowerPreferenceForGpuDevice(device) {
const powerPreference = device.adapterInfo.powerPreference;
if (powerPreference === "high-performance") {
// High-performance GPU detected. Enabling enhanced graphics settings.
} else if (powerPreference === "low-power") {
// Low-power GPU detected. Optimizing for battery life.
}
}
Usuwanie atrybutu compatibilityMode z elementu GPURequestAdapterOptions
Eksperymentalny atrybut GPURequestAdapterOptions compatibilityMode
został usunięty na rzecz ustandaryzowanego atrybutu featureLevel
dodanego w Chrome 133. Zobacz problem 366151404.
Aktualizacje świtu
Deweloperzy mogą tworzyć projekty WebGPU w językach takich jak C++, używając pliku webgpu.h, aby kierować je na WebAssembly i konkretne platformy. Nowo opublikowana biblioteka „emdawnwebgpu” („Emscripten Dawn WebGPU”) implementuje najnowszą standardową bibliotekę webgpu.h za pomocą interfejsu API przeglądarki.
Emdawnwebgpu to (utrzymywana) gałąź wbudowanych bindigów Emscripten (obecnie nieutrzymywanych) (USE_WEBGPU
). Wszystkie nowe prace programistyczne są wykonywane w emdawnwebgpu, a wbudowane bindigi Emscripten zostaną usunięte, gdy deweloperzy przejdą na emdawnwebgpu. Nagłówek C w Emdawnwebgpu jest bardzo podobny do tego w Dawn, natomiast wbudowane powiązania są znacznie przestarzałe.
Pobierz emdawnwebgpu ze strony z wersjami GitHuba Dawna i przeczytaj README.md pakietu, aby dowiedzieć się, jak go używać. Pliki źródłowe znajdziesz w starym repozytorium.
Pełny przewodnik znajdziesz w zaktualizowanej dokumentacji Tworzenie aplikacji z WebGPU.
Dotyczy to tylko niektórych kluczowych informacji. Zapoznaj się z pełną listą commitów.
Co nowego w WebGPU
Lista wszystkich tematów omawianych w cyklu Co nowego w WebGPU.
Chrome 138
- Skrót do korzystania z bufora jako zasobu wiążącego
- Zmiany wymagań dotyczących rozmiaru buforów zmapowanych podczas tworzenia
- Raport Architektura dotyczący najnowszych układów GPU
- Wycofanie atrybutu GPUAdapter isFallbackAdapter
- Aktualizacje dotyczące Dawn
Chrome 137
- Używanie widoku tekstury do powiązania zewnętrznej tekstury
- Buforowanie kopii bez określania przesunięć i rozmiaru
- WGSL workgroupUniformLoad z wykorzystaniem wskaźnika do atomic
- Atrybut powerPreference atrybutu GPUAdapterInfo
- Usuwanie atrybutu compatibilityMode z elementu GPURequestAdapterOptions
- Aktualizacje dotyczące Dawn
Chrome 136
- Atrybut isFallbackAdapter atrybutu GPUAdapterInfo
- Skrócenie czasu kompilacji shaderów w D3D 12
- Zapisywanie i kopiowanie obrazów na płótnie
- Ograniczenia trybu zgodności Lift
- Aktualizacje dotyczące Dawn
Chrome 135
- Zezwalanie na tworzenie układu potoku z układem grupy wiązania null
- Zezwalanie na wyświetlanie widoku poza granice docelowych elementów do renderowania
- Łatwiejszy dostęp do eksperymentalnego trybu zgodności na Androidzie
- Usuwanie limitu maxInterStageShaderComponents
- Aktualizacje dotyczące Dawn
Chrome 134
- Zwiększanie wydajności zadań systemów uczących się za pomocą podgrup
- Usuwanie obsługi typów tekstur do filtrowania typu float jako tekstur do mieszania
- Aktualizacje dotyczące Dawn
Chrome 133
- Dodatkowe formaty wierzchołka unorm8x4-bgra i 1-component
- Zezwalaj na wysyłanie żądań o nieznane limity z nieokreśloną wartością
- Zmiany reguł zgodności z WGSL
- Zwiększenie skuteczności WGSL dzięki odrzuceniu
- Używanie rozmiaru wyświetlania VideoFrame do tekstur zewnętrznych
- Praca z obrazami o niestandardowych orientacjach za pomocą funkcji copyExternalImageToTexture
- Ułatwienie pracy programistom
- Włączanie trybu zgodności za pomocą atrybutu featureLevel
- Oczyszczanie eksperymentalnych funkcji podgrup
- Wycofanie limitu maxInterStageShaderComponents
- Aktualizacje dotyczące Dawn
Chrome 132
- Korzystanie z 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
- Odcinanie 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ła matematyka
- Usuwanie metody requestAdapterInfo() z interfejsu GPUAdapter
- Aktualizacje dotyczące Dawn
Chrome 130
- Mieszanie dwóch źródeł
- Skrócenie czasu kompilacji shaderów na Metalu
- Wycofanie metody requestAdapterInfo() interfejsu 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 najpierw interpoluje próbkowanie, a potem
- Aktualizacje dotyczące Dawn
Chrome 127
- Doświadczalna obsługa OpenGL ES na Androidzie
- Atrybut informacji o GPUAdapter
- Usprawnienia 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 sekcji 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 tworzenia)
- 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
- Filtrowane tekstury 32-bitowe
- 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
- Buforowanie ścieżek 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
- Eksperymentalna obsługa Direct3D 11
- Uzyskaj oddzielny procesor graficzny domyślnie na 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