Опубликовано: 8 января 2025 г.
Использование текстурного представления
В настоящее время представления текстур графического процессора наследуют все флаги использования от исходной текстуры графического процессора. Это может быть проблематично, поскольку некоторые форматы представления несовместимы с определенными вариантами использования. Для решения этой проблемы вызов метода 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 важно иметь доступ к информации о физическом графическом процессоре, поскольку им может потребоваться оптимизация или реализация обходных решений в зависимости от архитектуры графического процессора. Хотя доступ к этой информации возможен через объект GPUAdapter , прямого способа получить её только из объекта GPUDevice нет. Это может быть неудобно, поскольку может потребовать от пользователей предоставления дополнительной информации вместе с GPUDevice .
Для решения этой проблемы GPUAdapterInfo теперь доступна через атрибут adapterInfo GPUDevice . Они аналогичны существующему атрибуту 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. Дополнительную информацию можно найти в проблеме 372837859 .
Фильтрация ограничений сэмплера для текстур
Ранее использование текстур в форматах "sint" , "uint" и " depth" с фильтрующими сэмплерами было разрешено. Теперь же использование текстур в форматах "sint" или "uint" с фильтрующим сэмплером корректно запрещается. Обратите внимание, что в настоящее время при использовании текстуры " depth" с фильтрующим сэмплером выдается предупреждение, поскольку в будущем это будет запрещено. См. проблему 376497143 .
Эти ограничения означают, что использование текстуры глубины с нефильтрующим сэмплером требует ручного создания макетов групп привязки. Это связано с тем, что автоматически генерируемые макеты групп привязки пока не поддерживают такое сочетание. В спецификации № 4952 содержится предложение, находящееся на рассмотрении, по устранению этого ограничения в будущем.
Эксперименты с расширенными подгруппами
Эксперимент с подгруппами , первоначально запланированный на завершение в Chrome 131, был продлен до Chrome 133 и завершится 16 апреля 2025 года. Хотя первое первоначальное тестирование было сосредоточено на производительности, в нем отсутствовали важные меры защиты от переносимости . Теперь эти меры будут добавлены, что потенциально может привести к ошибкам в существующем коде.
Улучшение опыта разработчиков
В инструментах разработчика теперь отображается предупреждение при использовании параметра powerPreference с requestAdapter() в Windows. Это предупреждение будет удалено, когда Chrome научится использовать два разных графических процессора и объединять результаты между ними. См. проблему 369219127 .
Размер буфера графического процессора теперь отображается в сообщении об ошибке при создании слишком большого буфера графического процессора. См. проблему 374167798 .
Экспериментальная поддержка 16-битных нормализованных форматов текстур.
В настоящее время экспериментально доступны 16-битные форматы текстур с нормализованным знаком и без знака, которые являются частью функций GPU "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" .
Пока эти экспериментальные функции не будут стандартизированы, включите флаг "Unsafe WebGPU Support" по адресу 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» .
Хром 144
- Расширение WGSL subgroup_id
- Расширение WGSL uniform_buffer_standard_layout
- WebGPU на Linux
- Более быстрая запись буфера и текстуры
- Утренние обновления
Хром 143
- Компонент текстуры swizzle
- Удалить использование текстур в хранилище только для чтения bgra8unorm
- Утренние обновления
Хром 142
Хром 141
- Завершено тонирование ИК-излучения
- Анализ целочисленных диапазонов в компиляторе WGSL
- Обновление SPIR-V 1.4 для бэкенда Vulkan
- Утренние обновления
Хром 140
- Устройство запрашивает использование адаптера
- Сокращенная запись для использования текстуры там, где используется представление текстуры.
- WGSL textureSampleLevel поддерживает одномерные текстуры.
- Прекратить использование текстур в режиме только для чтения в bgra8unorm
- Удалите атрибут isFallbackAdapter из списка GPUAdapter.
- Утренние обновления
Хром 139
- Поддержка 3D-текстур для сжатых форматов BC и ASTC.
- Новая функция «Основные функции и ограничения»
- Пробная версия Origin для режима совместимости с WebGPU
- Утренние обновления
Хром 138
- Сокращенная запись для использования буфера в качестве ресурса привязки.
- Изменения требований к размеру буферов, отображаемых при создании.
- Архитектурный отчет для современных графических процессоров.
- Устаревший атрибут isFallbackAdapter для GPUAdapter
- Утренние обновления
Хром 137
- Используйте представление текстуры для привязки внешней текстуры.
- Копирование буферов выполняется без указания смещений и размера.
- Рабочая группа WGSL UniformLoad с использованием указателя на атомарную функцию
- Атрибут powerPreference GPUAdapterInfo
- Удалите атрибут compatibilityMode из GPURequestAdapterOptions.
- Утренние обновления
Хром 136
- Атрибут gPUAdapterInfo isFallbackAdapter
- Улучшения времени компиляции шейдеров в D3D12
- Сохраняйте и копируйте изображения холста.
- Ограничения режима совместимости лифта
- Утренние обновления
Хром 135
- Разрешить создание макета конвейера с макетом группы привязки пустого значения
- Разрешите области просмотра выходить за пределы границ целевых областей рендеринга.
- Упрощенный доступ к экспериментальному режиму совместимости на Android.
- Удалите ограничение maxInterStageShaderComponents.
- Утренние обновления
Хром 134
- Оптимизация рабочих нагрузок машинного обучения с помощью подгрупп
- Удалить поддержку типов текстур с возможностью фильтрации (float filterable texture types) как смешиваемых (blendable).
- Утренние обновления
Хром 133
- Дополнительные форматы unorm8x4-bgra и 1-компонентные вершинные форматы
- Разрешить запрос неизвестных лимитов с неопределенным значением.
- Изменения в правилах выравнивания WGSL
- Повышение производительности WGSL за счет отбрасывания
- Используйте параметр `videoFrame displaySize` для внешних текстур.
- Обработка изображений с нестандартной ориентацией осуществляется с помощью функции copyExternalImageToTexture.
- Улучшение опыта разработчиков
- Включите режим совместимости с помощью featureLevel
- Очистка характеристик экспериментальной подгруппы
- Устаревшее ограничение maxInterStageShaderComponents
- Утренние обновления
Хром 132
- Использование текстурного представления
- смешивание 32-битных текстур с плавающей запятой
- Атрибут GPUDevice adapterInfo
- Настройка контекста холста с недопустимым форматом вызывает ошибку JavaScript.
- Фильтрация ограничений сэмплера для текстур
- Эксперименты с расширенными подгруппами
- Улучшение опыта разработчиков
- Экспериментальная поддержка 16-битных нормализованных форматов текстур.
- Утренние обновления
Хром 131
- Расстояние между клипами в WGSL
- GPUCanvasContext getConfiguration()
- Примитивы точек и линий не должны иметь смещения по глубине.
- Встроенные функции сканирования для подгрупп.
- Экспериментальная поддержка непрямого режима с несколькими вариантами отсчета.
- Параметр компиляции модуля шейдера: строгая математика
- Удалить GPUAdapter requestAdapterInfo()
- Утренние обновления
Хром 130
- Смешивание из двух источников
- Улучшения времени компиляции шейдеров в Metal.
- Функция requestAdapterInfo() объявлена устаревшей.
- Утренние обновления
Хром 129
- Поддержка HDR с режимом тонального отображения холста.
- Расширенная поддержка подгрупп
- Утренние обновления
Хром 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
- Для компиляции шейдеров в Windows используйте DXC вместо FXC.
- Запросы по временным меткам в вычислительных и рендеринговых проходах
- Точки входа по умолчанию для модулей шейдеров
- Поддержка display-p3 в качестве цветового пространства GPUExternalTexture
- информация о кучах памяти
- Утренние обновления
Хром 120
- Поддержка 16-битных значений с плавающей запятой в WGSL
- Расширяйте границы возможного
- Изменения в состоянии глубины-шаблона
- Обновления информации об адаптере
- Квантование запросов по временным меткам
- Особенности весенней уборки
Хром 119
- Фильтруемые 32-битные текстуры с плавающей запятой
- unorm10-10-10-2 формат вершин
- формат текстуры rgb10a2uint
- Утренние обновления
Хром 118
- Поддержка HTMLImageElement и ImageData в
copyExternalImageToTexture() - Экспериментальная поддержка текстур для чтения и записи, а также для чтения и только для чтения.
- Утренние обновления
Хром 117
- Неустановленный буфер вершин
- Отключить группу привязки
- Отключение ошибок при создании асинхронного конвейера в случае потери устройства
- Обновления по созданию шейдерных модулей SPIR-V
- Улучшение опыта разработчиков
- Конвейеры кэширования с автоматически генерируемой структурой.
- Утренние обновления
Хром 116
- Интеграция с WebCodecs
-
requestDevice()объекта GPUAdapter возвращает сообщение о потере устройства. - Обеспечьте плавное воспроизведение видео, если вызывается
importExternalTexture() - Соответствие спецификации
- Улучшение опыта разработчиков
- Утренние обновления
Хром 115
- Поддерживаемые языковые расширения WGSL
- Экспериментальная поддержка Direct3D 11
- При подключении к сети переменного тока по умолчанию используется дискретная видеокарта.
- Улучшение опыта разработчиков
- Утренние обновления
Хром 114
- Оптимизировать JavaScript
- Метод getCurrentTexture() на неконфигурированном холсте вызывает ошибку InvalidStateError.
- Обновления WGSL
- Утренние обновления