如果当前使用的版本是dx10的fxc,则当前fxc不支持ps_1_x的shader,在编译该类shader时需加上/Gec,fxc会自动的把ps_1_x版本的shader编译成ps_2_x的版本。当然该shader只能在支持shader2的机器上运行。
如果要使用传统版本的fxc即dx9下的fxc,这时要使用/LD,此时就支持ps_1_x到ps_3_x的所有的shader版本。
查看所有的编译选项请参考syntax。
下面的介绍简单的分析了如何在VS2005中加入fxc编译支持:
CompiledEffect分析
这个例子必须使用VisualStudio中编译后才能执行,直接运行Bin下的CompiledEffect.exe会提示找不到CompiledEffect.fxo文件。CompiledEffect.fxo文件CompiledEffect.fx编译后的文件。在VisualStudio中,右键选择CompiledEffect.fx,弹出菜单中选择属性,“自定义生成步骤”的命令行中,显示的是CompiledEffect.fxo的生成命令:
fxc /Od /Zi /Tfx_2_0 /Fo"$(ProjectDir)$(InputName).fxo" "$(InputPath)"
输出项中显示的是生成的文件名:
$(ProjectDir)$(inputName).fxo
fxc是effect文件的离线编译工具,是一命令行程序。位于“(SDK root)/Utilities/Bin/x86/”中,使用方法和相关编译选项参见SDK文档:DirectX Graphics/Tools/Effect-Compiler Tool。
使用已编译的文件创建ID3DXEffect对象时,是不能设置编译选项的。编译选项必须在使用fxc.exe编译CompiledEffect.fxo文件时,在fxc.exe的参数中设置。对于此程序,有三个生成配置:Debug,Debug Shader,Release,使用的参数是不相同的。
Debug:
fxc /Tfx_2_0 /Fo"$(ProjectDir)$(InputName).fxo" "$(InputPath)"
Release:
fxc /Tfx_2_0 /Fo"$(ProjectDir)$(InputName).fxo" "$(InputPath)"
Debug Shader:
fxc /Od /Zi /Tfx_2_0 /Fo"$(ProjectDir)$(InputName).fxo" "$(InputPath)"
其中选项:
/Od-不使用优化(Disable optimizations)
/Zi-允许调试信息(Enable debugging information)
/Tfx