已编译的directx9着色器文件的格式?

jco*_*der 3 directx file-format hlsl d3dx

fxc.exe生成的已编译像素和顶点着色器对象文件的格式是正式还是非正式记录的?

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

如果效果框架可以做到这一点,那么如果我能找到文件格式,我也可以'似乎在任何地方都能找到它.

(这是用于directx9)

Gra*_*ers 9

来自MSDN:

Asm Shader参考(Windows)

着色器二进制格式

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

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


在这里可以找到更多信息:Direct3D着色器代码(展开屏幕左侧的树以获取所有信息).


Goz*_*Goz 0

Microsoft 故意向您隐藏此信息。由于您使用的是 DirectX 9,因此对格式进行反向工程相对容易。如果你写了一段简单的着色器程序集,你可以看看他编译的代码在另一端返回的是什么。通过修改汇编器,您可以看到字节码如何变化。您将开始看到寄存器处理方式以及指令编码位置的模式。因此,您可以缓慢但稳定地计算出字节码。不过不会太快!