Опубликовано: 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-рендеринга, чтобы сохранить широкий диапазон цветовых значений и предотвратить артефакты цветовых полос. Например, в научной визуализации.
Новая функция графического процессора "float32-blendable"
позволяет смешивать текстуры графического процессора в форматах "r32float"
, "rg32float"
и "rgba32float"
. Создание конвейера рендеринга, использующего смешивание с любым вложением формата float32, теперь возможно при запросе графического процессора с этой функцией.
См. следующий фрагмент, запись 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
, важно получать доступ к информации о физическом графическом процессоре, поскольку им может потребоваться оптимизация или реализация обходных путей, основанных на архитектуре графического процессора. Хотя доступ к этой информации возможен через объект GPUAdapter
, прямого способа получить её только из объекта GPUDevice
нет. Это может быть неудобно, поскольку пользователям может потребоваться предоставлять дополнительную информацию вместе с GPUDevice
.
Для решения этой проблемы информация GPUAdapterInfo
теперь предоставляется через атрибут GPUDevice
adapterInfo
. Он аналогичен существующему атрибуту GPUAdapter
info
.
См. следующий фрагмент, запись 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()
контекста холста графического процессора приводило к ошибке валидации графического процессора. Эта ошибка была изменена на JavaScript TypeError
. Это предотвращает ситуации, когда getCurrentTexture()
возвращает допустимую текстуру графического процессора, несмотря на некорректную настройку контекста холста графического процессора. Подробнее см. в выпуске 372837859 .
Фильтрация ограничений сэмплера на текстуры
Ранее использование текстур форматов "sint"
, "uint"
и « depth"
с фильтрующими сэмплерами было разрешено. Теперь корректно запрещается использование текстур форматов "sint"
или "uint"
с фильтрующим сэмплером. Обратите внимание, что в настоящее время выдаётся предупреждение при использовании текстуры « depth"
с фильтрующим сэмплером, так как в будущем это будет запрещено. См. проблему 376497143 .
Эти ограничения означают, что использование текстуры глубины с нефильтрующим сэмплером требует ручного создания макетов групп привязки. Это связано с тем, что автоматически сгенерированные макеты групп привязки пока не поддерживают эту комбинацию. В спецификации 4952 рассматривается предложение по устранению этого ограничения в будущем.
Расширенные эксперименты с подгруппами
Эксперименты с подгруппами , изначально запланированные на Chrome 131, были продлены до Chrome 133 и завершатся 16 апреля 2025 года. Хотя первое испытание Origin было сосредоточено на производительности, в нём отсутствовали критически важные меры обеспечения переносимости . Теперь эти меры будут добавлены, что может привести к ошибкам в существующем коде.
Улучшение опыта разработчиков
Теперь в DevTools отображается предупреждение при использовании параметра powerPreference
с requestAdapter()
в Windows. Это предупреждение будет удалено, когда Chrome будет знать, как использовать два разных графических процессора и объединять результаты между ними. См. issue 369219127 .
Размер буфера графического процессора теперь отображается в сообщении об ошибке при создании слишком большого буфера графического процессора. См. проблему 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...
Обновления Dawn
Методы 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» .
Хром 139
- Поддержка 3D-текстур для сжатых форматов BC и ASTC
- Новая функция «основные функции и ограничения»
- Пробная версия Origin для режима совместимости с WebGPU
- Обновления Dawn
Хром 138
- Сокращение для использования буфера в качестве связующего ресурса
- Изменения требований к размеру буферов, отображаемых при создании
- Отчет об архитектуре последних графических процессоров
- Отменить атрибут GPUAdapter isFallbackAdapter
- Обновления Dawn
Хром 137
- Использовать вид текстуры для привязки externalTexture
- Буферы копируются без указания смещения и размера
- WGSL workgroupUniformLoad с использованием указателя на атомарный
- Атрибут powerPreference GPUAdapterInfo
- Удалить атрибут совместимости GPURequestAdapterOptions
- Обновления Dawn
Хром 136
- GPUAdapterInfo — атрибут FallbackAdapter
- Улучшение времени компиляции шейдера на D3D12
- Сохраняйте и копируйте изображения холста
- Ограничения режима совместимости
- Обновления Dawn
Хром 135
- Разрешить создание макета конвейера с макетом группы нулевых привязок
- Разрешить областям просмотра выходить за границы целевых объектов рендеринга
- Более простой доступ к экспериментальному режиму совместимости на Android
- Удалить ограничение maxInterStageShaderComponents
- Обновления Dawn
Хром 134
- Улучшите рабочие нагрузки машинного обучения с помощью подгрупп
- Удалить поддержку плавающих фильтруемых текстур как смешиваемых.
- Обновления Dawn
Хром 133
- Дополнительные форматы вершин unorm8x4-bgra и 1-компонентные
- Разрешить запрашивать неизвестные лимиты с неопределенным значением
- Изменения правил выравнивания WGSL
- Повышение производительности WGSL за счет отмены
- Используйте VideoFrame displaySize для внешних текстур
- Обработка изображений с ориентацией, отличной от стандартной, с помощью copyExternalImageToTexture
- Улучшение опыта разработчиков
- Включить режим совместимости с featureLevel
- Экспериментальная подгруппа функций очистки
- Отменить ограничение maxInterStageShaderComponents
- Обновления Dawn
Хром 132
- Использование вида текстуры
- Смешивание 32-битных плавающих текстур
- Атрибут GPUDevice adapterInfo
- Настройка контекста холста с недопустимым форматом приводит к ошибке JavaScript
- Фильтрация ограничений сэмплера на текстуры
- Расширенные эксперименты с подгруппами
- Улучшение опыта разработчиков
- Экспериментальная поддержка 16-битных нормализованных форматов текстур
- Обновления Dawn
Хром 131
- Расстояния клипов в WGSL
- GPUCanvasContext getConfiguration()
- Точечные и линейные примитивы не должны иметь смещения глубины.
- Встроенные функции сканирования для подгрупп
- Экспериментальная поддержка многоразового косвенного вывода
- Опция компиляции модуля шейдера строгая математика
- Удалить GPUAdapter requestAdapterInfo()
- Обновления Dawn
Хром 130
- Смешивание двух источников
- Улучшение времени компиляции шейдеров на Metal
- Устаревание GPUAdapter requestAdapterInfo()
- Обновления Dawn
Хром 129
- Поддержка HDR с режимом тональной компрессии на холсте
- Расширенная поддержка подгрупп
- Обновления Dawn
Хром 128
- Эксперименты с подгруппами
- Отменить настройку смещения глубины для линий и точек
- Скрыть предупреждение DevTools об ошибке, если preventDefault
- WGSL сначала интерполирует выборку, а затем либо
- Обновления Dawn
Хром 127
- Экспериментальная поддержка OpenGL ES на Android
- Атрибут информации GPUAdapter
- Улучшения взаимодействия с WebAssembly
- Улучшены ошибки кодировщика команд
- Обновления Dawn
Хром 126
- Увеличить лимит maxTextureArrayLayers
- Оптимизация загрузки буфера для бэкэнда Vulkan
- Улучшение времени компиляции шейдера
- Отправленные буферы команд должны быть уникальными.
- Обновления Dawn
Хром 125
Хром 124
- Текстуры хранения данных, доступные только для чтения и для чтения и записи
- Поддержка работников сферы услуг и коллективных работников
- Новые атрибуты информации об адаптере
- Исправления ошибок
- Обновления Dawn
Хром 123
- Поддержка встроенных функций DP4a в WGSL
- Неограниченные параметры указателя в WGSL
- Синтаксический сахар для разыменования композитов в WGSL
- Отдельное состояние «только для чтения» для аспектов трафарета и глубины
- Обновления Dawn
Хром 122
- Расширение охвата с помощью режима совместимости (функция в разработке)
- Увеличить лимит maxVertexAttributes
- Обновления Dawn
Хром 121
- Поддержка WebGPU на Android
- Используйте DXC вместо FXC для компиляции шейдеров в Windows
- Запросы временных меток в проходах вычислений и рендеринга
- Точки входа по умолчанию в шейдерные модули
- Поддержка display-p3 как цветового пространства GPUExternalTexture
- Информация о кучах памяти
- Обновления Dawn
Хром 120
- Поддержка 16-битных значений с плавающей запятой в WGSL
- Раздвинь границы
- Изменения в состоянии трафарета глубины
- Обновления информации об адаптере
- Квантование запросов по временным меткам
- Особенности генеральной уборки
Хром 119
- Фильтруемые 32-битные плавающие текстуры
- формат вершин unorm10-10-10-2
- формат текстуры rgb10a2uint
- Обновления Dawn
Хром 118
- Поддержка HTMLImageElement и ImageData в
copyExternalImageToTexture()
- Экспериментальная поддержка текстур хранения данных для чтения и записи и только для чтения
- Обновления Dawn
Хром 117
- Сбросить буфер вершин
- Отменить привязку группы
- Ошибки тишины при создании асинхронного конвейера при потере устройства
- Обновления создания шейдерного модуля SPIR-V
- Улучшение опыта разработчиков
- Кэширование конвейеров с автоматически сгенерированной компоновкой
- Обновления Dawn
Хром 116
- Интеграция WebCodecs
- Потерянное устройство, возвращенное GPUAdapter
requestDevice()
- Сохраняйте плавность воспроизведения видео, если вызывается
importExternalTexture()
- Соответствие спецификации
- Улучшение опыта разработчиков
- Обновления Dawn
Хром 115
- Поддерживаемые расширения языка WGSL
- Экспериментальная поддержка Direct3D 11
- Получите дискретный графический процессор по умолчанию при питании от сети переменного тока
- Улучшение опыта разработчиков
- Обновления Dawn
Хром 114
- Оптимизировать JavaScript
- getCurrentTexture() на ненастроенном холсте выдает InvalidStateError
- Обновления WGSL
- Обновления Dawn