用Pix调试HLSL

很多学Directx特别初学者最头痛应该是shader的调试问题了。一般的编译器包括vs都不支持shader的调试。还好微软出了个Pix,其功能相当强大,而不仅仅是debug。这里我们入门主要总结下其debug的功能。

    Pix的调试原理和一般的调试很不一样,它是先把程序运行一遍,然后把中间每一步所有的shader变量,寄存器等等都记录下来,然后再调出来看,以此模拟Directx的过程。

    在用Pix调试shader代码前,要注意下几个问题。

    1是必须在Directx11的编译hlsl函数加上下面的几行代码(注意加粗部分代码):

DWORD dwShaderFlags=D3DCOMPILE_ENABLE_STRICTNESS;

#if defined( DEBUG ) || defined( _DEBUG )

// Set the D3DCOMPILE_DEBUG flag to embed debug information in the shaders.

// Setting this flag improves the shader debugging experience, but still allows 

// the shaders to be optimized and to run exactly the way they will run in 

// the release configuration of this program.

dwShaderFlags |= D3DCOMPILE_DEBUG;

dwShaderFlags |= D3DCOMPILE_SKIP_OPTIMIZATION;

#endif

hr=D3DX11CompileFromFile(L"basicEffect.hlsl",pDefines,NULL,szEntryPoint,szShaderModel,dwShaderFlags,NULL,NULL,ppBlobOut,&pErrorBlob,NULL);

如果是Directx10,则变成:

DWORD shaderFlags = D3D10_SHADER_ENABLE_STRICTNESS;

#if defined( DEBUG ) || defined( _DEBUG )

    shaderFlags |= D3D10_SHADER_DEBUG;

shaderFlags |= D3D10_SHADER_SKIP_OPTIMIZATION;

#endif

    2是注意文件的路径问题,比如hlsl,纹理等。因为Pix默认这些文件是和Exe放在同一个文件夹里面。在读入这些文件时,如果是用系统的绝对路径,那么问题不大。否则就把这些文件放到和exe同一个文件夹下。

    然后我们开始使用Pix了。打开Pix,打开file->New Experiment,选择要debugprogram:

   

    这里我们选了A single-frame模式,方便debug

    点击start experiment

    打开选中的程序后按下F12就可以捕获当前帧的所有数据。关掉选中的程序,PIX就会自动进入编辑调试模式

    这里我们可以选择进入Render tab针对当前帧的某一像素进行debug;或者进入Mesh tab看顶点数据,包括顶点数据在进入vertex shader前后,进入geometry shader后的变化(这个必须在draw calls命令下才可以看)。

  先试试选择进入Mesh tab:随便选中一个Draw()命令,点击Mesh,就可以看到以下各个顶点的数据,截图如下:

     点击PostVSVTX或者PostGSPrim,就可以进入计算这个顶点或者Primitiveshader代码,这里我们选择了Prim下的P0,进入了调试P0Geometry Shader状态:

    然后我们就可以开始逐行的调试shader代码。

    我们就大概做个入门总结到这里,其他大家可以慢慢摸索了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值