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

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

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

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

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

Рекомендуется использовать директиву require-directive для сигнализации о потенциальной непереносимости с помощью 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 выводит поддержку веб-воркеров на новый уровень, теперь предлагая поддержку как для сервис-воркеров, так и для общих воркеров . Вы можете использовать сервис-воркеры для улучшения фоновых задач и возможностей офлайн, а также общие воркеры для эффективного распределения ресурсов между скриптами. См. issue chromium:41494731 .

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

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

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

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

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

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

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

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

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

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

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