HLSL シェーダーのデバッガーHLSL Shader Debugger

Note

この記事は、Visual Studio 2015 に適用されます。This article applies to Visual Studio 2015. 最新の Visual Studio ドキュメントをお探しの場合は、左上にあるバージョン セレクターを使用してください。If you're looking for the latest Visual Studio documentation, use the version selector at the top left. Visual Studio 2019 へのアップグレードをお勧めします。We recommend upgrading to Visual Studio 2019. ここからダウンロードしてください。Download it here

Visual Studio Graphics Analyzer で HLSL デバッガーを使用すると、アプリの実際の条件下で、HLSL シェーダー コードの動作方法を理解できます。The HLSL debugger in Visual Studio Graphics Analyzer helps you understand how your HLSL shader code operates under real conditions of your app.

HLSL デバッガーを次に示します。This is the HLSL debugger:

使用した HLSL のデバッグを見るし、呼び出し履歴ウィンドウ。Debugging HLSL using watch and call stack windows.

HLSL デバッガーについてUnderstanding the HLSL debugger

HLSL デバッガーは、シェーダー コードで発生する問題を把握するのに役立ちます。The HLSL debugger can help you understand problems that arise in your shader code. Visual StudioVisual Studio における HLSL コードのデバッグは、C++、C#、Visual Basic などの他の言語で作成されたコードのデバッグと同様です。Debugging HLSL code in Visual StudioVisual Studio resembles debugging code that's written in other languages—for example, C++, C#, or Visual Basic. 他の言語のデバッグ時と同じように、変数の内容の確認、ブレークポイントの設定、コードのステップ実行、および呼び出し履歴の確認を行うことができます。You can inspect the contents of variables, set break points, step through code, and walk up the call-stack, just like you can when you debug other languages.

ただし、GPU では、シェーダー コードを数百のスレッドで同時に実行することによりハイ パフォーマンスを実現するため、HLSL デバッガーは、他の Graphics Analyzer と連動して理解しやすい方法でこの情報をすべて表示するように設計されています。However, because GPUs achieve high performance by running shader code on hundreds of threads simultaneously, the HLSL debugger is designed to work together with the other Graphics Analyzer tools to present all of this information in a way that helps you make sense of it. Graphics Analyzer では、グラフィックス ログに記録された情報を使用してキャプチャされたフレームを再生成します。HLSL デバッガーは、シェーダー コードの実行時にリアルタイムで GPU の実行を監視しません。Graphics Analyzer recreates captured frames by using information that was recorded in a graphics log; the HLSL debugger does not monitor GPU execution in real time as it runs shader code. グラフィックス ログには出力の一部を再生成するために十分な情報が保持されているため、また Graphics Analyzer にはエラーが発生した正確なピクセルおよびイベントを特定することができるツールが用意されているため、HLSL デバッガーは目的のシェーダー スレッドをシミュレートするだけで済みます。Because a graphics log contains enough information to recreate any part of the output, and because Graphics Analysis provides tools that can help you pinpoint the exact pixel and event where an error occurs, the HLSL debugger only has to simulate the exact shader thread that you are interested in. これは、シェーダーの処理を CPU 内でシミュレートし、内部の処理をすべて見ることができることを意味します。This means that the work of the shader can be simulated on the CPU, where its inner workings are in full view. HLSL デバッガーで CPU と同様のデバッグができるのはこのためです。This is what gives the HLSL debugger a CPU-like debugging experience.

ただし、HLSL デバッガーには、現在次のような制限があります。However, the HLSL debugger is currently limited in the following ways:

  • HLSL デバッガーはエディット コンティニュをサポートしていませんが、シェーダーを変更し、結果を表示するフレームを再生成することができます。The HLSL debugger doesn't support edit-and-continue, but you can make changes to your shaders and then regenerate the frame to see the results.

  • アプリケーションとシェーダー コードを同時にデバッグすることはできません。It's not possible to debug an app and its shader code at the same time. ただし、アプリケーションとシェーダー コードを切り替えてデバッグすることはできます。However, you can alternate between them.

  • ウォッチ ウィンドウに変数とレジスタを追加することはできますが、式はサポートされていません。You can add variables and registers to the Watch window, but expressions are not supported.

    一方、HLSL デバッガーでは、他のデバッガーよりも優れた、より CPU に近いデバッグができます。Nevertheless, the HLSL debugger provides a better, more CPU-like debugging experience than would be possible otherwise.

HLSL シェーダーの編集および適用機能HLSL Shader Edit & Apply

HLSL シェーダー デバッガーでは、CPU デバッガーのようなエディット コンティニュがサポートされていません。これは、GPU の実行モデルで、シェーダーの状態を元に戻す操作が許可されていないためです。The HLSL shader debugger doesn't support Edit & Continue in the same way that the CPU debugger does because the GPU execution model doesn't allow shader state to be undone. その代わりに、HLSL デバッガーでは、HLSL ソース ファイルを編集した後、[適用] を選択してフレームを再生成し、変更の効果を確認できる、編集および適用機能がサポートされています。Instead, the HLSL debugger supports Edit & Apply, which allows you to edit HLSL source files and then choose Apply to regenerate the frame to see the effect of your changes. 変更後のシェーダー コードがプロジェクトの元の HLSL ソース ファイルの整合性を保持するために別のファイルに格納されているが、選択することができます、変更が完成したらにコピーしています.Your modified shader code is stored in a separate file to preserve the integrity of your project's original HLSL source file, but when you're satisfied with your changes you can choose Copy to… 変更をプロジェクトにコピーします。to copy the changes into your project. この機能を使用すると、エラーを含むシェーダー コードをすばやく反復処理できるため、HLSL デバッグ ワークフローから、コストのかかるリビルドおよびキャプチャ手順を実行する必要がなくなります。Using this feature, you can quickly iterate on shader code that contains errors and eliminate costly rebuild and capture steps from your HLSL debugging workflow.

