JmCk 2024-06-15 16:06 采纳率: 25%
浏览 5

DIrect12光追问题

执行 commandList4->DispatchRays(&dispatchDesc);后调用 swapChain1->Present(1, 0);出现以下错误:

0x00007FFAC434BA99 处(位于1.exe 中)引发的异常: Microsoft C++ 异常: std::bad_alloc,位于内存位置 0x000000684ECFBAF8 处。

onecore\windows\feedback\core\werdll\lib\reportstore.cpp(618)\wer.dll!00007FFAC1C6B51F: (caller: 00007FFAC1CBB65A) LogHr(1) tid(30fc) 80004001 尚未实现
    Msg:[CReportStore::Prune: MaxReportCount=500 MaxSizeInMb=0] [CReportStore::Prune]
onecore\windows\feedback\core\werdll\lib\reportstore.cpp(700)\wer.dll!00007FFAC1C6B694: (caller: 00007FFAC1CBB65A) LogHr(2) tid(30fc) 80004001 尚未实现
    Msg:[Deleting report. Path: \\?\C:\ProgramData\Microsoft\Windows\WER\ReportArchive\NonCritical_PerfWatsonTcdb_688f135dd185f2a8133a474a2518efc6ce6cc4a_00000000_5cee84ff-8a5b-42a8-9cac-ecbe186d3ed7] [CReportStore::Prune]
onecore\windows\feedback\core\werdll\lib\reportstore.cpp(1194)\wer.dll!00007FFAC1C6345B: (caller: 00007FFAC1C784E8) LogHr(3) tid(30fc) 80004001 尚未实现
    Msg:[Report key is: '\\?\C:\ProgramData\Microsoft\Windows\WER\ReportArchive\NonCritical_PerfWatsonTcdb_688f135dd185f2a8133a474a2518efc6ce6cc4a_00000000_5cee84ff-8a5b-42a8-9cac-ecbe186d3ed7', subpath is 'NonCritical_PerfWatsonTcdb_688f135dd185f2a8133a474a2518efc6ce6cc4a_00000000_5cee84ff-8a5b-42a8-9cac-ecbe186d3ed7'] [CReportStore::StoreKeyToStorePathSafe]
onecore\windows\feedback\core\werdll\lib\reportstore.cpp(1152)\wer.dll!00007FFAC1C787F7: (caller: 00007FFAC1C6B6C6) ReturnHr(1) tid(30fc) 80070005 拒绝访问。
    [CReportStore::DeleteReportFromStore]
onecore\windows\feedback\core\werdll\lib\reportstore.cpp(757)\wer.dll!00007FFAC1C6B7B6: (caller: 00007FFAC1CBB65A) LogHr(4) tid(30fc) 80070005 拒绝访问。
    [CReportStore::Prune]
onecore\windows\feedback\core\werdll\lib\reportstore.cpp(700)\wer.dll!00007FFAC1C6B694: (caller: 00007FFAC1CBB65A) LogHr(5) tid(30fc) 80004001 尚未实现
    Msg:[Deleting report. Path: \\?\C:\ProgramData\Microsoft\Windows\WER\ReportArchive\NonCritical_PerfWatsonTcdb_688f135dd185f2a8133a474a2518efc6ce6cc4a_00000000_de511427-2916-4bfa-ae30-c7990d398564] [CReportStore::Prune]
onecore\windows\feedback\core\werdll\lib\reportstore.cpp(1194)\wer.dll!00007FFAC1C6345B: (caller: 00007FFAC1C784E8) LogHr(6) tid(30fc) 80004001 尚未实现
    Msg:[Report key is: '\\?\C:\ProgramData\Microsoft\Windows\WER\ReportArchive\NonCritical_PerfWatsonTcdb_688f135dd185f2a8133a474a2518efc6ce6cc4a_00000000_de511427-2916-4bfa-ae30-c7990d398564', subpath is 'NonCritical_PerfWatsonTcdb_688f135dd185f2a8133a474a2518efc6ce6cc4a_00000000_de511427-2916-4bfa-ae30-c7990d398564'] [CReportStore::StoreKeyToStorePathSafe]
onecore\windows\feedback\core\werdll\lib\reportstore.cpp(1152)\wer.dll!00007FFAC1C787F7: (caller: 00007FFAC1C6B6C6) ReturnHr(2) tid(30fc) 80070005 拒绝访问。
    [CReportStore::DeleteReportFromStore]
onecore\windows\feedback\core\werdll\lib\reportstore.cpp(757)\wer.dll!00007FFAC1C6B7B6: (caller: 00007FFAC1CBB65A) LogHr(7) tid(30fc) 80070005 拒绝访问。
    [CReportStore::Prune]
