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

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

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

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

Минимальная реализация предложения подгрупп доступна для локального тестирования с флагом «Unsafe WebGPU Support» по адресу 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 равно true для этого активного вызова, и 0 в противном случае.
  • subgroupBroadcast(value, id) : Транслирует value из вызова с subgroup_invocation_id , соответствующим id , всем вызовам в подгруппе. Примечание: id должен быть константой времени компиляции.

В будущем будут добавлены дополнительные встроенные функции, такие как subgroupAdd , subgroupAll , subgroupElect , subgroupShuffle . См. issue 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 в этих обстоятельствах. См. issue 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 допускает либо первую, либо последнюю вершину. См. issue 340278447 .

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

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

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

Бэкэнд OpenGL теперь поддерживает Surface с y-flip blit для каждого вызова Present() . См. issue 344814083 .

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

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

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

Что нового в WebGPU

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

Хром 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