Консорциум Khronos взял в свои руки разработку открытого компилятора шейдеров Slang

Компания NVIDIA передала язык шейдеров Slang и связанный с ним компилятор под покровительство консорциума Khronos, занимающегося разработкой графических стандартов. Предполагается, что разработка проекта Slang на независимой площадке Khronos позволит привлечь в проект новых участников. Язык создан как совместный проект NVIDIA и ведущих университетов США (Университет Карнеги-Меллона, Стэнфордфордский университет, Массачусетский технологический институт, Калифорнийский университет в Сан-Диего и Вашингтонский университет). Код компилятора написан на языке C++ и открыт под лицензией Apache 2.0. Компилятором поддерживаются платформы Linux, Windows, macOS и WebAssembly.

Язык Slang по синтаксису очень близок к языку
HLSL, применяемому в Direct3D, и примечателен поддержкой модулей, дженериков и интерфейсов для упрощения сопровождения и разработки больших кодовых баз, а также ориентацией на достижение максимальной производительности и использование в приложениях, выполняющих отрисовку в реальном времени. Из дополнительных возможностей отмечается поддержка расширений для использования графических шейдеров для вычислений, связанных с машинным обучением и автоматическим дифференцированием.

Компилятор развивается в соответствии с парадигмой – “написал шейдер один раз, запускай где угодно”, и позволяет преобразовывать шейдеры, написанные на языках Slang, HLSL (High-Level Shader Language) и GLSL (OpenGL Shading Language) в представление для графических API Direct3D 11/12, Vulkan, Metal, OpenGL, WebGPU, OptiX C++ и CUDA C++, а также в машинный код, способный выполняться на обычном CPU. Помимо компиляции шейдеров в бинарное представление Slang позволяет генерировать на выходе текстовый исходный код на языках C++, MSL (Metal Shading Language) и CUDA, сохраняющий изначальное наименование идентификаторов и структуру вызовов.

Помимо языка Slang компилятор может использоваться для сборки большей части уже существующего кода на языке HLSL без внесения в него изменений или ограничиваясь незначительными правками (например, компания Valve смогла скомпилировать в Slang все HLSL-шейдеры игры Source 2, изменив всего 10 строк кода). Для компиляции GLSL представляется отдельный модуль, поддерживающий большинство внутренних функций и элементов синтаксиса GLSL. При компиляции можно настраивать параметры генерируемого кода, например, можно формировать как максимально переносимый код, так и код использующих новые возможности из свежих спецификаций Direct3D и Vulkan.

Дополнительно представлен новый выпуск
Slang 2024.14.5, в котором появились такие возможности, как новый тип
Atomic для выполнения атомарных операций, выражение “where“, интерфейс IFunc, типы Tuple для хранения коллекций значений с разными типами, обобщенные типы с переменным количеством параметров, поддержка Unicode, бэкенды для языков шейдеров Metal и WGSL (применяется в WebGPU). Представлена написанная на Slang реализация растеризатора, поддерживающего технику 3D-рендеринга Gaussian Splatting. Подготовлена online-среда для экспериментов и компиляции из браузера.

Release. Ссылка here.