Some (older) Nvidia boards have no real brachning, but just conditional writes. Actually I believe this applies to every board before G80. You can check teh compiled code by downloading the NVemulate tool and select all the “write * assembly”. Nvidia then stores the assembly code of compiled programs in the application path.
My advice: if condition depends on a uniform (per-model) value, just use two different shaders. But if it depends on some varying inputs, you have tough luck.
The branching is supported on older NV chips but
you have to meet certain requirements:
The code that is skipped must be pretty large.
(definitely not few instructions)
Spatial coherence: NV process the pixels in blocks, all pixels in this block must go in the same branch. If not, you get penalty of executing both branches with conditional write as Zengar said. Blocks depend on particular gfx chips. In general it is like 4x4 pixels.
Also, it depends on whether it is VS or FS.
VS should be able to do branching even on Geforce FX but it is still possible the driver is doing a bad (or good) job.
Like Zengar said, NVemulate.