我非常喜欢基于几个 DirectX 工具包示例构建的 DirectX 12 桌面 x64 应用程序,但现在还支持用于定向和全向阴影、动态反射、硬件实例化粒子效果系统、FBX 模型骨骼动画的自定义着色器和景深后处理。
在万圣节,Windows Update 将我的系统(英特尔酷睿 i7[第 8 代]/GeForce GTX1050)升级到了 Windows 11。当我运行我的项目时,我收到了以下“源不可用”窗口形式的令人毛骨悚然的惊喜:
停止调试后,应用程序在Present()
调用DeviceResources.cpp时崩溃并生成以下错误:
D3D12 ERROR: ID3D12CommandQueue::Present: Resource state (0x800: D3D12_RESOURCE_STATE_COPY_SOURCE) (promoted from COMMON state) of resource (0x0000011BD5330080:'Render target 0') (subresource: 0) must be in COMMON state when transitioning to use in a different Command List type, because resource state on previous Command List type : D3D12_COMMAND_LIST_TYPE_COPY, is actually incompatible and different from that on the next Command List type : D3D12_COMMAND_LIST_TYPE_DIRECT. [ RESOURCE_MANIPULATION ERROR #990: RESOURCE_BARRIER_MISMATCHING_COMMAND_LIST_TYPE]
D3D12: **BREAK** enabled for the previous message, which was: [ ERROR RESOURCE_MANIPULATION #990: RESOURCE_BARRIER_MISMATCHING_COMMAND_LIST_TYPE ]
Exception thrown at 0x00007FFA0F6A466C (KernelBase.dll) in DXTK12 Game.exe: 0x0000087A (parameters: 0x0000000000000001, 0x00000014297FC640, 0x00000014297FE420).
Unhandled exception at 0x00007FFA0F6A466C (KernelBase.dll) in DXTK12 Game.exe: 0x0000087A (parameters: 0x0000000000000001, 0x00000014297FC640, 0x00000014297FE420).
这在 Windows 10 中从未发生过,而且这种崩溃是不稳定的。我的游戏配置为以无边框全屏模式启动,有时会在崩溃前运行几秒钟。如果我有时间 Alt+Enter 进入窗口模式,应用程序仍然会崩溃。
我已更新我的 Nvidia 驱动程序并将项目指向最新的 Windows 11 SDK 版本 (10.0.22000.0),但问题仍然存在。
经过一番谷歌搜索后,有证据表明存在一个已知问题,涉及 Windows 11 上不稳定的 DXGI/WDM 行为,用户在模拟全屏(即无边框窗口)模式下运行游戏时报告了该问题。崩溃后我也遇到了错误的 Alt+Tab 窗口切换行为,但这似乎已通过图形驱动程序更新修复。
是否有其他开发人员在 Windows 11 上遇到过 DirectX 12 的稳定性和/或性能问题?还是我应该坐下来等待未来的 Windows 更新以稳定新操作系统?