Valve 旗下用于 Steam Play(Proton)的 Direct3D 12 到 Vulkan 转换层 VKD3D-Proton 近日合并了 Vulkan 描述符堆扩展(VK_EXT_descriptor_heap)的支持。这一更新被视为 Proton 兼容性改进的重要里程碑,尤其对 NVIDIA 显卡在 Linux 环境下的游戏性能有直接影响。
描述符堆扩展的技术意义
VK_EXT_descriptor_heap 于 2025 年 1 月随 Vulkan 1.4.340 发布,它允许应用程序显式管理描述符及其存储内存(即描述符堆)。该扩展旨在解决此前 VK_EXT_descriptor_buffer 暴露的一些问题,提供更一致的移植性保证和更可预测的性能特征。对于 VKD3D-Proton 而言,这意味着可以更高效地将 Direct3D 12 的描述符模型映射到 Vulkan,减少驱动程序在描述符绑定环节的开销。
此前,NVIDIA 显卡在 Linux 下运行 Direct3D 12 游戏时性能往往不理想,这并非 NVIDIA 驱动自身的缺陷,而是 Vulkan–VKD3D 层的描述符管理方式对某些硬件不够高效。VK_EXT_descriptor_heap 从底层规范层面统一了描述符的分配与访问模式,有助于消除这种平台间的性能差异。正如相关开发者所指出的,这本质上是一个 “Vulkan–VKD3D 问题”,而非 NVIDIA 的专用问题。
各厂商驱动与生态协同跟进
在 VKD3D-Proton 合并该扩展之前,已有多个 Vulkan 驱动率先提供支持。NVIDIA 在其 Linux 驱动中加入了描述符堆实现;AMD 的开源 RADV 驱动在 Mesa 26.1 中也合并了该功能;Intel ANV 驱动则在 5 月推出了实验性支持。此外,作为 Direct3D 11 转换层的 DXVK 已于 2 月采用了 VK_EXT_descriptor_heap,以修复小幅性能回退。整个 Vulkan 生态对描述符堆的覆盖正逐步完善。
VKD3D-Proton 的合并工作始于 4 月的拉取请求,由 Valve 工程师 Hans-Kristian Arntzen 主导完成。在合并代码后,Arntzen 评论称下一个主要的 Steam Play 更新将“相当令人激动”。考虑到 VKD3D-Proton 需要同时支持启用和未启用该扩展的场景,此次合并意味着库的代码在保持向后兼容的同时,需要在部分路径上做出性能权衡,但从长远看,描述符堆的采用将带来更稳定的帧率表现。
对于广大 Steam Play 用户,尤其是使用 NVIDIA 显卡的玩家,这一底层优化有望直接减少在 Direct3D 12 游戏中遇到的卡顿和性能波动。随着 RADV、ANV 等驱动的持续完善,Linux 游戏生态在图形兼容性上正逐渐缩小与 Windows 的差距。
本文参考来源:Phoronix



