如何在D3D9中调试shader

Posted skyman_2001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在D3D9中调试shader相关的知识,希望对你有一定的参考价值。

 转载请注明:来自http://blog.csdn.net/skyman_2001

步骤如下:
(1)从DirectX SDK中安装shader调试器;
(2)在“DirectX Properties(DirectX 属性)”对话框中选择“Use Debug Version of Direct3D”和“Enable
Shader Debugger”单选框。(可通过“开始—>控制面板—>DirectX”打开该对话框,这两个单选框位于“Direct3D”标签页中);
(3)在程序中设置DeviceType为D3DDEVTYPE_REF(因为VS和PS只能在特定的设备上才能被调试,见表1)。并且在D3DXCreateEffectFromFile()函数中将参数Flags设为D3DXSHADER_DEBUG|D3DXSHADER_SKIPOPTIMIZATION。(D3DXSHADER_SKIPOPTIMIZATION——通知编译器不要执行任何代码优化。实践中,这个选项应该仅用于调试,因为这种情况下你不希望编译器以任何方式修改代码);
(4)在顶点shader或像素shader中设置一个断点;
(5)在Visual Studio .NET中选择“Debug—>Direct3D—>Start D3D”(Ctrl+Alt+F5)来运行应用程序;
(6)通过“Debug—>Window—>Disassembly”还可以看到汇编代码,而通过“Debug—>Direct3D—>RenderTargets”则可以看到渲染目标,通过“Debug—>Direct3D—>Textures”可以查看纹理贴图。
                                                         表1

关于调试shader的详情请参见MSDN的教程:
Getting Started Debugging Shaders (Direct3D 9)

HAL DeviceHAL DeviceREF DeviceREF Device
ShaderSWVPHWVP or pure HWVPSWVPHWVP or pure HWVP
Vertex ShaderYes, with the debug runtimeNoYes, with the debug runtimeNo
Pixel ShaderNoNoYesYes

以上是关于如何在D3D9中调试shader的主要内容,如果未能解决你的问题,请参考以下文章

如何系统的学习 Unity 3D 中的 shader 编写

如何让 android 项目的 shader 可以被 RenderDoc 调试

如何让 android 项目的 shader 可以被 RenderDoc 调试

如何学习shader

Unity,如何在Shader Graph中设置shader标签“DisableBatching”=“True”?

如何在shader中使用自定义函数