Проект Wine выпустил новую версию пакета vkd3d 1.2 с реализацией Direct3D 12 , которая работает путем преобразования вызовов к графическому API Vulkan.
Новая версия vkd3d 1.2 содержит несколько улучшений, но главными из них являются доступность библиотеки libvkd3d-shader в качестве общедоступной , поддержка шейдеров тесселяции, а также поддержка потокового вывода.
В пакет входят библиотека libvkd3d с реализациями Direct3D 12, библиотека libvkd3d-shader с транслятором шейдеров моделей 4 и 5, а также библиотека libvkd3d-utils с функциями для упрощения миграции приложений Direct3D 12, а также набор демонстрационных примеров, включая порт glxgears на Direct3D 12. Код проекта распространяется под лицензией LGPLv2.1.
Библиотека libvkd3d поддерживает большинство функций Direct3D 12, включая графические и вычислительные функции, списки команд и очереди, дескрипторы и дескрипторы кучи, сигнатуры корневых элементов, неупорядоченный доступ, сэмплеры, сигнатуры команд, константы корневых элементов, непрямой рендеринг и т. д.
Libvkd3d-shader реализует преобразование байт-кода 4 и 5 моделей шейдеров в промежуточное представление SPIR-V. Поддерживаются шейдеры для работы с вершинами, пикселями, тесселяцией, простой и вычислительной геометрией, сериализация и десериализация корневой сигнатуры.
В состав шейдерных инструкций входят арифметические, атомарные и побитовые операции, операторы управления потоком данных и сравнения, инструкции выборки, сбора и загрузки, а также операции неупорядоченного доступа (UAV, Unordered Access View).
На данном этапе разработки реализованы не все вызовы Direct3D 12 , и тестирование проводилось в основном на наборе демонстрационных приложений. В этот релиз не включены разрабатываемые функции, такие как поддержка тесселяции и сложных геометрических шейдеров, а также ряд улучшений, связанных с шейдерами и основными методами Direct3D 12. Эти функции будут предложены в будущем релизе.
Основные новые возможности Vkd3d 1.2
Одним из наиболее важных изменений в новой версии является доступность библиотеки libvkd3d-shader для использования в сторонних проектах, поскольку в нее добавлены несколько функций Direct3D 12, таких как:
- Множественная выборка.
- Зарезервированные ресурсы.
- Скорость передачи данных экземпляра.
- API «приватных данных» для всех интерфейсов.
- Сопоставления компонентов представления ресурсов шейдера.
- VK_KHR_draw_indirect_count расширение.
- Предикат / условное представление.
- Рендеринг глубины без пиксельного шейдера.
- Вырез по глубине. Для этого требуется расширение VK_EXT_depth_clip_enable.
- Откажитесь от растеризатора.
- Смешивание с двумя источниками.
- Отображение размещенных ресурсов.
- Методы ReadFromSubresource () и WriteToSubresource () ID3D12Resource.
- Одновременный доступ к ресурсам с несколькими очередями.
- Нулевые просмотры. То есть представления без базового ресурса.
- Еще несколько запросов в службу поддержки.
Помимо этого, следует отметить добавленную поддержку преобразования, сериализации и десериализации корневых подписей (vkd3d_serialize_versioned_root_signature() и vkd3d_create_versioned_root_signature_deserializer()) , а также поддержку потокового вывода.
Еще одно заметное изменение — это реализация переменных окружения: VKD3D_CONFIG для установки параметров, изменяющих поведение libvkd3d, и VKD3D_VULKAN_DEVICE для переопределения устройства для API Vulkan.
Кроме того, была добавлена поддержка инструкций затенения bufinfo, eval_centroid, eval_sample_index, ld2ms, sample_b, sample_d, sample_info, samplepos, а также предварительная поддержка шейдеров модели 5.1.
А также поддержка целевых сред OpenGL SPIR-V. Это позволяет использовать SPIR-V, созданный libvkd3d-shader, с GL_ARB_gl_spirv. Это включает поддержку атомных счетчиков OpenGL и комбинированных семплеров.
Наконец, если вы хотите узнать больше об этой новой версии, вы можете ознакомиться с полным списком изменений по следующей ссылке.
Как установить vkd3d на Linux?
Тем, кто заинтересован в возможности установить vkd3d в своей системе, следует получить исходный код и продолжить компиляцию, хотя для практических целей или для новичков они могут попробовать эту библиотеку без особых усилий. Для этого им нужно только установить lutris и его конфигурации.
Что касается тех, кто заинтересован в компиляции, они должны получить код с:
git clone git://source.winehq.org/git/vkd3d.git/
./autogen.sh
./configure
make
../vkd3d/configure --build=i686-pc-linux-gnu "CPPFLAGS=-m32" "LDFLAGS=-m32"
Наконец, необходимо включить слои Vulkan:
export VK_INSTANCE_LAYERS=VK_LAYER_LUNARG_standard_validation
VKD3D_CONFIG=vk_debug