【问题标题】:Format of compiled directx9 shader files?编译的directx9着色器文件的格式?
【发布时间】:2010-03-30 13:51:26
【问题描述】:

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

我希望能够读取常量名称以从着色器文件中注册分配。我知道 D3DX 中的效果框架可以做到这一点,但我需要避免使用 D3DX,因为它可能没有安装在用户的机器上,而且我不需要它来做其他任何事情,所以我想避免他们不得不运行 directx 更新.

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

(这是用于directx9)

【问题讨论】:

    标签: directx file-format hlsl d3dx


    【解决方案1】:

    来自 MSDN:

    Asm Shader Reference (Windows)

    着色器二进制格式

    着色器指令流的按位布局在 D3d9types.h 中定义。如果您想设计自己的着色器编译器或构造工具,并且想了解有关着色器令牌流的更多信息,请参阅 Direct3D 9 驱动程序开发工具包 (DDK)。

    因此,您可以查看“D3d9type.h”并尝试以这种方式弄清楚(快速查看并可以看到您应该需要的枚举/类型,但看不到它的结构),或者下载 DDK 并阅读官方文档。


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

    【讨论】:

      【解决方案2】:

      Microsoft 故意将这些信息远离您。当您使用 DirectX 9 时,它相对很容易对格式进行反向工程。如果您编写一个简单的着色器程序集,您可以查看他在另一端返回的编译代码是什么。通过对汇编程序进行修改,您可以看到它们的字节码是如何变化的。您将开始看到寄存器处理方式和指令编码位置的模式。因此,您可以缓慢而可靠地计算出字节码。不过不会太快!

      【讨论】:

      • 感谢您的回答,这与我在其他地方找到的一致。我决定采用不同的方法并使用我自己的程序在构建机器上使用 D3DX 而不是使用 fxc 来编译着色器,然后我可以使用 D3DX 接口获取常量表数据并将其写入我自己的我的程序使用的格式。
      【解决方案3】:

      Microsoft 已在此处在线发布格式规范:Direct3D Shader Codes

      但是,它通过名称引用常量(例如D3DSIO_DCL),因此您可能仍然需要 Windows DDK 才能使用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多