2010-03-30 16 views
3

Le format des fichiers d'objets pixel et vertex shader compilés par fxc.exe est-il documenté de façon officielle ou non officielle? Je voudrais être capable de lire le nom de la constante pour enregistrer les affectations à partir des fichiers shader. Je sais que le framework d'effets dans D3DX peut le faire, mais je dois éviter d'utiliser D3DX car il n'est peut-être pas installé sur les machines des utilisateurs et je n'en ai pas besoin pour autre chose. . Si la structure d'effets peut le faire, alors je peux si je peux trouver le format de fichier mais je peux le trouver documenté n'importe où.Format des fichiers de shader directx9 compilés?

(ce qui est pour une utilisation dans DirectX9)

Répondre

0

Microsoft garder délibérément ces informations loin de vous. Comme vous utilisez DirectX 9 son relativement facile à rétro-ingénierie le format cependant. Si vous écrivez un morceau de shader simple, vous pouvez vérifier ce qu'il a compilé le code retourné de l'autre côté. En apportant des modifications à l'assembleur, vous pouvez voir comment ils modifient le code d'octet. Vous commencerez à voir des modèles dans la façon dont les registres sont traités et où l'instruction est encodée. Vous pouvez ainsi, lentement mais sûrement, élaborer le code d'octet. Ce ne sera pas trop rapide cependant!

+1

Merci pour la réponse, qui est d'accord avec ce que j'avais trouvé ailleurs. J'ai décidé d'adopter une approche différente et de compiler les shaders en utilisant mon propre programme en utilisant D3DX sur une machine de construction plutôt que d'utiliser fxc, puis je peux utiliser l'interface D3DX pour obtenir les données de la table constante et les écrire dans mes propres format pour mon programme à utiliser. – jcoder

8

De MSDN:

Asm Shader Reference (Windows)

Shader Format binaire

La disposition binaire du flux d'instructions de shader est défini dans D3d9types.h. Si vous souhaitez concevoir votre propre compilateur de shader ou outils de construction et si vous souhaitez obtenir plus d'informations sur le flux de jetons shader, reportez-vous au kit de développement de pilotes DirectDD 9 (DDK).

Vous pouvez regarder à travers « D3d9type.h » et essayer de comprendre cette façon (avait un regard rapide et pourrait voir les énumérations/types que vous avez besoin, mais pas comment son structuré), ou télécharger DDK et lire la documentation officielle.


Certains plus d'informations peuvent être trouvées ici: Direct3D Shader Codes (développez l'arborescence sur le côté gauche de l'écran pour obtenir toutes les informations).

0

Microsoft a mis la spécification de format en ligne ici: Direct3D Shader Codes.

Il se réfère cependant aux constantes par leur nom (par exemple, D3DSIO_DCL), vous aurez donc probablement besoin de Windows DDK pour en tirer parti.