GPU crash detected: - Device 0 Removed: DXGI_ERROR_DEVICE_HUNG
错误信息
[2026.04.19-03.04.57:621][732]LogD3D12RHI: Error: GPU crash detected:
- Device 0 Removed: DXGI_ERROR_DEVICE_HUNG
AI 解决方案
报错分析报告
1.错误翻译
原文:Device 0 Removed: DXGI_ERROR_DEVICE_HUNG
译文:设备0已移除:DXGI_ERROR_DEVICE_HUNG(DirectX图形基础设施错误·设备挂起)
2. 原因分析
LogD3D12RHI。 3. 解决方案
需实现D3D12设备丢失恢复机制,以下是C++核心代码示例:
#include <d3d12.h>
#include <dxgi1_4.h>
#include <wrl/client.h>
using Microsoft::WRL::ComPtr;
// 设备丢失时的恢复流程
void HandleDeviceLost(ComPtr<IDXGIAdapter>& adapter, ComPtr<ID3D12Device>& oldDevice) {
// 1. 释放旧设备关联资源(命令队列、资源、视图等)
CleanupDeviceResources(oldDevice.Get());
// 2. 重新创建设备(保持原适配器)
ComPtr<ID3D12Device> newDevice;
HRESULT hr = D3D12CreateDevice(
adapter.Get(),
D3D_FEATURE_LEVEL_11_0,
IID_PPV_ARGS(&newDevice)
);
if (FAILED(hr)) throw std::runtime_error("Device recreation failed");
// 3. 重建核心组件(命令队列、交换链、PSO等)
RecreateCommandQueue(newDevice.Get());
RecreateSwapChain(newDevice.Get());
RecreatePipelineStateObjects(newDevice.Get());
// 4. 恢复应用状态(重新加载纹理/缓冲区)
RestoreAppResources(newDevice.Get());
}
// 调用时机:检测到DXGI_ERROR_DEVICE_HUNG时
if (hr == DXGI_ERROR_DEVICE_HUNG) {
HandleDeviceLost(m_adapter, m_device);
}
4.️ 预防措施
IDXGISwapChain::GetLastPresentCount或捕获DXGI_ERROR_DEVICE_*错误码,主动触发恢复。 ---
注:若需更具体的语言/框架适配,请补充完整报错栈信息。