5

fxc.exe によって生成されるコンパイル済みのピクセルおよび頂点シェーダー オブジェクト ファイルの形式は、公式または非公式にどこかに文書化されていますか?

定数名を読み取って、シェーダー ファイルから割り当てを登録できるようにしたいと考えています。D3DX の効果フレームワークがこれを実行できることはわかっていますが、D3DX はユーザーのマシンにインストールされていない可能性があり、他には必要ないため、D3DX の使用を避ける必要があるため、directx の更新を実行する必要がないようにしたいと考えています。 .

効果フレームワークがそれを行うことができれば、ファイル形式を見つけることができれば私もそうすることができますが、どこにも文書化されているようには見えません。

(これは directx9 で使用するためのものです)

4

3 に答える 3

10

MSDN から:

Asm シェーダー リファレンス (Windows)

シェーダー バイナリ形式

シェーダー命令ストリームのビット単位のレイアウトは、D3d9types.h で定義されています。独自のシェーダー コンパイラまたは構築ツールを設計し、シェーダー トークン ストリームに関する詳細情報が必要な場合は、Direct3D 9 Driver Development Kit (DDK) を参照してください。

したがって、「D3d9type.h」を調べてそのように理解しようとするか(簡単に見て、必要な列挙型/型を確認できましたが、その構造はわかりませんでした)、またはDDKをダウンロードして公式を読むことができますドキュメンテーション。


詳細については、Direct3D シェーダー コード(画面の左側にあるツリーを展開してすべての情報を取得してください) を参照してください。

于 2010-07-01T07:18:39.470 に答える
0

Microsoft は、形式の仕様をオンラインで公開しています: Direct3D Shader Codes

ただし、定数は名前で参照されるため (例: D3DSIO_DCL)、使用するには Windows DDK が必要になる可能性があります。

于 2012-07-06T16:01:28.140 に答える
0

Microsoft は、意図的にこの情報をユーザーから遠ざけています。ただし、 DirectX 9 を使用しているため、フォーマットのバックワード エンジニアリングは比較的簡単です。単純なシェーダー アセンブリを作成すると、彼がコンパイルしたコードが反対側で返されたものを確認できます。アセンブラに変更を加えることで、バイトコードがどのように変化するかを確認できます。レジスタがどのように処理され、どこで命令がエンコードされるかのパターンが見え始めます。したがって、ゆっくりと、しかし確実に、バイトコードを解決することができます。とはいえ、それほど速くはありません!

于 2010-03-31T13:04:54.230 に答える