Что нового в WebGPU (Chrome 149-150)

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

Опубликовано: 17 июня 2026 г.

Немедленные

Непосредственные переменные, также известные как константы передачи или корневые константы, позволяют передавать небольшие объемы часто изменяющихся данных непосредственно в шейдеры. Этот процесс позволяет обойти накладные расходы на создание буферов графического процессора и управление группами привязки.

Обновление привязок буфера униформ для данных, изменяющихся при каждом вызове отрисовки — таких как уникальный идентификатор объекта или матрица 3D-преобразования для сотен объектов — создает дополнительную нагрузку на ЦП. Внедряйте необработанные значения непосредственно в кодировщик прохода, чтобы избежать записи данных в память и управления поиском на графическом процессоре.

Непосредственные значения обеспечивают быстрый доступ к крошечным, высокодинамичным переменным. Используйте однородные буферы или буферы хранения для больших массивов данных, сложных световых структур или массивных матриц.

В вашем шейдере WGSL адресное пространство <immediate> позволяет определять непосредственные данные, которые могут быть переданы непосредственно кодировщику прохода. Вызовите setImmediates() в JavaScript перед вызовом отрисовки, чтобы предоставить эти данные без привязки группы. Чтобы проверить поддержку, определите наличие расширения языка WGSL immediate_address_space через navigator.gpu.wgslLanguageFeatures . См. следующий пример и план выпуска .

if (!navigator.gpu.wgslLanguageFeatures.has('immediate_address_space')) {
   throw new Error(`WGSL immediate address space is not available`);
}

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

const module = device.createShaderModule({ code: `
  requires immediate_address_space;

  var<immediate> color: vec4f;

  @vertex fn vertexMain(@builtin(vertex_index) i : u32) -> @builtin(position) vec4f {
    const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
    return vec4f(pos[i], 0, 1);
  }

  @fragment fn fragmentMain() -> @location(0) vec4f {
    return color;
  }`,
});

// Create render pass encoder (omitted)...

// By using layout: 'auto', WebGPU will automatically infer the `immediateSize`
// required by the pipeline layout from the WGSL module.
const pipeline = device.createRenderPipeline({
  layout: 'auto',
  vertex: { module },
  fragment: { module, targets: [{ format }] },
});
myRenderPassEncoder.setPipeline(pipeline);

// Send immediate data to the GPU, then issue a draw call
myRenderPassEncoder.setImmediates(/*rangeOffset=*/0, new Float32Array([255, 0, 0, 255]));
myRenderPassEncoder.draw(3);
myRenderPassEncoder.end();

Для более подробного ознакомления с этой функцией, обратитесь к разделу WebGPUFundamentals Immediates .

Выражаем благодарность команде Microsoft за их вклад!

Более строгая проверка для временных подключений.

В WebGPU недавно был представлен флаг TRANSIENT_ATTACHMENT GPUTextureUsage, который позволяет разработчикам создавать временные элементы рендеринга, такие как буферы глубины-трафарета или многосэмплированные целевые области. Эти элементы остаются в быстрой памяти тайлов на кристалле, не выделяя основную видеопамять.

В последних обновлениях ( #6248 и #6267 ) уточнены правила проверки, чтобы предотвратить ненадлежащее использование этих эффективных с точки зрения использования памяти текстурных привязок:

  • Из-за ограничений платформы, при создании временных текстур, viewFormats должен представлять собой пустой массив. Альтернативные форматы отображения не требуются, поскольку временные текстуры предназначены только для рендеринга.
  • Создание текстурного представления не сужает круг используемых флагов. При вызове createView() для временной текстуры представление не может изменить свое использование.
  • Временные вложения нельзя использовать в качестве параметра resolveTarget внутри прохода рендеринга.

Утренние обновления

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

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

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

Хром 149-150

Хром 147-148

Хром 146

Хром 145

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