HLSL の逆アセンブルHLSL Disassembly

HLSL シェーダー デバッガーでは、HLSL ソース コードの一覧の右側に、HLSL シェーダー アセンブリの一覧が表示されます。The HLSL shader debugger provides a listing of HLSL shader assembly to the right of the HLSL source code listing.

HLSL コードのデバッグDebugging HLSL code

HLSL デバッガーには、[パイプライン ステージ] ウィンドウまたは [ピクセル履歴] ウィンドウからアクセスできます。You can access the HLSL debugger from the Pipeline Stages or Pixel History windows.

[グラフィックス パイプライン ステージ] ウィンドウから HLSL デバッガーを起動するにはTo start the HLSL debugger from the Graphics Pipeline Stages window

  1. [グラフィックス パイプライン ステージ] ウィンドウで、デバッグするシェーダーに関連付けられているパイプライン ステージを見つけます。In the Graphics Pipeline Stages window, locate the pipeline stage that's associated with the shader that you want to debug.

  2. パイプライン ステージのタイトルの下で、小さい緑色の矢印として表示される [デバッグの開始] をクリックします。Below the title of the pipeline stage, choose Start Debugging, which appears as a small green arrow.

    Note

    HLSL デバッガーへのこのエントリ ポイントでは、対応するステージの最初のシェーダー スレッドのみをデバッグします。つまり、処理する最初の頂点またはピクセルです。This entry point into the HLSL debugger debugs only the first shader thread for the corresponding stage—that is, the first vertex or pixel that is processed. [ピクセル履歴] を使用して、これらのシェーダー ステージの他のスレッドにアクセスできます。You can use Pixel History to access other threads of these shader stages.

[グラフィックス ピクセル履歴] から HLSL デバッガーを起動するにはTo start the HLSL debugger from the Graphics Pixel History

  1. [グラフィックス ピクセル履歴] ウィンドウで、デバッグするシェーダーに関連付けられている描画呼び出しを展開します。In the Graphics Pixel History window, expand the draw call that's associated with the shader that you want to debug. 各描画呼び出しは、複数のプリミティブに対応していることがあります。Each draw call can correspond to multiple primitives.

  2. 描画呼び出しの詳細で、結果の色の効果がシェーダー コードのバグを示しているプリミティブを展開します。In the draw call details, expand a primitive whose resulting color contribution suggests a bug in its shader code. 複数のプリミティブがバグを示している場合は、問題の診断をさらに難しくすることがあるエラー累積を回避できるように、そのバグを示す最初のプリミティブを選択します。If multiple primitives suggest a bug, choose the first primitive that suggests it so that you can avoid an accumulation of errors that can make diagnosis of the problem more difficult.

  3. プリミティブの詳細で、[頂点シェーダー] をデバッグするか、[ピクセル シェーダー] をデバッグするかを選択します。In the primitive details, choose whether to debug the Vertex Shader or the Pixel Shader. ピクセル シェーダーは正しいが、頂点シェーダーが正しくない定数を渡すために正しくない色の効果を生成していると思われる場合は、頂点シェーダーをデバッグします。Debug the vertex shader when you suspect that the pixel shader is correct but is generating an incorrect color contribution because the vertex shader is passing incorrect constants to it. それ以外の場合は、ピクセル シェーダーをデバッグします。Otherwise, debug the pixel shader.

    選択したシェーダーの右側で、小さい緑色の矢印として表示される [デバッグの開始] をクリックします。To the right of the chosen shader, choose Start Debugging, which appears as a small green arrow.

    Note

    HLSL デバッガーへのこのエントリ ポイントでは、選択した描画呼び出し、プリミティブ、およびピクセルに対応するピクセル シェーダー スレッド、または選択した描画呼び出し、プリミティブ、およびピクセルによって結果が補間される頂点シェーダー スレッドをデバッグします。This entry point into the HLSL debugger debugs either the pixel shader thread that corresponds to the chosen draw call, primitive, and pixel that you have chosen, or to the vertex shader threads whose results are interpolated by the draw call, primitive, and pixel that you have chosen. 頂点シェーダーの場合、頂点シェーダーの詳細を展開することで、特定の頂点へのエントリ ポイントを絞り込むことができます。In the case of vertex shaders, you can further refine the entry point to a specific vertex by expanding the vertex shader details.

    HLSL デバッガーを使用して、シェーダーのエラーをデバッグする方法の例については、次を参照してください。または「参照」セクションで、チュートリアルのリンク先。For examples about how to use the HLSL Debugger to debug shader errors, see Examples or the walkthroughs linked to in the See Also section.

関連項目See Also

チュートリアル: 頂点の網かけによるオブジェクトの不足 Walkthrough: Missing Objects Due to Vertex Shading
チュートリアル: 網かけによるレンダリング エラーのデバッグ Walkthrough: Debugging Rendering Errors Due to Shading
チュートリアル: 計算シェーダーをデバッグするためのグラフィックス診断の使用Walkthrough: Using Graphics Diagnostics to Debug a Compute Shader