Началось тестирование первого кандидата в релизы Wine 9.0, открытой реализации WinAPI. Кодовая база переведена на стадию заморозки перед релизом, который ожидается во второй половине января. По сравнению с выпуском Wine 8.21 закрыто 52 отчёта об ошибках и внесено 391 изменение.
Наиболее важные изменения:
- Встроенный пакет vkd3d с реализацией Direct3D 12, работающей через трансляцию вызовов в графический API Vulkan, обновлён до версии 1.10.
- Продолжено развитие функциональности, нацеленной на реализацию возможности использования Wine в окружениях на базе протокола Wayland без применения XWayland и компонентов X11. В драйвере winewayland.drv добавлена поддержка раскладок клавиатуры. Расширена поддержка графического API Vulkan и добавлены функции vkQueuePresentKHR, vkGetDeviceGroupSurfacePresentModesKHR, vkGetPhysicalDevicePresentRectanglesKHR. Добавлена функция ClipCursor и реализована возможность работы с относительными координатами при отслеживании движения мыши.
- При использовании свежих выпусков GnuTLS реализована поддержка ключей шифрования DH (Diffie-Hellman).
- Закрыты отчёты об ошибках, связанные с работой приложений: Notepad, MS Word, Roon, eFilm Workstation 2.x/3.x, Athena’s Charm Table Search 0.35b, Process Explorer, Araxis Merge 2023.5877, Framemaker 8, Internet Download Manager, Air Jura, SpeedCommander, ModOrganizer, RestoreDC, Acid-V VST plugin, MIDITrail 1.4.0.
- Закрыты отчёты об ошибках, связанные с работой игр: For Honor, STEEP, Far Cry 5, NFS Most Wanted, Castlevania: Lords of Shadow 2, Eurobattle, Daily Chthonicle, Crimson Skies.
Дополнительно можно отметить публикацию проектом Wine пакета vkd3d 1.10 с реализацией Direct3D 12, работающей через трансляцию вызовов в графический API Vulkan. В состав пакета входят библиотеки libvkd3d с реализаций Direct3D 12, libvkd3d-shader c транслятором 4 и 5 модели шейдеров и libvkd3d-utils с функциями для упрощения портирования приложений Direct3D 12, а также набор демонстрационных примеров, включая порт glxgears на Direct3D 12. Код проекта распространяется под лицензией LGPLv2.1.
Библиотека libvkd3d поддерживает большую часть возможностей Direct3D 12, включая средства для графики и вычислений, очереди и списки команд, дескрипторы и дескрипторы кучи, корневые сигнатуры, неупорядоченный доступ, Sampler-ы, сигнатуры команд, корневые константы, непрямую (indirect) отрисовку, методы Clear*() и Copy*(). В libvkd3d-shader реализована трансляция байткода 4 и 5 моделей шейдеров в промежуточное представление SPIR-V. Поддерживаются вершинные, пиксельные, тесселяционные, вычислительные и простые геометрические шейдеры, сериализация и десериализация корневой сигнатуры. Из шейдерных инструкций реализованы арифметические, атомарные и битовые операции, операторы сравнения и управления потоком передачи данных, инструкции sample, gather и load, операции неупорядоченного доступа (UAV, Unordered Access View).
В новой версии продолжена работа по улучшению компилятора шейдеров на языке HLSL (High-Level Shader Language), предоставляемом начиная с DirectX 9.0: добавлена поддержка динамической индексации массивов; добавлены выражения “break”, “continue” и “switch”; расширены выражения для которых применима свёртка констант; реализованы встроенные функции
ceil(), degrees(), radians(),fwidth(), tan(), tex2Dlod(), tex2Dproj(), texCUBEproj() и tex3Dproj().
В библиотеку libvkd3d добавлены новые программные интерфейсы Direct3D 12 (ID3D12Device5, ID3D12GraphicsCommandList5 и ID3D12Resource1) и реализована возможность создания конвейерных объектов состояния (pipeline state object). В libvkd3d-utils добавлены вспомогательные функции для манипулирования DXBC: D3DGetBlobPart(),
D3DGetDebugInfo(), D3DGetInputAndOutputSignatureBlob(), D3DGetInputSignatureBlob(), D3DGetOutputSignatureBlob(), D3DStripShader(). В компилятор vkd3d-compiler добавлены опции “–fragment-coordinate-origin” и “–semantic-compat-map”.