Опубликовано: 8 января 2025 г.
Использование вида текстуры
В настоящее время представления текстур GPU наследуют все флаги использования из исходной текстуры GPU. Это может быть проблематично, поскольку некоторые форматы представления несовместимы с определенными использованиями. Чтобы решить эту проблему, вызов createView()
с необязательным членом usage
позволяет явно указать подмножество флагов использования исходной текстуры, совместимых с выбранным форматом представления.
Это изменение позволяет проводить предварительную проверку и более детальный контроль над тем, как используется представление. Оно также соответствует другим графическим API, где флаги использования являются общими параметрами при создании представления, предлагая возможности оптимизации.
См. следующий фрагмент, запись chromestatus и проблему 363903526 .
const texture = myDevice.createTexture({
size: [4, 4],
format: "rgba8unorm",
usage:
GPUTextureUsage.RENDER_ATTACHMENT |
GPUTextureUsage.TEXTURE_BINDING |
GPUTextureUsage.STORAGE_BINDING,
viewFormats: ["rgba8unorm-srgb"],
});
const view = texture.createView({
format: 'rgba8unorm-srgb',
usage: GPUTextureUsage.RENDER_ATTACHMENT, // Restrict allowed usage.
});
Смешивание 32-битных плавающих текстур
32-битные текстуры с плавающей точкой необходимы для HDR-рендеринга, чтобы сохранить широкий диапазон цветовых значений и предотвратить артефакты цветовых полос. Например, в научной визуализации.
Новая функция GPU "float32-blendable"
делает текстуры GPU с форматами "r32float"
, "rg32float"
и "rgba32float"
смешиваемыми. Создание конвейера рендеринга, использующего смешивание с любым вложением формата float32, теперь возможно при запросе устройства GPU с этой функцией.
См. следующий фрагмент, запись chromestatus и проблему 369649348 .
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-blendable")) {
throw new Error("32-bit float textures blending support is not available");
}
// Explicitly request 32-bit float textures blending support.
const device = await adapter.requestDevice({
requiredFeatures: ["float32-blendable"],
});
// ... Creation of shader modules is omitted for readability.
// Create a render pipeline that uses blending for the rgba32float format.
device.createRenderPipeline({
vertex: { module: myVertexShaderModule },
fragment: {
module: myFragmentShaderModule,
targets: [
{
format: "rgba32float",
blend: { color: {}, alpha: {} },
},
],
},
layout: "auto",
});
// Create the GPU texture with rgba32float format and
// send the appropriate commands to the GPU...
Атрибут GPUDevice adapterInfo
Для библиотек, которые принимают предоставленные пользователем объекты GPUDevice
важно получить доступ к информации о физическом GPU, поскольку им может потребоваться оптимизировать или реализовать обходные пути на основе архитектуры GPU. Хотя можно получить доступ к этой информации через объект GPUAdapter
, нет прямого способа получить ее только из GPUDevice
. Это может быть неудобно, поскольку может потребоваться, чтобы пользователи предоставляли дополнительную информацию вместе с GPUDevice
.
Для решения этой проблемы GPUAdapterInfo
теперь отображается через атрибут GPUDevice
adapterInfo
. Они похожи на существующий атрибут info
GPUAdapter
.
См. следующий фрагмент, запись chromestatus и проблему 376600838 .
function optimizeForGpuDevice(device) {
if (device.adapterInfo.vendor === "amd") {
// Use AMD-specific optimizations.
} else if (device.adapterInfo.architecture.includes("turing")) {
// Optimize for NVIDIA Turing architecture.
}
}
Настройка контекста холста с недопустимым форматом приводит к ошибке JavaScript
Ранее использование недопустимого формата текстуры с методом configure()
контекста холста GPU приводило к ошибке проверки GPU. Это было изменено для вызова JavaScript TypeError
. Это предотвращает сценарии, в которых getCurrentTexture()
возвращает допустимую текстуру GPU, несмотря на то, что контекст холста GPU был настроен неправильно. Более подробную информацию можно найти в issue 372837859 .
Фильтрация ограничений сэмплера на текстуры
Использование текстур формата "sint"
, "uint"
и " depth"
с фильтрующими образцами ранее было разрешено. Теперь он корректно запрещает использование текстур формата "sint"
или "uint"
с фильтрующим сэмплером. Обратите внимание, что в настоящее время он выдает предупреждение, если вы используете текстуру " depth"
с фильтрующим сэмплером, так как в будущем это будет запрещено. См. проблему 376497143 .
Эти ограничения означают, что использование текстуры глубины с нефильтрующим сэмплером требует ручного создания макетов групп привязок. Это связано с тем, что "автоматически" сгенерированные макеты групп привязок пока не поддерживают эту комбинацию. В спецификации 4952 содержится предложение, находящееся на рассмотрении, по устранению этого ограничения в будущем.
Расширенные эксперименты с подгруппами
Эксперимент подгрупп , изначально запланированный на Chrome 131, был продлен до Chrome 133, завершившись 16 апреля 2025 года. Хотя первый пробный запуск Origin был сосредоточен на производительности, в нем отсутствовали важные гарантии переносимости . Теперь эти гарантии будут добавлены, что может привести к ошибкам в существующем коде.
Улучшение опыта разработчиков
Предупреждение теперь отображается в DevTools, когда опция powerPreference
используется с requestAdapter()
в Windows. Это предупреждение будет удалено, когда Chrome узнает, как использовать два разных GPU и объединить результаты между ними. См. issue 369219127 .
Размер буфера GPU теперь присутствует в сообщении об ошибке при создании буфера GPU слишком большого размера. См. проблему 374167798 .
Экспериментальная поддержка 16-битных нормализованных форматов текстур
16-битные нормализованные со знаком и нормализованные без знака форматы текстур теперь доступны экспериментально в рамках функций графического процессора "chromium-experimental-snorm16-texture-formats"
и "chromium-experimental-unorm16-texture-formats"
соответственно, пока они обсуждаются для стандартизации .
Эти функции добавляют поддержку 16-битных нормализованных форматов текстур с использованием COPY_SRC
, COPY_DST
, TEXTURE_BINDING
, RENDER_ATTACHMENT
, мультисэмплингом и возможностями разрешения. Дополнительные форматы: "r16unorm"
, "rg16unorm"
, " "rgba16unorm"
, "r16snorm"
, "rg16snorm"
и "rgba16snorm"
.
Пока эти экспериментальные функции не будут стандартизированы, включите флаг «Поддержка небезопасного WebGPU» на chrome://flags/#enable-unsafe-webgpu
чтобы сделать их доступными в Chrome.
См. следующий фрагмент и проблему 374790898 .
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-snorm16-texture-formats")) {
throw new Error("16-bit signed normalized formats support is not available");
}
// Explicitly request 16-bit signed normalized formats support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-snorm16-texture-formats"],
});
// Create a texture with the rgba16snorm format which consists of four
// components, each of which is a 16-bit, normalized, signed integer value.
const texture = device.createTexture({
size: [4, 4],
format: "rgba16snorm",
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
// Send the appropriate commands to the GPU...
Обновления рассвета
Методы EnumerateFeatures(FeatureName * features)
из wgpu::Adapter
и wgpu::Device
устарели в пользу использования GetFeatures(SupportedFeatures * features)
. См. issue 368672123 .
API webgpu.h C изменил все char const *
на структуру WGPUStringView
, которая определяет представление в строке в кодировке UTF-8. Она действует как указатель на данные строки, связанные с длиной. Это позволяет работать с частями строки без необходимости ее копирования. См. issue 42241188 .
Это охватывает только некоторые из ключевых моментов. Ознакомьтесь с исчерпывающим списком коммитов .
Что нового в WebGPU
Список всего, что было рассмотрено в серии « Что нового в WebGPU» .
Хром 138
- Сокращение для использования буфера в качестве связующего ресурса
- Требования к размеру меняются для буферов, отображаемых при создании
- Отчет об архитектуре последних графических процессоров
- Отменить использование атрибута GPUAdapter isFallbackAdapter
- Обновления рассвета
Хром 137
- Использовать вид текстуры для привязки externalTexture
- Буферы копируются без указания смещения и размера
- WGSL workgroupUniformLoad с использованием указателя на атомарный
- Атрибут powerPreference GPUAdapterInfo
- Удалить атрибут совместимости GPURequestAdapterOptions
- Обновления рассвета
Хром 136
- GPUAdapterInfo — атрибут FallbackAdapter
- Улучшение времени компиляции шейдера на D3D12
- Сохраняйте и копируйте изображения холста
- Снять ограничения режима совместимости
- Обновления рассвета
Хром 135
- Разрешить создание макета конвейера с макетом группы нулевой привязки
- Разрешить областям просмотра выходить за пределы границ целевых объектов рендеринга
- Более простой доступ к экспериментальному режиму совместимости на Android
- Удалить ограничение maxInterStageShaderComponents
- Обновления рассвета
Хром 134
- Улучшите рабочие нагрузки машинного обучения с помощью подгрупп
- Удалить поддержку плавающих фильтруемых типов текстур как смешиваемых
- Обновления рассвета
Хром 133
- Дополнительные форматы вершин unorm8x4-bgra и 1-компонентные
- Разрешить запрашивать неизвестные лимиты с неопределенным значением
- Изменения правил выравнивания WGSL
- Повышение производительности WGSL с отбрасыванием
- Используйте VideoFrame displaySize для внешних текстур
- Обработка изображений с ориентацией, отличной от стандартной, с помощью copyExternalImageToTexture
- Улучшение опыта разработчиков
- Включить режим совместимости с featureLevel
- Экспериментальная подгруппа функций очистки
- Отменить ограничение maxInterStageShaderComponents
- Обновления рассвета
Хром 132
- Использование вида текстуры
- Смешивание 32-битных плавающих текстур
- Атрибут GPUDevice adapterInfo
- Настройка контекста холста с недопустимым форматом приводит к ошибке JavaScript
- Фильтрация ограничений сэмплера на текстуры
- Расширенные эксперименты с подгруппами
- Улучшение опыта разработчиков
- Экспериментальная поддержка 16-битных нормализованных форматов текстур
- Обновления рассвета
Хром 131
- Расстояния клипов в WGSL
- GPUCanvasContext получитьКонфигурацию()
- Точечные и линейные примитивы не должны иметь смещения глубины.
- Встроенные функции сканирования для подгрупп
- Экспериментальная поддержка многоразового непрямого вывода
- Опция компиляции шейдерного модуля строгая математика
- Удалить GPUAdapter requestAdapterInfo()
- Обновления рассвета
Хром 130
- Смешивание двух источников
- Улучшение времени компиляции шейдеров на Metal
- Устаревание GPUAdapter requestAdapterInfo()
- Обновления рассвета
Хром 129
- Поддержка HDR с режимом тональной компрессии Canvas
- Расширенная поддержка подгрупп
- Обновления рассвета
Хром 128
- Эксперименты с подгруппами
- Отменить настройку смещения глубины для линий и точек
- Скрыть предупреждение DevTools об неперехваченной ошибке, если preventDefault
- WGSL сначала интерполирует выборку и либо
- Обновления рассвета
Хром 127
- Экспериментальная поддержка OpenGL ES на Android
- Атрибут информации GPUAdapter
- Улучшения взаимодействия WebAssembly
- Улучшены ошибки кодировщика команд
- Обновления рассвета
Хром 126
- Увеличить лимит maxTextureArrayLayers
- Оптимизация загрузки буфера для бэкэнда Vulkan
- Улучшения времени компиляции шейдера
- Отправленные буферы команд должны быть уникальными.
- Обновления рассвета
Хром 125
Хром 124
- Текстуры хранения данных, доступные только для чтения и для чтения и записи
- Поддержка работников сферы услуг и коллективных работников
- Новые атрибуты информации об адаптере
- Исправления ошибок
- Обновления рассвета
Хром 123
- Поддержка встроенных функций DP4a в WGSL
- Неограниченные параметры указателя в WGSL
- Синтаксический сахар для разыменования композитов в WGSL
- Отдельное состояние «только для чтения» для аспектов трафарета и глубины
- Обновления рассвета
Хром 122
- Расширьте охват с помощью режима совместимости (функция в разработке)
- Увеличить лимит maxVertexAttributes
- Обновления рассвета
Хром 121
- Поддержка WebGPU на Android
- Используйте DXC вместо FXC для компиляции шейдеров в Windows
- Запросы временных меток в проходах вычислений и рендеринга
- Точки входа по умолчанию в шейдерные модули
- Поддержка display-p3 как цветового пространства GPUExternalTexture
- Информация о кучах памяти
- Обновления рассвета
Хром 120
- Поддержка 16-битных значений с плавающей точкой в WGSL
- Раздвиньте границы
- Изменения в состоянии трафарета глубины
- Обновления информации об адаптере
- Квантование запросов временных меток
- Особенности генеральной уборки
Хром 119
- Фильтруемые 32-битные плавающие текстуры
- формат вершин unorm10-10-10-2
- формат текстуры rgb10a2uint
- Обновления рассвета
Хром 118
- Поддержка HTMLImageElement и ImageData в
copyExternalImageToTexture()
- Экспериментальная поддержка текстур хранения данных для чтения и записи и только для чтения
- Обновления рассвета
Хром 117
- Сбросить буфер вершин
- Отменить привязку группы
- Ошибки тишины при создании асинхронного конвейера при потере устройства
- Обновления создания шейдерного модуля SPIR-V
- Улучшение опыта разработчиков
- Кэширование конвейеров с автоматически сгенерированной компоновкой
- Обновления рассвета
Хром 116
- Интеграция WebCodecs
- Потерянное устройство, возвращенное GPUAdapter
requestDevice()
- Сохраняйте плавность воспроизведения видео, если вызывается
importExternalTexture()
- Соответствие спецификации
- Улучшение опыта разработчиков
- Обновления рассвета
Хром 115
- Поддерживаемые расширения языка WGSL
- Экспериментальная поддержка Direct3D 11
- Получите дискретный графический процессор по умолчанию при питании от сети переменного тока
- Улучшение опыта разработчиков
- Обновления рассвета
Хром 114
- Оптимизировать JavaScript
- getCurrentTexture() на ненастроенном холсте выдает InvalidStateError
- Обновления WGSL
- Обновления рассвета