Оновлення Vkd3d 2.1: Поліпшення компіляції шейдерів

Випуск Vkd3d 2.1: Поліпшення в компіляції шейдерів та сумісності

Випущено версію 2.1 Vkd3d, бібліотеки Wine для трансляції Direct3D у Vulkan. Більшість зусиль зосереджено на компіляції шейдерів, сумісності та рефлексії.

Основні покращення для HLSL і підтримка шейдерів

Одним із найзначніших поліпшень є підтримка HLSL, мови програмування шейдерів Microsoft. У версії виправлено помилку компілятора, що стосується вкладених функцій. Різні аргументи могли неправильно використовувати один і той самий результат.

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

Поліпшення сумісності з шейдерами Direct3D

Сумісність зі старими байт-кодами шейдерів Direct3D також покращилася. У Vkd3d 2.1 додано підтримку більшої кількості старих інструкцій і модифікаторів. Це дозволяє коректно обробляти широкий спектр старого шейдерного коду.

Нові можливості для Vulkan та експериментальний вихід GLSL

На стороні Vulkan бекенду SPIR-V додали додаткову підтримку числових перетворень. Особливо це стосується шейдерів, що походять з DXIL, проміжного формату, який використовується в сучасному Direct3D.

Паралельно триває робота над експериментальним виходом GLSL для Vkd3d. Бекенд тепер може обробляти більш складні функції шейдерів. Сюди входять спільна пам’ять, атомарні операції, бар’єри, непрямий доступ до входів і додаткові входи для обчислювальних шейдерів.

Поліпшена рефлексія шейдерів у Vkd3d 2.1

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

Крім того, Vkd3d 2.1 додає багато відсутніх можливостей рефлексії. Підтримка розширена за межі Direct3D 12 до інтерфейсів Direct3D 10 і 11.

Покращення інструментів командного рядка Vkd3d

Випуск також включає поліпшення сумісності зі старими поведінками компілятора Microsoft. Це стосується, зокрема, змінних з половинною точністю. Введено нову функціональність препроцесингу та рефлексії для точнішої еймуляції специфічних версій компілятора Microsoft.

Останнім етапом є невеликі поліпшення інструментів командного рядка Vkd3d. Компілятор шейдерів отримав опцію для сумісності з половинною точністю. Утиліта DXBC тепер може замінювати окремі секції всередині скомпільованих контейнерів шейдерів замість їхнього повного перебудови.

Додаткові деталі можна знайти в чангелозі. Vkd3d 2.1 доступний як вихідний код на WineHQ.