fxc.exe生成的已编译像素和顶点着色器对象文件的格式是正式还是非正式记录的?
我希望能够读取常量名称以从着色器文件注册分配。我知道D3DX中的效果框架可以做到这一点,但我需要避免使用D3DX,因为它可能没有安装在用户的机器上,我不需要它用于其他任何东西所以我想避免它们必须运行directx更新
如果效果框架可以做到这一点,那么如果我能找到文件格式,我也可以“似乎在任何地方都能找到它。”
(这是用于directx9)
答案 0 :(得分:9)
来自MSDN:
Asm Shader Reference (Windows)
着色器二进制格式
着色器指令流的按位布局在D3d9types.h中定义。如果您想设计自己的着色器编译器或构造工具,并且想要了解有关着色器令牌流的更多信息,请参阅Direct3D 9驱动程序开发工具包(DDK)。
所以你可以查看'D3d9type.h'并尝试以这种方式解决它(快速查看并且可以看到你应该需要的枚举/类型,但不能看到它的结构),或下载DDK和阅读官方文档。
可在此处找到更多信息:Direct3D Shader Codes(展开屏幕左侧的树以获取所有信息)。
答案 1 :(得分:0)
Microsoft故意将此信息远离您。当您使用DirectX 9时,其相对易于向后设计格式。如果你编写一个简单的着色器组件,你可以看看他在另一侧返回的编译代码是什么。通过对汇编程序进行修改,您可以看到它们的字节代码更改方式。您将开始看到如何处理寄存器以及编码指令的模式。因此,您可以缓慢但肯定地计算出字节代码。但它不会太快!
答案 2 :(得分:0)
Microsoft已将格式规范放在网上:Direct3D Shader Codes。
它按名称引用常量(例如D3DSIO_DCL
),因此您可能仍需要Windows DDK才能使用它。