Połączenie z dwoma źródłami
Łączenie danych wyjściowych z mechanizmu cieniowania fragmentów w jednym buforze klatek jest nazywane łączeniem dwóch źródeł. Ta metoda jest szczególnie przydatna w aplikacjach wymagających złożonych operacji mieszania, takich jak oparte na trybach mieszania Porter-Duff. 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 obiekcie @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 ten fragment kodu, wpis 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...
Skrócony czas kompilacji cieniowania w przypadku metalu
Zespół Chrome ulepsza Tint, czyli kompilator języka WebGPU, przez wprowadzenie reprezentacji pośredniej (IR) dla urządzeń, które obsługują WebGPU z backendem Metal. Dzięki temu podczerwień, który znajduje się między abstrakcyjnym drzewem składni Tint (AST) a backendem systemu Metal, sprawi, że kompilator będzie bardziej wydajny i łatwy w utrzymaniu, co w końcu zwiększy wydajność zarówno dla programistów, jak i użytkowników. 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, dostępne już na Androidzie i ChromeOS, są stopniowo rozszerzane na urządzenia z macOS, które obsługują WebGPU z backendem Metal. Zobacz problem 42251016.
Wycofanie funkcji GPUAdapter requestAdapterInfo()
Metoda asynchroniczna GPUAdapter requestAdapterInfo()
jest nadmiarowa, ponieważ programiści mogą już synchronicznie pobierać dane GPUAdapterInfo za pomocą atrybutu GPUAdapter info
. Z tego powodu niestandardowa metoda GPUAdapter requestAdapterInfo()
została wycofana. Zobacz wycofane produkty.
Aktualizacje świtu
Interfejs API C webgpu.h definiuje pewne konwencje nazewnictwa struktur rozszerzeń. Zapoznaj się z informacjami o zmianach nazwy i problemie o numerze 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 depthWriteEnabled
w WGPUDepthStencilState
zmienia się z wartości logicznej na WGPUOptionalBool
, aby lepiej odzwierciedlić 3 możliwe stany (prawda, fałsz i niezdefiniowany) tak jak w interfejsie JavaScript API. Aby dowiedzieć się więcej, zapoznaj się z tym fragmentem kodu i tabelą webgpu-headers PR.
wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default
To tylko niektóre z najważniejszych informacji. Zapoznaj się z pełną listą zatwierdzeń.
Co nowego w WebGPU
Lista wszystkich tematów omawianych w serii Co nowego w WebGPU.
Chrome 130
- Mieszanie dwóch źródeł
- Skrócenie czasu kompilacji shaderów na Metalu
- Wycofanie interfejsu GPUAdapter requestAdapterInfo()
- Informacje o świcie
Chrome 129
- Obsługa HDR w trybie mapowania tonalnego obszaru roboczego
- Rozszerzona obsługa podgrup
- Informacje o świcie
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
- Informacje o świcie
Chrome 127
- Eksperymentalna obsługa OpenGL ES na Androidzie
- Atrybut informacji o GPUAdapter
- Ulepszenia interoperacyjności WebAssembly
- Poprawione błędy kodowania poleceń
- Informacje o świcie
Chrome 126
- Zwiększenie limitu maxTextureArrayLayers
- Optymalizacja przesyłania buforów w backendzie Vulkan
- Krótszy czas kompilowania shadera
- Przesłane bufory poleceń muszą być unikalne
- Aktualizacje dotyczące Dawn
Chrome 125
- Podgrupy (funkcja w trakcie opracowywania)
- Renderowanie na potrzeby wycinka tekstury 3D
- Informacje o świcie
Chrome 124
- Tekstury pamięci masowej przeznaczone tylko do odczytu oraz do odczytu i zapisu
- Obsługa pracowników i współużytkowników
- Nowe atrybuty informacji o adapterze
- Poprawki błędów
- Informacje o świcie
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 szablonu i aspektów głębi
- Informacje o świcie
Chrome 122
- Zwiększanie zasięgu dzięki trybowi zgodności (funkcja w fazie opracowywania)
- Zwiększanie limitu maxVertexAttributes
- Aktualizacje dotyczące Dawn
Chrome 121
- Obsługa WebGPU na Androidzie
- Używanie DXC zamiast FXC do kompilowania danych do cieniowania w systemie Windows
- Zapytania dotyczące sygnatury czasowej w kartach obliczeń i renderowania
- Domyślne punkty wejścia do modułów cieniowania
- Obsługuj display-p3 jako przestrzeń kolorów GPUExternalTexture
- Informacje o kupach pamięci
- Aktualizacje dotyczące Dawn
Chrome 120
- Obsługa 16-bitowych wartości zmiennoprzecinkowych w WGSL
- Przesuwaj granice
- Zmiany stanu głębi cieniowania
- Aktualizacje informacji o karcie
- Kwantyzacja zapytań dotyczących sygnatury czasowej
- Funkcje sprzątania wiosenną
Chrome 119
- Filtrowalne 32-bitowe tekstury 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
- Informacje o świcie
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
- Potoki pamięci podręcznej z układem generowanym automatycznie
- 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ą
- Polepszanie obsługi dla programistów
- Informacje o świcie
Chrome 115
- Obsługiwane rozszerzenia języka WGSL
- Eksperymentalna obsługa interfejsu Direct3D 11
- Uzyskaj oddzielny procesor graficzny domyślnie na zasilaniu z sieci
- Ułatwienie pracy programistom
- Informacje o świcie
Chrome 114
- Optymalizacja kodu JavaScript
- Funkcja getCurrentTexture() w nieskonfigurowanym obszarze roboczym powoduje zgłoszenie nieprawidłowego stanu błędu
- Aktualizacje WGSL
- Informacje o świcie