GPU crash detected: - Device 0 Removed: DXGI_ERROR_DEVICE_HUNG [2026.04.16-10.41...

2026年04月20日 00:06 processing

错误信息

[2026.04.16-10.40.48:586][ 61]LogAkAudio: Warning: Failed to post invalid AkAudioEvent. [2026.04.16-10.41.01:585][175]LogD3D12RHI: Error: GPU crash detected: - Device 0 Removed: DXGI_ERROR_DEVICE_HUNG [2026.04.16-10.41.01:586][175]LogD3D12RHI: Error: Shader diagnostic messages and asserts: Device: 0, Queue 3D: No shader diagnostics found for this queue. Device: 0, Queue Copy: No shader diagnostics found for this queue. Device: 0, Queue Compute: No shader diagnostics found for this queue. [2026.04.16-10.41.01:587][175]LogD3D12RHI: Error: DRED: No breadcrumb head found. [2026.04.16-10.41.01:587][175]LogD3D12RHI: Error: DRED: No PageFault data. [2026.04.16-10.41.01:587][175]LogD3D12RHI: Error: Video Memory Stats from frame ID 8: [2026.04.16-10.41.01:587][175]LogD3D12RHI: Error: Local Budget: 0.00 MB [2026.04.16-10.41.01:588][175]LogD3D12RHI: Error: Local Used: 0.00 MB [2026.04.16-10.41.01:588][175]LogD3D12RHI: Error: System Budget: 0.00 MB [2026.04.16-10.41.01:588][175]LogD3D12RHI: Error: System Used: 0.00 MB [2026.04.16-10.41.01:595][175]LogD3D12RHI: Error: GPU发生崩溃,或D3D设备已移除。 检查日志中的GPU状态信息。

AI 解决方案

报错分析报告

1.错误翻译


原文1:Failed to post invalid AkAudioEvent.
译文1:无法发布无效的AkAudioEvent。

原文2:GPU crash detected: Device 0 Removed: DXGI_ERROR_DEVICE_HUNG
译文2:检测到GPU崩溃:设备0已移除,错误码DXGI_ERROR_DEVICE_HUNG。

2. 原因分析


  • AkAudio警告:尝试发布未正确初始化/已释放的AkAudioEvent对象(事件无效)。

  • D3D12 GPU崩溃:GPU执行挂起(Device Hung)导致D3D12设备被系统移除,根源可能是Shader错误、显存溢出、驱动不兼容或硬件过热;日志中Shader诊断无结果、DRED无有效数据、显存统计异常(均为0.00 MB),说明崩溃时状态未捕获。
  • 3.解决方案


    #### 修复AkAudio无效事件发布
    // Unreal Engine C++示例:验证事件有效性后发布
    #include "AkAudioDevice.h"
    
    void PlayValidAkEvent(UObject* WorldContextObject, const FString& EventName) {
        FAkAudioDevice* AkDevice = FAkAudioDevice::Get();
        if (!AkDevice) return;
    
        // 加载事件所在的Bank(确保已预加载)
        AkDevice->LoadBank(TEXT("GameSounds"), AK_DEFAULT_POOL_ID);
        
        // 获取有效事件ID(替换为实际事件名)
        AkGameObjectID GameObjID = GetWorld()->GetFirstPlayerController()->GetViewTarget()->GetUniqueID();
        AkPlayingID PlayingID = AkDevice->PostEvent(EventName, GameObjID);
        
        if (PlayingID == AK_INVALID_PLAYING_ID) {
            UE_LOG(LogAkAudio, Error, TEXT("发布AkAudioEvent失败:事件[%s]无效"), *EventName);
        }
    }
    

    #### 缓解D3D12 GPU崩溃

    // 示例:显存使用监控与预警(Unreal D3D12RHI)
    #include "D3D12RHIPrivate.h"
    
    void CheckVideoMemoryBudget(FD3D12Device* D3DDevice) {
        IDXGIAdapter3* Adapter = D3DDevice->GetAdapter();
        DXGI_QUERY_VIDEO_MEMORY_INFO MemInfo;
        
        // 查询本地显存状态
        HRESULT hr = Adapter->QueryVideoMemoryInfo(0, DXGI_MEMORY_SEGMENT_GROUP_LOCAL, &MemInfo);
        if (SUCCEEDED(hr)) {
            float UsageRatio = (float)MemInfo.CurrentUsage / MemInfo.Budget;
            if (UsageRatio > 0.9f) {
                UE_LOG(LogD3D12RHI, Warning, TEXT("显存使用超90%!当前%.2fMB/预算%.2fMB"), 
                    MemInfo.CurrentUsage / (1024*1024), MemInfo.Budget / (1024*1024));
                // 触发资源释放(如卸载非必要纹理)
            }
        }
    }
    

    4.️ 预防措施


  • 最佳实践1:用RAII类(如TSharedPtr<AkAudioEvent>)管理音频事件,发布前调用AK::SoundEngine::IsEventIDValid验证有效性。

  • 最佳实践2:在D3D12项目中启用RenderDoc/PIX图形调试,定期捕获帧分析Shader编译结果与显存占用;保持显卡驱动为最新稳定版。

  • 推荐工具:Unreal Session Frontend(GPU性能监控)、NVIDIA Nsight Graphics(GPU挂起分析)。