13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# not declared in vertex shader, declared in fragment shader 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_1 33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying declared in fragment shader, no reference in vertex shader" 43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { output float out0 = 1.0; } 53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = 1.0; 193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# declared in vertex shader, no reference in frag shader 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_2 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying declared in vertex shader, no reference in fragment shader" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl_FragColor = vec4(1.0); 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# declared in vertex shader, declared in frag shader 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_3 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying declared in both vertex and fragment shader, but not used" 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl_FragColor = vec4(1.0); 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 613c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# declared in vertex shader, static use in frag shader 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_4 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying declared in both shaders, statically used in fragment shader" 663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { uniform bool u_false = false; } 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform bool u_false; 783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (u_false) 813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl_FragColor = vec4(var); 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl_FragColor = vec4(1.0); 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 863c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# static use in vertex shader, no reference in fragment shader 893c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_5 903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying declared and statically used in vertex shader, no reference in fragment shader" 913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { uniform bool u_false = false; } 923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (u_false) 983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = 1.0; 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl_FragColor = vec4(1.0); 1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# static use in vertex shader, declared in fragment shader 1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_6 1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying declared and statically used in vertex shader, only declared in fragment shader" 1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { uniform bool u_false = false; } 1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (u_false) 1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = 1.0; 1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl_FragColor = vec4(1.0); 1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# static use in vertex shader, used in fragment shader 1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_7 1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying statically used in both vertex and fragment shader" 1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { uniform bool u_false = false; } 1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (u_false) 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = 1.0; 1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (u_false) 1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl_FragColor = vec4(var); 1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl_FragColor = vec4(1.0); 1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_float 1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying of type float" 1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values 1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ]; 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ]; 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = in0; 1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying float var; 1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = var; 1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_vec2 1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying of type vec2" 1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values 1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry input vec2 in0 = [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ]; 1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output vec2 out0 = [ vec2(-1.25, 1.25) | vec2(-25.65, -7.25) | vec2(0.0, 1.0) | vec2(2.25, 2.25) | vec2(3.4, 9.5) | vec2(16.0, 32.0) ]; 1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump vec2 var; 1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = in0; 2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying vec2 var; 2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = var; 2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_vec3 2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying of type vec3" 2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values 2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry input vec3 in0 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ]; 2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output vec3 out0 = [ vec3(-1.25, 1.25, -9.5) | vec3(-25.65, -7.25, 14.21) | vec3(0.0, 1.0, -1.0) | vec3(2.25, 2.25, 22.5) | vec3(3.4, 9.5, 19.5) | vec3(16.0, 32.0, -64.0) ]; 2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump vec3 var; 2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = in0; 2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying vec3 var; 2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = var; 2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_vec4 2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying of type vec4" 2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values 2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry input vec4 in0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ]; 2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output vec4 out0 = [ vec4(-1.25, 1.25, -9.5, -12.2) | vec4(-25.65, -7.25, 14.21, -77.7) | vec4(0.0, 1.0, -1.0, 2.0) | vec4(2.25, 2.25, 22.5, 225.0) | vec4(3.4, 9.5, 19.5, 29.5) | vec4(16.0, 32.0, -64.0, -128.0) ]; 2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump vec4 var; 2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = in0; 2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying vec4 var; 2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = var; 2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_mat2 2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying of type mat2" 2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values 2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry input mat2 in0 = [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ]; 2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output mat2 out0 = [ mat2(1.0, 1.0, 1.0, 1.0) | mat2(-1.25, 1.25, -9.5, -12.2) | mat2(-25.65, -7.25, 14.21, -77.7) | mat2(0.0, 1.0, -1.0, 2.0) | mat2(2.25, 2.25, 22.5, 225.0) | mat2(3.4, 9.5, 19.5, 29.5) | mat2(16.0, 32.0, -64.0, -128.0) ]; 2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump mat2 var; 2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = in0; 2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mat2 var; 2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = var; 2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_mat3 3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying of type mat3" 3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values 3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry input mat3 in0 = [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ]; 3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output mat3 out0 = [ mat3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 9.9) | mat3(0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0, -9.9) | mat3(3.4, 9.5, 19.5, 29.5, 16.0, 32.0, -64.0, -128.0, 256.0) ]; 3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump mat3 var; 3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = in0; 3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mat3 var; 3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = var; 3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_mat4 3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying of type mat4" 3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values 3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry input mat4 in0 = [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ]; 3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output mat4 out0 = [ mat4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0, 2.25, 2.25, 22.5, 225.0) ]; 3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump mat4 var; 3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = in0; 3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mat4 var; 3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = var; 3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# differing precision tests 3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_differing_precision_1 3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying declared as highp in vertex shader, but mediump in fragment shader" 3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values 3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry input float in0 = [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ]; 3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ]; 3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying highp float var; 3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = in0; 3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 3723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = var; 3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# differing precision tests 3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_differing_precision_2 3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying declared as highp in vertex shader, but lowp in fragment shader" 3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values 3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry input float in0 = [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ]; 3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ]; 3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying highp vec2 var; 3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = vec2(in0, 2.0*in0); 4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying lowp vec2 var; 4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = var.y - var.x; 4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# differing precision tests 4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_differing_precision_3 4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying declared as lowp in vertex shader, but mediump in fragment shader" 4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values 4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry input float in0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ]; 4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ]; 4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying lowp vec4 var; 4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = vec4(in0, 2.0*in0, -in0, -in0); 4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump vec4 var; 4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = var.x + var.y + var.z + var.w; 4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# mismatched type, static use but no runtime use in the fragment shader 4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_mismatch_1 4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying type mismatch (float vs. vec2), static use but no runtime use in the fragment shader" 4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expect link_fail 4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = 2.0; 4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump vec2 var; 4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (false) 4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl_FragColor = vec4(var.y); 4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAG_COLOR} = vec4(1.0); 4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# mismatched type, varyings used 4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_type_mismatch_2 4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying type mismatch (float vs. vec2)" 4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expect link_fail 4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var = 2.0; 4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump vec2 var; 4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl_FragColor = var.xyyx; 4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# no declaration in vertex shader, but static use in fragment 4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_illegal_usage_1 4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "varying not declared in vertex shader, but statically used in fragment shader" 5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expect link_fail 5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float var; 5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl_FragColor = vec4(var); 5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# integer varyings not allowed 5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase invalid_varying_type_int 5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "integer varying used" 5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expect compile_fail 5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump int var; 5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump int var; 5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl_FragColor = vec4(1.0); 5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# bool varyings not allowed 5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase invalid_varying_type_bool 5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "boolean varying used" 5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expect compile_fail 5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying bool var; 5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying bool var; 5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl_FragColor = vec4(1.0); 5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# struct varyings not allowed 5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase invalid_varying_type_struct 5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "struct varying used" 5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expect compile_fail 5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying struct { mediump float foo; } var; 5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying struct { mediump float foo; } var; 5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl_FragColor = vec4(1.0); 5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_readback_1 5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "read back (an already written) varying in the vertex shader" 5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values 5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry input float in0 = [ 1.0 | 0.0 | -2.0 | 10.0 ]; 5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = [ 3.0 | 0.0 | -6.0 | 30.0 ]; 5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying float var1; 5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying float var2; 5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var1 = in0; 5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var2 = var1 + in0; 5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying float var1; 6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying float var2; 6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = var1 + var2; 6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase varying_writeback_1 6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "write back a varying in the fragment shader" 6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expect compile_fail 6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying float var1; 6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying float var2; 6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var1 = in0; 6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var2 = var1 + in0; 6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying float var1; 6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying float var2; 6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry var2 = var1; 6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = var1; 6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry# Struct linkage handling 6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct 6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Same uniform struct in both shaders" 6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.a = 1.0; 6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.b = 2.0; 6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 6523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a; mediump float b;}; 6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float dummy; 6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry dummy = val.a + val.b; 6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a; mediump float b;}; 6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float dummy; 6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = val.b + val.a; 6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = out0 + dummy; 6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = out0 - dummy; 6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 6793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_vertex_only 6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used only in vertex." 6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.a = 1.0; 6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.b = 2.0; 6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a; mediump float b;}; 6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a + val.b; 6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a; mediump float b;}; 7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res; 7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_fragment_only 7133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used only in fragment." 7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.a = 1.0; 7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.b = 2.0; 7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 7213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a; mediump float b;}; 7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a; mediump float b;}; 7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = val.a + val.b; 7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial 7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used partially in both." 7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.a = 1.0; 7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.b = 2.0; 7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a; mediump float b;}; 7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a; 7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 7593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a; mediump float b;}; 7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + val.b; 7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 7693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 7713c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 7723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_vec4 7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Same uniform struct in both shaders. Datatype vec4" 7753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 7763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 7773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 7783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 7793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 7813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 7823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec4 b;}; 7833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 7843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float dummy; 7853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 7863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry dummy = val.a.x + val.b.y; 7883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 7893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 7903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 7913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 7923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 7933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec4 b;}; 7943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float dummy; 7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 7993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = val.b.y + val.a.x; 8003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = out0 + dummy; 8013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = out0 - dummy; 8023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 8033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 8053c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 8063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_vertex_only_vec4 8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used only in vertex. Datatype vec4 " 8093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 8123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 8163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec4 b;}; 8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a.x + val.b.y; 8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec4 b;}; 8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 8293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 8303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 8323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res; 8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 8383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8393c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_fragment_only_vec4 8403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used only in fragment. Datatype vec4" 8413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 8423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 8433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec4 b;}; 8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 8533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 8553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec4 b;}; 8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 8603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = val.a.x + val.b.y; 8633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8683c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_vec4 8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used partially in both. Datatype vec4" 8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec4 b;}; 8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 8803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a.x; 8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec4 b;}; 8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 8913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + val.b.y; 8953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_vec4_vec3 9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Same uniform struct in both shaders. Datatype vec4 and vec3" 9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec3 b;}; 9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float dummy; 9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry dummy = val.a.x + val.b.y; 9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec3 b;}; 9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float dummy; 9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = val.b.y + val.a.x; 9273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = out0 + dummy; 9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = out0 - dummy; 9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_vertex_only_vec4_vec3 9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and vec3" 9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec3 b;}; 9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a.x + val.b.y; 9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec3 b;}; 9553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res; 9613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_fragment_only_vec4_vec3 9673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and vec3" 9683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec3 b;}; 9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 9783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 9803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 9843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec3 b;}; 9853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 9883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = val.a.x + val.b.y; 9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 9913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 9923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 9933c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 9943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9953c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_vec4_vec3 9963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used partially in both. Datatype vec4 and vec3" 9973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 9983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 9993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 10013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 10043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec3 b;}; 10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 10083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a.x; 10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 10133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump vec3 b;}; 10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + val.b.y; 10223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 10253c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 10263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10273c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_vec4_float 10283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Same uniform struct in both shaders. Datatype vec4 and float" 10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 10303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.b = 2.0; 10323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 10333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 10353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 10363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump float b;}; 10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float dummy; 10393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 10403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry dummy = val.a.x + val.b; 10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 10433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump float b;}; 10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float dummy; 10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 10513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = val.b + val.a.x; 10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = out0 + dummy; 10553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = out0 - dummy; 10563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_vertex_only_vec4_float 10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and float" 10633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 10653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.b = 2.0; 10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump float b;}; 10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a.x + val.b; 10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 10773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump float b;}; 10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 10853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 10863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res; 10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_fragment_only_vec4_float 10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and float" 10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 10963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.b = 2.0; 10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump float b;}; 11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 11113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump float b;}; 11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 11133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 11153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = val.a.x + val.b; 11173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 11183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 11203c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 11213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11223c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_vec4_float 11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used partially in both. Datatype vec4 and float" 11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.b = 2.0; 11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump float b;}; 11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 11343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a.x; 11373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; mediump float b;}; 11433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 11443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 11453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 11463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 11473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + val.b; 11493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 11503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 11523c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 11533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11543c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_vec4_struct 11553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec4" 11563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 11573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 11583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.b.c = vec4(1.0, 2.0, 3.0, 4.0); 11593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 11603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 11623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 11633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Inner {mediump vec4 c;}; 11643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; Inner b;}; 11653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 11663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 11673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 11683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a.x; 11703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 11713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 11733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 11743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 11753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Inner {mediump vec4 c;}; 11763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; Inner b;}; 11773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 11783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 11793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 11803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 11813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + val.b.c.y; 11833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 11843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 11863c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 11873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11903c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_vec4_vec3_struct 11913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec3" 11923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 11933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 11943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec3 val.b.c = vec3(1.0, 2.0, 3.0); 11953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 11963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 11983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 11993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Inner {mediump vec3 c;}; 12003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; Inner b;}; 12013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 12023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 12033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 12043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a.x; 12063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 12073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 12093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 12103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 12113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Inner {mediump vec3 c;}; 12123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a; Inner b;}; 12133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 12143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 12153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 12163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 12173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + val.b.c.y; 12193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 12203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 12223c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 12233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12243c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_vec2_vec3 12253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used partially in both. Datatype vec2 and vec3" 12263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 12273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec2 val.a = vec2(1.0, 2.0); 12283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 12293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 12303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 12323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 12333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec2 a; mediump vec3 b;}; 12343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 12353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 12363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 12373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a.x; 12393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 12403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 12423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 12433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 12443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec2 a; mediump vec3 b;}; 12453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 12463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 12473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 12483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 12493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + val.b.y; 12513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 12523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 12543c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 12553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12563c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_vec2_int 12573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used partially in both. Datatype vec2 and int" 12583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 12593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec2 val.a = vec2(1.0, 2.0); 12603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform int val.b = 2; 12613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 12623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 12643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 12653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec2 a; mediump int b;}; 12663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 12673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 12683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 12693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a.x; 12713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 12723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 12743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 12753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 12763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec2 a; mediump int b;}; 12773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 12783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 12793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 12803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 12813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + float(val.b); 12833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 12843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 12863c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 12873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12883c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_int_float 12893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used partially in both. Datatype int and float" 12903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 12913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.a = 1.0; 12923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform int val.b = 2; 12933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 12943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 12963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 12973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a; mediump int b;}; 12983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 12993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 13003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 13013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a; 13033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 13043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 13063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 13073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 13083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a; mediump int b;}; 13093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 13103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 13113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 13123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 13133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + float(val.b); 13153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 13163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 13183c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 13193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13203c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_bvec2_vec2 13213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used partially in both. Datatype bvec2 and vec2" 13223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 13233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform bvec2 val.a = bvec2(true, true); 13243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec2 val.b = vec2(1.0, 2.0); 13253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 13263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 13283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 13293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {bvec2 a; mediump vec2 b;}; 13303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 13313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 13323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 13333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = float(val.a.x); 13353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 13363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 13383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 13393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 13403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {bvec2 a; mediump vec2 b;}; 13413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 13423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 13433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 13443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 13453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + val.b.y; 13473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 13483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 13503c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 13513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13523c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_ivec2_vec2 13533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and vec2" 13543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 13553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform ivec2 val.a = ivec2(1, 2); 13563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform vec2 val.b = vec2(1.0, 2.0); 13573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 13583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 13603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 13613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump ivec2 a; mediump vec2 b;}; 13623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 13633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 13643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 13653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = vec2(val.a).x; 13673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 13683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 13703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 13713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 13723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump ivec2 a; mediump vec2 b;}; 13733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 13743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 13753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 13763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 13773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + val.b.y; 13793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 13803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 13823c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 13833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13843c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_partial_ivec2_ivec2 13853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and ivec2" 13863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 13873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform ivec2 val.a = ivec2(1, 2); 13883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform ivec2 val.b = ivec2(1, 2); 13893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 3.0; 13903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 13923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 13933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump ivec2 a; mediump ivec2 b;}; 13943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 13953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 13963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 13973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = vec2(val.a).x; 13993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 14003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 14023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 14033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 14043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump ivec2 a; mediump ivec2 b;}; 14053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 14063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 14073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 14083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 14093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + vec2(val.b).y; 14113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 14123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 14143c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 14153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14163c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_type_conflict_1 14173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Fragment struct has one less member than fragment version" 14183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expect link_fail 14193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values {output float out0 = 3.0;} 14203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 14213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 14223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a; mediump float b;}; 14233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 14243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 14253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 14263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a; 14283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 14293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 14313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 14323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 14333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a;}; 14343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 14353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 14363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 14373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 14383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + val.a; 14403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 14413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 14433c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 14443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14453c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_type_conflict_2 14463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Vertex struct has int, fragment struct has float." 14473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expect link_fail 14483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values {output float out0 = 3.0;} 14493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 14503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 14513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump int a;}; 14523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 14533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 14543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 14553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = float(val.a); 14573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 14583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 14603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 14613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 14623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a;}; 14633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 14643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 14653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 14663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 14673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = val.a; 14693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 14703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 14723c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 14733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14743c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_type_conflict_3 14753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Vertex struct has vec3, fragment struct has vec4." 14763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expect link_fail 14773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values {output float out0 = 3.0;} 14783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 14793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 14803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec3 a;}; 14813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 14823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 14833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 14843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = float(val.a.x); 14863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 14873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 14883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 14893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 14903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 14913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump vec4 a;}; 14923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 14933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 14943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 14953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 14963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 14973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = val.a.x; 14983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 14993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 15013c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 15023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15033c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_precision_conflict_1 15043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Vertex side struct has highp, fragment side struct mediump." 15053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expect link_fail 15063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values {output float out0 = 3.0;} 15073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 15083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 15093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {highp float a;}; 15103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 15113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 15123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 15133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 15143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a; 15153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 15163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 15183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 15193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 15203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a;}; 15213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 15223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 15233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 15243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 15253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 15263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = val.a; 15273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 15283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 15303c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 15313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15323c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_precision_conflict_2 15333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Vertex side struct has mediump, fragment side struct lowp." 15343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expect link_fail 15353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values {output float out0 = 3.0;} 15363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 15373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 15383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a;}; 15393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 15403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 15413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 15423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 15433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a; 15443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 15453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 15473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 15483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 15493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {lowp float a;}; 15503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 15513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 15523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 15533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 15543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 15553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = val.a; 15563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 15573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 15593c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 15603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15613c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_precision_conflict_3 15623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Vertex side struct has lowp, fragment side struct mediump." 15633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expect link_fail 15643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values {output float out0 = 3.0;} 15653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 15663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 15673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {lowp float a;}; 15683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 15693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 15703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 15713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 15723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a; 15733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 15743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 15763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 15773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 15783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {mediump float a;}; 15793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 15803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 15813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 15823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 15833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 15843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = val.a; 15853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 15863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 15873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 15883c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 15893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15903c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_precision_conflict_4 15913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Vertex side struct has lowp, fragment side struct implicit mediump." 15923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry expect link_fail 15933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values {output float out0 = 3.0;} 15943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 15953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 15963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {lowp float a;}; 15973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 15983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 15993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 16003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.a; 16023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 16033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 16053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 16063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 16073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {float a;}; 16083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Struct val; 16093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 16103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 16113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 16123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = val.a; 16143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 16153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 16173c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 16183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16193c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_use_case_rip 16203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Complex Light struct from use case tests." 16213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 16223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.constantAttenuation = 1.0; 16233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.quadraticAttenuation = 1.0; 16243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 2.0; 16253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 16273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Light 16283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump vec3 color; 16303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry highp vec4 position; 16313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry highp vec3 direction; 16323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump float constantAttenuation; 16333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump float linearAttenuation; 16343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump float quadraticAttenuation; 16353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 16363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 16373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Light val; 16383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 16393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 16403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.constantAttenuation; 16423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 16433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 16453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 16463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 16473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Light 16483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump vec3 color; 16503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry highp vec4 position; 16513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry highp vec3 direction; 16523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump float constantAttenuation; 16533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump float linearAttenuation; 16543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump float quadraticAttenuation; 16553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 16563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {float a;}; 16573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Light val; 16583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 16593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 16603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 16613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + val.quadraticAttenuation; 16633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 16643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 16663c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 16673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16683c827367444ee418f129b2c238299f49d3264554Jarkko Poyrycase uniform_struct_use_case_rip_sans_highp 16693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry desc "Complex Light struct from use case tests, without highp usage" 16703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry values { 16713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.constantAttenuation = 1.0; 16723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform float val.quadraticAttenuation = 1.0; 16733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry output float out0 = 2.0; 16743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry vertex "" 16763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Light 16773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump vec3 color; 16793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump vec4 position; 16803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump vec3 direction; 16813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump float constantAttenuation; 16823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump float linearAttenuation; 16833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump float quadraticAttenuation; 16843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 16853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_DECLARATIONS} 16863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Light val; 16873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 16883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 16893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry res = val.constantAttenuation; 16913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${VERTEX_OUTPUT} 16923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 16943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fragment "" 16953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry precision mediump float; 16963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Light 16973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump vec3 color; 16993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump vec4 position; 17003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump vec3 direction; 17013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump float constantAttenuation; 17023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump float linearAttenuation; 17033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry mediump float quadraticAttenuation; 17043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }; 17053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry struct Struct {float a;}; 17063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry uniform Light val; 17073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_DECLARATIONS} 17083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry varying mediump float res; 17093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void main() 17103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 17113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry out0 = res + val.quadraticAttenuation; 17123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ${FRAGMENT_OUTPUT} 17133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 17143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry "" 17153c827367444ee418f129b2c238299f49d3264554Jarkko Poyryend 1716