Команда разработчиков vkd3d представила новую версию — релиз 1.19

Vkd3d — один из важных компонентов современного игрового Linux, отвечающий за перевод команд Direct3D 12 (используемого в подавляющем большинстве современных AAA-игр) в понятный для Vulkan вид. Релиз версии 1.19, хоть и является точечным обновлением, содержит ряд крайне важных улучшений, особенно для пользователей мобильных GPU и встраиваемых систем.

Основные изменения в libvkd3d

  • Корректность на тайловых рендерах: Добавлена вставка барьеров  между проходами рендеринга, работающими с одними и теми же изображениями. На настольных дискретных GPU это не критично, но для корректной работы на графических процессорах с тайловой архитектурой (например, в мобильных чипах и некоторых встраиваемых решениях) это важнейшее исправление, гарантирующее правильность отрисовки.
  • Режимы уменьшения фильтрации текстур: Добавлена поддержка режимов «minimum» и «maximum» для reduction-фильтров.

Прогресс в libvkd3d-shader (обработка шейдеров)

Этот раздел получил наибольшее количество улучшений, особенно в части совместимости с различными форматами шейдеров.

  • Clip и cull distance: Значительно улучшена обработка массивов входных/выходных данных для расстояний отсечения (clip and cull distances) при компиляции в SPIR-V. Предыдущий код был хрупким и не справлялся с рядом случаев, что приводило к ошибкам в играх, использующих эти возможности.
  • Улучшения для HLSL (High-Level Shading Language):
    • Эффекты (Effects / FX): Целевые профили FX теперь могут выводить встроенные шейдерные бинарные блоки (blobs), создаваемые функциями CompileShader() и ConstructGSWithSO(). Это улучшает поддержку старого софта и игр, использующих эту технологию.
    • Статические инициализации: Статически инициализированные переменные теперь считаются статическими выражениями. Например, код int count = 4; float4 array[count]; теперь считается валидным.
    • Работа со структурированными ресурсами: Реализованы операции записи (store) в RWStructuredBuffer, загрузки (load) из структурированной разделяемой памяти группы потоков (thread group shared memory), а также операции копирования с участием структурированных ресурсов.
    • Корректное приведение типов: Приведение чисел с плавающей запятой к булевым значениям теперь работает корректно: любое ненулевое значение становится true. Ранее, например, (bool)0.25f могло свернуться в false.
    • Другие улучшения HLSL: Спецификатор static разрешён для функций. Типы Buffer, StructuredBuffer и ByteAddressBuffer теперь поддерживаются в FX-профилях.
  • Поддержка старых инструкций Direct3D: Реализован ряд устаревших инструкций байт-кода Direct3D, включая dp2add, loop/endloop, lrp, nrm, pow, rep/endrep. Это улучшает совместимость со старыми играми.
  • Улучшенный дамп шейдеров: При использовании переменной окружения VKD3D_SHADER_DUMP_PATH для сохранения шейдеров теперь также сохраняются сообщения компиляции (ошибки, предупреждения).

Новые интерфейсы и улучшения сборки

  • Новый параметр шейдера: Добавлен параметр VKD3D_SHADER_PARAMETER_NAME_PROJECTED_TEXTURE_MASK, который указывает, какие текстуры в пиксельных шейдерах моделей 1.0-1.3 должны считаться проекционными (projected textures).
  • Улучшения для тестирования: Добавлена переменная окружения VKD3D_TEST_WRAPPER, позволяющая оборачивать выполнение тестов.

Релиз vkd3d 1.19 — это важный шаг вперёд для всей экосистемы трансляции Direct3D 12. Исправления для тайловых рендеров делают библиотеку более универсальной, а улучшения в обработке шейдеров повышают совместимость с широким спектром игр — от современных блокбастеров до классики, использующей эффекты и старые шейдерные модели.

Исходный код новой версии уже доступен для загрузки с серверов WineHQ. Библиотека распространяется под условиями LGPL и может быть интегрирована в ваши проекты или использована для обновления системных компонентов.

  • Просмотров: 75

Этот веб-сайт использует технические и функциональные файлы cookie. Чтобы зарегистрировать учетную запись, связаться с нами, получить наши продукты или услуги, вы должны принять нашу Политику Конфиденциальности. Нажимая кнопку «Принять» или щелкая любую ссылку на этой странице, вы соглашаетесь на использование файлов cookie и принимаете нашу Политику использования cookie-файлов.