Nowości w WebGPU (Chrome 130)

François Beaufort
François Beaufort

Mieszanie z 2 źródeł

Łączenie 2 wyjść shadera fragmentów w jeden bufor ramki nazywa się mieszaniem z 2 źródeł. 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ępując kolejne przebiegi renderowania jednym przebiegiem, mieszanie z 2 źródeł może zwiększyć wydajność i elastyczność.

Nowa funkcja "dual-source-blending" WebGPU umożliwia używanie atrybutu WGSL @blend_src@location(0) do oznaczania indeksu źródła mieszania i tych czynników mieszania: "src1", "one-minus-src1", "src1-alpha""one-minus-src1-alpha". Zobacz ten fragment kodu, wpis w Chrome Statuszgłoszenie 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ócenie czasu kompilacji cieniowania w Metal

Zespół Chrome ulepsza Tint, kompilator języka cieniowania WebGPU, wprowadzając reprezentację pośrednią (IR) dla urządzeń obsługujących WebGPU z backendem Metal. Ten język pośredni, umieszczony między abstrakcyjnym drzewem składni (AST) Tint a modułem zapisu backendu Metal, zwiększy wydajność i łatwość utrzymania kompilatora, co przyniesie korzyści zarówno deweloperom, jak i użytkownikom. Wstępne testy pokazują, że nowa wersja Tint jest nawet 10 razy szybsza podczas tłumaczenia shaderów WGSL w Unity na MSL.

Schemat blokowy przedstawiający proces konwersji kodu shadera WGSL na instrukcje niskiego poziomu dla procesora graficznego.
Tworzenie potoku renderowania w systemie macOS.

Te ulepszenia, które są już dostępne na Androidzie i ChromeOS, są stopniowo wprowadzane na urządzeniach z macOS obsługujących WebGPU z backendem Metal. Zobacz problem 42251016.

Wycofanie metody GPUAdapter requestAdapterInfo()

Asynchroniczna metoda GPUAdapter requestAdapterInfo() jest zbędna, ponieważ programiści mogą już synchronicznie pobierać informacje GPUAdapterInfo za pomocą atrybutu GPUAdapter info. Dlatego niestandardowa metoda GPUAdapter requestAdapterInfo() została wycofana. Zobacz informacje o wycofaniu.

W konsoli Narzędzi deweloperskich wyświetla się ostrzeżenie o wycofaniu funkcji requestAdapterInfo().
Ostrzeżenie o wycofaniu funkcji requestAdapterInfo() w Narzędziach deweloperskich w Chrome.

Aktualizacje o świcie

Interfejs C API webgpu.h ma zdefiniowane konwencje nazewnictwa dla struktur rozszerzeń. Zobacz te zmiany nazw i zgłoś problem 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 WGPUDepthStencilStatedepthWriteEnabled zmienia się z wartości logicznej na WGPUOptionalBool, aby lepiej odzwierciedlać 3 możliwe stany (prawda, fałsz i niezdefiniowany) tak jak w interfejsie JavaScript API. Więcej informacji znajdziesz w tym fragmencie kodu i w żądaniu wycofania webgpu-headers.

wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default

Obejmuje to tylko niektóre z najważniejszych informacji. Zapoznaj się z pełną listą zatwierdzeń.

Nowości w WebGPU

Lista wszystkich tematów omówionych w serii Co nowego w WebGPU.

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113