Команда Wine выпустила VKD3D 2.0 с поддержкой HLSL и MSL

2026-05-22 97 комментарии
Команда Wine выпустила VKD3D 2.0 — библиотеку трансляции Direct3D 12 в Vulkan, которая входит в состав Wine. Версию подняли с 1.19 до 2.0: расширена поддержка HLSL и устаревшего байткода Direct3D, доработана обработка DXIL, добавлена экспериментальная цель Metal Shading Language

Команда Wine выпустила VKD3D 2.0 — библиотеку для трансляции вызовов Direct3D 12 в Vulkan, которую Wine использует для запуска D3D12-приложений. После выпуска 1.19 номер версии подняли сразу до 2.0: за это время изменений в компиляторе шейдеров, обработке DXIL и низкоуровневых интерфейсах набралось на смену мажорной версии. Основное направление работы — расширение поддержки HLSL и подготовка вывода шейдеров в форматы, отличные от SPIR-V.

Чем VKD3D отличается от VKD3D-Proton

VKD3D — это реализация Direct3D 12 поверх Vulkan, входящая в состав Wine. Когда библиотека доступна при сборке, Wine задействует её для приложений, обращающихся к D3D12. У большинства игроков на Linux через Steam основным компонентом D3D12 остаётся VKD3D-Proton — отдельный форк, который развивает Valve для слоя совместимости Proton. Выпуск 2.0 относится именно к базовой библиотеке Wine, а не к проекту Valve.

Слой трансляции графики — промежуточный код, который перехватывает вызовы графического API одной платформы (здесь — Direct3D 12) и преобразует их в вызовы другого API (Vulkan), чтобы программа, написанная под Windows, работала на системе без поддержки исходного API.

Расширенная поддержка HLSL и устаревшего байткода

Главное в выпуске — компилятор стал обрабатывать больше операций HLSL, а значит и больше шейдерного кода из Windows-приложений. Это важно для программ, которые поставляют исходные HLSL-шейдеры, а не только заранее скомпилированный байткод. Параллельно доработана поддержка устаревшего байткода Direct3D — улучшилась совместимость со старыми форматами шейдеров, которые до сих пор встречаются в Windows-программах.

HLSL (High-Level Shading Language) — язык программирования шейдеров, разработанный для Direct3D. Исходный код на HLSL компилируется в промежуточное представление, которое затем исполняет графический процессор.

Обработка DXIL: указатели и трафаретные значения

В выпуске улучшена обработка DXIL и поддержка фреймворка эффектов. DXIL теперь работает с указателями, которые ссылаются вперёд по коду (forward-referencing pointers), в операциях загрузки, записи, атомарного чтения-модификации-записи и сравнения и обмена. Поддержку таких указателей реализовали отдельным проходом: транслятор сначала проверяет инструкцию, не порождая код, а после разбора всей программы заполняет отложенные ссылки — к этому моменту уже известно, на какой ресурс указывает каждый указатель.

Кроме того, DXIL теперь поддерживает значения трафарета, заданные пиксельным шейдером (SV_StencilRef). По спецификации Direct3D 12 этот механизм позволяет шейдеру переопределять опорное значение трафарета не на уровне отдельной отрисовки, а попиксельно или по выборкам.

DXIL (DirectX Intermediate Language) — промежуточное представление шейдеров на основе LLVM, которое используется в Direct3D начиная с Shader Model 6.0. Заменило прежний формат байткода DXBC.

Экспериментальный вывод в Metal Shading Language

В VKD3D 2.0 появилась экспериментальная поддержка генерации MSL — Metal Shading Language, языка шейдеров для графического API Metal от Apple. Работа над выводом шейдеров в форматы помимо SPIR-V продолжается, и поддержка MSL пока остаётся экспериментальной.

Новые интерфейсы для работы с плавающей точкой

В библиотеке появились новые интерфейсы шейдеров: обработка режима денормализованных чисел с плавающей точкой, управление параметрами плавающей точки через SPIR-V float controls, параметры компиляции для 16-, 32- и 64-битной плавающей точки, а также обработка модификатора const для глобальных uniform-переменных в исходниках HLSL. Расширены и возможности отладки, добавлен ряд других низкоуровневых интерфейсов — именно объём таких изменений и привёл к смене мажорной версии.

Денормализованные числа — представимые в формате IEEE 754 значения, которые меньше наименьшего нормализованного числа и расположены вблизи нуля. Режим их обработки влияет на точность и скорость вычислений в шейдерах.

Заключение

Для пользователей Wine выпуск означает более широкую совместимость с приложениями, которые поставляют собственные HLSL-шейдеры и старые форматы байткода. Игроков, использующих Proton, изменения напрямую не затрагивают: там по-прежнему задействован отдельный форк VKD3D-Proton. Экспериментальная цель MSL и новые интерфейсы для плавающей точки — задел на будущее, прежде всего для запуска D3D12-приложений на платформах Apple с графическим API Metal. Полный список изменений и файлы для загрузки доступны на странице релиза VKD3D 2.0 в GitLab WineHQ.

© .
Комментарии и отзывы

Нашли ошибку?

Новое на сайте