seq set-if-equal destination = source1 == source2 ? 1 : 0, component-wise
I haven't yet tested it thoroughly, but so far my fragment shader worked on both machines (desktop pcs), where context3D initialization succeeded as DirectX, but doesn't work on machines where flash falls back to software rendering.
seq ft2.x, ft0.x, fc0.x
ft.x is set to
1 on hardware, when current pixel red value, stored in
ft0.x is equal to constant
fc0.x, which stores
50/255. So what I want to happen, does happen on
#32???? (50 == 0x32) colored pixel on hardware, but doesn't on software.
I already tested for a workaround, and I can replace
seq opcodes with a more complex algorithm involving
slt (set if less than) or
sge (set if greater or equal).
So it seems the problem lies in a comparison of a constant I supply to the GPU (50/255) and the actual red value (which is 50 in the texture). If it was anything else (e.g. RGBA values had a different order),
sge would fail as well.
Am I doing something wrong here? Should I somehow round compared values (e.g. multiply by 255 then remove the fractional) in order to be sure it will work in all devices and modes?