찾다

 >  Q&A  >  본문

c++ - 如何调试HLSL编写的shader?

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

PHP中文网PHP中文网2803일 전482

모든 응답(3)나는 대답할 것이다

  • 高洛峰

    高洛峰2017-04-17 13:27:45

    https://msdn.microsoft.com/zh-cn/library/hh873197.aspx 这上面有说明,但是呢……我也不会用

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 13:27:45

    题主是否使用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);

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 13:27:45

    VS2015的话 调试->图形->启动图形调试 然后就能像调试c++代码似的调试程序了

    회신하다
    0
  • 취소회신하다