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

编译的directx9着色器文件的格式?,directx,file-format,hlsl,d3dx,Directx,File Format,Hlsl,D3dx,fxc.exe生成的已编译像素和顶点着色器对象文件的格式是否有正式或非正式的文档记录 我希望能够从着色器文件中读取常量名称以注册指定。我知道D3DX中的特效框架可以做到这一点,但我需要避免使用D3DX,因为它可能没有安装在用户的机器上,而且我不需要它做任何其他事情,所以我希望避免他们不得不运行directx更新 如果特效框架能做到这一点,那么我也能做到,如果我能找到文件格式,但我似乎在任何地方都能找到文档 (这是在directx9中使用的)Microsoft故意将此信息远离您。当您使用Direc

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

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

如果特效框架能做到这一点,那么我也能做到,如果我能找到文件格式,但我似乎在任何地方都能找到文档


(这是在directx9中使用的)

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

来自MSDN:

着色器二进制格式

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

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



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

Microsoft已将格式规范在线放置在此处:


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

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