I’ve got a shader of 2d water with a foam. Nothing fancy or super complex.
However I was unpleasantly surprised when I launched the game on tvOS: the shader was definitely working incorrectly since the water had to much foam.

Here is an abstract of the fragment shader responsible for the foam
fixed4 frag(v2f IN) : SV_Target
{
half2 dist1 = tex2D( _DistMap, IN.uvdist1 ).rg;
half2 dist2 = tex2D( _DistMap, IN.uvdist2 ).rg;
half2 dist = lerp(dist1, dist2, _DetailInfluence) * 2.0 - 1.0;
fixed wave = sqrt(saturate(dist.x * dist.y));
fixed foam = step(_WaveFoam, wave);
fixed4 foamColor = fixed4(foam.xxx * _WaveFoamAlpha, 0.0);
...
fixed4 color = tex2D( _ReflMap, reflUV );
...
color += waveCrestColor;
return saturate(color);
}
My first thought was about precision. I tried changing fixed to half, but it made no change.
Also I had no saturate inside sqrt before, but it made no changes too.
Any ideas why Apple TV’s PowerVR runs my shader this way?