代码之家  ›  专栏  ›  技术社区  ›  jcoder

编译的DirectX9着色文件的格式?

  •  3
  • jcoder  · 技术社区  · 15 年前

    fxc.exe生成的编译像素和顶点着色对象文件的格式是否正式或非正式地记录在任何地方?

    我希望能够读取常量名来注册来自材质球文件的指定。我知道d3dx中的effects框架可以做到这一点,但我需要避免使用d3dx,因为它可能没有安装在用户的计算机上,我不需要它来做其他任何事情,所以我希望避免它们运行Directx更新。

    如果效果框架可以做到这一点,那么我也可以做到这一点,如果我可以找到文件格式,但我似乎可以在任何地方找到它的文档。

    (用于DirectX9)

    3 回复  |  直到 12 年前
        1
  •  0
  •   Goz    15 年前

    微软故意不让你知道这些信息。当您使用DirectX 9时, 相当地 但是,很容易对格式进行反向工程。如果编写一个简单的着色程序集,您可以检查他在另一端返回的编译代码是什么。通过对汇编程序进行修改,您可以看到它们是如何改变字节代码的。您将开始看到如何处理寄存器以及在哪里对指令进行编码的模式。因此,您可以慢慢但肯定地计算出字节代码。不过不会太快的!

        2
  •  9
  •   Grant Peters    14 年前

    来自msdn:

    Asm Shader Reference (Windows)

    明暗器二进制格式

    明暗器指令流的按位布局在d3d9types.h中定义。如果要设计自己的明暗器编译器或构造工具,并且需要有关明暗器令牌流的详细信息,请参阅Direct3D 9驱动程序开发工具包(DDK)。

    因此,您可以浏览“d3d9type.h”,并尝试这样做(快速查看,可以看到您需要的枚举/类型,但不能了解其结构),或者下载DDK并阅读官方文档。


    这里可以找到更多信息: Direct3D Shader Codes (展开屏幕左侧的树以获取所有信息)。

        3
  •  0
  •   Cygon    12 年前

    Microsoft已在此处将格式规范联机: Direct3D Shader Codes .

    但是,它按名称引用常量(例如 D3DSIO_DCL ,所以您可能仍然需要Windows DDK来使用它。