Pushed it a little bit harder and got it to compile this:
``` Texture2D t; SamplerState s;
float4 dd;
float4 main(float4 position : SV_POSITION) : SV_Target { float2 p;
p.x = position.x / 640.0f; p.y = position.y / 480.0f; float2 ddx = dd.xy / float2(1, 1); float2 ddy = dd.zw / float2(1, 1); return t.SampleGrad(s, p, ddx, ddy); } ```
This just makes it so the compiler is forced to make a temp register for ddx/ddy, and that makes it happy. So temp registers work too... so why might load instructions be fussy with these last two parameters?