directx-12 - 有没有办法以字符串形式接收来自 DX12 的错误?
问题描述
示例:这是 CreateGraphicsPipelineState 的调试日志,它告诉我出了什么问题:
D3D12 ERROR: ID3D12Device::CreateGraphicsPipelineState: Root Signature doesn't match Vertex Shader: Shader CBV descriptor range (RegisterSpace=0, NumDescriptors=1, BaseShaderRegister=0) is not fully bound in root signature
但是,对 windows FormatMessage(MESSAGE_FROM_SYSTEM...) 的调用将返回完全相同的错误:
The parameter is incorrect.
第一个显然更有用......我们曾经有 dxerr.lib,我们在 DXUT 中有 dxerr.cpp 的源代码。但这不包括 DX12。我看不到任何着色器工具可以检索错误并将其从 API 呈现给用户。
解决方案
这里涉及两种不同的错误/状态信息来源。您从 API 调用返回的错误代码是E_INVALIDARG
,并且您获得了一个好的字符串。这是来自 API 的状态代码。
您在调试输出中看到的描述性消息由您在 API 初始化期间加载的Direct3D 12 调试层发出。一般来说,它是一个可选组件,可能在 API 本身可用时在系统中不可用。
要以编程方式拦截调试输出,您可以
- 利用这个技巧:捕获 OutputDebugString 输出
- 或者,作为调试器附加到您的应用程序并处理记录内容的调试输出事件
推荐阅读
- firebase - 遍历 Firestore 集合求和值上的文档的最佳方法是什么?
- enums - swift 4.2 - 如果var具有有效的枚举值,我如何检查guard
- python - Python: Sort by Nested Dictionary Value (no categories)
- r - 如何使用 fitdist 函数(负二项式)?
- swift - I keep using this same chunk of code over and over. How do I consolidate it?
- ios - Google 助理的深层链接参数
- ios - Casting to object with Codable
- javascript - Positioning of legend in javascript
- kubernetes - 有没有办法配置 Istio 将流量路由到处于终止状态的 POD?
- c# - C#指定父类与接口之间的区别