WSL显卡驱动更新带来Linux应用更强GPU支持

无论你运行什么操作系统,运行非原生应用的成功率都在提升。在Windows上虚拟化运行Linux的速度将略有提升,在64位Linux和macOS上运行Windows应用的性能也是如此。

本周两种截然不同的显卡驱动栈都收到了更新,虽然它们并不相关,但都在追求同样的目标:在不同操作系统上运行非原生应用时获得更好的图形性能。

微软dxgkrnl驱动迎来重大更新

其中第一个是我们很久以前提到过的驱动。六年前,我们报道了微软的新dxgkrnl驱动,它允许在WSL2下运行的Linux访问宿主操作系统GPU的DirectX功能。微软当时非常热衷于推广这一技术,即使现在该驱动在微软文档网站上仍有专门的章节。

Dxgkrnl驱动已经将近四年没有更新了。在2020年推出后,它在2022年进行了重大重构——实际上是版本2,几个月后微软重新组织了代码以提高清晰度和便于审查,将其标记为PATCH v3。Linux内核邮件列表上的新补丁引入了该驱动的第4版。

这个版本支持纯计算GPU,用于运行那些流行的大语言模型,以及每个虚拟机支持多个虚拟GPU,并通过dma-fence实现驱动缓冲区共享。当然,DirectX本身仍是闭源的,该驱动只有在Windows上的Hyper-V下运行时才有用。

WINE推动新发展

WSL2在Windows内部运行单个真实的Linux副本,容器模拟不同的发行版。这与十年前的原始WSL形成鲜明对比。现在被称为WSL1的原始版本提供了一个翻译层,将Linux API调用转换为Windows调用,源自已经消失的Project Astoria运行时,该运行时用于在Windows Phone上运行Android应用。

实际上,WSL1与WINE的工作方式更相似,而不是WSL2。WINE也是一个翻译层,将Windows API调用转换为Linux等效调用。正如我们在2024年初报道的,WINE 9.0引入了32位到64位的转换:它可以在64位宿主操作系统上运行32位Windows二进制文件,而无需使用宿主上的任何32位子系统——这对于macOS 10.15"Catalina"以来的所有版本都是必要的。随着今年WINE 11的发布,这种集成已经非常深入,不再有wine32或wine64命令。

近年来WINE蓬勃发展,这要归功于Valve。其SteamOS 3发行版最初为Steam Deck掌上游戏机构建,使用Valve的Proton在Linux上运行Windows游戏,Proton集成在Valve Steam游戏平台的Linux客户端中。SteamOS 3表现如此出色,以至于Valve计划在今年晚些时候推出更多Steam硬件。

OpenGL仍有生命力

Valve在销售基于操作系统级模拟的消费游戏硬件方面的成功不仅推动了Linux开发,也推动了OpenGL的变化。

2024年,Codeweavers的Derek Lesho在mesa-dev邮件列表上提出了一个新问题:帮助Wine为32位Windows应用程序使用64位Mesa OGL驱动。去年,他在Mesa的GitLab上进行了更详细的解释。当WINE在64位宿主操作系统上运行32位Windows游戏时会出现这个问题。当WINE使用glMapBuffer API为游戏分配GPU内存块时,该缓冲区的地址将是64位地址——但如果地址不适合32位地址范围,WINE就无法将该地址传递给32位应用程序。

经过一些讨论,结果是一个新的OpenGL API,称为
MESA_map_buffer_client_pointer。其摘要说明:此扩展允许应用程序指定应在其中映射缓冲区的指针范围。

换句话说,在分配缓冲区时,它让应用程序可以请求缓冲区在给定的地址范围内,以便32位代码可以无需缓慢的复制操作就能访问到它。

虽然距离Vulkan 1.0开放图形规范的报道已经十年了,但其前身OpenGL仍在持续开发中。即使微软已经从Windows中移除了16位应用支持,苹果也从macOS中停止了32位应用支持,WINE仍在努力让那些旧的Windows二进制文件在现代64位类Unix操作系统上良好运行。

Q&A

Q1:WSL2的dxgkrnl驱动有什么新功能?

A:dxgkrnl驱动第4版支持纯计算GPU,可用于运行大语言模型,还支持每个虚拟机使用多个虚拟GPU,并通过dma-fence实现驱动缓冲区共享。这个驱动允许WSL2下的Linux访问Windows宿主操作系统GPU的DirectX功能。

Q2:WINE如何解决32位游戏在64位系统上的内存地址问题?

A:WINE开发了新的OpenGL API叫
MESA_map_buffer_client_pointer,允许应用程序指定缓冲区映射的指针范围。这样在分配GPU内存时,可以请求缓冲区在32位地址范围内,让32位代码能直接访问而无需缓慢的复制操作。

Q3:为什么说Valve推动了WINE的发展?

A:Valve的SteamOS 3使用基于WINE的Proton技术在Linux上运行Windows游戏,并集成在Steam游戏平台中。SteamOS 3在Steam Deck上的成功表现,以及Valve计划推出更多Steam硬件,都大大推动了WINE技术的发展和应用。

展开阅读全文

更新时间:2026-03-25

标签:科技   缓冲区   微软   宿主   操作系统   地址   游戏   应用程序   版本   范围内   分配

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight All Rights Reserved.
Powered By 61893.com 闽ICP备11008920号
闽公网安备35020302035593号

Top