Tekstury w pamięci tylko do odczytu i do odczytu i zapisu
Typ wiązania tekstur pamięci masowej umożliwia shaderom odczytywanie tekstur z pamięci masowej bez dodawania użycia TEXTURE_BINDING
oraz wykonywanie operacji odczytu i zapisu mieszanych w określonych formatach. Jeśli "readonly_and_readwrite_storage_textures"
rozszerzenie języka WGSL jest obecne w navigator.gpu.wgslLanguageFeatures
, podczas tworzenia układu grupy wiązania możesz ustawić dostęp GPUStorageTexture
do "read-write"
lub "read-only"
. Wcześniej było to ograniczone do "write-only"
.
Następnie kod shadera WGSL może używać kwalifikatora dostępu read_write
i read
do tekstur pamięci. Wbudowane funkcje textureLoad()
i textureStore()
działają odpowiednio, a nowa wbudowana funkcja textureBarrier()
jest dostępna do synchronizowania dostępu do pamięci tekstur w grupie roboczej.
Zalecamy użycie dyrektywy wymagań, aby zasygnalizować potencjalną niekompatybilność z requires readonly_and_readwrite_storage_textures;
na początku kodu shadera WGSL. Zobacz ten przykład i problem dawn:1972.
if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
throw new Error("Read-only and read-write storage textures are not available");
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const bindGroupLayout = device.createBindGroupLayout({
entries: [{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
storageTexture: {
access: "read-write", // <-- New!
format: "r32uint",
},
}],
});
const shaderModule = device.createShaderModule({ code: `
requires readonly_and_readwrite_storage_textures;
@group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_id) local_id: vec3u) {
var data = textureLoad(tex, vec2i(local_id.xy));
data.x *= 2;
textureStore(tex, vec2i(local_id.xy), data);
}`
});
// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.
Obsługa skryptów service worker i skryptów współdzielonych
WebGPU w Chrome ulepsza obsługę web workerów, oferując teraz obsługę zarówno serwisów, jak i wspólnych workerów. Możesz używać skryptów service worker, aby ulepszać zadania w tle i funkcje offline, oraz skryptów shared worker, aby efektywnie udostępniać zasoby w różnych skryptach. Zobacz problem chromium:41494731.
Aby dowiedzieć się, jak używać WebGPU w workerze rozszerzenia, sprawdź próbny kod rozszerzenia Chrome i rozszerzenie WebLLM do Chrome.
Nowe atrybuty informacji o adapterze
Niestandardowe atrybuty informacji o adapterze d3dShaderModel
i vkDriverVersion
są teraz dostępne po wywołaniu requestAdapterInfo()
, jeśli użytkownik włączył opcję „Funkcje dla deweloperów WebGPU” w sekcji chrome://flags/#enable-webgpu-developer-features
. W przypadku obsługi:
d3dShaderModel
to maksymalny obsługiwany numer modelu shadera D3D. Na przykład wartość 62 oznacza, że bieżący sterownik obsługuje HLSL SM 6.2. Zapoznaj się z dokumentacją i problemem dawn:1254.vkDriverVersion
to określony przez dostawcę numer wersji sterownika Vulkan. Zapoznaj się z dokumentacją i problemem chromium:327457605.
Poprawki błędów
Tworzenie 2 potoku z pasującymi grupami bindów za pomocą layout: "auto"
, a następnie tworzenie grupy bindów z pierwszego potoku i używanie jej w drugim powoduje błąd GPUValidationError. Dopuszczenie do tego było błędem implementacji, który został naprawiony za pomocą odpowiednich testów. Zobacz issue dawn:2402.
Aktualizacje świtu
W interfejsie Dawn API wywołanie funkcji obsługi nieprzechwyczonej awarii wgpuDeviceSetUncapturedErrorCallback
nie jest już wywoływane po utracie połączenia z urządzeniem GPU. Ta poprawka dopasowuje Dawn do specyfikacji interfejsu API JavaScript i do implementacji Blink. Zobacz issue dawn:2459.
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 131
- Odcinki 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średnich metod wielokrokowego rysowania
- Opcja kompilacji modułu shadera: ścisła matematyka
- Usuwanie metody requestAdapterInfo() klasy 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 i współużytkownikó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
- Składnia cukrowa do odwoływania się do elementów złożonych w WGSL
- Oddzielny stan tylko do odczytu dla stempli i aspektów 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 kupach 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
- Skuteczne wykorzystanie pamięci podręcznej dzięki automatycznie generowanemu układowi
- Aktualizacje dotyczące Dawn
Chrome 116
- Integracja z WebCodecs
- Utracone urządzenie 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 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