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

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

Текстуры хранения только для чтения и чтения-записи.

Тип привязки текстуры хранилища позволяет шейдерам читать текстуры хранилища без добавления использования TEXTURE_BINDING и выполнять смешанное чтение и запись в определенных форматах. Когда в navigator.gpu.wgslLanguageFeatures присутствует расширение языка WGSL "readonly_and_readwrite_storage_textures" , вы можете установить для доступа GPUStorageTexture значение "read-write" или "read-only" при создании макета группы привязки. Раньше это было ограничено "write-only" .

Затем ваш код шейдера WGSL может использовать read_write и квалификатор доступа read для хранения текстур, встроенные textureLoad() textureStore() ведут себя соответствующим образом, а новая встроенная textureBarrier() доступна для синхронизации доступа к памяти текстур в рабочая группа.

Рекомендуется использовать директиву require , чтобы сигнализировать о возможности невозможности переносимости с помощью requires readonly_and_readwrite_storage_textures; в верхней части кода шейдера WGSL. См. следующий пример и выпуск Dawn:1972 .

if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
  throw new Error("Read-only and read-write storage textures are not available");
}

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

const bindGroupLayout = device.createBindGroupLayout({
  entries: [{
    binding: 0,
    visibility: GPUShaderStage.COMPUTE,
    storageTexture: {
      access: "read-write", // <-- New!
      format: "r32uint",
    },
  }],
});

const shaderModule = device.createShaderModule({ code: `
  requires readonly_and_readwrite_storage_textures;

  @group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;

  @compute @workgroup_size(1, 1)
  fn main(@builtin(local_invocation_id) local_id: vec3u) {
    var data = textureLoad(tex, vec2i(local_id.xy));
    data.x *= 2;
    textureStore(tex, vec2i(local_id.xy), data);
  }`
});

// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.

Поддержка сервисных работников и коллективных работников

WebGPU в Chrome выводит поддержку веб-работников на новый уровень, теперь предлагая поддержку как сервисных, так и общих рабочих . Вы можете использовать сервис-воркеров для улучшения фоновых задач и автономных возможностей, а также общих исполнителей для эффективного совместного использования ресурсов в сценариях. См. выпуск chromium:41494731 .

Ознакомьтесь с примером расширения Chrome и расширением Chrome WebLLM, чтобы узнать, как использовать WebGPU в работнике службы расширений.

Скриншот расширения Chrome WebLLM.
Расширение WebLLM для Chrome.

Новые информационные атрибуты адаптера

Нестандартные информационные атрибуты адаптера d3dShaderModel и vkDriverVersion теперь доступны при вызове requestAdapterInfo() , если пользователь включил флаг «Функции разработчика WebGPU» в chrome://flags/#enable-webgpu-developer-features . При поддержке:

Снимок экрана https://webgpureport.org с указанием vkDriverVersion в информации об адаптере.
Информация об адаптере vkDriverVersion показана на https://webgpureport.org .

Исправления ошибок

Создание двух конвейеров с совпадающими группами привязок с использованием layout: "auto" , затем создание группы привязок с первым конвейером и использование ее во втором конвейере теперь вызывает ошибку GPUValidationError . Разрешение этого было ошибкой реализации, которая теперь исправлена ​​с помощью соответствующих тестов . См. выпуск Dawn:2402 .

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

В Dawn API обратный вызов неперехваченной ошибки, установленный с помощью wgpuDeviceSetUncapturedErrorCallback теперь не вызывается после потери устройства графического процессора. Это исправление приводит Dawn в соответствие со спецификацией API JavaScript и реализацией Blink. См. выпуск Dawn:2459 .

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

Что нового в WebGPU

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

Хром 131

Хром 130

Хром 129

Хром 128

Хром 127

Хром 126

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113