VKD3D, библиотека Wine для трансляции Direct3D в Vulkan, обновилась до версии 2.1. Одно из главных улучшений касается HLSL, языка программирования шейдеров от Microsoft. В релизе исправили ошибку компилятора при вложенных вызовах функций, когда разные аргументы могли некорректно использовать один и тот же результат.

В компиляторе шейдеров появился новый проход оптимизации, который удаляет неиспользуемые данные, чтобы старые шейдеры Direct3D вели себя ближе к тому, как они компилируются инструментами Microsoft. Расширена поддержка вычислений с половинной точностью, а проверка входных и выходных данных шейдеров стала строже.

Улучшена совместимость со старым байткодом шейдеров Direct3D. Vkd3d 2.1 поддерживает больше устаревших инструкций и модификаторов, что помогает корректно обрабатывать более широкий набор старого шейдерного кода.

На стороне Vulkan бэкенд SPIR-V получил дополнительную поддержку преобразований чисел, особенно для шейдеров из DXIL, промежуточного формата, который используют современные версии Direct3D.

Продолжается работа над экспериментальным выводом GLSL в Vkd3d. Бэкенд теперь может обрабатывать более сложные возможности шейдеров, включая общую память, атомарные операции, барьеры, непрямой доступ к входным данным и дополнительные входные данные вычислительных шейдеров.

Ещё одна важная часть релиза связана с улучшенной рефлексией шейдеров. Рефлексия позволяет программам изучать скомпилированный шейдер и получать информацию о его переменных, ресурсах, входах, выходах и других свойствах.

В Vkd3d 2.1 также добавили множество отсутствовавших ранее возможностей рефлексии и расширили поддержку с Direct3D 12 на интерфейсы Direct3D 10 и 11.

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

Наконец, инструменты командной строки Vkd3d получили небольшие улучшения. В компиляторе шейдеров появилась опция для совместимости с половинной точностью, а утилита DXBC теперь может заменять отдельные секции внутри контейнеров скомпилированных шейдеров вместо полной пересборки.

Подробнее см. список изменений. Vkd3d 2.1 доступна в виде исходного кода на WineHQ.