1

現在、私はWindows 8ストア、Windows 8デスクトップ、およびWindows7用のアプリを開発しています。アプリはタブレットでも「通常の」Windows7/8デバイスでもスムーズに実行されるはずです。だから、私は自分の仕事からタブレットを入手し、それにWindows 8をインストールしましたが、気味の悪いIntel Graphics Media Accellerator(600)はDirectX9.0cしかサポートしていないことに気づきました。

そこで、DirectX10 / 11エフェクト/シェーダーをDirectX9で動作させるために何時間も試しましたが、何も動作しないようです。NVidiaのFxComposerを使用したテストでは、DirectX9エフェクトが正常に動作することがわかりました。

私はSharpDX/C#でプログラミングしていますが、technique10とtechnique11はどちらも有効です(MyTechnique.IsValid == true)。エフェクトをロードするには、次のコード行を使用します。

var EffectByteCode  = ShaderBytecode.CompileFromFile("DirectX/Shaders/"+FxFile, "fx_5_0", ShaderFlags.None, EffectFlags.None);
var Effect      = new Effect(GraphicsProvider.Device, EffectByteCode, EffectFlags.None);
mEffect             = FxEffect;
mTechnique11            = mEffect.GetTechniqueByName("main_11"); //works
mTechnique10            = mEffect.GetTechniqueByName("main_10"); //works
mTechnique9             = mEffect.GetTechniqueByName("main_9"); //doesn't work

エフェクトのソースコードをここに貼り付けました:http://pastebin.com/KPxBN1DD ..「main_11」と「main_10」を除外しました。テストではコメントアウトしたので、コメントブロックを削除しました。dx9を削除する必要があります。この非常に単純なコードを理解してください。

したがって、私の最後の質問は次のとおりです。-パラメータ「fx_5_0」は、technique、technique10、technique11の読み込みに有効ですか?-私のシェーダーコードは正しいですか?または私はひどく間違ったことをしましたか?-DX9テクニックをロードするために、他の/追加情報/機能/パラメーターを指定する必要がありますか?-多分それはSharpDXのバグですか?これについては、今からコードを見ていきます。

編集:質問を少し明確にしようとしました。

4

2 に答える 2

3

従来のEffectフレームワークはWindows8Metroではサポートされていません(D3DCompiler_xx.dllがサポートされていないため)。そのため、別のソリューションを使用することをお勧めします。また、EffectはMicrosoftによって非推奨になり、サポートされなくなりました。

古いDirect3D9テクニック(vs_2_0またはps_2_0でコンパイル)は、fx_5_0でコンパイルされたFXファイルに保存されません(fxc.exeコンパイラの出力を確認するだけで表示されません)。

テクニック10/11構文を使用して9.xダウンレベルハードウェアサポート用にコンパイルするには、vs_4_0_level_9_xまたはps_4_0_level_9_xを使用する必要があります。また、元のシェーダーがすべてvs_4_0_level_9_xで動作し、10.0または11.1用に最適化された特定のバージョンがない場合、level_9_xシェーダーは9以降のハードウェアで動作するため、main_10またはmain_11をコンパイルする必要はありません。 xから11.x。

まだ公式ではないSharpDX.Toolkitを見ることができるかもしれませんが、Effectフレームワークをサポートしています(BasicEffectやSpriteBatchなどのいくつかのXNAストックエフェクトを使用)。ツールキットのベータ版は今月後半に利用可能になります。

于 2012-10-16T00:01:10.970 に答える
1

SV_TARGETセマンティクスをCOLOR0に置き換えてみてください。これまで、D3D9シェーダーでSV_TARGETセマンティックを見たことがありません。

于 2012-10-15T18:04:40.100 に答える