fxc.exe生成的已编译像素和顶点着色器对象文件的格式是否有正式或非正式的文档记录?
我希望能够读取常量名称以注册着色器文件中的赋值。我知道D3DX中的effects框架可以做到这一点,但我需要避免使用D3DX,因为它可能没有安装在用户的机器上,而且我不需要它做任何其他事情,所以我想避免他们不得不运行directx更新。
如果effects框架可以做到这一点,那么我也可以做到,如果我可以找到文件格式,但我似乎无法在任何地方找到文档。
(这是在directx9中使用)
发布于 2010-03-31 21:04:54
微软故意不让你知道这些信息。但是,由于您使用的是DirectX 9,因此向后设计该格式相对容易。如果你写了一个简单的着色器程序集,你可以看看他编译后返回的代码是什么。通过对汇编程序进行修改,您可以看到它们是如何改变字节码的。您将开始看到寄存器如何处理以及指令在何处编码的模式。因此,您可以缓慢但可靠地计算出字节码。不过不会太快的!
发布于 2010-07-01 15:18:39
来自MSDN:
Asm Shader Reference (Windows)
着色器二进制格式
着色器指令流的按位布局在D3d9types.h中定义。如果要设计自己的着色器编译器或构造工具,并且需要有关着色器令牌流的详细信息,请参考Direct3D 9驱动程序开发工具包(DDK)。
因此,您可以查看“D3d9type.h”并尝试以这种方式找出它(快速查看一下,可以看到您需要的枚举/类型,但看不到它的结构),或者下载DDK并阅读官方文档。
更多信息可以在这里找到:Direct3D Shader Codes (展开屏幕左侧的树以获取所有信息)。
发布于 2012-07-07 00:01:28
微软在这里发布了格式规范:Direct3D Shader Codes。
但是,它通过名称引用常量(例如,D3DSIO_DCL),所以您可能仍然需要Windows DDK才能使用它。
https://stackoverflow.com/questions/2545704
复制相似问题