Опубликовано: 8 января 2025 г.
Использование текстур
В настоящее время представления текстур GPU наследуют все флаги использования от исходной текстуры GPU. Это может быть проблемой, поскольку некоторые форматы просмотра несовместимы с определенными вариантами использования. Чтобы устранить эту проблему, вызовите createView() с необязательным членом usage, чтобы явно указать подмножество флагов использования исходной текстуры, совместимых с выбранным форматом представления.
Это изменение позволяет выполнять предварительную проверку и более точно управлять использованием представления. Кроме того, это соответствует другим графическим API, в которых флаги использования являются распространенными параметрами при создании представлений, что позволяет оптимизировать работу.
Ознакомьтесь со следующим фрагментом кода, записью на сайте chromestatus.com и проблемой 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". Теперь при запросе устройства GPU с этой функцией можно создавать конвейер отрисовки, в котором используется смешивание с любым прикрепленным объектом в формате 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.
}
}
При настройке контекста элемента canvas с недопустимым форматом возникает ошибка JavaScript
Ранее при использовании недопустимого формата текстуры с методом configure() контекста холста GPU возникала ошибка проверки GPU. Теперь вместо этого будет выбрасываться исключение JavaScript TypeError. Это предотвращает ситуации, когда getCurrentTexture() возвращает действительную текстуру GPU, несмотря на то что контекст холста GPU настроен неправильно. Подробная информация доступна в описании проблемы 372837859.
Ограничения на фильтрацию текстур
Ранее можно было использовать текстуры формата "sint", "uint" и "depth" с фильтрацией образцов. Теперь запрещено использовать текстуру формата "sint" или "uint" с фильтрующим сэмплером. Обратите внимание, что в настоящее время при использовании текстуры depth" с фильтрующим сэмплером появляется предупреждение, поскольку в будущем это будет запрещено. См. ошибку 376497143.
Это означает, что при использовании текстуры глубины с семплером без фильтрации требуется вручную создавать макеты групп привязки. Это связано с тем, что автоматически созданные макеты групп привязки пока не поддерживают такую комбинацию. Проблема 4952 содержит предложение, которое рассматривается для устранения этого ограничения в будущем.
Эксперименты с расширенными подгруппами
Эксперимент с подгруппами, который изначально должен был завершиться в Chrome 131, продлен до Chrome 133 и закончится 16 апреля 2025 г. Первый пробный период был посвящен производительности, но в нем не было важных гарантий переносимости. Теперь эти меры защиты будут добавлены, что может привести к ошибкам в существующем коде.
Улучшение работы разработчиков
Теперь в инструментах разработчика показывается предупреждение, когда параметр powerPreference используется с requestAdapter() в Windows. Предупреждение исчезнет, когда Chrome научится использовать два разных графических процессора и объединять результаты их работы. См. проблему 369219127.
Теперь в сообщении об ошибке, возникающей при создании слишком большого буфера 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). Подробнее о проблеме 368672123…
В C API webgpu.h все char const * заменены на структуру WGPUStringView, которая определяет представление строки в кодировке UTF-8. Он действует как указатель на данные строки, дополненный длиной. Это позволяет работать с частями строки, не копируя ее. Подробнее о проблеме 42241188…
Это лишь некоторые из основных изменений. Ознакомьтесь с полным списком коммитов.
Что нового в WebGPU
Список всех тем, которые были рассмотрены в серии статей Что нового в WebGPU.
Chrome 155–156
- Расширение WGSL fragment_depth
- Несоответствие сжатия текстур
- Цветовые пространства srgb-linear и display-p3-linear
- Дополнительный формат вершин snorm10-10-10-2
- Поддержка f16 в Linux для NVIDIA
- Обновления 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