Не путать с VKD3D-Proton от Valve, который используется в Steam Play, но сама кодовая база VKD3D от Wine вышла 24.03.2023 с новой версией реализации Direct3D 12 на базе Vulkan.
Анри Вербет из CodeWeavers сегодня выпустил VKD3D 1.7 как новейшую версию этой реализации Direct3D 12, на которую опирается код Wine. Как и в большинстве других релизов VKD3D, в ней реализовано больше функциональности D3D12/HLSL с большим количеством интринсиков, а также улучшена поддержка профилей Shader Model 1/2/3, улучшены вычислительные шейдеры и многое другое.
Новые возможности для типа источника HLSL
- Поддержка вызова определяемых пользователем функций;
- Поддержка параметров массива для пользовательских функций;
- Значительно улучшенная поддержка профилей Direct3D shader model 1/2/3;
- Поддержка семантики системных значений шейдеров SV_DispatchThreadID, SV_GroupID и SV_GroupThreadID;
- Поддержка необязательного параметра «offset» метода Load() объекта текстуры;
- Поддержка внутренней функции all();
- Поддержка внутренней функции distance();
- Поддержка внутренних функций exp() и exp2();
- Поддержка внутренней функции frac();
- Поддержка внутренней функции lit();
- Поддержка внутренней функции reflect();
- Поддержка внутренних функций sin() и cos();
- Поддержка внутренней функции smoothstep();
- Поддержка внутренних функций sqrt() и rsqrt();
- Поддержка внутренней функции step();
- Поддержка внутренней функции transpose();
- Поддержка нечувствительных к регистру вариантов типов данных «float» и «dword»;
- Частичная поддержка типов данных минимальной точности, таких как «min16float». В настоящее время они интерпретируются как их обычные аналоги;
- Улучшена поддержка распространения констант, в частности, распространение констант через свичи;
- Статические переменные HLSL теперь правильно инициализируются нулем;
- Дизассемблер шейдеров Direct3D моделей 4 и 5 выводит количество выборок для объявлений ресурсов с несколькими выборками;
Новые интерфейсы
- vkd3d_shader_parse_dxbc() обеспечивает поддержку разбора DXBC блобов;
- vkd3d_shader_serialize_dxbc() обеспечивает поддержку сериализации DXBC блобов;
- vkd3d_shader_free_dxbc() используется для освобождения структур vkd3d_shader_dxbc_desc, возвращаемых vkd3d_shader_parse_dxbc();
- Опция компиляции VKD3D_SHADER_COMPILE_OPTION_WRITE_TESS_GEOM_POINT_SIZE может использоваться для указания того, должны ли шейдеры SPIR-V, ориентированные на среду Vulkan, записывать размеры точек для шейдеров геометрии и тесселяции. Если опция не указана, то размеры точек будут записаны.
VKD3D 1.7 будет включен в следующий релиз Wine, выходящий раз в две недели, а те, кому нужна эта библиотека D3D12-on-Vulkan сразу, могут получить новый релиз VKD3D через WineHQ Git.
Источник: https://www.phoronix.com