Что нового в WebGPU (Chrome 130)

Франсуа Бофор
François Beaufort

Смешивание из двух источников

Объединение двух выходных сигналов фрагментного шейдера в один буфер кадра называется двухканальным смешением . Этот метод особенно полезен для приложений, требующих сложных операций смешения, таких как те, которые основаны на режимах смешения Портера-Даффа. Заменяя последующие проходы рендеринга одним проходом, двухканальное смешение может повысить производительность и гибкость.

Новая функция WebGPU "dual-source-blending" позволяет использовать атрибут WGSL @blend_src в @location(0) для обозначения индекса источника смешивания и следующих коэффициентов смешивания : "src1" , "one-minus-src1" , "src1-alpha" и "one-minus-src1-alpha" . См. следующий фрагмент кода, запись chromestatus и проблему 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...

Улучшения времени компиляции шейдеров в Metal.

Команда Chrome улучшает Tint, компилятор языка шейдеров WebGPU, вводя промежуточное представление (IR) для устройств, поддерживающих WebGPU с бэкендом Metal. Это промежуточное представление, расположенное между абстрактным синтаксическим деревом (AST) Tint и разработчиком бэкенда Metal, сделает компилятор более эффективным и удобным для сопровождения, что в конечном итоге принесет пользу как разработчикам, так и пользователям. Первые тесты показывают, что новая версия Tint работает до 10 раз быстрее при преобразовании шейдеров Unity WGSL в MSL.

Блок-схема демонстрирует процесс преобразования шейдерного кода WGSL в низкоуровневые инструкции для графического процессора.
Создание конвейера рендеринга в macOS.

Эти улучшения, уже доступные на Android и ChromeOS, постепенно распространяются на устройства macOS, поддерживающие WebGPU с бэкендом Metal. См. проблему 42251016 .

Функция requestAdapterInfo() объявлена ​​устаревшей.

Асинхронный метод requestAdapterInfo() ` объекта `GPUAdapter` является избыточным, поскольку разработчики уже могут получить информацию о `GPUAdapterInfo` синхронно, используя атрибут info объекта `GPUAdapter`. Следовательно, нестандартный метод requestAdapterInfo() ` объекта `GPUAdapter` теперь считается устаревшим. См. намерение объявить метод устаревшим .

В консоли DevTools отображается предупреждение об устаревании функции requestAdapterInfo().
Предупреждение об устаревшей функции requestAdapterInfo() в инструментах разработчика Chrome.

Утренние обновления

В C API файла webgpu.h определены некоторые соглашения об именовании структур расширения. См. следующие изменения в именах и проблему 42241174 .

Расширения WGPURenderPassDescriptor
WGPURenderPassDescriptorMaxDrawCount -> WGPURenderPassMaxDrawCount
Расширения WGPUShaderModuleDescriptor
WGPUShaderModuleSPIRVDescriptor -> WGPUShaderSourceSPIRV
WGPUShaderModuleWGSLDescriptor -> WGPUShaderSourceWGSL
Расширения WGPUSurfaceDescriptor
WGPUSurfaceDescriptorFromMetalLayer -> WGPUSurfaceSourceMetalLayer
WGPUSurfaceDescriptorFromWindowsHWND -> WGPUSurfaceSourceWindowsHWND
WGPUSurfaceDescriptorFromXlibWindow -> WGPUSurfaceSourceXlibWindow
WGPUSurfaceDescriptorFromWaylandSurface -> WGPUSurfaceSourceWaylandSurface
WGPUSurfaceDescriptorFromAndroidNativeWindow -> WGPUSurfaceSourceAndroidNativeWindow
WGPUSurfaceDescriptorFromXcbWindow -> WGPUSurfaceSourceXCBWindow
WGPUSurfaceDescriptorFromCanvasHTMLSelector -> WGPUSurfaceSourceCanvasHTMLSelector_Emscripten

Тип атрибута depthWriteEnabled объекта WGPUDepthStencilState изменяется с boolean на WGPUOptionalBool , чтобы лучше отразить три возможных состояния (true, false и undefined), как в JavaScript API. Для получения дополнительной информации см. следующий фрагмент кода и запрос на слияние webgpu-headers .

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

Здесь описаны лишь некоторые из ключевых моментов. Ознакомьтесь с полным списком изменений .

Что нового в WebGPU?

Список всего, что было рассмотрено в серии статей «Что нового в WebGPU» .

Хром 144

Хром 143

Хром 142

Хром 141

Хром 140

Хром 139

Хром 138

Хром 137

Хром 136

Хром 135

Хром 134

Хром 133

Хром 132

Хром 131

Хром 130

Хром 129

Хром 128

Хром 127

Хром 126

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113