首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DXGI_ERROR_DEVICE_REMOVED

DXGI_ERROR_DEVICE_REMOVED
EN

Stack Overflow用户
提问于 2017-11-10 15:49:24
回答 1查看 1.6K关注 0票数 1

我使用sharpdx和c#创建一个directx应用程序。它在大多数情况下都能正常工作,但有时我会遇到这样的随机错误:

DXGI_ERROR_DEVICE_REMOVED

我谷歌了一些,但不能罚款的原因,除了它与我的硬盘4400或驱动程序。

当我想要创建一个缓冲区时,就会发生异常。我可以在调试时看到这一点。

有什么我可以忘记和需要关心的想法吗?看起来太随意了。我不实际移除设备ofc。会不会是负载和时钟频率更高的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-10 17:53:32

DirectX应用程序需要在两个基本位置检测和处理“删除的设备”:当您进入Present时,可能会发生这种情况。

代码语言:javascript
复制
HRESULT hr = m_swapChain->Present(1, 0);

// If the device was reset we must completely reinitialize the renderer.
if (hr == DXGI_ERROR_DEVICE_REMOVED || hr == DXGI_ERROR_DEVICE_RESET)
{
    OnDeviceLost();
}
else
{
    DX::ThrowIfFailed(hr);
}

当您调整现有的交换链的大小时,可能会发生这样的情况:

代码语言:javascript
复制
// If the swap chain already exists, resize it, otherwise create one.
if (m_swapChain)
{
    HRESULT hr = m_swapChain->ResizeBuffers(backBufferCount,
        backBufferWidth, backBufferHeight, backBufferFormat, 0);

    if (hr == DXGI_ERROR_DEVICE_REMOVED || hr == DXGI_ERROR_DEVICE_RESET)
    {
        // If the device was removed for any reason, a new device
        // and swap chain will need to be created.
        OnDeviceLost();
    }
    else
    {
        DX::ThrowIfFailed(hr);
    }
}
...

如果在其他情况下遇到DXGI_ERROR_DEVICE_REMOVED,很可能表示是一个内部驱动程序错误,您应该看看是否有一个较新的驱动程序可用。

在遗留的DIrect3D 9中,有一个类似的“设备丢失”的想法,但发生频率要高得多。使用基于DXGI的API (Direct3D9Ex、Direct3D 10等)只有在特定情况下才会移除设备。通常是因为系统在应用程序运行时更新了视频驱动程序。在检测到它之后,您可以通过调用GetDeviceRemovedReason来确定它被删除的原因。

代码语言:javascript
复制
    if (hr == DXGI_ERROR_DEVICE_REMOVED || hr == DXGI_ERROR_DEVICE_RESET)
    {
#ifdef _DEBUG
        char buff[64] = {};
        sprintf_s(buff, "Device Lost on ResizeBuffers: Reason code 0x%08X\n",
        (hr == DXGI_ERROR_DEVICE_REMOVED) ? m_d3dDevice->GetDeviceRemovedReason() : hr);
        OutputDebugStringA(buff);
#endif

        ...

我注意到的另一个例外情况是,如果您在不处于“开发人员模式”的情况下调用ID3D12设备::SetStablePowerState,它将触发删除的设备。他们真的不想让你在“零售”游戏和应用中称它为“零售”功能。

有关更多信息,请参见处理Direct3D 11中删除的设备方案

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47226555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档