3

示例:这是 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 呈现给用户。

4

1 回答 1

0

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

您在调试输出中看到的描述性消息由您在 API 初始化期间加载的Direct3D 12 调试层发出。一般来说,它是一个可选组件,可能在 API 本身可用时在系统中不可用。

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

于 2019-11-06T20:39:46.057 回答