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

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

Экспериментируем с подгруппами

Функция подгрупп обеспечивает параллелизм на уровне SIMD, позволяя потокам внутри группы взаимодействовать и выполнять коллективные математические операции (например, вычисление суммы 16 чисел). Это обеспечивает высокоэффективную форму обмена данными между потоками.

Минимальная реализация предложения подгрупп доступна для локального тестирования под флагом «Поддержка Unsafe WebGPU» по адресу chrome://flags/#enable-unsafe-webgpu .

Вы также можете опробовать подгруппы на своем сайте с реальными пользователями, подписавшись на пробную версию Origin . Прочтите раздел Начало работы с пробными версиями Origin, чтобы узнать, как подготовить сайт к использованию пробных версий Origin. Пробная версия Origin будет работать с Chrome 128 по 131 (заканчивается 19 февраля 2025 г.). См . «Намерение экспериментировать» .

Если функция "subgroups" доступна в GPUAdapter , запросите GPUDevice с этой функцией, чтобы получить поддержку подгрупп в WGSL и проверить ограничения minSubgroupSize и maxSubgroupSize .

Вам также необходимо явно включить это расширение в коде WGSL с помощью enable subgroups; . При включении вы получаете доступ к следующим дополнениям:

  • subgroup_invocation_id : встроенное значение индекса потока внутри подгруппы.
  • subgroup_size : встроенное значение для доступа к размеру подгруппы.
  • subgroupBallot(value) : возвращает набор битовых полей, где бит, соответствующий subgroup_invocation_id равен 1, если value истинно для этого активного вызова, и 0 в противном случае.
  • subgroupBroadcast(value, id) : транслирует value вызова с идентификатором subgroup_invocation_id совпадающим с id , всем вызовам в подгруппе. Примечание. id должен быть константой времени компиляции.

В будущем будут добавлены дополнительные встроенные функции, такие как subgroupAdd , subgroupAll , subgroupElect , subgroupShuffle . См. выпуск 354738715 .

Чтобы разрешить f16 в операциях с подгруппами, запросите GPUDevice с функциями "subgroups" , "subgroups-f16" и "shader-f16" , затем включите его в своем коде WGSL с помощью enable f16, subgroups, subgroups_f16; .

Следующий фрагмент кода предоставляет основу для работы и раскрытия потенциала подгрупп.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
// Explicitly request subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;

  var<workgroup> wgmem : u32;

  @group(0) @binding(0)
  var<storage, read> inputs : array<u32>;

  @group(0) @binding(1)
  var<storage, read_write> output : array<u32>;

  @compute @workgroup_size(64)
  fn main(@builtin(subgroup_size) subgroupSize : u32,
          @builtin(subgroup_invocation_id) id : u32,
          @builtin(local_invocation_index) lid : u32) {
    // One thread per workgroup writes the value to workgroup memory.
    if (lid == 0) {
      wgmem = inputs[lid];
    }
    workgroupBarrier();
    var v = 0u;

    // One thread per subgroup reads the value from workgroup memory
    // and shares that value with every other thread in the subgroup
    // to reduce local memory bandwidth.
    if (id == 0) {
      v = wgmem;
    }
    v = subgroupBroadcast(v, 0);
    output[lid] = v;
  }`,
});

// Send the appropriate commands to the GPU...

Устарела настройка смещения глубины для линий и точек.

Изменение спецификации WebGPU делает ошибкой проверки установку для depthBias , depthBiasSlopeScale и depthBiasClamp ненулевого значения, когда топология конвейера рендеринга представляет собой тип линии или точки. Чтобы дать разработчикам достаточно времени для обновления своего кода, в консоли DevTools отображается предупреждение о предстоящей проверке, а в таких обстоятельствах значения также устанавливаются на 0. См. выпуск 352567424 .

Скрыть предупреждение DevTools о неперехваченной ошибке, если PreventDefault

В консоли DevTools предупреждения о событиях uncapturederror больше не отображаются, если был зарегистрирован прослушиватель событий для uncapturederror и в обратном вызове прослушивателя событий был вызван метод Event preventDefault() . Такое поведение соответствует обработке событий в JavaScript. См. следующий пример и проблему 40263619 .

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

device.addEventListener("uncapturederror", (event) => {
  // Prevents browser warning to show up in the DevTools Console.
  event.preventDefault();

  // TODO: Handle event.error
});

WGSL сначала интерполирует выборку и либо

Атрибут interpolate WGSL позволяет управлять определяемой пользователем интерполяцией данных ввода-вывода. Теперь новые параметры выборки интерполяции first (по умолчанию) either дают вам дополнительный контроль: first используется значение из первой вершины примитива, а either разрешается либо первая, либо последняя вершина. См. выпуск 340278447 .

Обновления рассвета

Реализация WGPUFuture от Dawn для обработки асинхронных операций завершена. Ключевые концепции включают wgpuInstanceProcessEvents для гибкой обработки событий и WGPUCallbackMode для определения местоположений обратного вызова. WGPUFuture означает одноразовые события с бесконечным временем существования, а wgpuInstanceWaitAny ожидает завершения любого будущего или тайм-аута. См . выпуск 42240932 .

Значение CompositeAlphaMode::Auto теперь не сообщается Surface::GetCapabilities() . Он по-прежнему действителен и эквивалентен Surface::GetCapabilities().alphaMode[0] . См. выпуск 292 .

Серверная часть OpenGL теперь поддерживает Surface с переворотом по оси Y для каждого вызова Present() . См. выпуск 344814083 .

Метод Adapter::GetProperties() устарел в пользу использования Adapter::GetInfo() .

Jaswant, внешний участник, переписал все файлы CMake, упростив их обновление и позволив выполнять предварительные сборки. Ознакомьтесь с кратким руководством по использованию Dawn в проектах CMake.

Это касается только некоторых ключевых моментов. Ознакомьтесь с исчерпывающим списком коммитов .

Что нового в WebGPU

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

Хром 130

Хром 129

Хром 128

Хром 127

Хром 126

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113