Что нового в 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() для синхронизации доступа к памяти текстур в рабочей группе.

Рекомендуется использовать директиву `requires` для обозначения потенциальной непереносимости с помощью 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 в рабочем процессе службы расширения.

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

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

Теперь при вызове функции requestAdapterInfo() доступны нестандартные атрибуты информации об адаптере d3dShaderModel и vkDriverVersion , если пользователь включил флаг "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 , теперь не вызывается после потери графического процессора. Это исправление приводит Dawn в соответствие со спецификацией API JavaScript и реализацией Blink. См. проблему dawn:2459 .

Здесь описаны лишь некоторые из ключевых моментов. Ознакомьтесь с полным списком изменений .

Что нового в WebGPU?

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

Хром 144

Хром 143

Хром 142

Хром 141

Хром 140

Хром 139

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