Смешение двух источников
Объединение двух выходных данных фрагментного шейдера в один кадровый буфер называется смешиванием двойного источника . Этот метод особенно полезен для приложений, требующих сложных операций смешивания, например, основанных на режимах смешивания Портера-Даффа. Заменяя последующие проходы рендеринга одним проходом рендеринга, смешивание из двух источников может повысить производительность и гибкость.
Новая функция WebGPU "dual-source-blending"
позволяет использовать атрибут WGSL @blend_src
в @location(0)
для обозначения индекса источника смешивания и следующих факторов смешивания : "src1"
, "one-minus-src1"
, "src1-alpha"
и "one-minus-src1-alpha"
. См. следующий фрагмент, запись chromestatus и проблему 341973423 .
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("dual-source-blending")) {
throw new Error("Dual source blending support is not available");
}
// Explicitly request dual source blending support.
const device = await adapter.requestDevice({
requiredFeatures: ["dual-source-blending"],
});
const code = `
enable dual_source_blending;
struct FragOut {
@location(0) @blend_src(0) color : vec4f,
@location(0) @blend_src(1) blend : vec4f,
}
@fragment fn main() -> FragOut {
var output : FragOut;
output.color = vec4f(1.0, 1.0, 1.0, 1.0);
output.blend = vec4f(0.5, 0.5, 0.5, 0.5);
return output;
}
`;
const shaderModule = device.createShaderModule({ code });
// Create a render pipeline with this shader module
// and run the shader on the GPU...
Улучшение времени компиляции шейдеров в Metal
Команда Chrome совершенствует Tint, компилятор языка шейдеров WebGPU, вводя промежуточное представление (IR) для устройств, поддерживающих WebGPU с серверной частью Metal. Этот IR, расположенный между абстрактным синтаксическим деревом Tint (AST) и серверным модулем записи Metal, сделает компилятор более эффективным и удобным в обслуживании, что в конечном итоге принесет пользу как разработчикам, так и пользователям. Первоначальные тесты показывают, что новая версия Tint работает до 10 раз быстрее при трансляции шейдеров Unity WGSL в MSL.
Эти улучшения, уже доступные на Android и ChromeOS, постепенно распространяются на устройства MacOS, поддерживающие WebGPU с серверной частью Metal. См. выпуск 42251016 .
Устаревшая функция запроса GPUAdapterInfo().
Асинхронный метод GPUAdapter requestAdapterInfo()
является избыточным, поскольку разработчики уже могут получать GPUAdapterInfo синхронно, используя атрибут info
GPUAdapter. Следовательно, нестандартный метод GPUAdapter requestAdapterInfo()
теперь устарел. См. намерение отказаться от поддержки .
Обновления рассвета
API C webgpu.h определил некоторые соглашения об именах для структур расширения. См. следующие изменения имени и проблему 42241174 .
Расширения WGPURenderPassDescriptor | |
WGPURenderPassDescriptorMaxDrawCount -> | WGPURenderPassMaxDrawCount |
Расширения WGPUShaderModuleDescriptor | |
WGPUShaderModuleSPIRVDescriptor -> | WGPUShaderSourceSPIRV |
WGPUShaderModuleWGSLDescriptor -> | WGPUShaderSourceWGSL |
Расширения WGPUSurfaceDescriptor | |
WGPUSurfaceDescriptorFromMetalLayer -> | WGPUSurfaceSourceMetalLayer |
WGPUSurfaceDescriptorFromWindowsHWND -> | WGPUSurfaceSourceWindowsHWND |
WGPUSurfaceDescriptorFromXlibWindow -> | WGPUSurfaceSourceXlibWindow |
WGPUSurfaceDescriptorFromWaylandSurface -> | WGPUSurfaceSourceWaylandSurface |
WGPUSurfaceDescriptorFromAndroidNativeWindow -> | WGPUSurfaceSourceAndroidNativeWindow |
WGPUSurfaceDescriptorFromXcbWindow -> | WGPUSurfaceSourceXCBWindow |
WGPUSurfaceDescriptorFromCanvasHTMLSelector -> | WGPUSurfaceSourceCanvasHTMLSelector_Emscripten |
Тип атрибута depthWriteEnabled
WGPUDepthStencilState
переключается с логического на WGPUOptionalBool
, чтобы лучше отражать его три возможных состояния (истина, ложь и неопределенность), как в API JavaScript. Чтобы узнать больше, см. следующий фрагмент кода и PR-заголовки webgpu .
wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default
Это касается только некоторых ключевых моментов. Ознакомьтесь с исчерпывающим списком коммитов .
Что нового в WebGPU
Список всего, что было описано в серии «Что нового в WebGPU» .
Хром 131
- Расстояния отсечения в WGSL
- GPUCanvasContext getConfiguration()
- Примитивы точек и линий не должны иметь смещения глубины.
- Встроенные функции инклюзивного сканирования для подгрупп
- Экспериментальная поддержка косвенного множественного отрисовки
- Вариант компиляции шейдерного модуля, строгая математика
- Удалить запрос GPUAdapterAdapterInfo()
- Обновления рассвета
Хром 130
- Смешение двух источников
- Улучшение времени компиляции шейдеров в Metal
- Устаревшая функция запроса GPUAdapterInfo().
- Обновления рассвета
Хром 129
Хром 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
- Интеграция веб-кодеков
- Потерянное устройство, возвращенное
requestDevice()
- Обеспечьте плавное воспроизведение видео, если вызывается
importExternalTexture()
- Соответствие спецификациям
- Улучшение опыта разработчиков
- Обновления рассвета
Хром 115
- Поддерживаемые языковые расширения WGSL
- Экспериментальная поддержка Direct3D 11
- Получите дискретный графический процессор по умолчанию от сети переменного тока
- Улучшение опыта разработчиков
- Обновления рассвета
Хром 114
- Оптимизировать JavaScript
- getCurrentTexture() на ненастроенном холсте выдает InvalidStateError
- Обновления WGSL
- Обновления рассвета