Board logo

标题: [业评] 详细说一下STEAMOS为什么兼容性这么好。以及PROTON,WINE,DXVK [打印本页]

作者: refo    时间: 2025-11-25 21:36     标题: 详细说一下STEAMOS为什么兼容性这么好。以及PROTON,WINE,DXVK

https://www.bilibili.com/video/B ... ge.video_card.click

这个视频基本上解释很清楚了。

从时间线来说:

第一个项目是WINE,把WINDOWS里的各个DLL(不包括第三方的),都“翻译”一遍,让EXE文件可以在LINUX里也调用WINDOWS的API,只不过是WINE在LINUX里代替WINDOWS响应的。
WINE,全称Wine Is Not an Emulator,这个项目已经很成熟了。

WINE项目中,对D3D的支持,原本是通过OpenGL支持的,但OpenGl式微,开源社区对D3D的连蒙带猜,效果极差。
所以,遇到需要3D的游戏,通过WINE转译就很捉急了,速度慢,效果差。

然后,2017年,微软对D3D的SHADER:DXIL文件开源了。

第二个项目,DXVK就诞生了,把微软D3D 的DXIL,直接翻译成VULKAN的SHADER文件SPIR-V。
DXVK这个项目的成果好到什么地步呢,就是INTEL搞AB系列的独立显卡时候,用DXVK来运行老游戏,比INTEL自家的DX11驱动更快。
当然,这其中也有G胖对社区的(财务和其他)支持。

这个时候,用DXVK项目提供的D3D DLL,替换WINE项目里的(老)D3D DLL,就已经可以开始在LINUX里基本全速、无出错跑WINDOWS游戏了。

所以,第三个项目,Proton,基本上可以认为 Proton=Wine + DXVK + 一些其他的工作/项目。
有了Proton,你基本上可以在各种Linux(发行)版本下,直接运行Windows游戏了。

第四个项目,SteamOS=(定制的)ArchLinux + Proton。包括开机直接进STEAM平台等。

而SteamOS,甚至可以做到有些游戏比(相同硬件水平的)Windows更快。
主要有2点原因:
1. DXVK的高效率,现代游戏基本上就吃显卡,DXVK效率高了,WINE的效率高或者不高,都拖不了DXVK的后腿。
2. 定制的ArchLinux,砍了许多对游戏无用的功能,所以在OS这个层面,比Windows开销小。

[ 本帖最后由 refo 于 2025-11-26 22:13 编辑 ]
作者: 熊熊哥哥    时间: 2025-11-25 22:00

posted by wap, platform: Samsung
mark 空了看
作者: can1234    时间: 2025-11-25 22:26

posted by wap, platform: Android
其实ps5和sxsx不也是一个深度定制的x86机器吗
作者: refo    时间: 2025-11-25 22:37

posted by wap, platform: Android
引用:
原帖由 @can1234  于 2025-11-25 22:26 发表
其实ps5和sxsx不也是一个深度定制的x86机器吗
xss/xsx应该是微软开发的一个非常精简的windows,用的是d3d12。

本帖最后由 refo 于 2025-11-26 06:43 通过手机版编辑
作者: yfl2    时间: 2025-11-25 22:38

引用:
原帖由 can1234 于 2025-11-25 22:26 发表
posted by wap, platform: Android
其实ps5和sxsx不也是一个深度定制的x86机器吗
ps5跑 windows 游戏吗233
作者: yfl2    时间: 2025-11-25 22:43

引用:
原帖由 refo 于 2025-11-25 22:37 发表
posted by wap, platform: Android
是的,但ps5应该是直接调用vulkan,通过和amd的合作获得了vulkan的技术

xss/xsx应该是微软开发的一个非常精简的windows,用的是d3d12。
ps5用的是索尼自己研发的api,记得还有两套,其中一套更底层
作者: cc0128    时间: 2025-11-25 23:28

posted by wap, platform: iPhone
proton还是有性能损失的,但是window脱后腿太多了。所以steamos对比windows反而有性能优势。


不过steam os 对比ps5/xsx这种定制的主机和系统,性能上只会有劣势。。
作者: ginaamix    时间: 2025-11-26 01:59

posted by wap, platform: Chrome
ps4的图形api叫gnm,有一个高层封装叫gnmx
ps5的图形api叫agc,有个高层封装叫gnmp
这两个api都比vulkan/dx12要底层的多,vulkan的前身mantle本身就是农企为了把主机开发经验作为优势带到pc搞出来的东西
作者: refo    时间: 2025-11-26 06:51

posted by wap, platform: Android
引用:
原帖由 @ginaamix  于 2025-11-26 01:59 发表
ps4的图形api叫gnm,有一个高层封装叫gnmx
ps5的图形api叫agc,有个高层封装叫gnmp
这两个api都比vulkan/dx12要底层的多,vulkan的前身mantle本身就是农企为了把主机开发经验作为优势带到pc搞出来的东西
但还是老黄技术更nb,吊打amd
作者: playboy23    时间: 2025-11-26 08:13

