AgentSkillsCN

Shader Compiler Check

HLSL 编译验证

SKILL.md
--- frontmatter
description: "HLSL コンパイル検証"
model: haiku
allowed-tools:
  - "Bash(fxc:*)"
  - "Bash(where:*)"
  - "Grep"
  - "Read"
  - "Glob"

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 errorHLSL構文エラーエラー行を確認
error X3004: undeclared identifier未定義変数宣言を追加
error X4502: cannot have input/output semanticセマンティクス不一致入出力構造体を確認
warning X3206: implicit truncation型変換警告明示的キャスト

注意事項

  • fxc.exeはWindows SDK に含まれる(Visual Studio インストール時に導入)
  • エントリポイントはデフォルトで main(異なる場合は /E で指定)
  • インクルードパスが必要な場合は /I で追加