Hacker News 中文摘要

RSS订阅

DXGI debugging: Microsoft put me on a list

文章摘要

作者在为Space Station 14游戏开发ARM64版本时,遇到游戏在Windows ARM64上崩溃的问题。尽管在开发环境中运行正常,但在实际设备上测试时,游戏在初始化后立即崩溃,日志也异常中断。作者尝试使用WinDbg进行调试,但问题仍未解决。

文章总结

标题:DXGI调试:微软把我列入了名单

主要内容:

作者在开发《Space Station 14》的ARM64版本时,遇到了游戏在Windows ARM64上崩溃的问题。经过长时间的调试,发现问题出在微软的DXGI(DirectX图形基础设施)上。具体来说,微软在DXGI中使用了“detour”(钩子)技术,修改了USER32!GetDC函数的实现,导致游戏在ARM64平台上崩溃。

详细过程:

  1. 问题发现:作者在ARM64平台上测试游戏时,发现游戏在初始化SDL后崩溃,且日志为空。通过WinDbg调试工具,发现崩溃发生在USER32!GetDC函数中,且出现了非法指令。

  2. 深入调试:作者进一步分析发现,微软在DXGI中使用了detour技术,修改了GetDC函数的实现。这种修改在ARM64平台上导致了问题,而在x64平台上则没有影响。

  3. 问题根源:作者通过调试发现,微软的“Optimizations for windowed games”功能(强制启用flip模型)在ARM64平台上存在问题。该功能通过detour技术修改了GetDC函数,导致游戏崩溃。

  4. 解决方案:作者发现,只有当游戏的可执行文件名为SS14.Loader.exe时,才会触发这个问题。微软的优化功能只对特定名单中的游戏生效,而《Space Station 14》被列入了这个名单,导致了崩溃。

  5. 后续处理:作者决定暂时推迟《Space Station 14》的Windows ARM64官方支持,直到微软修复DXGI的问题,或者作者重写渲染器以放弃OpenGL。

总结:

作者通过详细的调试过程,揭示了微软在DXGI中使用的detour技术在ARM64平台上导致的问题。由于微软的优化功能只对特定名单中的游戏生效,而《Space Station 14》被列入了这个名单,导致了游戏在ARM64平台上崩溃。作者决定暂时推迟ARM64版本的支持,等待微软修复问题或重写渲染器。

评论总结

评论内容总结:

  1. 标题与内容的关系

    • 评论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. 程序名称与崩溃问题

    • 评论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.”
  3. Windows开发的复杂性

    • 评论3表达了对Windows开发复杂性的感慨,认为自己很幸运不必面对这些问题。
    • 引用:“When I read about stuff like this it makes me feel lucky never having had to do Windows development.”
  4. 兼容性列表与问题反馈

    • 评论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.”
  5. 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.”
  6. 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设备上的游戏开发展开,既有对问题的分析,也有对开发者努力的赞赏。