shader 程序先被编译成 a portable bytecode,然后 graphics driver把 bytecode 编译成 optimal native instruction for system’s GPU
compiling shaders at runtime
d3dUtil.h 定义 CompileShader() { hr=D3DCompileFromFile() // 最后一个参数得到错误,倒数第二个参数得到compiled shader return bytcode } 用来compile shader
mvsByteCode = d3dUtil::CompileShader(L"Shaders\\color.hlsl", nullptr, "VS", "vs_5_0"); mpsByteCode = d3dUtil::CompileShader(L"Shaders\\color.hlsl", nullptr, "PS", "ps_5_0");Offline Compilation:at compile time
.cso 文件用来表示 compiled shder
使用 FXC tool 编译 ,输出错误到command window
with debugging
fxc "color.hlsl" /Od /Zi /T vs_5_0 /E "VS" /Fo "color_vs.cso" /Fc "color_vs.asm" fxc "color.hlsl" /Od /Zi /T ps_5_0 /E "VS" /Fo "color_ps.cso" /Fc "color_ps.asm"for release
fxc "color.hlsl" /T vs_5_0 /E "VS" /Fo "color_vs.cso" /Fc "color_vs.asm" fxc "color.hlsl" /T ps_5_0 /E "VS" /Fo "color_ps.cso" /Fc "color_ps.asm"LoadBinary 把 .cso文件中已编译的代码加载到app中
/Fc 产生 portable assembly code