1

Nvidia Cg最近シェーダーを使い始めましたが、 Nvidia GPUGTS250私の場合)で使用すると、すべてが正常に表示され、機能します。

同じ(自分のテストアプリケーション)をで起動しようとし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:ダミーの回答を投稿して、デバッグをオンにするのを忘れたことに気付いてくれたので、賞金を授与できると思います。ありがとうございました。

4

1 に答える 1

1

DirectXコントロールパネルでDebugDirectXバージョンを設定し、トレース出力を参照して、この失敗の理由を取得します。

ところで、私はピクセルシェーダーで同じ状況にあり、GameDev.netDirectXフォーラムで助けを得ました。最終的に、SDK変換ツールを使用してシェーダーを最低バージョンに変換し、ピクセルシェーダーなしで機能したことを覚えています。GPUプロバイダーによると、この動作はDirectX仕様に準拠しています。

于 2010-09-20T09:29:06.270 に答える