1*c8dee2aaSAndroid Build Coastguard Workeruniform half4 colorGreen, colorRed; 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Worker// These tests verify that constructor expressions with side-effects do not get folded away. 4*c8dee2aaSAndroid Build Coastguard Worker 5*c8dee2aaSAndroid Build Coastguard Workerbool test_vector() { 6*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker float num = 0.0; 9*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float2(++num, 0).y == 0.0; // num => 1 10*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float2(0, ++num).x == 0.0; // num => 2 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float3(++num, float2(1, 0)).yz == float2(1, 0); // num => 3 13*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float3(float2(1, 0), ++num).xy == float2(1, 0); // num => 4 14*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float3(float2(++num, 1), 0).yz == float2(1, 0); // num => 5 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float4(++num, float3(1, 0, 0)).yzw == float3(1, 0, 0); // num => 6 17*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float4(1, ++num, float2(1, 0)).x == 1.0; // num => 7 18*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float4(float2(1, 0), ++num, 1).w == 1.0; // num => 8 19*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float4(float2(1, 0), float2(1, ++num)).xyz == float3(1, 0, 1); // num => 9 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker return ok && num == 9.0; 22*c8dee2aaSAndroid Build Coastguard Worker} 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Workerbool test_matrix() { 25*c8dee2aaSAndroid Build Coastguard Worker bool ok = true; 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker float num = 0.0; 28*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float2x2(1, 2, 3, ++num)[0] == float2(1, 2); // num => 1 29*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float2x2(float2(++num), 3, 4)[1] == float2(3, 4); // num => 2 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float3x3(float3(1), float3(++num), float3(0))[0] == float3(1); // num => 3 32*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float3x3(float3(1), float3(++num), float3(0))[2] == float3(0); // num => 4 33*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float3x3(float3(++num), float3(1), float3(0))[1] == float3(1); // num => 5 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float3x3(1, 2, 3, 4, 5, ++num, 7, 8, 9)[0] == float3(1, 2, 3); // num => 6 36*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float3x3(1, 2, 3, 4, 5, 6, num++, 8, 9)[1] == float3(4, 5, 6); // num => 7 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker // num => 8 39*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float4x4(float4(++num), float4(1), float4(2), float4(3))[1] == float4(1); 40*c8dee2aaSAndroid Build Coastguard Worker // num => 9 41*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float4x4(float4(1), float4(++num), float4(2), float4(3))[2] == float4(2); 42*c8dee2aaSAndroid Build Coastguard Worker // num => 10 43*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float4x4(float4(1), float4(1), float4(++num), float4(3))[3] == float4(3); 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker ok = ok && float4x4(1, 2, 3, 4, 46*c8dee2aaSAndroid Build Coastguard Worker 5, 6, 7, 8, 47*c8dee2aaSAndroid Build Coastguard Worker 9, 10, 11, 12, 48*c8dee2aaSAndroid Build Coastguard Worker 13, 14, ++num, 16)[3].xy == float2(13, 14); // num => 11 49*c8dee2aaSAndroid Build Coastguard Worker 50*c8dee2aaSAndroid Build Coastguard Worker return ok && num == 11.0; 51*c8dee2aaSAndroid Build Coastguard Worker} 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Workerhalf4 main(float2 coords) { 54*c8dee2aaSAndroid Build Coastguard Worker return test_vector() && test_matrix() ? colorGreen : colorRed; 55*c8dee2aaSAndroid Build Coastguard Worker} 56