Випуск vkd3d 1.16: Стабілізація підтримки шейдерів DXIL

Випуск vkd3d 1.16: Стабілізація підтримки шейдерів DXIL у Direct3D 12 на Vulkan

Проект Wine опублікував новий випуск пакета vkd3d 1.16, який реалізує Direct3D 12 через трансляцію викликів у графічний API Vulkan. Ця бібліотека відіграє ключову роль для запуску застосунків Windows під Linux.

Що таке vkd3d і його компоненти

До складу пакета входять кілька важливих бібліотек:

  • libvkd3d – реалізація Direct3D 12
  • libvkd3d-shader – транслятор 4 та 5 моделей шейдерів
  • libvkd3d-utils – функції для спрощення портування застосунків Direct3D 12

Також включено набір демонстраційних прикладів, зокрема порт glxgears на Direct3D 12. Весь код поширюється під ліцензією LGPLv2.1.

Основні можливості бібліотеки libvkd3d

Бібліотека підтримує більшу частину функцій Direct3D 12, включаючи:

  • Графічні та обчислювальні засоби
  • Черги та списки команд
  • Дескриптори та дескриптори купи
  • Кореневі сигнатури та константи
  • Непрямий (indirect) рендеринг
  • Методи Clear*() та Copy*()

У libvkd3d-shader реалізована трансляція байткоду моделей шейдерів у проміжне представлення SPIR-V. Бібліотека підтримує різні типи шейдерів та широкий набір шейдерних інструкцій.

Нові функції в vkd3d 1.16

Основною особливістю нового випуску є стабілізація підтримки шейдерів DXIL, які тепер увімкнені за замовчуванням. Крім того, внесено багато інших удосконалень:

Покращення компілятора шейдерів

  • У компіляторі HLSL додана початкова підтримка геометричних шейдерів
  • Для шейдерних моделей 1, 2, 3 реалізована підтримка непрямої адресації, модулів та обмеження значень
  • У libvkd3d заявлена підтримка шейдерної моделі 6.0

Розширення функціональності API

  • У програмному інтерфейсі ID3D12Device1 реалізований метод SetEventOnMultipleFenceCompletion()
  • Додана підтримка Vulkan-розширення VK_KHR_zero_initialize_workgroup_memory для ініціалізації нулями пам’яті шейдерів
  • До обов’язкових включено розширення VK_KHR_maintenance2, запропоноване у специфікації Vulkan 1.1

Інструменти для розробників

  • Додана підтримка дизасемблювання шейдерів SPIR-V та бінарних ефектів “fx_2_0”
  • Додана експериментальна підтримка непрямої адресації постійних буферів у GLSL
  • У реалізації MSL (Metal Shading Language) додана можливість завантаження текстур

Нові вбудовані функції HLSL

Реалізовано важливі вбудовані функції HLSL для роботи з бар’єрами пам’яті:

  • AllMemoryBarrier() та AllMemoryBarrierWithGroupSync()
  • DeviceMemoryBarrier() та DeviceMemoryBarrierWithGroupSync()
  • GroupMemoryBarrier() та GroupMemoryBarrierWithGroupSync()

Також реалізовано численні нові прапорці компіляції та компоненти для розширення функціональності бібліотеки.

Цей випуск є важливим кроком у розвитку сумісності ігор та програм Windows, що використовують Direct3D 12, із системами на базі Linux через Wine. Детальніше про vkd3d можна дізнатися на офіційному сайті Wine та ознайомитись з анонсом випуску.