Опубликовано: 29 января 2025 г.
Дополнительные форматы unorm8x4-bgra и 1-компонентные вершинные форматы
Добавлены формат вершин "unorm8x4-bgra" и следующие однокомпонентные форматы вершин: "uint8" , "sint8" , "unorm8" , "snorm8" "uint16" "sint16" "unorm16" "snorm16" и "float16" . Формат вершин "unorm8x4-bgra" немного упрощает загрузку цветов вершин, закодированных в BGRA, при сохранении того же шейдера. Кроме того, однокомпонентный формат вершин позволяет запрашивать только необходимые данные, тогда как ранее для 8- и 16-битных типов данных требовалось как минимум вдвое больше данных. См. запись в chromestatus и проблему 376924407 .
Разрешить запрос неизвестных лимитов с неопределенным значением.
Чтобы сделать API WebGPU менее уязвимым по мере его развития, теперь можно запрашивать неизвестные ограничения с undefined значением при запросе устройства GPU. Это полезно, например, в следующем коде приложения, где adapter.limits.someLimit может быть undefined если someLimit больше не существует. См. спецификацию PR 4781 .
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice({
requiredLimits: { someLimit: adapter.limits.someLimit }, // someLimit can be undefined
});
Изменения в правилах выравнивания WGSL
Теперь невозможно указать слишком малое значение выравнивания для члена структуры, поскольку требуется, чтобы @align(n) делило RequiredAlignOf для всех структур. Это критическое изменение упрощает использование языка WGSL и делает его более совместимым с Firefox и Safari. Примеры кода, демонстрирующие различия между компиляторами Tint, Naga и WebKit, можно найти в запросе на слияние спецификации .
Повышение производительности WGSL за счет отбрасывания
В связи со значительным снижением производительности, наблюдаемым при рендеринге сложного эффекта экранных отражений (SSR), реализация оператора discard использует предоставляемую платформой семантику для понижения уровня до вызова вспомогательной функции, если таковая доступна. Это повышает производительность шейдеров, использующих discard. См. проблему 372714384 .
Используйте параметр `videoFrame displaySize` для внешних текстур.
Согласно спецификации WebGPU, размеры displayWidth и displayHeight должны использоваться в качестве видимого размера GPUExternalTexture при импорте VideoFrame. Однако ранее некорректно использовался видимый размер, что вызывало проблемы при попытке использовать textureLoad() для GPUExternalTexture. Теперь это исправлено. См. проблему 377574981 .
Обработка изображений с нестандартной ориентацией осуществляется с помощью функции copyExternalImageToTexture.
Метод copyExternalImageToTexture() GPUQueue используется для копирования содержимого изображения или холста в текстуру. Теперь он корректно обрабатывает изображения с ориентацией, отличной от стандартной. Ранее это было невозможно, когда источником был ImageBitmap с imageOrientation "from-image" или изображение с ориентацией, отличной от стандартной. См. проблему 384858956 .
Улучшение опыта разработчиков
Высокие значения в параметре adapter.limits могут вызывать удивление, но вы можете не осознавать, что при запросе на использование графического процессора необходимо явно указать более высокий лимит. В противном случае это может привести к неожиданному превышению лимитов в дальнейшем.
Чтобы помочь вам, сообщения об ошибках были дополнены подсказками, указывающими на необходимость явного запроса более высокого лимита, если в параметре requiredLimits при вызове requestDevice() лимит не был указан. См. проблему 42240683 .
В следующем примере показано улучшенное сообщение об ошибке, регистрируемое в консоли DevTools при создании буфера GPU с размером, превышающим установленный по умолчанию максимальный размер буфера устройства.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
// Create a GPU buffer with a size exceeding the default max buffer size device limit.
const size = device.limits.maxBufferSize + 1;
const buffer = device.createBuffer({ size, usage: GPUBufferUsage.MAP_READ });
device.queue.submit([]);
⚠️ Buffer size (268435457) exceeds the max buffer size limit (268435456). This adapter supports a higher maxBufferSize of 4294967296, which can be specified in requiredLimits when calling requestDevice(). Limits differ by hardware, so always check the adapter limits prior to requesting a higher limit. - While calling [Device].CreateBuffer([BufferDescriptor]).
Включите режим совместимости с помощью featureLevel
Теперь можно запросить графический адаптер в экспериментальном режиме совместимости , установив стандартизированный параметр featureLevel в значение "compatibility" . Допускаются только значения "core" (по умолчанию) и "compatibility" . См. следующий пример и спецификацию PR 4897 .
// Request a GPU adapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
if (adapter?.featureLevel === "compatibility") {
// Any devices created from this adapter will support only compatibility mode.
}
Параметр featureLevel заменяет нестандартизированный параметр compatibilityMode , а нестандартизированный атрибут featureLevel заменяет атрибут isCompatibilityMode .
Поскольку это пока экспериментальная функция, вам необходимо запустить Chrome с флагом "Unsafe WebGPU Support" по адресу chrome://flags/#enable-unsafe-webgpu . Чтобы поэкспериментировать с ней, посетите webgpureport.org .
Очистка характеристик экспериментальной подгруппы
Удалены устаревшие функции экспериментальных подгрупп "chromium-experimental-subgroups" и "chromium-experimental-subgroup-uniform-control-flow" . См. выпуск 377868468 .
Экспериментальная функция "subgroups" — это всё, что вам сейчас нужно для экспериментов с подгруппами . Экспериментальная функция "subgroups-f16" устарела и скоро будет удалена. Вы можете использовать значения f16 с подгруппами, если ваше приложение запрашивает как "shader-f16" , так и функцию "subgroups" . См. проблему 380244620 .
Устаревшее ограничение maxInterStageShaderComponents
Ограничение maxInterStageShaderComponents устарело по ряду причин:
- Избыточность с
maxInterStageShaderVariables: это ограничение уже выполняет аналогичную функцию, контролируя объем данных, передаваемых между этапами шейдера. - Незначительные расхождения: Хотя существуют небольшие различия в способе расчета двух ограничений, эти различия незначительны и могут быть эффективно устранены в рамках ограничения
maxInterStageShaderVariables. - Упрощение: Удаление
maxInterStageShaderComponentsупрощает интерфейс шейдера и снижает сложность для разработчиков. Вместо управления двумя отдельными ограничениями с незначительными различиями, они могут сосредоточиться на более подходящем и всеобъемлющем параметреmaxInterStageShaderVariables.
Цель состоит в том, чтобы полностью удалить его в Chrome 135. См. намерение объявить его устаревшим и проблему 364338810 .
Утренние обновления
Функция wgpu::Device::GetAdapterInfo(adapterInfo) позволяет получить информацию об адаптере непосредственно из объекта wgpu::Device . См. проблему 376600838 .
Структура WGPUProgrammableStageDescriptor была переименована в WGPUComputeState , чтобы обеспечить согласованность состояния вычислений с состояниями вершин и фрагментов. См. проблему 379059434 .
Значение перечисления wgpu::VertexStepMode::VertexBufferNotUsed удалено. Теперь расположение вершинного буфера, которое не используется, можно выразить с помощью {.stepMode=wgpu::VertexStepMode::Undefined, .attributeCount=0} . См. проблему 383147017 .
Здесь описаны лишь некоторые из ключевых моментов. Ознакомьтесь с полным списком изменений .
Что нового в 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
- Утренние обновления