所以这事成了还是靠微软的开源,自己的掘墓人。。
作者: refo    时间: 2025-11-26 14:13

posted by wap, platform: Android
引用:
原帖由 @playboy23  于 2025-11-26 08:13 发表
所以这事成了还是靠微软的开源,自己的掘墓人。。
微软开源路线是目前印度ceo搞的,说句实话,这个印度人很厉害,很成功
作者: 0瞎子0    时间: 2025-11-26 15:36

posted by wap, platform: iPhone
这些需要大量人来无料测试的基础框架,不开源只会死路一条
作者: devliet    时间: 2025-11-26 20:14

posted by wap, platform: Android
DXVK性能好,提高的是CPU的性能,和提高GPU性能没关系。

vulkan实现d3d11,可能还可以实现得比较高效。实现d3d12的话,和原生d3d12比,性能应该是有劣势的吧。

本帖最后由 devliet 于 2025-11-26 20:33 通过手机版编辑
作者: devliet    时间: 2025-11-26 20:29

posted by wap, platform: Android
引用:
原帖由 @playboy23  于 2025-11-26 08:13 发表
所以这事成了还是靠微软的开源,自己的掘墓人。。
和微软开源没有一毛钱关系。
这些都是对公开的api的自行实现,和微软开源没关系。

DXVK什么的,这些库是开源的,所以steam可以拿来用,但是这和微软没有一毛钱关系,这些库不是微软写的,微软一行源代码也没开。

本帖最后由 devliet 于 2025-11-26 20:31 通过手机版编辑
作者: refo    时间: 2025-11-26 20:49

引用:
原帖由 devliet 于 2025-11-26 20:29 发表
posted by wap, platform: Android
和微软开源没有一毛钱关系。
这些都是对公开的api的自行实现,和微软开源没关系。

DXVK什么的,这些库是开源的,所以steam可以拿来用,但是这和微软没有一毛钱关系,这些库不是 ...
DXVK是社区开源项目。

但微软把DX12的SHADER文件开源了:https://github.com/microsoft/DirectXShaderCompiler

这个大大加速了社区把DX12转译到VULKAN的进程
作者: yonexhb    时间: 2025-11-26 20:54

posted by wap, platform: MAC OS X
这帖子卖哥为啥还没有留言 在等卖哥总结
作者: devliet    时间: 2025-11-26 21:12

posted by wap, platform: Android
引用:
原帖由 @refo  于 2025-11-26 20:49 发表
DXVK是社区开源项目。

但微软把DX12的SHADER文件开源了:https://github.com/microsoft/DirectXShaderCompiler

这个大大加速了社区把DX12转译到VULKAN的进程
好吧,微软公开了dxil文件标准。
但是严格来说这不算开源。因为公开的是标准而不是实现。dxil到机器码的实现,也不是微软做的而是gpu厂商做的,微软也没有什么源代码可以开。

至于开源的DirectXShaderCompiler,steam os用不上。

本帖最后由 devliet 于 2025-11-26 21:16 通过手机版编辑
作者: 卖哥    时间: 2025-11-26 21:39

引用:
原帖由 yonexhb 于 2025-11-26 20:54 发表
posted by wap, platform: MAC OS X
这帖子卖哥为啥还没有留言 在等卖哥总结
本身就是总结性的有必要再总结么,那我做一些补充

DXVK目前是D3D 8、9、10、11的VK实现,更具体来说DXVK最初是D3D的10、11实现,9的实现是合并了D9VK完成的,8则是最近几年完成的
然后wine有个自己的项目VKD3D,是DX12的VK实现,实现的更规范,理论上兼容性更好。
然后V社分支了VKD3D-PROTON,追求运行效率。
再用这些拼出PROTON
作者: ginaamix    时间: 2025-11-26 21:51

posted by wap, platform: Chrome
引用:
原帖由 @devliet  于 2025-11-26 21:12 发表
好吧,微软公开了dxil文件标准。
但是严格来说这不算开源。因为公开的是标准而不是实现。dxil到机器码的实现,也不是微软做的而是gpu厂商做的,微软也没有什么源代码可以开。

至于开源的DirectXShaderCompiler,steam os用不上。

本帖最后由 devliet 于 20251126 21:16 通过手机版编辑
有关系的,光靠dxil spec根本做不到从dxil到spirv的翻译,dxil本身实现就是坨屎山,大量细节都藏在编译器源码里
作者: refo    时间: 2025-11-26 22:12

引用:
原帖由 ginaamix 于 2025-11-26 21:51 发表
posted by wap, platform: Chrome
有关系的,光靠dxil spec根本做不到从dxil到spirv的翻译,dxil本身实现就是坨屎山,大量细节都藏在编译器源码里
任何历史累积多了,都很难避免屎山,尤其是GPU这种极度追求效率,很多代码都说不定是汇编写的

所以,就连INTEL都搞不定这坨屎山,最后直接用了VXDK

[ 本帖最后由 refo 于 2025-11-26 22:16 编辑 ]
作者: iiwang    时间: 2025-11-26 22:12

