Дата публикации: 26 мая 2025 г.
Используйте представление текстуры для привязки externalTexture
Теперь при создании GPUBindGroup вместо привязки GPUExternalTexture можно использовать совместимый GPUTextureView (2D, один подресурс).
Это упрощает логику шейдеров в конвейерах видеоэффектов, где необходимо обрабатывать как GPUExternalTexture (для исходного видео), так и GPUTextureView (для промежуточной обработки). Кроме того, это позволяет избежать динамической компиляции шейдеров в зависимости от того, откуда поступает текстура. Подробнее о намерении реализовать WebGPU: GPUTextureView для привязки externalTexture…
const texture = myDevice.createTexture({
size: [42, 42],
format: navigator.gpu.getPreferredCanvasFormat(),
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
const code = `
@group(0) @binding(0) var texture : texture_external;
@group(0) @binding(1) var<storage, read_write> buffer: vec2u;
@compute @workgroup_size(1) fn main() {
buffer = textureDimensions(texture);
}`;
const pipeline = myDevice.createComputePipeline({
layout: "auto",
compute: { module: myDevice.createShaderModule({ code }) },
});
const bindGroup = myDevice.createBindGroup({
layout: pipeline.getBindGroupLayout(0),
entries: [
{ binding: 0, resource: texture.createView() }, // Use texture view for an externalTexture binding
{ binding: 1, resource: { buffer: myBuffer } },
],
});
Копирование буферов без указания смещений и размера
Новая перегрузка метода GPUCommandEncoder позволяет разработчикам опускать параметры смещения и размера при использовании copyBufferToBuffer(), чтобы упростить копирование целых буферов. Подробнее о намерении реализовать перегрузку copyBufferToBuffer в WebGPU…
const size = 42;
const srcBuffer = myDevice.createBuffer({
size,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});
const dstBuffer = myDevice.createBuffer({
size,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});
// Copy entire buffer.
myCommandEncoder.copyBufferToBuffer(srcBuffer, dstBuffer);
// This is the same as the following.
// myCommandEncoder.copyBufferToBuffer(srcBuffer, 0, dstBuffer, 0, size);
WGSL: workgroupUniformLoad с использованием указателя на атомарную переменную
В WGSL добавлен новый вариант перегрузки оператора workgroupUniformLoad(ptr) для удобства разработчиков. Атомарно загружает значение, на которое указывает ptr, и возвращает его всем вызовам в рабочей группе, где ptr – это указатель на атомарную переменную в рабочей группе. Подробнее об ошибке 408241039…
@group(0) @binding(0) var<storage, read_write> buffer : array<u32, 1>;
var<workgroup> wgvar : atomic<u32>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_index) lid: u32) {
if (lid == 0) {
atomicStore(&(wgvar), 42u);
}
buffer[lid] = workgroupUniformLoad(&wgvar);
}
Атрибут powerPreference для GPUAdapterInfo
Нестандартный строковый атрибут powerPreference GPUAdapterInfo теперь доступен, если пользователь включил флаг "Функции разработчика WebGPU" на странице chrome://flags/#enable-webgpu-developer-features. Если поддерживается, значение powerPreference может быть "low-power" или "high-performance" в зависимости от значения GPUPowerPreference, которое использовалось в GPURequestAdapterOptions. Подробнее о CL 6438860…
function checkPowerPreferenceForGpuDevice(device) {
const powerPreference = device.adapterInfo.powerPreference;
if (powerPreference === "high-performance") {
// High-performance GPU detected. Enabling enhanced graphics settings.
} else if (powerPreference === "low-power") {
// Low-power GPU detected. Optimizing for battery life.
}
}
Удаление атрибута compatibilityMode из GPURequestAdapterOptions
Экспериментальный атрибут GPURequestAdapterOptions compatibilityMode был удален. Вместо него теперь используется стандартизированный атрибут featureLevel, добавленный в Chrome 133. Подробнее о проблеме 366151404…
Обновления на рассвете
Разработчики могут создавать проекты WebGPU на таких языках, как C++, используя webgpu.h для таргетинга как на WebAssembly, так и на определенные платформы. В недавно выпущенной библиотеке Dawn "emdawnwebgpu" ("Emscripten Dawn WebGPU") реализован новейший стандартизированный файл webgpu.h через API браузера.
Emdawnwebgpu – это поддерживаемая ветвь встроенных привязок Emscripten (USE_WEBGPU), которые больше не поддерживаются. Все новые разработки ведутся в emdawnwebgpu, а встроенные привязки Emscripten будут удалены по мере перехода разработчиков на emdawnwebgpu. Заголовок C Emdawnwebgpu очень похож на заголовок Dawn, а встроенные привязки значительно устарели.
Скачайте emdawnwebgpu со страницы релизов Dawn на GitHub и прочитайте README.md, чтобы узнать, как его использовать. Исходные файлы можно найти в репозитории Dawn.
Полное руководство можно найти в обновленной документации Как создать приложение с помощью WebGPU.
Это лишь некоторые из основных изменений. Ознакомьтесь с полным списком коммитов.
Что нового в WebGPU
Список всех тем, которые были рассмотрены в серии статей Что нового в WebGPU.
Chrome 155–156
- Расширение WGSL fragment_depth
- Несоответствие сжатия текстур
- Цветовые пространства srgb-linear и display-p3-linear
- Дополнительный формат вершин snorm10-10-10-2
- Поддержка f16 на устройствах NVIDIA с Vulkan
- Обновления Dawn
Chrome 153–154
- Расширение buffer_view для WGSL
- Расширение WGSL swizzle_assignment
- Обновления расширений WGSL
- Обновления Dawn
Chrome 151–152
Chrome 149–150
Chrome 147–148
Chrome 146
- Поддержка режима совместимости WebGPU на OpenGL ES 3.1
- Временные прикрепленные файлы
- Расширение WGSL texture_and_sampler_let
- Обновления Dawn
Chrome 145
- Расширение WGSL subgroup_uniformity
- Экспериментальное синхронное сопоставление буферов в рабочих процессах
- Обновления Dawn
Chrome 144
- Расширение WGSL subgroup_id
- Расширение WGSL uniform_buffer_standard_layout
- WebGPU в Linux
- Более быстрые функции writeBuffer и writeTexture
- Обновления Dawn
Chrome 143
- Перестановка компонентов текстуры
- Удаление использования текстуры хранилища bgra8unorm, доступной только для чтения
- Обновления Dawn
Chrome 142
Chrome 141
- Завершение проверки инсулинорезистентности
- Анализ диапазона целых чисел в компиляторе WGSL
- Обновление SPIR-V 1.4 для серверной части Vulkan
- Обновления Dawn
Chrome 140
- Запросы устройств используют адаптер
- Сокращенная запись для использования текстуры вместо представления текстуры
- Функция textureSampleLevel в WGSL поддерживает 1D-текстуры
- Прекращение поддержки текстур bgra8unorm для хранения данных только для чтения
- Удаление атрибута isFallbackAdapter для GPUAdapter
- Обновления Dawn
Chrome 139
- Поддержка 3D-текстур для сжатых форматов BC и ASTC
- Новая функция "Основные функции и ограничения"
- Пробная версия WebGPU в режиме совместимости
- Обновления Dawn
Chrome 138
- Сокращенная запись для использования буфера в качестве связывающего ресурса
- Изменения требований к размеру буферов, сопоставленных при создании
- Отчет об архитектуре для новых графических процессоров
- Поддержка атрибута isFallbackAdapter для GPUAdapter прекращена
- Обновления Dawn
Chrome 137
- Как использовать представление текстуры для привязки externalTexture
- Копирование буферов без указания смещений и размера
- WGSL workgroupUniformLoad с использованием указателя на атомарную переменную
- Атрибут powerPreference для GPUAdapterInfo
- Удаление атрибута compatibilityMode из GPURequestAdapterOptions
- Обновления Dawn
Chrome 136
- Атрибут GPUAdapterInfo isFallbackAdapter
- Улучшение времени компиляции шейдеров в D3D12
- Как сохранить или скопировать изображение с холста
- Снять ограничения режима совместимости
- Обновления Dawn
Chrome 135
- Разрешить создание макета конвейера с макетом группы привязки null
- Разрешить областям просмотра выходить за границы целевых объектов отрисовки
- Упрощенный доступ к экспериментальному режиму совместимости на устройствах Android
- Удаление ограничения maxInterStageShaderComponents
- Обновления Dawn
Chrome 134
- Как улучшить рабочие нагрузки машинного обучения с помощью подгрупп
- Удаление поддержки фильтруемых типов текстур с плавающей точкой как смешиваемых
- Обновления Dawn
Chrome 133
- Дополнительные форматы вершин unorm8x4-bgra и с одним компонентом
- Разрешить запрашивать неизвестные лимиты с неопределенным значением
- Изменения в правилах выравнивания WGSL
- Повышение производительности WGSL при использовании функции discard
- Как использовать displaySize из VideoFrame для внешних текстур
- Как обрабатывать изображения с нестандартной ориентацией с помощью copyExternalImageToTexture
- Улучшение работы разработчиков
- Как включить режим совместимости с помощью featureLevel
- Удаление экспериментальных функций подгрупп
- Прекращение поддержки ограничения maxInterStageShaderComponents
- Обновления Dawn
Chrome 132
- Использование текстур
- Смешивание текстур с 32-битной плавающей точкой
- Атрибут adapterInfo для GPUDevice
- При настройке контекста элемента canvas с недопустимым форматом возникает ошибка JavaScript
- Ограничения фильтрации текстур
- Эксперименты с расширенными подгруппами
- Улучшение работы разработчиков
- Экспериментальная поддержка 16-битных нормализованных форматов текстур
- Обновления Dawn
Chrome 131
- Как обрезать расстояния в WGSL
- GPUCanvasContext getConfiguration()
- Примитивы точек и линий не должны иметь смещения глубины
- Встроенные функции инклюзивного сканирования для подгрупп
- Экспериментальная поддержка многократного непрямого рисования
- Параметр компиляции модуля шейдера strict math
- Удаление GPUAdapter requestAdapterInfo()
- Обновления Dawn
Chrome 130
- Смешивание двух источников
- Улучшение времени компиляции шейдеров в Metal
- Устаревание метода GPUAdapter requestAdapterInfo()
- Обновления Dawn
Chrome 129
- Поддержка HDR с режимом сопоставления тонов на холсте
- Расширенная поддержка подгрупп
- Обновления Dawn
Chrome 128
- Эксперименты с подгруппами
- Удаление возможности задавать смещение глубины для линий и точек
- Скрытие предупреждения инструментов разработчика о необработанной ошибке, если используется preventDefault
- WGSL interpolate sampling first and either
- Обновления Dawn
Chrome 127
- Экспериментальная поддержка OpenGL ES на устройствах Android
- Атрибут info для GPUAdapter
- Улучшения взаимодействия WebAssembly
- Улучшенные сообщения об ошибках кодировщика команд
- Обновления Dawn
Chrome 126
- Увеличение лимита maxTextureArrayLayers
- Оптимизация загрузки буфера для серверной части Vulkan
- Улучшения времени компиляции шейдеров
- Отправленные буферы команд должны быть уникальными
- Обновления Dawn
Chrome 125
Chrome 124
- Текстуры хранилища с доступом только на чтение и на чтение и запись
- Поддержка сервис-воркеров и объектов SharedWorker
- Новые атрибуты информации об адаптере
- Исправленные ошибки
- Обновления Dawn
Chrome 123
- Поддержка встроенных функций DP4a в WGSL
- Параметры указателей без ограничений в WGSL
- Синтаксический сахар для разыменования составных типов в WGSL
- Отдельное состояние "Только чтение" для трафарета и глубины
- Обновления Dawn
Chrome 122
- Расширение охвата с помощью режима совместимости (функция в разработке)
- Как увеличить лимит maxVertexAttributes
- Обновления Dawn
Chrome 121
- Поддержка WebGPU на устройствах Android
- Использование DXC вместо FXC для компиляции шейдеров в Windows
- Запросы временных меток в проходах вычислений и отрисовки
- Точки входа по умолчанию для модулей шейдеров
- Поддержка display-p3 в качестве цветового пространства GPUExternalTexture
- Информация о кучах памяти
- Обновления Dawn
Chrome 120
- Поддержка 16-битных значений с плавающей запятой в WGSL
- Преодолейте все препятствия
- Изменения состояния буфера глубины и трафарета
- Обновления информации об адаптере
- Квантование запросов с временными метками
- Функции для весенней уборки
Chrome 119
- Фильтруемые 32-битные текстуры с плавающей запятой
- Формат вершин unorm10-10-10-2
- Формат текстуры rgb10a2uint
- Обновления Dawn
Chrome 118
- Поддержка HTMLImageElement и ImageData в
copyExternalImageToTexture() - Экспериментальная поддержка текстур хранилища с доступом для чтения и записи и только для чтения
- Обновления Dawn
Chrome 117
- Unset vertex buffer (Отменить буфер вершин)
- Отменить привязку группы
- Отключение сообщений об ошибках при создании асинхронного конвейера, когда устройство потеряно
- Изменения в создании модулей шейдеров SPIR-V
- Улучшение работы разработчиков
- Кэширование конвейеров с автоматически сгенерированной разметкой
- Обновления Dawn
Chrome 116
- Интеграция WebCodecs
- Устаревшее устройство, возвращенное GPUAdapter
requestDevice() - Обеспечить плавное воспроизведение видео при вызове функции
importExternalTexture() - Соответствие спецификациям
- Улучшение работы разработчиков
- Обновления Dawn
Chrome 115
- Поддерживаемые расширения языка WGSL
- Экспериментальная поддержка Direct3D 11
- Как по умолчанию использовать дискретный графический процессор при питании от сети переменного тока
- Улучшение работы разработчиков
- Обновления Dawn
Chrome 114
- Оптимизация JavaScript
- Метод getCurrentTexture() для ненастроенного элемента canvas вызывает ошибку InvalidStateError
- Изменения в WGSL
- Обновления Dawn