VKD3D-proton — ключевой компонент для трансляции Direct3D 12 в Vulkan, используемый в Proton и Wine. Этот релиз знаменует собой последнюю «стабильную» веху перед крупными изменениями в версии 3.2. Он приносит поддержку VK_EXT_descriptor_heap (пока не включённую по умолчанию), Opacity Micromaps с трассировкой лучей DXR 1.2, Shader Model 6.9 с Shader Execution Reordering, а также оптимизации производительности и множество исправлений для AMD GCN, Steam Frame и QCOM.
Новые возможности
🔹 Поддержка VK_EXT_descriptor_heap
Добавлена поддержка VK_EXT_descriptor_heap. Это расширение уже много месяцев тестировалось в режиме опции и прошло серьёзную проверку на NVIDIA. Однако в этом релизе оно не включено по умолчанию из-за опасений по поводу качества драйверов. В ближайшее время ситуация изменится в основной ветке.
🔹 Opacity Micromaps и DXR 1.2
Добавлена поддержка KHR_opacity_micromap, а старый и сломанный путь EXT удалён. При наличии поддержки экспонируется DXR 1.2.
🔹 Shader Model 6.9
Добавлена поддержка Shader Model 6.9, включая Shader Execution Reordering (SER) и long vector. На данный момент работает только на NVIDIA, так как SM 6.9 — это обновление, ориентированное на трассировку лучей и машинное обучение.
🔹 Другие нововведения
- Поддержка различных интринсиков NVAPI в dxil-spirv.
- Экспонирование функций AgilitySDK 619.
- View instancing теперь включён по умолчанию, так как всё больше игр полагаются на эту функцию.
Производительность
- Оптимизированный путь для ClearUAV: Теперь используется
vkCmdClearColorImageилиvkCmdFillBuffer, где это возможно, что позволяет драйверам оптимизировать очистку. - Оптимизация патологических паттернов барьеров COPY → RESOURCE → COPY: Нельзя доверять приложениям писать компетентный код. :')
- Устранены некоторые обходы композитора в
IDXGISwapChain::Present(): Связанные с проверками окклюзии — должно улучшить производительность при CPU-bound на главном потоке рендеринга. - Пакетная обработка команд сборки RTAS перед вставкой барьеров: Значительно увеличивает производительность трассировки лучей в некоторых случаях.
Исправления
- Steam Frame: Теперь официально поддерживается как платформа. Добавлены исправления для оборудования QCOM и поддержка сборок aarch64.
- AMD GPU: Корректная обработка копирования D24 ↔ buffer на GPU AMD, где используется эмуляция D32. Это исправило подтормаживания в ремастере MGS4.
- low_latency2: Различные исправления путей, отправленных NVIDIA, для соответствия спецификации версии 3.
- Неопределённое поведение (UB) вокруг udiv/umod/sdiv/srem: Компиляторы NVIDIA иногда используют разрешённое UB, что ломало работу — исправлено.
- Незадокументированное поведение resolve в render pass API: Исправлено.
- AMD_anti_lag: Реализация значительно упрощена, исправлено множество ошибок с атрибуцией кадров.
- dxil-spirv: Множество исправлений, которые скоро исчезнут.
Обходные пути (Workarounds)
- AMD GCN и QCOM: Добавлены обходные пути для оборудования, не поддерживающего Wave32, с которым многие современные игры просто ломаются.
- UE5 / RE Engine: Добавлено более детальное определение движков, чтобы помочь драйверам Mesa выполнять сложные обходные пути, которые нельзя привязать напрямую к vkd3d-proton.
- Сломанное поведение root SRV/UAV на NVIDIA: Исправлено — игры на Windows могут позволить себе поведение вне спецификации, которое мы не воспроизводили.
- Use-after-free обходные пути: Переписаны, что обходит множество сломанных поведений в плагине FSR4 для UE.
vkd3d-proton 3.1 — это важный рубеж перед крупными изменениями в версии 3.2. Релиз приносит поддержку новейших графических технологий, улучшения производительности и стабильности, а также расширяет совместимость с новыми платформами, включая Steam Frame.
Релиз уже доступен на GitHub-странице проекта.