Что нового в 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» .

Хром 125

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113