Nvidia Cg
最近シェーダーを使い始めましたが、 Nvidia GPU
(GTS250
私の場合)で使用すると、すべてが正常に表示され、機能します。
同じ(自分のテストアプリケーション)をで起動しようとしATI HD4650
ましたが、出力が表示されませんでした。その直後に、テスト例(で提供Nvidia Cg 3.0
)と6/7の作業を試し始めましたが、最初の例(最も単純なようです)はそうではありません。
シェーダーコードは次のとおりです。
// This is C2E1v_green from "The Cg Tutorial" (Addison-Wesley, ISBN
// 0321194969) by Randima Fernando and Mark J. Kilgard. See page 38.
struct C2E1v_Output {
float4 position : POSITION;
float3 color : COLOR;
};
C2E1v_Output C2E1v_green(float2 position : POSITION)
{
C2E1v_Output OUT;
OUT.position = float4(position,0,1);
OUT.color = float3(0,1,0);
return OUT;
}
この単純なシェーダーが機能しない理由はわかりませんが、たとえば、次のパススルーシェーダーと組み合わせNvidia Cg SDK
た同じシェーダーが機能します(の例2 )。
// This is C2E2f_passthru from "The Cg Tutorial" (Addison-Wesley, ISBN
// 0321194969) by Randima Fernando and Mark J. Kilgard. See page 53.
struct C2E2f_Output {
float4 color : COLOR;
};
C2E2f_Output C2E2f_passthru(float4 color : COLOR)
{
C2E2f_Output OUT;
OUT.color = color;
return OUT;
}
誰かが同じ問題に直面しましたか?何か案は?
ありがとうございました。
ここで更新:最大デバッグ出力をオンにすると、問題が明らかになりました。
vs_3_0 shader executed in hardware vertex processing mode can only be paired
with at least a ps_3_0 shader
そのパッケージの最初の例は、(単純なパススルーでさえ)ピクセルシェーダーがなく、頂点シェーダーのみが含まれている唯一の例でした。この場合、なぜNvidia Cgランタイムが互換性のないシェーダーを生成するのかわかりませんが、明らかに古いGPUでのみ失敗しました(ATI HD4650
)。
とにかく、私はデバッグ出力をオンにせずに作業するのに十分愚かでした。
2 Alex Farber:ダミーの回答を投稿して、デバッグをオンにするのを忘れたことに気付いてくれたので、賞金を授与できると思います。ありがとうございました。