7

Windows ストア アプリ (および Windows Phone 8) のシェーダーをビルドするには、シェーダー モデル 4_0_level_9_3 を vs_4_0_level_9_3 と ps_4_0_level_9_3 を使用する必要があります。DirectX 10 以降用に設計された HLSL 構文を使用すると、これらすべてが問題ないように思えますが、DirectX 9 の VPOS セマンティックを使用することも、DirectX 10 以降の SV_POSITION をピクセル シェーダーで使用することもできません。クリップ空間の頂点位置を出力するためのセマンティック?

PS: 4_0_level_9_3 の一部のシェーダーは、「内部エラー: level9 と d3d10 シェーダーの間のブロブ コンテンツの不一致」を吐き出しますが、これについてはわかりません。おそらく、私が推測するドライバー (私は Nvidia GTX 560 TI を使用しています) との不一致は、リリース フラグ (最適化レベル 3 など) を使用してシェーダーをコンパイルし、フロー制御を回避するだけで解消されることがわかります。

4

1 に答える 1

0

あなたが言うように、あなたの最善の策は、これらの値を二次的なセマンティクスとして渡すことです(つまり、「POSITION」と「SV_POSITION」の両方の値を渡します)。頂点シェーダーの出力宣言の最後に SV_POSITION を配置する場合、ピクセル シェーダーの入力宣言から省略できることに注意してください。

内部エラーに関しては、これは通常、あるパスでは最適化されているが別のパスでは最適化されていないテクスチャまたはその他のシェーダー入力の宣言が原因です。通常、最適化を無効にすると問題を回避できますが、未使用の (デッドコードの削除によるものを含む) 入力宣言を削除し、ノーオペレーションになる複雑なコードを回避することで修正することもできます。

于 2013-08-30T23:21:53.787 に答える