[require] compile shader model 2.0 compile shader model 3.0 % This compiles since FOG is not referenced. [pixel shader] float4 main(float fog : FOG) : sv_target { return 0; } % This compiles since PSIZE is not referenced [pixel shader] float4 main(float psize : PSIZE) : sv_target { return 0; } [vertex shader] void main(float4 pos : position, out float fog : fog, out float4 out_pos : sv_position) { fog = 1.0; out_pos = pos; } [pixel shader] float4 main() : sv_target { return 1.0; } [test] draw quad probe (0, 0) f32(1, 1, 1, 1) % FOG can be used as a pixel shader input in ps_3_0, but not ps_2_0. % On ps_4_0 and above, it behaves as a regular semantic, without sysval. [pixel shader fail(sm<3) todo(sm<3)] float4 main(float fog : FOG) : sv_target { return fog; } [test] draw quad probe (0, 0) f32(1, 1, 1, 1) [vertex shader] void main(float4 pos : position, out float psize : psize, out float4 out_pos : sv_position) { psize = 1.0; out_pos = pos; } [pixel shader] float4 main() : sv_target { return 1.0; } [test] draw quad probe (0, 0) f32(1, 1, 1, 1) % PSIZE cannot be used as a pixel shader input in ps_2_0 nor ps_3_0. % On ps_4_0 and above, it behaves as a regular semantic, without sysval. [pixel shader fail(sm<4) todo(sm<4)] float4 main(float psize : PSIZE) : sv_target { return psize; } [test] draw quad probe (0, 0) f32(1, 1, 1, 1)