I have HLSL shaders in .txt files and I want to use a common function (computeLight()) in multiple shader files. If I write the shader in a file common.psh and include it (with #include "common.psh") in files A.psh and B.psh : Will common.psh be compiled two times (for both A.psh and B.psh) or just one time?
It will be compiled twice. I haven’t seen an option to let fxc dump object files for each included file (and also no way to link against such) so fxc will compile them again. (This is better for optimizations, too). You always have to recompile shaders when an included file changed.
The HLSL compiler will just compile everything. It's very simple in that regard...typically it will just inline everything when generating the assembly (which can be a really good thing, since it will tightly optimize everything along the way). The only real exception is if you use dynamic shader linkage in D3D11.