文章摘要
作者在为Space Station 14游戏开发ARM64版本时,遇到游戏在Windows ARM64上崩溃的问题。尽管在开发环境中运行正常,但在实际设备上测试时,游戏在初始化后立即崩溃,日志也异常中断。作者尝试使用WinDbg进行调试,但问题仍未解决。
文章总结
标题:DXGI调试:微软把我列入了名单
主要内容:
作者在开发《Space Station 14》的ARM64版本时,遇到了游戏在Windows ARM64上崩溃的问题。经过长时间的调试,发现问题出在微软的DXGI(DirectX图形基础设施)上。具体来说,微软在DXGI中使用了“detour”(钩子)技术,修改了USER32!GetDC函数的实现,导致游戏在ARM64平台上崩溃。
详细过程:
问题发现:作者在ARM64平台上测试游戏时,发现游戏在初始化SDL后崩溃,且日志为空。通过WinDbg调试工具,发现崩溃发生在
USER32!GetDC函数中,且出现了非法指令。深入调试:作者进一步分析发现,微软在DXGI中使用了detour技术,修改了
GetDC函数的实现。这种修改在ARM64平台上导致了问题,而在x64平台上则没有影响。问题根源:作者通过调试发现,微软的“Optimizations for windowed games”功能(强制启用flip模型)在ARM64平台上存在问题。该功能通过detour技术修改了
GetDC函数,导致游戏崩溃。解决方案:作者发现,只有当游戏的可执行文件名为
SS14.Loader.exe时,才会触发这个问题。微软的优化功能只对特定名单中的游戏生效,而《Space Station 14》被列入了这个名单,导致了崩溃。后续处理:作者决定暂时推迟《Space Station 14》的Windows ARM64官方支持,直到微软修复DXGI的问题,或者作者重写渲染器以放弃OpenGL。
总结:
作者通过详细的调试过程,揭示了微软在DXGI中使用的detour技术在ARM64平台上导致的问题。由于微软的优化功能只对特定名单中的游戏生效,而《Space Station 14》被列入了这个名单,导致了游戏在ARM64平台上崩溃。作者决定暂时推迟ARM64版本的支持,等待微软修复问题或重写渲染器。
评论总结
评论内容总结:
标题与内容的关系
- 评论1认为标题有“点击诱饵”之嫌,但文章内容不错,并指出API级软件中普遍存在类似问题。
- 引用:“The title is a bit clickbait but nice article ;) This is widespread in API-level software...”
- 引用:“...you can find interesting stuff by renaming your exe to Quake, or FIFA, or Minecraft or whatever.”
程序名称与崩溃问题
- 评论2和评论7提到程序名称(如SS14.Loader.exe)可能导致崩溃,建议使用不同的命名策略(如GUID)来避免兼容性问题。
- 引用:“Could you have a SS14.Loader.arm.exe for arm? Then the exe name wouldn't match...”
- 引用:“...sometimes i consider using using GUIDs in exe names at build time to avoid such lists :-P.”
Windows开发的复杂性
- 评论3表达了对Windows开发复杂性的感慨,认为自己很幸运不必面对这些问题。
- 引用:“When I read about stuff like this it makes me feel lucky never having had to do Windows development.”
兼容性列表与问题反馈
- 评论4希望Windows能禁用兼容性列表,并允许用户向开发者报告问题,认为这可能是Linux思维的影响。
- 引用:“I would like to disable these compatibility lists on Windows and to actually be able to report any issues and crashes to devs.”
DirectX与Windows优化策略的问题
- 评论5详细分析了DirectX团队通过Detour技术实现优化的策略,指出其在Windows 11 ARM64上的问题,并提到全屏优化的历史问题。
- 引用:“This is due to an overall odd strategy by the DirectX graphics team, which is to implement many of the optimization and enhancement features by Detour-ing API calls in the OS.”
- 引用:“...the mechanism was nearly undocumented and had no opt-out besides a manual user compatibility checkbox.”
ARM64 Windows设备上的游戏开发
- 评论6对作者在ARM64 Windows设备上开发游戏的努力表示赞赏,并质疑有多少人会在ARM64设备上玩游戏。
- 引用:“Man I gotta give this person props, that is a LOT of effort to get your game to run native ARM64 on Windows.”
- 引用:“How many people out there are trying to game on ARM64 Windows devices?”
总结:评论主要围绕Windows开发中的兼容性问题、DirectX优化策略的复杂性以及ARM64设备上的游戏开发展开,既有对问题的分析,也有对开发者努力的赞赏。