onecore\windows\feedback\core\werdll\lib\reportstore.cpp(700)\wer.dll!00007FFAC1C6B694: (caller: 00007FFAC1CBB65A) LogHr(8) tid(30fc) 80004001 尚未实现
    Msg:[Deleting report. Path: \\?\C:\ProgramData\Microsoft\Windows\WER\ReportArchive\Critical_10.0.19041.3025__2013ccf7dd2c6a38017706ea8bcb9e9b5a68d_00000000_193833f9-bc4a-45e7-bf59-56fbeb4117d4] [CReportStore::Prune]
onecore\windows\feedback\core\werdll\lib\reportstore.cpp(1194)\wer.dll!00007FFAC1C6345B: (caller: 00007FFAC1C784E8) LogHr(9) tid(30fc) 80004001 尚未实现
    Msg:[Report key is: '\\?\C:\ProgramData\Microsoft\Windows\WER\ReportArchive\Critical_10.0.19041.3025__2013ccf7dd2c6a38017706ea8bcb9e9b5a68d_00000000_193833f9-bc4a-45e7-bf59-56fbeb4117d4', subpath is 'Critical_10.0.19041.3025__2013ccf7dd2c6a38017706ea8bcb9e9b5a68d_00000000_193833f9-bc4a-45e7-bf59-56fbeb4117d4'] [CReportStore::StoreKeyToStorePathSafe]
onecore\windows\feedback\core\werdll\lib\reportstore.cpp(1152)\wer.dll!00007FFAC1C787F7: (caller: 00007FFAC1C6B6C6) ReturnHr(3) tid(30fc) 80070005 拒绝访问。
    [CReportStore::DeleteReportFromStore]
onecore\windows\feedback\core\werdll\lib\reportstore.cpp(757)\wer.dll!00007FFAC1C6B7B6: (caller: 00007FFAC1CBB65A) LogHr(10) tid(30fc) 80070005 拒绝访问。
    [CReportStore::Prune]
……
  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-15 16:06
    关注

    引自免费微信小程序:皆我百晓生

    遇到std::bad_alloc异常通常意味着在尝试分配内存时失败了,这可能是由于系统内存不足、内存碎片化严重或是分配请求过大导致的。在DirectX 12的光线追踪场景下,这个问题可能与资源(如Shader Resource Views, Unordered Access Views等)的创建和管理有关,尤其是当大量资源同时存在时。

    解决方案

    1. 检查资源管理

    确保你正确地管理了所有资源的生命周期。释放不再使用的资源可以减少内存压力。例如,在每次渲染结束后,检查并释放任何不再需要的缓冲区或纹理。

    2. 优化资源使用

    • 重用资源:尽可能重用现有的资源,而不是在每次渲染帧时都创建新的资源。
    • 减少纹理和缓冲区大小:检查是否可以降低纹理分辨率或减少不必要的顶点数据。
    • 使用适当的格式:选择更节省空间的纹理格式,比如压缩格式。

    3. 增加交换链缓冲区数量

    尝试增加swapChain1->Present方法中的缓冲区数量,从默认的1增加到更高的值(例如2或3),这可以提供更多的回旋余地,尤其是在多线程渲染或高负载情况下。

    4. 内存分析

    使用内存分析工具(如Visual Studio的Performance Profiler或第三方工具如Valgrind)来检查你的应用程序是否存在内存泄漏或过度消耗的问题。

    5. 调整光线追踪设置

    • 减少光线发射数量:如果光线追踪算法过于复杂,考虑减少每像素发射的光线数量。
    • 优化命中程序:确保命中程序尽可能高效,避免不必要的计算或资源读取。

    6. 硬件限制

    确认你的GPU是否有足够的VRAM来处理光线追踪任务,以及CPU是否有足够的RAM来支持操作系统和其他运行的应用程序。

    7. 代码示例

    对于资源管理的部分,你可以考虑使用以下伪代码来指导你的资源释放逻辑:

    // 在渲染循环结束时
    for (auto& resource : resourcesToRelease) {
        resource->Release();
    }
    resourcesToRelease.clear();
    
    // 在需要的地方添加资源到释放列表
    void addResourceToRelease(ID3D12Resource* resource) {
        resourcesToRelease.push_back(resource);
    }
    

    这个列表应该在每个渲染帧开始时清空,并且在适当的位置添加资源到释放队列中。

    8. 日志和调试信息

    关于提供的日志,它们主要涉及到Windows错误报告(WER)服务试图清理旧的错误报告,但遇到了权限问题。这通常与应用程序崩溃无关,而是操作系统内部的清理过程。然而,如果你的程序频繁崩溃,这可能会导致WER服务的文件管理出现问题。确保你的程序尽可能稳定,减少崩溃的发生。

    如果上述步骤都不能解决问题,你可能需要进一步细化你的问题描述,包括但不限于你的系统配置、使用的DirectX版本、以及任何特定的编译器或运行时设置。这样能帮助更精确地定位问题所在。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月15日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见