Mieszanie danych z 2 źródeł
Połączenie 2 wyjść shadera fragmentu w jeden bufor ramek nazywa się miksem podwójnego źródła. Ta technika jest szczególnie przydatna w przypadku aplikacji, które wymagają złożonych operacji mieszania, takich jak te oparte na trybach mieszania Portera-Duffa. Zastąpienie kolejnych przejść renderowania jednym przejściem renderowania może zwiększyć wydajność i elastyczność.
Nowa funkcja WebGPU "dual-source-blending"
umożliwia użycie atrybutu WGSL @blend_src
w polu @location(0)
w celu wskazania indeksu źródła mieszania oraz tych współczynników mieszania: "src1"
, "one-minus-src1"
, "src1-alpha"
i "one-minus-src1-alpha"
. Zobacz poniższy fragment kodu, informacje w chromestatus i problem 341973423.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("dual-source-blending")) {
throw new Error("Dual source blending support is not available");
}
// Explicitly request dual source blending support.
const device = await adapter.requestDevice({
requiredFeatures: ["dual-source-blending"],
});
const code = `
enable dual_source_blending;
struct FragOut {
@location(0) @blend_src(0) color : vec4f,
@location(0) @blend_src(1) blend : vec4f,
}
@fragment fn main() -> FragOut {
var output : FragOut;
output.color = vec4f(1.0, 1.0, 1.0, 1.0);
output.blend = vec4f(0.5, 0.5, 0.5, 0.5);
return output;
}
`;
const shaderModule = device.createShaderModule({ code });
// Create a render pipeline with this shader module
// and run the shader on the GPU...
Ulepszenia czasu kompilacji shaderów na Metalu
Zespół Chrome ulepsza Tint, czyli kompilator języka shadera WebGPU, wprowadzając reprezentację pośrednią (IR) na urządzeniach obsługujących WebGPU z backendem Metal. Ten interfejs pośredniczący, umieszczony między abstrakcyjnym drzewem składniowym (AST) Tinta a programem do zapisywania danych na zapleczu Metal, zwiększy wydajność i łatwość konserwacji kompilatora, co ostatecznie przyniesie korzyści zarówno deweloperom, jak i użytkownikom. Wstępne testy wskazują, że nowa wersja Tint jest nawet 10 razy szybsza podczas przekształcania shaderów WGSL w Unity w shadery MSL.
Te ulepszenia, które są już dostępne na Androidzie i ChromeOS, są stopniowo udostępniane na urządzeniach z macOS, które obsługują WebGPU z backendem Metal. Zobacz problem 42251016.
Wycofanie metody requestAdapterInfo() interfejsu GPUAdapter
Metoda asynchroniczna GPUAdapter requestAdapterInfo()
jest zbędna, ponieważ deweloperzy mogą już synchronicznie uzyskiwać informacje o GPUAdapter za pomocą atrybutu GPUAdapter info
. Dlatego niestandardowa metoda GPUAdapter requestAdapterInfo()
została wycofana. Zobacz zamierzanie wycofać.
Aktualizacje świtu
Interfejs API C webgpu.h definiuje pewne konwencje nazewnictwa struktur rozszerzeń. Zapoznaj się z tymi zmianami nazw i problemem 42241174.
WGPURenderPassDescriptor rozszerzenia
|
|
WGPURenderPassDescriptorMaxDrawCount ->
|
WGPURenderPassMaxDrawCount
|
WGPUShaderModuleDescriptor rozszerzenia
|
|
WGPUShaderModuleSPIRVDescriptor ->
|
WGPUShaderSourceSPIRV
|
WGPUShaderModuleWGSLDescriptor ->
|
WGPUShaderSourceWGSL
|
WGPUSurfaceDescriptor rozszerzenia
|
|
WGPUSurfaceDescriptorFromMetalLayer ->
|
WGPUSurfaceSourceMetalLayer
|
WGPUSurfaceDescriptorFromWindowsHWND ->
|
WGPUSurfaceSourceWindowsHWND
|
WGPUSurfaceDescriptorFromXlibWindow ->
|
WGPUSurfaceSourceXlibWindow
|
WGPUSurfaceDescriptorFromWaylandSurface ->
|
WGPUSurfaceSourceWaylandSurface
|
WGPUSurfaceDescriptorFromAndroidNativeWindow ->
|
WGPUSurfaceSourceAndroidNativeWindow
|
WGPUSurfaceDescriptorFromXcbWindow ->
|
WGPUSurfaceSourceXCBWindow
|
WGPUSurfaceDescriptorFromCanvasHTMLSelector ->
|
WGPUSurfaceSourceCanvasHTMLSelector_Emscripten
|
Typ atrybutu WGPUDepthStencilState
w elementach WGPUDepthStencilState
zmienia się z boolean na WGPUOptionalBool
, aby lepiej odzwierciedlać 3 możliwe stany (prawda, fałsz i niezdefiniowany) w interfejsie JavaScript API.depthWriteEnabled
Więcej informacji znajdziesz w tym fragmencie kodu i PR webgpu-headers.
wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default
Obejmuje to tylko niektóre najważniejsze informacje. Zobacz pełną listę zatwierdzeń.
Co nowego w WebGPU
Lista wszystkich tematów omawianych w cyklu Co nowego w WebGPU.
Chrome 131
- Odległości klipów 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 funkcja matematyczna)
- Usuwanie metody requestAdapterInfo() klasy GPUAdapter
- Aktualizacje dotyczące Dawn
Chrome 130
- Łączenie z podwójnym źródłem
- Skrócenie czasu kompilacji shaderów na Metalu
- Wycofanie metody requestAdapterInfo() klasy GPUAdapter
- Informacje o świcie
Chrome 129
Chrome 128
- Eksperymentowanie z podgrupami
- Wycofanie obsługi ustawiania głębi dla linii i punktów
- Ukryj nieprzechwycony błąd w Narzędziach deweloperskich w przypadku funkcji preventDefault
- WGSL interpoluje próbkowanie najpierw i potem
- Aktualizacje dotyczące Dawn
Chrome 127
- Eksperymentalna obsługa OpenGL ES na Androidzie
- Atrybut informacji o GPUAdapter
- Ulepszenia współpracy WebAssembly
- Poprawione błędy kodera poleceń
- Aktualizacje dotyczące Dawn
Chrome 126
- Zwiększanie limitu maxTextureSlateWarstwy
- Optymalizacja przesyłania bufora dla backendu Vulkana
- Ulepszenia dotyczące czasu kompilacji shaderów
- Przesłane bufory poleceń muszą być unikalne
- Informacje o świcie
Chrome 125
- Podgrupy (funkcja w trakcie tworzenia)
- Renderowanie na wycinek tekstury 3D
- Aktualizacje dotyczące Dawn
Chrome 124
- Tekstury tylko do odczytu i do odczytu i zapisu
- Obsługa pracowników Service Worker i pracowników współużytkowanych
- Nowe atrybuty informacji o adapterze
- Poprawki błędów.
- Aktualizacje dotyczące Dawn
Chrome 123
- Obsługa wbudowanych funkcji DP4a w języku WGSL
- Parametry wskaźnika bez ograniczeń w WGSL
- Składnikowy cukier do dereferencji 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 cieniowania
- Obsługa przestrzeni barw display-p3 jako przestrzeni barw GPUExternalTexture
- Informacje o kupach pamięci
- Informacje o świcie
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 zmiennoprzecinkowe
- Format wierzchołka unorm10-10-10-2
- Format tekstury rgb10a2uint
- Aktualizacje dotyczące Dawn
Chrome 118
- Obsługa HTMLImageElement i ImageData w
copyExternalImageToTexture()
- Eksperymentalna obsługa tekstury pamięci do odczytu i zapisu oraz tylko do odczytu
- Aktualizacje dotyczące Dawn
Chrome 117
- Bufor wierzchołka nieustawiony
- 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
- Potoki pamięci podręcznej z układem generowanym automatycznie
- Informacje o świcie
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 interfejsu 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