如何调试HLSL编写的shader?

D3D11初学者,最近在尝试实现一些光照模型。可是有个问题就是.fx文件里面的HLSL代码不知道该如何去调试,我能定位到某个值出了问题,我想打印看一下值是什么,但是却没有办法,断点什么的也没用,求指点。

阅读 8.1k
3 个回答
新手上路,请多包涵

题主是否使用D3DCompileFromFile这个函数来编译你的hlsl源代码,这个函数生成的hlsl字节码默认是不包含编译信息的,也就没法在vs中调试(只能用反汇编调试)。

函数原型:

HRESULT  D3DXCompileShaderFromFile(
  __in   LPCSTR pSrcFile,
  __in   const D3DXMACRO *pDefines,
  __in   LPD3DXINCLUDE pInclude,
  __in   LPCSTR pFunctionName,
  __in   LPCSTR pProfile,
  __in   DWORD Flags,
  __out  LPD3DXBUFFER *ppShader,
  __out  LPD3DXBUFFER *ppErrorMsgs,
  __out  LPD3DXCONSTANTTABLE *ppConstantTable
);

倒数第四个参数设为:D3DXSHADER_DEBUG 或者 D3D10_SHADER_DEBUG 取决于你的sdk

    // Compile the vertex shader code.
    result = D3DCompileFromFile(
                                vsFilename, 
                                NULL, 
                                NULL, 
                                "TextureVertexShader", 
                                "vs_5_0", 
                                D3D10_SHADER_ENABLE_STRICTNESS | D3D10_SHADER_DEBUG ,
                                 0,
                                &vertexShaderBuffer, 
                                &errorMessage);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题