DirectX-XAML互操作:DXGI_ERROR_DRIVER_INTERNAL_ERROR

时间:2015-09-19 03:08:53

标签: xaml directx uwp

我正在使用official Direct X and XAML interop tutorial在Windows应用商店应用中关注Direct X - XAML互操作VirtualSurfaceImageSource。我在这里遇到的问题是,当应用程序在暂停不活动后恢复时,渲染区域会变黑。在Visual Studio中追逐问题表明它在

行失败
HRESULT beginDrawHR = m_vsisNative->BeginDraw(updateRect, &bigSurface, &offset);

如教程中所示。 HRESULT消息说

GPU设备实例已被暂停。使用GetDeviceRemovedReason确定适当的操作。

执行它所说的内容,即调用GetDeviceRemovedReason,我得到DXGI_ERROR_DRIVER_INTERNAL_ERROR作为设备被删除的原因我不知道要解决。对于原始HRESULT,我认为暂停GPU实例的原因是由于应用程序即将暂停时{3}设置了Trim(否则,应用程序将不会通过认证)。当它恢复时,不知何故GPU实例不会恢复。因此,绘图代码在恢复后永远不会执行,因为BeginDraw永远不会成功,从而产生黑色画布。删除修剪代码,它在恢复应用程序时完美呈现内容但过了一会儿,我获得了对使用CreateSolidColorBrush创建的画笔等公共资源的NULL指针访问。

不幸的是,没有提示如何处理教程中删除的设备:

HRESULT beginDrawHR = m_vsisNative->BeginDraw(updateRect, &bigSurface, &offset);
if (beginDrawHR == DXGI_ERROR_DEVICE_REMOVED || beginDrawHR == DXGI_ERROR_DEVICE_RESET)
{
    // device changed
}
else
{
    // draw to IDXGISurface
}

我该如何解决错误?

1 个答案:

答案 0 :(得分:0)

我已经下载了VirtualSurfaceImageSource sample我认为你正在关注的那个。我在不同的时间间隔内多次恢复应用程序。但是,我无法重现你的问题。那么请你准备一个更详细的示例代码来帮助我们重现问题吗?我还有几个问题:您是否在其他计算机上尝试过您的程序?你能成功运行原始MSDN样本吗?你能成功恢复其他DX程序吗?

实际上,当我们使用VirtualSurfaceImageSource时,恢复时不需要额外的操作,因为应用程序只是可视化更新。这在示例程序(App :: OnResuming)中有明确说明。应用程序的激活逻辑将确保正确恢复应用程序保存状态。也许您最好首先使用示例文件交叉检查程序中的设备初始过程。

根据我的理解,您所面临的恢复问题可能更可能与图形驱动程序有关。修剪后无法正常重新加载。您使用的是哪种显示卡?您可以访问其网站获取最新更新吗?

目前,您的程序的解决方法可能是在恢复时仔细检查设备连接状态。但这可能需要大量代码才能在重新连接后保持应用程序状态。

如果您有任何更新,请与我们联系。