| uniform half4 colorGreen, colorRed; |
| |
| struct InnerLUT { |
| float3 values; |
| }; |
| struct OuterLUT { |
| InnerLUT inner[3]; |
| }; |
| struct Root { |
| OuterLUT outer[3]; |
| }; |
| |
| half4 main(float2 coords) { |
| Root data; |
| data.outer[0].inner[0].values = float3(1, 10, 100); |
| data.outer[0].inner[1].values = float3(2, 20, 200); |
| data.outer[0].inner[2].values = float3(3, 30, 300); |
| data.outer[1].inner[0].values = float3(4, 40, 400); |
| data.outer[1].inner[1].values = float3(5, 50, 500); |
| data.outer[1].inner[2].values = float3(6, 60, 600); |
| data.outer[2].inner[0].values = float3(7, 70, 700); |
| data.outer[2].inner[1].values = float3(8, 80, 800); |
| data.outer[2].inner[2].values = float3(9, 90, 900); |
| |
| float3 expected = float3(0); |
| for (int i=0; i<3; ++i) { |
| for (int j=0; j<3; ++j) { |
| expected += float3(1, 10, 100); |
| |
| // Compare the float3 as a group. |
| if (data.outer[i].inner[j].values != expected) { |
| return colorRed; |
| } |
| |
| // Compare the float3 as individual units. |
| for (int k=0; k<3; ++k) { |
| if (data.outer[i].inner[j].values[k] != expected[k]) { |
| return colorRed; |
| } |
| } |
| } |
| } |
| |
| return colorGreen; |
| } |