Shader Compiler Check
HLSLシェーダーのコンパイル検証と型チェックを行います。
使用方法
/shader-compiler-check [shader_path]
- •引数なし:
assets/shader/*.hlsl全ファイルを検証 - •パス指定: 特定のシェーダーのみ検証
例:
- •
/shader-compiler-check→ 全シェーダー - •
/shader-compiler-check assets/shader/mesh_vs.hlsl→ 特定ファイル - •
/shader-compiler-check mesh_vs→ パターンマッチ
検証項目
1. コンパイル検証(fxc.exe)
シェーダータイプを自動判定:
- •
*_vs.hlsl→ 頂点シェーダー (vs_5_0) - •
*_ps.hlsl→ ピクセルシェーダー (ps_5_0) - •
*_gs.hlsl→ ジオメトリシェーダー (gs_5_0) - •
*_cs.hlsl→ コンピュートシェーダー (cs_5_0)
2. 行列転置チェック
警告対象:
- •
row_major修飾子の使用(非推奨) - •C++側で
Transpose()呼び出し漏れの可能性
CLAUDE.md規約:
code
HLSLはデフォルトでcolumn-major、C++は row-major。 C++側で転置してからシェーダーに送る。
3. 定数バッファ型チェック
C++の定数バッファ構造体とHLSLのcbufferを比較:
- •フィールド順序
- •型サイズ
- •パディング
実行コマンド
fxc.exe の場所を確認
bash
where fxc.exe 2>nul || echo "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\fxc.exe"
シェーダーコンパイル(例: 頂点シェーダー)
bash
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\fxc.exe" /T vs_5_0 /E main /nologo /Zi "assets\shader\mesh_vs.hlsl" 2>&1
シェーダーコンパイル(例: ピクセルシェーダー)
bash
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\fxc.exe" /T ps_5_0 /E main /nologo /Zi "assets\shader\mesh_ps.hlsl" 2>&1
レポートフォーマット
code
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🔍 SHADER COMPILER CHECK ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📁 Target: assets/shader/*.hlsl (12 files) ┌──────────────────────────────────────────────────┐ │ Shader │ Profile │ Status │ ├──────────────────────────────────────────────────┤ │ mesh_vs.hlsl │ vs_5_0 │ ✓ OK │ │ mesh_ps.hlsl │ ps_5_0 │ ✓ OK │ │ sprite_vs.hlsl │ vs_5_0 │ ✓ OK │ │ sprite_ps.hlsl │ ps_5_0 │ ⚠ Warning │ └──────────────────────────────────────────────────┘ ⚠️ WARNINGS ─────────────────────────────────────────────────── sprite_ps.hlsl:23: warning X4000: ... → [警告の説明と対処法] 🔧 MATRIX CONVENTION CHECK ─────────────────────────────────────────────────── ✓ No `row_major` declarations found (using column-major default) ✓ C++ transpose pattern detected in shader_manager.cpp 📐 CBUFFER ALIGNMENT CHECK ─────────────────────────────────────────────────── mesh_vs.hlsl cbuffer CameraBuffer: ├─ float4x4 viewProjection @ offset 0 (64 bytes) ├─ float4x4 world @ offset 64 (64 bytes) └─ Total: 128 bytes ✓ Matching C++ struct: MeshConstantBuffer (mesh_batch.h:42) ✓ Layout matches ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
よくあるエラーと対処
| エラー | 原因 | 対処 |
|---|---|---|
error X3000: syntax error | HLSL構文エラー | エラー行を確認 |
error X3004: undeclared identifier | 未定義変数 | 宣言を追加 |
error X4502: cannot have input/output semantic | セマンティクス不一致 | 入出力構造体を確認 |
warning X3206: implicit truncation | 型変換警告 | 明示的キャスト |
注意事項
- •fxc.exeはWindows SDK に含まれる(Visual Studio インストール時に導入)
- •エントリポイントはデフォルトで
main(異なる場合は/Eで指定) - •インクルードパスが必要な場合は
/Iで追加