uniform half4 colorGreen, colorRed; struct InnerLUT { float3 values; }; struct OuterLUT { InnerLUT inner[3]; }; struct Root { int valueAtRoot; OuterLUT outer[3]; }; half4 main(float2 coords) { Root data; data.valueAtRoot = 1234; float3 values = float3(0); for (int i=0; i<3; ++i) { for (int j=0; j<3; ++j) { values += float3(1, 10, 100); for (int k=0; k<3; ++k) { data.outer[i].inner[j].values[k] = values[k]; } } } bool ok = data.valueAtRoot == 1234 && 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); return ok ? colorGreen : colorRed; }