#version 400 layout(constant_id = 16) const int arraySize = 5; in vec4 ucol[arraySize]; layout(constant_id = 17) const bool spBool = true; layout(constant_id = 18) const float spFloat = 3.14; layout(constant_id = 19) const double spDouble = 3.1415926535897932384626433832795; layout(constant_id = 22) const uint scale = 2; layout(constant_id = 24) gl_MaxImageUnits; out vec4 color; out int size; // parameter should be considered same type as ucol void foo(vec4 p[arraySize]); void main() { color = ucol[2]; size = arraySize; if (spBool) color *= scale; color += float(spDouble / spFloat); foo(ucol); } layout(constant_id = 116) const int dupArraySize = 12; in vec4 dupUcol[dupArraySize]; layout(constant_id = 117) const bool spDupBool = true; layout(constant_id = 118) const float spDupFloat = 3.14; layout(constant_id = 119) const double spDupDouble = 3.1415926535897932384626433832795; layout(constant_id = 122) const uint dupScale = 2; void foo(vec4 p[arraySize]) { color += dupUcol[2]; size += dupArraySize; if (spDupBool) color *= dupScale; color += float(spDupDouble / spDupFloat); } int builtin_spec_constant() { int result = gl_MaxImageUnits; return result; }