posted by wap, platform: iPhone
所以,第三个项目,Proton,基本上可以认为 Proton=Wine + DXVK + 一些其他的工作/项目。
有了Proton,你基本上可以在各种Linux(发行)版本下,直接运行Linux游戏了。


这段的最后是不是写错了?
直接运行“windows”游戏,吧?
作者: iiwang    时间: 2025-11-26 22:13

posted by wap, platform: iPhone
补:
感谢分享,涨知识了
作者: lvcha    时间: 2025-11-26 22:17

posted by wap, platform: Firefox
我pc装个啥linux也可以畅玩windows游戏吗?
作者: devliet    时间: 2025-11-26 22:26

posted by wap, platform: Android
编辑掉

本帖最后由 devliet 于 2025-11-26 22:28 通过手机版编辑
作者: ko81e24wy-1    时间: 2025-11-26 22:27

安卓上玩PC游戏的Winlator也是类似的东西,我用870的Y700一代在单位摸鱼玩2K14,暗黑2,实况10和魔兽私服
作者: devliet    时间: 2025-11-26 22:28

posted by wap, platform: Android
引用:
原帖由 @ginaamix  于 2025-11-26 21:51 发表
有关系的,光靠dxil spec根本做不到从dxil到spirv的翻译,dxil本身实现就是坨屎山,大量细节都藏在编译器源码里
就是说靠源语言hlsl的行为去反推确定目标语言dxil的行为么?
相当于靠c语言的规范反推确定汇编指令的功能了。
一般是靠低级语言的实现推导出高级语言的功能吧,反着来比较困难吧。
dxil的spec有这么不堪么,需要靠hlsl反推?gpu厂商实现dxil的时候都拿不到一份明确的spec?

DirectXShaderCompiler是处理hlsl到il的编译的,而steam os不需要编译hlsl。所以steam os不会直接受益于DirectXShaderCompiler。当然,照19楼说的,可以间接受益。
作者: refo    时间: 2025-11-26 23:03

引用:
原帖由 devliet 于 2025-11-26 22:28 发表
posted by wap, platform: Android
就是说靠源语言hlsl的行为去反推确定目标语言dxil的行为么?
相当于靠c语言的规范反推确定汇编指令的功能了。
一般是靠低级语言的实现推导出高级语言的功能吧,反着来比较困难吧 ...
反正INTEL做独立显卡(就是那个A和B系列)的时候,驱动没搞定,后来驱动用了DXVK的成果,对DX11以及更老的游戏,提升了许多效率。
作者: DarthVadar    时间: 2025-11-27 09:10

posted by wap, platform: MAC OS X
我记得去年测试brazzite的结果还是同样amd的apu硬件 windows和brazzite的performance差异很小
作者: odioanatre    时间: 2025-11-27 18:11

记得以前看过一篇类似的,说是转译这玩意最终就是要去动摇微软direct的根基。
作者: refo    时间: 2025-11-27 19:11

引用:
原帖由 odioanatre 于 2025-11-27 18:11 发表
记得以前看过一篇类似的,说是转译这玩意最终就是要去动摇微软direct的根基。
开源社区做这些,技术人员还真不一定有太多想法
作者: richiter    时间: 2025-11-28 12:48

posted by wap, platform: Android
引用:
原帖由 @lvcha  于 2025-11-26 22:17 发表
我pc装个啥linux也可以畅玩windows游戏吗?
sd也是pc啊,不过不兼容的还是不兼容
作者: ginaamix    时间: 2025-11-28 22:32

posted by wap, platform: Chrome
引用:
原帖由 @devliet  于 2025-11-26 22:28 发表
就是说靠源语言hlsl的行为去反推确定目标语言dxil的行为么?
相当于靠c语言的规范反推确定汇编指令的功能了。
一般是靠低级语言的实现推导出高级语言的功能吧,反着来比较困难吧。
dxil的spec有这么不堪么,需要靠hlsl反推?gpu厂商实现dxil的时候都拿不到一份明确的spec?

DirectXShaderCompiler是处理hlsl到il的编译的,而steam os不需要编译hlsl。所以steam os不会直接受益于DirectXShaderCompiler。当然,照19楼说的,可以间接受益。
从dxil翻译到spirv和从dxil翻译到gpu isa不是一回事,dxil是基于老版本llvm ir改的,更贴近硬件指令流,翻译到gpu isa靠spec基本够。而spirv是vulkan另外设计的中间语言,和dxil很多地方差距很大,vk和dx两套标准间的差异又进一步加剧两者的差别,例如dxil的控制流各种goto,但spirv有严格的条件/循环作用域,dxil的binding模型比spirv要宽松得多等等。proton那个项目的作者专门写过篇系列博客讲里面的各种巨坑。
dxil这玩意从一开始就是个设计错误,根本不该基于llvm ir改,开源社区被这玩意恶心了十年,现在微软自己都放弃dxil了。

本帖最后由 ginaamix 于 2025-11-28 22:33 通过手机版编辑




欢迎光临 TGFC Lifestyle (http://tgfcer.com/) Powered by Discuz! 6.0.0