有没有办法从字符串中接收DX12的错误?

时间:2019-03-05 13:31:59

标签: directx-12

示例:这是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中检索错误并将其呈现给用户。

1 个答案:

答案 0 :(得分:0)

此处涉及两种不同的错误/状态信息源。您从API调用返回的错误代码为E_INVALIDARG,并为此获得了一个不错的字符串。这是API的状态代码。

您在调试输出中看到的描述性消息由Direct3D 12 debug layer发出,您在API初始化期间加载了该消息。一般来说,它是可选组件,并且在API本身可用的情况下在系统中可能不可用。

要以编程方式拦截调试输出,您可以