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

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

Поддержка HTMLImageElement и ImageData в copyExternalImageToTexture()

Метод copyExternalImageToTexture() в GPUQueue позволяет копировать снимок, сделанный из исходного изображения, видео или холста, в заданный GPUTexture . Теперь вы можете передавать объекты HTMLImageElement и ImageData в качестве источника. См. следующий пример и введите chromium:1471372 .

// Fetch and decode image.
const source = document.createElement("img");
source.src = "my-image.png";
await source.decode();

// Create destination texture.
const size = [source.width, source.height];
const texture = myDevice.createTexture({
 size,
 format: "rgba8unorm",
 usage:
   GPUTextureUsage.COPY_DST |
   GPUTextureUsage.RENDER_ATTACHMENT |
   GPUTextureUsage.TEXTURE_BINDING,
});

// Copies a snapshot taken from the source image into a texture.
myDevice.queue.copyExternalImageToTexture({ source }, { texture }, size);

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

Тип привязки текстуры хранилища позволяет выполнять чтение текстур без выборки и сохранять их в произвольные позиции в шейдерах. Когда функция "chromium-experimental-read-write-storage-texture" доступна в GPUAdapter , теперь вы можете запросить GPUDevice с этой функцией и установить для доступа GPUStorageTexture либо "read-write" либо "read-only" при создании макет группы привязки. Раньше это было ограничено "write-only" .

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

Эта функция все еще является экспериментальной и может измениться. Пока он стандартизируется , запустите Chrome с флагом --enable-dawn-features=allow_unsafe_apis чтобы сделать его доступным.

const feature = "chromium-experimental-read-write-storage-texture";
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has(feature)) {
  throw new Error("Read-write storage texture support is not available");
}
// Explicitly request read-write storage texture support.
const device = await adapter.requestDevice({
  requiredFeatures: [feature],
});

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

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_read_write_storage_texture;
  @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.

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

API C webgpu.h для обеспечения единообразия переименовал следующие поля: requiredFeaturesCount в requiredFeatureCount , pipelineStatisticsCount в pipelineStatisticCount и colorFormatsCount в colorFormatCount . См. выпуск Dawn:146040 .

Новая программа DawnInfo (похожая на vulkaninfo ) позволяет вам перечислять переключатели, адаптеры, функции адаптера и ограничения адаптера. Он доступен при построении samples рассвета. Вот результат ниже, сильно обрезанный для краткости. См. изменение Dawn:149020 .

./out/Debug/DawnInfo
Toggles
=======
  Name: allow_unsafe_apis
    Suppresses validation errors on API entry points or parameter combinations
    that aren't considered secure yet.
    http://crbug.com/1138528
[…]

Adapter
=======
VendorID: 0x106B
Vendor: apple
Architecture: common-3
DeviceID: 0x0000
Name: Apple M1 Pro
Driver description: Metal driver on macOS Version 13.5.1 (Build 22G90)
Adapter Type: discrete GPU
Backend Type: Metal
Power: <undefined>

  Features
  ========
   * depth_clip_control
      Disable depth clipping of primitives to the clip volume
      https://bugs.chromium.org/p/dawn/issues/detail?id=1178
[…]

  Adapter Limits
  ==============
    maxTextureDimension1D: 16,384
    maxTextureDimension2D: 16,384
[…]

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

Что нового в WebGPU

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

Хром 124

Хром 123

Хром 122

Хром 121

Хром 120

Хром 119

Хром 118

Хром 117

Хром 116

Хром 115

Хром 114

Хром 113