4

我有CanvasControl一个 UWP 应用程序,我注意到当我将 Surface 单独放置一段时间并自动进入睡眠状态时,CanvasControl恢复后不再工作。先前绘制的位图现在是空白的。

我尝试在 Visual Studio 2015 中模拟挂起/恢复,但这似乎不会导致问题。它恢复正常。

我感觉它与CanvasDevice.DeviceLost事件有关,尽管我通过事件来管理它,但我CanvasControl.CreateResources找不到轻松测试它的方法。

我尝试了以下方法:

// This throws an exception. Not allowed to do this.
myCanvas.Device.RaiseDeviceLost(); 

// and this doesn't report a device lost, but myCanvas becomes unusable.
myCanvas.Device.Dispose();

有没有办法以编程方式调用CanvasDevice.DeviceLost事件?我怎么能伪造它?

4

2 回答 2

10

无法使用 API 触发设备丢失事件,但您可以使用命令行工具:

DXCap.exe -forcetdr

您需要的 DXCap 版本是 Windows 10 图形工具包的一部分,适用于 Win10 build 10586 或更高版本: https ://msdn.microsoft.com/en-us/library/mt125501.aspx#InstallGraphicsTools

安装 VSGD 后,您可以在 windows\system32 目录中找到 DXCap。

不幸的是,这个选项似乎(尚未)记录在案,但来自命令行:

  -forcetdr          Don't capture or replay, but simply force a GPU Timeout
                     Detection and Recovery event, then exit.
于 2016-02-25T02:26:33.633 回答
0

@Simon 描述的内容记录在页面底部:

在 Direct3D 11 中处理设备删除方案

从上面的链接直接引用:

Visual Studio 的开发人员命令提示符支持命令行工具“dxcap”,用于与 Visual Studio 图形诊断相关的 Direct3D 事件捕获和回放。您可以在应用程序运行时使用命令行选项“-forcetdr”,这将强制执行 GPU 超时检测和恢复事件,从而触发 DXGI_ERROR_DEVICE_REMOVED 并允许您测试错误处理代码。

于 2017-01-08T07:53:12.050 回答