1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorGreen, colorRed; 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Workernoinline bool checkIntrinsicAsFunctionArg(float3 f3, int3 e3) { 4*c8dee2aaSAndroid Build Coastguard Worker // 6 equals 0.75 * 2^3. 5*c8dee2aaSAndroid Build Coastguard Worker return (f3 == float3(0.75) && e3 == int3(3)); 6*c8dee2aaSAndroid Build Coastguard Worker} 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) { 9*c8dee2aaSAndroid Build Coastguard Worker float4 value = colorGreen.gggg * 6; 10*c8dee2aaSAndroid Build Coastguard Worker int4 exp; 11*c8dee2aaSAndroid Build Coastguard Worker float4 result; 12*c8dee2aaSAndroid Build Coastguard Worker bool4 ok; 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker // 6 equals 0.75 * 2^3. 15*c8dee2aaSAndroid Build Coastguard Worker result.x = frexp(value.x, exp.x); 16*c8dee2aaSAndroid Build Coastguard Worker ok.x = (result.x == 0.75 && exp.x == 3); 17*c8dee2aaSAndroid Build Coastguard Worker result.xy = frexp(value.xy, exp.xy); 18*c8dee2aaSAndroid Build Coastguard Worker ok.y = (result.y == 0.75 && exp.y == 3); 19*c8dee2aaSAndroid Build Coastguard Worker result.xyz = frexp(value.xyz, exp.xyz); 20*c8dee2aaSAndroid Build Coastguard Worker ok.z = (result.z == 0.75 && exp.z == 3); 21*c8dee2aaSAndroid Build Coastguard Worker result.xyzw = frexp(value.xyzw, exp.xyzw); 22*c8dee2aaSAndroid Build Coastguard Worker ok.w = (result.w == 0.75 && exp.w == 3); 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker bool funcOk = checkIntrinsicAsFunctionArg(frexp(value.wzy, exp.zxw).yxz, exp.yxz); 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Worker return all(ok) && funcOk ? colorGreen : colorRed; 27*c8dee2aaSAndroid Build Coastguard Worker} 28