1e5c31af7Sopenharmony_ci# not declared in vertex shader, declared in fragment shader 2e5c31af7Sopenharmony_cicase varying_1 3e5c31af7Sopenharmony_ci desc "varying declared in fragment shader, no reference in vertex shader" 4e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 5e5c31af7Sopenharmony_ci vertex "" 6e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 7e5c31af7Sopenharmony_ci void main() 8e5c31af7Sopenharmony_ci { 9e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 10e5c31af7Sopenharmony_ci } 11e5c31af7Sopenharmony_ci "" 12e5c31af7Sopenharmony_ci fragment "" 13e5c31af7Sopenharmony_ci precision mediump float; 14e5c31af7Sopenharmony_ci varying mediump float var; 15e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 16e5c31af7Sopenharmony_ci void main() 17e5c31af7Sopenharmony_ci { 18e5c31af7Sopenharmony_ci out0 = 1.0; 19e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 20e5c31af7Sopenharmony_ci } 21e5c31af7Sopenharmony_ci "" 22e5c31af7Sopenharmony_ciend 23e5c31af7Sopenharmony_ci 24e5c31af7Sopenharmony_ci# declared in vertex shader, no reference in frag shader 25e5c31af7Sopenharmony_cicase varying_2 26e5c31af7Sopenharmony_ci desc "varying declared in vertex shader, no reference in fragment shader" 27e5c31af7Sopenharmony_ci vertex "" 28e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 29e5c31af7Sopenharmony_ci varying mediump float var; 30e5c31af7Sopenharmony_ci void main() 31e5c31af7Sopenharmony_ci { 32e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 33e5c31af7Sopenharmony_ci } 34e5c31af7Sopenharmony_ci "" 35e5c31af7Sopenharmony_ci fragment "" 36e5c31af7Sopenharmony_ci void main() 37e5c31af7Sopenharmony_ci { 38e5c31af7Sopenharmony_ci gl_FragColor = vec4(1.0); 39e5c31af7Sopenharmony_ci } 40e5c31af7Sopenharmony_ci "" 41e5c31af7Sopenharmony_ciend 42e5c31af7Sopenharmony_ci 43e5c31af7Sopenharmony_ci# declared in vertex shader, declared in frag shader 44e5c31af7Sopenharmony_cicase varying_3 45e5c31af7Sopenharmony_ci desc "varying declared in both vertex and fragment shader, but not used" 46e5c31af7Sopenharmony_ci vertex "" 47e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 48e5c31af7Sopenharmony_ci varying mediump float var; 49e5c31af7Sopenharmony_ci void main() 50e5c31af7Sopenharmony_ci { 51e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 52e5c31af7Sopenharmony_ci } 53e5c31af7Sopenharmony_ci "" 54e5c31af7Sopenharmony_ci fragment "" 55e5c31af7Sopenharmony_ci varying mediump float var; 56e5c31af7Sopenharmony_ci void main() 57e5c31af7Sopenharmony_ci { 58e5c31af7Sopenharmony_ci gl_FragColor = vec4(1.0); 59e5c31af7Sopenharmony_ci } 60e5c31af7Sopenharmony_ci "" 61e5c31af7Sopenharmony_ciend 62e5c31af7Sopenharmony_ci 63e5c31af7Sopenharmony_ci# declared in vertex shader, static use in frag shader 64e5c31af7Sopenharmony_cicase varying_4 65e5c31af7Sopenharmony_ci desc "varying declared in both shaders, statically used in fragment shader" 66e5c31af7Sopenharmony_ci values { uniform bool u_false = false; } 67e5c31af7Sopenharmony_ci vertex "" 68e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 69e5c31af7Sopenharmony_ci varying mediump float var; 70e5c31af7Sopenharmony_ci void main() 71e5c31af7Sopenharmony_ci { 72e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 73e5c31af7Sopenharmony_ci } 74e5c31af7Sopenharmony_ci "" 75e5c31af7Sopenharmony_ci fragment "" 76e5c31af7Sopenharmony_ci varying mediump float var; 77e5c31af7Sopenharmony_ci uniform bool u_false; 78e5c31af7Sopenharmony_ci void main() 79e5c31af7Sopenharmony_ci { 80e5c31af7Sopenharmony_ci if (u_false) 81e5c31af7Sopenharmony_ci gl_FragColor = vec4(var); 82e5c31af7Sopenharmony_ci else 83e5c31af7Sopenharmony_ci gl_FragColor = vec4(1.0); 84e5c31af7Sopenharmony_ci } 85e5c31af7Sopenharmony_ci "" 86e5c31af7Sopenharmony_ciend 87e5c31af7Sopenharmony_ci 88e5c31af7Sopenharmony_ci# static use in vertex shader, no reference in fragment shader 89e5c31af7Sopenharmony_cicase varying_5 90e5c31af7Sopenharmony_ci desc "varying declared and statically used in vertex shader, no reference in fragment shader" 91e5c31af7Sopenharmony_ci values { uniform bool u_false = false; } 92e5c31af7Sopenharmony_ci vertex "" 93e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 94e5c31af7Sopenharmony_ci varying mediump float var; 95e5c31af7Sopenharmony_ci void main() 96e5c31af7Sopenharmony_ci { 97e5c31af7Sopenharmony_ci if (u_false) 98e5c31af7Sopenharmony_ci var = 1.0; 99e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 100e5c31af7Sopenharmony_ci } 101e5c31af7Sopenharmony_ci "" 102e5c31af7Sopenharmony_ci fragment "" 103e5c31af7Sopenharmony_ci void main() 104e5c31af7Sopenharmony_ci { 105e5c31af7Sopenharmony_ci gl_FragColor = vec4(1.0); 106e5c31af7Sopenharmony_ci } 107e5c31af7Sopenharmony_ci "" 108e5c31af7Sopenharmony_ciend 109e5c31af7Sopenharmony_ci 110e5c31af7Sopenharmony_ci# static use in vertex shader, declared in fragment shader 111e5c31af7Sopenharmony_cicase varying_6 112e5c31af7Sopenharmony_ci desc "varying declared and statically used in vertex shader, only declared in fragment shader" 113e5c31af7Sopenharmony_ci values { uniform bool u_false = false; } 114e5c31af7Sopenharmony_ci vertex "" 115e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 116e5c31af7Sopenharmony_ci varying mediump float var; 117e5c31af7Sopenharmony_ci void main() 118e5c31af7Sopenharmony_ci { 119e5c31af7Sopenharmony_ci if (u_false) 120e5c31af7Sopenharmony_ci var = 1.0; 121e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 122e5c31af7Sopenharmony_ci } 123e5c31af7Sopenharmony_ci "" 124e5c31af7Sopenharmony_ci fragment "" 125e5c31af7Sopenharmony_ci varying mediump float var; 126e5c31af7Sopenharmony_ci void main() 127e5c31af7Sopenharmony_ci { 128e5c31af7Sopenharmony_ci gl_FragColor = vec4(1.0); 129e5c31af7Sopenharmony_ci } 130e5c31af7Sopenharmony_ci "" 131e5c31af7Sopenharmony_ciend 132e5c31af7Sopenharmony_ci 133e5c31af7Sopenharmony_ci# static use in vertex shader, used in fragment shader 134e5c31af7Sopenharmony_cicase varying_7 135e5c31af7Sopenharmony_ci desc "varying statically used in both vertex and fragment shader" 136e5c31af7Sopenharmony_ci values { uniform bool u_false = false; } 137e5c31af7Sopenharmony_ci vertex "" 138e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 139e5c31af7Sopenharmony_ci varying mediump float var; 140e5c31af7Sopenharmony_ci void main() 141e5c31af7Sopenharmony_ci { 142e5c31af7Sopenharmony_ci if (u_false) 143e5c31af7Sopenharmony_ci var = 1.0; 144e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 145e5c31af7Sopenharmony_ci } 146e5c31af7Sopenharmony_ci "" 147e5c31af7Sopenharmony_ci fragment "" 148e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 149e5c31af7Sopenharmony_ci varying mediump float var; 150e5c31af7Sopenharmony_ci void main() 151e5c31af7Sopenharmony_ci { 152e5c31af7Sopenharmony_ci if (u_false) 153e5c31af7Sopenharmony_ci gl_FragColor = vec4(var); 154e5c31af7Sopenharmony_ci else 155e5c31af7Sopenharmony_ci gl_FragColor = vec4(1.0); 156e5c31af7Sopenharmony_ci } 157e5c31af7Sopenharmony_ci "" 158e5c31af7Sopenharmony_ciend 159e5c31af7Sopenharmony_ci 160e5c31af7Sopenharmony_cicase varying_type_float 161e5c31af7Sopenharmony_ci desc "varying of type float" 162e5c31af7Sopenharmony_ci values 163e5c31af7Sopenharmony_ci { 164e5c31af7Sopenharmony_ci input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ]; 165e5c31af7Sopenharmony_ci output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ]; 166e5c31af7Sopenharmony_ci } 167e5c31af7Sopenharmony_ci vertex "" 168e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 169e5c31af7Sopenharmony_ci varying mediump float var; 170e5c31af7Sopenharmony_ci void main() 171e5c31af7Sopenharmony_ci { 172e5c31af7Sopenharmony_ci var = in0; 173e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 174e5c31af7Sopenharmony_ci } 175e5c31af7Sopenharmony_ci "" 176e5c31af7Sopenharmony_ci fragment "" 177e5c31af7Sopenharmony_ci precision mediump float; 178e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 179e5c31af7Sopenharmony_ci varying float var; 180e5c31af7Sopenharmony_ci void main() 181e5c31af7Sopenharmony_ci { 182e5c31af7Sopenharmony_ci out0 = var; 183e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 184e5c31af7Sopenharmony_ci } 185e5c31af7Sopenharmony_ci "" 186e5c31af7Sopenharmony_ciend 187e5c31af7Sopenharmony_ci 188e5c31af7Sopenharmony_cicase varying_type_vec2 189e5c31af7Sopenharmony_ci desc "varying of type vec2" 190e5c31af7Sopenharmony_ci values 191e5c31af7Sopenharmony_ci { 192e5c31af7Sopenharmony_ci 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) ]; 193e5c31af7Sopenharmony_ci 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) ]; 194e5c31af7Sopenharmony_ci } 195e5c31af7Sopenharmony_ci vertex "" 196e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 197e5c31af7Sopenharmony_ci varying mediump vec2 var; 198e5c31af7Sopenharmony_ci void main() 199e5c31af7Sopenharmony_ci { 200e5c31af7Sopenharmony_ci var = in0; 201e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 202e5c31af7Sopenharmony_ci } 203e5c31af7Sopenharmony_ci "" 204e5c31af7Sopenharmony_ci fragment "" 205e5c31af7Sopenharmony_ci precision mediump float; 206e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 207e5c31af7Sopenharmony_ci varying vec2 var; 208e5c31af7Sopenharmony_ci void main() 209e5c31af7Sopenharmony_ci { 210e5c31af7Sopenharmony_ci out0 = var; 211e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 212e5c31af7Sopenharmony_ci } 213e5c31af7Sopenharmony_ci "" 214e5c31af7Sopenharmony_ciend 215e5c31af7Sopenharmony_ci 216e5c31af7Sopenharmony_cicase varying_type_vec3 217e5c31af7Sopenharmony_ci desc "varying of type vec3" 218e5c31af7Sopenharmony_ci values 219e5c31af7Sopenharmony_ci { 220e5c31af7Sopenharmony_ci 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) ]; 221e5c31af7Sopenharmony_ci 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) ]; 222e5c31af7Sopenharmony_ci } 223e5c31af7Sopenharmony_ci vertex "" 224e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 225e5c31af7Sopenharmony_ci varying mediump vec3 var; 226e5c31af7Sopenharmony_ci void main() 227e5c31af7Sopenharmony_ci { 228e5c31af7Sopenharmony_ci var = in0; 229e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 230e5c31af7Sopenharmony_ci } 231e5c31af7Sopenharmony_ci "" 232e5c31af7Sopenharmony_ci fragment "" 233e5c31af7Sopenharmony_ci precision mediump float; 234e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 235e5c31af7Sopenharmony_ci varying vec3 var; 236e5c31af7Sopenharmony_ci void main() 237e5c31af7Sopenharmony_ci { 238e5c31af7Sopenharmony_ci out0 = var; 239e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 240e5c31af7Sopenharmony_ci } 241e5c31af7Sopenharmony_ci "" 242e5c31af7Sopenharmony_ciend 243e5c31af7Sopenharmony_ci 244e5c31af7Sopenharmony_cicase varying_type_vec4 245e5c31af7Sopenharmony_ci desc "varying of type vec4" 246e5c31af7Sopenharmony_ci values 247e5c31af7Sopenharmony_ci { 248e5c31af7Sopenharmony_ci 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) ]; 249e5c31af7Sopenharmony_ci 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) ]; 250e5c31af7Sopenharmony_ci } 251e5c31af7Sopenharmony_ci vertex "" 252e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 253e5c31af7Sopenharmony_ci varying mediump vec4 var; 254e5c31af7Sopenharmony_ci void main() 255e5c31af7Sopenharmony_ci { 256e5c31af7Sopenharmony_ci var = in0; 257e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 258e5c31af7Sopenharmony_ci } 259e5c31af7Sopenharmony_ci "" 260e5c31af7Sopenharmony_ci fragment "" 261e5c31af7Sopenharmony_ci precision mediump float; 262e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 263e5c31af7Sopenharmony_ci varying vec4 var; 264e5c31af7Sopenharmony_ci void main() 265e5c31af7Sopenharmony_ci { 266e5c31af7Sopenharmony_ci out0 = var; 267e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 268e5c31af7Sopenharmony_ci } 269e5c31af7Sopenharmony_ci "" 270e5c31af7Sopenharmony_ciend 271e5c31af7Sopenharmony_ci 272e5c31af7Sopenharmony_cicase varying_type_mat2 273e5c31af7Sopenharmony_ci desc "varying of type mat2" 274e5c31af7Sopenharmony_ci values 275e5c31af7Sopenharmony_ci { 276e5c31af7Sopenharmony_ci 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) ]; 277e5c31af7Sopenharmony_ci 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) ]; 278e5c31af7Sopenharmony_ci } 279e5c31af7Sopenharmony_ci vertex "" 280e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 281e5c31af7Sopenharmony_ci varying mediump mat2 var; 282e5c31af7Sopenharmony_ci void main() 283e5c31af7Sopenharmony_ci { 284e5c31af7Sopenharmony_ci var = in0; 285e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 286e5c31af7Sopenharmony_ci } 287e5c31af7Sopenharmony_ci "" 288e5c31af7Sopenharmony_ci fragment "" 289e5c31af7Sopenharmony_ci precision mediump float; 290e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 291e5c31af7Sopenharmony_ci varying mat2 var; 292e5c31af7Sopenharmony_ci void main() 293e5c31af7Sopenharmony_ci { 294e5c31af7Sopenharmony_ci out0 = var; 295e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 296e5c31af7Sopenharmony_ci } 297e5c31af7Sopenharmony_ci "" 298e5c31af7Sopenharmony_ciend 299e5c31af7Sopenharmony_ci 300e5c31af7Sopenharmony_cicase varying_type_mat3 301e5c31af7Sopenharmony_ci desc "varying of type mat3" 302e5c31af7Sopenharmony_ci values 303e5c31af7Sopenharmony_ci { 304e5c31af7Sopenharmony_ci 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) ]; 305e5c31af7Sopenharmony_ci 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) ]; 306e5c31af7Sopenharmony_ci } 307e5c31af7Sopenharmony_ci vertex "" 308e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 309e5c31af7Sopenharmony_ci varying mediump mat3 var; 310e5c31af7Sopenharmony_ci void main() 311e5c31af7Sopenharmony_ci { 312e5c31af7Sopenharmony_ci var = in0; 313e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 314e5c31af7Sopenharmony_ci } 315e5c31af7Sopenharmony_ci "" 316e5c31af7Sopenharmony_ci fragment "" 317e5c31af7Sopenharmony_ci precision mediump float; 318e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 319e5c31af7Sopenharmony_ci varying mat3 var; 320e5c31af7Sopenharmony_ci void main() 321e5c31af7Sopenharmony_ci { 322e5c31af7Sopenharmony_ci out0 = var; 323e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 324e5c31af7Sopenharmony_ci } 325e5c31af7Sopenharmony_ci "" 326e5c31af7Sopenharmony_ciend 327e5c31af7Sopenharmony_ci 328e5c31af7Sopenharmony_cicase varying_type_mat4 329e5c31af7Sopenharmony_ci desc "varying of type mat4" 330e5c31af7Sopenharmony_ci values 331e5c31af7Sopenharmony_ci { 332e5c31af7Sopenharmony_ci 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) ]; 333e5c31af7Sopenharmony_ci 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) ]; 334e5c31af7Sopenharmony_ci } 335e5c31af7Sopenharmony_ci vertex "" 336e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 337e5c31af7Sopenharmony_ci varying mediump mat4 var; 338e5c31af7Sopenharmony_ci void main() 339e5c31af7Sopenharmony_ci { 340e5c31af7Sopenharmony_ci var = in0; 341e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 342e5c31af7Sopenharmony_ci } 343e5c31af7Sopenharmony_ci "" 344e5c31af7Sopenharmony_ci fragment "" 345e5c31af7Sopenharmony_ci precision mediump float; 346e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 347e5c31af7Sopenharmony_ci varying mat4 var; 348e5c31af7Sopenharmony_ci void main() 349e5c31af7Sopenharmony_ci { 350e5c31af7Sopenharmony_ci out0 = var; 351e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 352e5c31af7Sopenharmony_ci } 353e5c31af7Sopenharmony_ci "" 354e5c31af7Sopenharmony_ciend 355e5c31af7Sopenharmony_ci 356e5c31af7Sopenharmony_ci# differing precision tests 357e5c31af7Sopenharmony_cicase varying_differing_precision_1 358e5c31af7Sopenharmony_ci desc "varying declared as highp in vertex shader, but mediump in fragment shader" 359e5c31af7Sopenharmony_ci values 360e5c31af7Sopenharmony_ci { 361e5c31af7Sopenharmony_ci input float in0 = [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ]; 362e5c31af7Sopenharmony_ci output float out0 = [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ]; 363e5c31af7Sopenharmony_ci } 364e5c31af7Sopenharmony_ci 365e5c31af7Sopenharmony_ci vertex "" 366e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 367e5c31af7Sopenharmony_ci varying highp float var; 368e5c31af7Sopenharmony_ci void main() 369e5c31af7Sopenharmony_ci { 370e5c31af7Sopenharmony_ci var = in0; 371e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 372e5c31af7Sopenharmony_ci } 373e5c31af7Sopenharmony_ci "" 374e5c31af7Sopenharmony_ci fragment "" 375e5c31af7Sopenharmony_ci precision mediump float; 376e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 377e5c31af7Sopenharmony_ci varying mediump float var; 378e5c31af7Sopenharmony_ci void main() 379e5c31af7Sopenharmony_ci { 380e5c31af7Sopenharmony_ci out0 = var; 381e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 382e5c31af7Sopenharmony_ci } 383e5c31af7Sopenharmony_ci "" 384e5c31af7Sopenharmony_ciend 385e5c31af7Sopenharmony_ci 386e5c31af7Sopenharmony_ci# differing precision tests 387e5c31af7Sopenharmony_cicase varying_differing_precision_2 388e5c31af7Sopenharmony_ci desc "varying declared as highp in vertex shader, but lowp in fragment shader" 389e5c31af7Sopenharmony_ci values 390e5c31af7Sopenharmony_ci { 391e5c31af7Sopenharmony_ci input float in0 = [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ]; 392e5c31af7Sopenharmony_ci output float out0 = [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ]; 393e5c31af7Sopenharmony_ci } 394e5c31af7Sopenharmony_ci 395e5c31af7Sopenharmony_ci vertex "" 396e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 397e5c31af7Sopenharmony_ci varying highp vec2 var; 398e5c31af7Sopenharmony_ci void main() 399e5c31af7Sopenharmony_ci { 400e5c31af7Sopenharmony_ci var = vec2(in0, 2.0*in0); 401e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 402e5c31af7Sopenharmony_ci } 403e5c31af7Sopenharmony_ci "" 404e5c31af7Sopenharmony_ci fragment "" 405e5c31af7Sopenharmony_ci precision mediump float; 406e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 407e5c31af7Sopenharmony_ci varying lowp vec2 var; 408e5c31af7Sopenharmony_ci void main() 409e5c31af7Sopenharmony_ci { 410e5c31af7Sopenharmony_ci out0 = var.y - var.x; 411e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 412e5c31af7Sopenharmony_ci } 413e5c31af7Sopenharmony_ci "" 414e5c31af7Sopenharmony_ciend 415e5c31af7Sopenharmony_ci 416e5c31af7Sopenharmony_ci# differing precision tests 417e5c31af7Sopenharmony_cicase varying_differing_precision_3 418e5c31af7Sopenharmony_ci desc "varying declared as lowp in vertex shader, but mediump in fragment shader" 419e5c31af7Sopenharmony_ci values 420e5c31af7Sopenharmony_ci { 421e5c31af7Sopenharmony_ci input float in0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ]; 422e5c31af7Sopenharmony_ci output float out0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ]; 423e5c31af7Sopenharmony_ci } 424e5c31af7Sopenharmony_ci 425e5c31af7Sopenharmony_ci vertex "" 426e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 427e5c31af7Sopenharmony_ci varying lowp vec4 var; 428e5c31af7Sopenharmony_ci void main() 429e5c31af7Sopenharmony_ci { 430e5c31af7Sopenharmony_ci var = vec4(in0, 2.0*in0, -in0, -in0); 431e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 432e5c31af7Sopenharmony_ci } 433e5c31af7Sopenharmony_ci "" 434e5c31af7Sopenharmony_ci fragment "" 435e5c31af7Sopenharmony_ci precision mediump float; 436e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 437e5c31af7Sopenharmony_ci varying mediump vec4 var; 438e5c31af7Sopenharmony_ci void main() 439e5c31af7Sopenharmony_ci { 440e5c31af7Sopenharmony_ci out0 = var.x + var.y + var.z + var.w; 441e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 442e5c31af7Sopenharmony_ci } 443e5c31af7Sopenharmony_ci "" 444e5c31af7Sopenharmony_ciend 445e5c31af7Sopenharmony_ci 446e5c31af7Sopenharmony_ci# mismatched type, static use but no runtime use in the fragment shader 447e5c31af7Sopenharmony_cicase varying_type_mismatch_1 448e5c31af7Sopenharmony_ci desc "varying type mismatch (float vs. vec2), static use but no runtime use in the fragment shader" 449e5c31af7Sopenharmony_ci expect link_fail 450e5c31af7Sopenharmony_ci vertex "" 451e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 452e5c31af7Sopenharmony_ci varying mediump float var; 453e5c31af7Sopenharmony_ci void main() 454e5c31af7Sopenharmony_ci { 455e5c31af7Sopenharmony_ci var = 2.0; 456e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 457e5c31af7Sopenharmony_ci } 458e5c31af7Sopenharmony_ci "" 459e5c31af7Sopenharmony_ci fragment "" 460e5c31af7Sopenharmony_ci varying mediump vec2 var; 461e5c31af7Sopenharmony_ci void main() 462e5c31af7Sopenharmony_ci { 463e5c31af7Sopenharmony_ci if (false) 464e5c31af7Sopenharmony_ci { 465e5c31af7Sopenharmony_ci gl_FragColor = vec4(var.y); 466e5c31af7Sopenharmony_ci } 467e5c31af7Sopenharmony_ci else 468e5c31af7Sopenharmony_ci { 469e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 470e5c31af7Sopenharmony_ci } 471e5c31af7Sopenharmony_ci } 472e5c31af7Sopenharmony_ci "" 473e5c31af7Sopenharmony_ciend 474e5c31af7Sopenharmony_ci 475e5c31af7Sopenharmony_ci# mismatched type, varyings used 476e5c31af7Sopenharmony_cicase varying_type_mismatch_2 477e5c31af7Sopenharmony_ci desc "varying type mismatch (float vs. vec2)" 478e5c31af7Sopenharmony_ci expect link_fail 479e5c31af7Sopenharmony_ci vertex "" 480e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 481e5c31af7Sopenharmony_ci varying mediump float var; 482e5c31af7Sopenharmony_ci void main() 483e5c31af7Sopenharmony_ci { 484e5c31af7Sopenharmony_ci var = 2.0; 485e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 486e5c31af7Sopenharmony_ci } 487e5c31af7Sopenharmony_ci "" 488e5c31af7Sopenharmony_ci fragment "" 489e5c31af7Sopenharmony_ci varying mediump vec2 var; 490e5c31af7Sopenharmony_ci void main() 491e5c31af7Sopenharmony_ci { 492e5c31af7Sopenharmony_ci gl_FragColor = var.xyyx; 493e5c31af7Sopenharmony_ci } 494e5c31af7Sopenharmony_ci "" 495e5c31af7Sopenharmony_ciend 496e5c31af7Sopenharmony_ci 497e5c31af7Sopenharmony_ci# no declaration in vertex shader, but static use in fragment 498e5c31af7Sopenharmony_cicase varying_illegal_usage_1 499e5c31af7Sopenharmony_ci desc "varying not declared in vertex shader, but statically used in fragment shader" 500e5c31af7Sopenharmony_ci expect link_fail 501e5c31af7Sopenharmony_ci vertex "" 502e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 503e5c31af7Sopenharmony_ci void main() 504e5c31af7Sopenharmony_ci { 505e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 506e5c31af7Sopenharmony_ci } 507e5c31af7Sopenharmony_ci "" 508e5c31af7Sopenharmony_ci fragment "" 509e5c31af7Sopenharmony_ci varying mediump float var; 510e5c31af7Sopenharmony_ci void main() 511e5c31af7Sopenharmony_ci { 512e5c31af7Sopenharmony_ci gl_FragColor = vec4(var); 513e5c31af7Sopenharmony_ci } 514e5c31af7Sopenharmony_ci "" 515e5c31af7Sopenharmony_ciend 516e5c31af7Sopenharmony_ci 517e5c31af7Sopenharmony_ci# integer varyings not allowed 518e5c31af7Sopenharmony_cicase invalid_varying_type_int 519e5c31af7Sopenharmony_ci desc "integer varying used" 520e5c31af7Sopenharmony_ci expect compile_fail 521e5c31af7Sopenharmony_ci vertex "" 522e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 523e5c31af7Sopenharmony_ci varying mediump int var; 524e5c31af7Sopenharmony_ci void main() 525e5c31af7Sopenharmony_ci { 526e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 527e5c31af7Sopenharmony_ci } 528e5c31af7Sopenharmony_ci "" 529e5c31af7Sopenharmony_ci fragment "" 530e5c31af7Sopenharmony_ci varying mediump int var; 531e5c31af7Sopenharmony_ci void main() 532e5c31af7Sopenharmony_ci { 533e5c31af7Sopenharmony_ci gl_FragColor = vec4(1.0); 534e5c31af7Sopenharmony_ci } 535e5c31af7Sopenharmony_ci "" 536e5c31af7Sopenharmony_ciend 537e5c31af7Sopenharmony_ci 538e5c31af7Sopenharmony_ci# bool varyings not allowed 539e5c31af7Sopenharmony_cicase invalid_varying_type_bool 540e5c31af7Sopenharmony_ci desc "boolean varying used" 541e5c31af7Sopenharmony_ci expect compile_fail 542e5c31af7Sopenharmony_ci vertex "" 543e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 544e5c31af7Sopenharmony_ci varying bool var; 545e5c31af7Sopenharmony_ci void main() 546e5c31af7Sopenharmony_ci { 547e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 548e5c31af7Sopenharmony_ci } 549e5c31af7Sopenharmony_ci "" 550e5c31af7Sopenharmony_ci fragment "" 551e5c31af7Sopenharmony_ci varying bool var; 552e5c31af7Sopenharmony_ci void main() 553e5c31af7Sopenharmony_ci { 554e5c31af7Sopenharmony_ci gl_FragColor = vec4(1.0); 555e5c31af7Sopenharmony_ci } 556e5c31af7Sopenharmony_ci "" 557e5c31af7Sopenharmony_ciend 558e5c31af7Sopenharmony_ci 559e5c31af7Sopenharmony_ci# struct varyings not allowed 560e5c31af7Sopenharmony_cicase invalid_varying_type_struct 561e5c31af7Sopenharmony_ci desc "struct varying used" 562e5c31af7Sopenharmony_ci expect compile_fail 563e5c31af7Sopenharmony_ci vertex "" 564e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 565e5c31af7Sopenharmony_ci varying struct { mediump float foo; } var; 566e5c31af7Sopenharmony_ci void main() 567e5c31af7Sopenharmony_ci { 568e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 569e5c31af7Sopenharmony_ci } 570e5c31af7Sopenharmony_ci "" 571e5c31af7Sopenharmony_ci fragment "" 572e5c31af7Sopenharmony_ci varying struct { mediump float foo; } var; 573e5c31af7Sopenharmony_ci void main() 574e5c31af7Sopenharmony_ci { 575e5c31af7Sopenharmony_ci gl_FragColor = vec4(1.0); 576e5c31af7Sopenharmony_ci } 577e5c31af7Sopenharmony_ci "" 578e5c31af7Sopenharmony_ciend 579e5c31af7Sopenharmony_ci 580e5c31af7Sopenharmony_cicase varying_readback_1 581e5c31af7Sopenharmony_ci desc "read back (an already written) varying in the vertex shader" 582e5c31af7Sopenharmony_ci values 583e5c31af7Sopenharmony_ci { 584e5c31af7Sopenharmony_ci input float in0 = [ 1.0 | 0.0 | -2.0 | 10.0 ]; 585e5c31af7Sopenharmony_ci output float out0 = [ 3.0 | 0.0 | -6.0 | 30.0 ]; 586e5c31af7Sopenharmony_ci } 587e5c31af7Sopenharmony_ci vertex "" 588e5c31af7Sopenharmony_ci precision mediump float; 589e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 590e5c31af7Sopenharmony_ci varying float var1; 591e5c31af7Sopenharmony_ci varying float var2; 592e5c31af7Sopenharmony_ci 593e5c31af7Sopenharmony_ci void main() 594e5c31af7Sopenharmony_ci { 595e5c31af7Sopenharmony_ci var1 = in0; 596e5c31af7Sopenharmony_ci var2 = var1 + in0; 597e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 598e5c31af7Sopenharmony_ci } 599e5c31af7Sopenharmony_ci "" 600e5c31af7Sopenharmony_ci fragment "" 601e5c31af7Sopenharmony_ci precision mediump float; 602e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 603e5c31af7Sopenharmony_ci varying float var1; 604e5c31af7Sopenharmony_ci varying float var2; 605e5c31af7Sopenharmony_ci 606e5c31af7Sopenharmony_ci void main() 607e5c31af7Sopenharmony_ci { 608e5c31af7Sopenharmony_ci out0 = var1 + var2; 609e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 610e5c31af7Sopenharmony_ci } 611e5c31af7Sopenharmony_ci "" 612e5c31af7Sopenharmony_ciend 613e5c31af7Sopenharmony_ci 614e5c31af7Sopenharmony_cicase varying_writeback_1 615e5c31af7Sopenharmony_ci desc "write back a varying in the fragment shader" 616e5c31af7Sopenharmony_ci expect compile_fail 617e5c31af7Sopenharmony_ci vertex "" 618e5c31af7Sopenharmony_ci precision mediump float; 619e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 620e5c31af7Sopenharmony_ci varying float var1; 621e5c31af7Sopenharmony_ci varying float var2; 622e5c31af7Sopenharmony_ci 623e5c31af7Sopenharmony_ci void main() 624e5c31af7Sopenharmony_ci { 625e5c31af7Sopenharmony_ci var1 = in0; 626e5c31af7Sopenharmony_ci var2 = var1 + in0; 627e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 628e5c31af7Sopenharmony_ci } 629e5c31af7Sopenharmony_ci "" 630e5c31af7Sopenharmony_ci fragment "" 631e5c31af7Sopenharmony_ci precision mediump float; 632e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 633e5c31af7Sopenharmony_ci varying float var1; 634e5c31af7Sopenharmony_ci varying float var2; 635e5c31af7Sopenharmony_ci 636e5c31af7Sopenharmony_ci void main() 637e5c31af7Sopenharmony_ci { 638e5c31af7Sopenharmony_ci var2 = var1; 639e5c31af7Sopenharmony_ci out0 = var1; 640e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 641e5c31af7Sopenharmony_ci } 642e5c31af7Sopenharmony_ci "" 643e5c31af7Sopenharmony_ciend 644e5c31af7Sopenharmony_ci 645e5c31af7Sopenharmony_ci# Struct linkage handling 646e5c31af7Sopenharmony_cicase uniform_struct 647e5c31af7Sopenharmony_ci desc "Same uniform struct in both shaders" 648e5c31af7Sopenharmony_ci values { 649e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 650e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 651e5c31af7Sopenharmony_ci output float out0 = 3.0; 652e5c31af7Sopenharmony_ci } 653e5c31af7Sopenharmony_ci vertex "" 654e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 655e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 656e5c31af7Sopenharmony_ci uniform Struct val; 657e5c31af7Sopenharmony_ci varying mediump float dummy; 658e5c31af7Sopenharmony_ci void main() 659e5c31af7Sopenharmony_ci { 660e5c31af7Sopenharmony_ci dummy = val.a + val.b; 661e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 662e5c31af7Sopenharmony_ci } 663e5c31af7Sopenharmony_ci "" 664e5c31af7Sopenharmony_ci fragment "" 665e5c31af7Sopenharmony_ci precision mediump float; 666e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 667e5c31af7Sopenharmony_ci uniform Struct val; 668e5c31af7Sopenharmony_ci varying mediump float dummy; 669e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 670e5c31af7Sopenharmony_ci void main() 671e5c31af7Sopenharmony_ci { 672e5c31af7Sopenharmony_ci out0 = val.b + val.a; 673e5c31af7Sopenharmony_ci out0 = out0 + dummy; 674e5c31af7Sopenharmony_ci out0 = out0 - dummy; 675e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 676e5c31af7Sopenharmony_ci } 677e5c31af7Sopenharmony_ci "" 678e5c31af7Sopenharmony_ciend 679e5c31af7Sopenharmony_ci 680e5c31af7Sopenharmony_cicase uniform_struct_vertex_only 681e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in vertex." 682e5c31af7Sopenharmony_ci values { 683e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 684e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 685e5c31af7Sopenharmony_ci output float out0 = 3.0; 686e5c31af7Sopenharmony_ci } 687e5c31af7Sopenharmony_ci vertex "" 688e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 689e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 690e5c31af7Sopenharmony_ci uniform Struct val; 691e5c31af7Sopenharmony_ci varying mediump float res; 692e5c31af7Sopenharmony_ci void main() 693e5c31af7Sopenharmony_ci { 694e5c31af7Sopenharmony_ci res = val.a + val.b; 695e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 696e5c31af7Sopenharmony_ci } 697e5c31af7Sopenharmony_ci "" 698e5c31af7Sopenharmony_ci fragment "" 699e5c31af7Sopenharmony_ci precision mediump float; 700e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 701e5c31af7Sopenharmony_ci uniform Struct val; 702e5c31af7Sopenharmony_ci varying mediump float res; 703e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 704e5c31af7Sopenharmony_ci void main() 705e5c31af7Sopenharmony_ci { 706e5c31af7Sopenharmony_ci out0 = res; 707e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 708e5c31af7Sopenharmony_ci } 709e5c31af7Sopenharmony_ci "" 710e5c31af7Sopenharmony_ciend 711e5c31af7Sopenharmony_ci 712e5c31af7Sopenharmony_cicase uniform_struct_fragment_only 713e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in fragment." 714e5c31af7Sopenharmony_ci values { 715e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 716e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 717e5c31af7Sopenharmony_ci output float out0 = 3.0; 718e5c31af7Sopenharmony_ci } 719e5c31af7Sopenharmony_ci vertex "" 720e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 721e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 722e5c31af7Sopenharmony_ci uniform Struct val; 723e5c31af7Sopenharmony_ci void main() 724e5c31af7Sopenharmony_ci { 725e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 726e5c31af7Sopenharmony_ci } 727e5c31af7Sopenharmony_ci "" 728e5c31af7Sopenharmony_ci fragment "" 729e5c31af7Sopenharmony_ci precision mediump float; 730e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 731e5c31af7Sopenharmony_ci uniform Struct val; 732e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 733e5c31af7Sopenharmony_ci void main() 734e5c31af7Sopenharmony_ci { 735e5c31af7Sopenharmony_ci out0 = val.a + val.b; 736e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 737e5c31af7Sopenharmony_ci } 738e5c31af7Sopenharmony_ci "" 739e5c31af7Sopenharmony_ciend 740e5c31af7Sopenharmony_ci 741e5c31af7Sopenharmony_cicase uniform_struct_partial 742e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both." 743e5c31af7Sopenharmony_ci values { 744e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 745e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 746e5c31af7Sopenharmony_ci output float out0 = 3.0; 747e5c31af7Sopenharmony_ci } 748e5c31af7Sopenharmony_ci vertex "" 749e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 750e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 751e5c31af7Sopenharmony_ci uniform Struct val; 752e5c31af7Sopenharmony_ci varying mediump float res; 753e5c31af7Sopenharmony_ci void main() 754e5c31af7Sopenharmony_ci { 755e5c31af7Sopenharmony_ci res = val.a; 756e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 757e5c31af7Sopenharmony_ci } 758e5c31af7Sopenharmony_ci "" 759e5c31af7Sopenharmony_ci fragment "" 760e5c31af7Sopenharmony_ci precision mediump float; 761e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 762e5c31af7Sopenharmony_ci uniform Struct val; 763e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 764e5c31af7Sopenharmony_ci varying mediump float res; 765e5c31af7Sopenharmony_ci void main() 766e5c31af7Sopenharmony_ci { 767e5c31af7Sopenharmony_ci out0 = res + val.b; 768e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 769e5c31af7Sopenharmony_ci } 770e5c31af7Sopenharmony_ci "" 771e5c31af7Sopenharmony_ciend 772e5c31af7Sopenharmony_ci 773e5c31af7Sopenharmony_cicase uniform_struct_vec4 774e5c31af7Sopenharmony_ci desc "Same uniform struct in both shaders. Datatype vec4" 775e5c31af7Sopenharmony_ci values { 776e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 777e5c31af7Sopenharmony_ci uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 778e5c31af7Sopenharmony_ci output float out0 = 3.0; 779e5c31af7Sopenharmony_ci } 780e5c31af7Sopenharmony_ci vertex "" 781e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 782e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 783e5c31af7Sopenharmony_ci uniform Struct val; 784e5c31af7Sopenharmony_ci varying mediump float dummy; 785e5c31af7Sopenharmony_ci void main() 786e5c31af7Sopenharmony_ci { 787e5c31af7Sopenharmony_ci dummy = val.a.x + val.b.y; 788e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 789e5c31af7Sopenharmony_ci } 790e5c31af7Sopenharmony_ci "" 791e5c31af7Sopenharmony_ci fragment "" 792e5c31af7Sopenharmony_ci precision mediump float; 793e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 794e5c31af7Sopenharmony_ci uniform Struct val; 795e5c31af7Sopenharmony_ci varying mediump float dummy; 796e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 797e5c31af7Sopenharmony_ci void main() 798e5c31af7Sopenharmony_ci { 799e5c31af7Sopenharmony_ci out0 = val.b.y + val.a.x; 800e5c31af7Sopenharmony_ci out0 = out0 + dummy; 801e5c31af7Sopenharmony_ci out0 = out0 - dummy; 802e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 803e5c31af7Sopenharmony_ci } 804e5c31af7Sopenharmony_ci "" 805e5c31af7Sopenharmony_ciend 806e5c31af7Sopenharmony_ci 807e5c31af7Sopenharmony_cicase uniform_struct_vertex_only_vec4 808e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in vertex. Datatype vec4 " 809e5c31af7Sopenharmony_ci values { 810e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 811e5c31af7Sopenharmony_ci uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 812e5c31af7Sopenharmony_ci output float out0 = 3.0; 813e5c31af7Sopenharmony_ci } 814e5c31af7Sopenharmony_ci vertex "" 815e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 816e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 817e5c31af7Sopenharmony_ci uniform Struct val; 818e5c31af7Sopenharmony_ci varying mediump float res; 819e5c31af7Sopenharmony_ci void main() 820e5c31af7Sopenharmony_ci { 821e5c31af7Sopenharmony_ci res = val.a.x + val.b.y; 822e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 823e5c31af7Sopenharmony_ci } 824e5c31af7Sopenharmony_ci "" 825e5c31af7Sopenharmony_ci fragment "" 826e5c31af7Sopenharmony_ci precision mediump float; 827e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 828e5c31af7Sopenharmony_ci uniform Struct val; 829e5c31af7Sopenharmony_ci varying mediump float res; 830e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 831e5c31af7Sopenharmony_ci void main() 832e5c31af7Sopenharmony_ci { 833e5c31af7Sopenharmony_ci out0 = res; 834e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 835e5c31af7Sopenharmony_ci } 836e5c31af7Sopenharmony_ci "" 837e5c31af7Sopenharmony_ciend 838e5c31af7Sopenharmony_ci 839e5c31af7Sopenharmony_cicase uniform_struct_fragment_only_vec4 840e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in fragment. Datatype vec4" 841e5c31af7Sopenharmony_ci values { 842e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 843e5c31af7Sopenharmony_ci uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 844e5c31af7Sopenharmony_ci output float out0 = 3.0; 845e5c31af7Sopenharmony_ci } 846e5c31af7Sopenharmony_ci vertex "" 847e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 848e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 849e5c31af7Sopenharmony_ci uniform Struct val; 850e5c31af7Sopenharmony_ci void main() 851e5c31af7Sopenharmony_ci { 852e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 853e5c31af7Sopenharmony_ci } 854e5c31af7Sopenharmony_ci "" 855e5c31af7Sopenharmony_ci fragment "" 856e5c31af7Sopenharmony_ci precision mediump float; 857e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 858e5c31af7Sopenharmony_ci uniform Struct val; 859e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 860e5c31af7Sopenharmony_ci void main() 861e5c31af7Sopenharmony_ci { 862e5c31af7Sopenharmony_ci out0 = val.a.x + val.b.y; 863e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 864e5c31af7Sopenharmony_ci } 865e5c31af7Sopenharmony_ci "" 866e5c31af7Sopenharmony_ciend 867e5c31af7Sopenharmony_ci 868e5c31af7Sopenharmony_cicase uniform_struct_partial_vec4 869e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4" 870e5c31af7Sopenharmony_ci values { 871e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 872e5c31af7Sopenharmony_ci uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 873e5c31af7Sopenharmony_ci output float out0 = 3.0; 874e5c31af7Sopenharmony_ci } 875e5c31af7Sopenharmony_ci vertex "" 876e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 877e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 878e5c31af7Sopenharmony_ci uniform Struct val; 879e5c31af7Sopenharmony_ci varying mediump float res; 880e5c31af7Sopenharmony_ci void main() 881e5c31af7Sopenharmony_ci { 882e5c31af7Sopenharmony_ci res = val.a.x; 883e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 884e5c31af7Sopenharmony_ci } 885e5c31af7Sopenharmony_ci "" 886e5c31af7Sopenharmony_ci fragment "" 887e5c31af7Sopenharmony_ci precision mediump float; 888e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 889e5c31af7Sopenharmony_ci uniform Struct val; 890e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 891e5c31af7Sopenharmony_ci varying mediump float res; 892e5c31af7Sopenharmony_ci void main() 893e5c31af7Sopenharmony_ci { 894e5c31af7Sopenharmony_ci out0 = res + val.b.y; 895e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 896e5c31af7Sopenharmony_ci } 897e5c31af7Sopenharmony_ci "" 898e5c31af7Sopenharmony_ciend 899e5c31af7Sopenharmony_ci 900e5c31af7Sopenharmony_cicase uniform_struct_vec4_vec3 901e5c31af7Sopenharmony_ci desc "Same uniform struct in both shaders. Datatype vec4 and vec3" 902e5c31af7Sopenharmony_ci values { 903e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 904e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 905e5c31af7Sopenharmony_ci output float out0 = 3.0; 906e5c31af7Sopenharmony_ci } 907e5c31af7Sopenharmony_ci vertex "" 908e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 909e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 910e5c31af7Sopenharmony_ci uniform Struct val; 911e5c31af7Sopenharmony_ci varying mediump float dummy; 912e5c31af7Sopenharmony_ci void main() 913e5c31af7Sopenharmony_ci { 914e5c31af7Sopenharmony_ci dummy = val.a.x + val.b.y; 915e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 916e5c31af7Sopenharmony_ci } 917e5c31af7Sopenharmony_ci "" 918e5c31af7Sopenharmony_ci fragment "" 919e5c31af7Sopenharmony_ci precision mediump float; 920e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 921e5c31af7Sopenharmony_ci uniform Struct val; 922e5c31af7Sopenharmony_ci varying mediump float dummy; 923e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 924e5c31af7Sopenharmony_ci void main() 925e5c31af7Sopenharmony_ci { 926e5c31af7Sopenharmony_ci out0 = val.b.y + val.a.x; 927e5c31af7Sopenharmony_ci out0 = out0 + dummy; 928e5c31af7Sopenharmony_ci out0 = out0 - dummy; 929e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 930e5c31af7Sopenharmony_ci } 931e5c31af7Sopenharmony_ci "" 932e5c31af7Sopenharmony_ciend 933e5c31af7Sopenharmony_ci 934e5c31af7Sopenharmony_cicase uniform_struct_vertex_only_vec4_vec3 935e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and vec3" 936e5c31af7Sopenharmony_ci values { 937e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 938e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 939e5c31af7Sopenharmony_ci output float out0 = 3.0; 940e5c31af7Sopenharmony_ci } 941e5c31af7Sopenharmony_ci vertex "" 942e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 943e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 944e5c31af7Sopenharmony_ci uniform Struct val; 945e5c31af7Sopenharmony_ci varying mediump float res; 946e5c31af7Sopenharmony_ci void main() 947e5c31af7Sopenharmony_ci { 948e5c31af7Sopenharmony_ci res = val.a.x + val.b.y; 949e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 950e5c31af7Sopenharmony_ci } 951e5c31af7Sopenharmony_ci "" 952e5c31af7Sopenharmony_ci fragment "" 953e5c31af7Sopenharmony_ci precision mediump float; 954e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 955e5c31af7Sopenharmony_ci uniform Struct val; 956e5c31af7Sopenharmony_ci varying mediump float res; 957e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 958e5c31af7Sopenharmony_ci void main() 959e5c31af7Sopenharmony_ci { 960e5c31af7Sopenharmony_ci out0 = res; 961e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 962e5c31af7Sopenharmony_ci } 963e5c31af7Sopenharmony_ci "" 964e5c31af7Sopenharmony_ciend 965e5c31af7Sopenharmony_ci 966e5c31af7Sopenharmony_cicase uniform_struct_fragment_only_vec4_vec3 967e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and vec3" 968e5c31af7Sopenharmony_ci values { 969e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 970e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 971e5c31af7Sopenharmony_ci output float out0 = 3.0; 972e5c31af7Sopenharmony_ci } 973e5c31af7Sopenharmony_ci vertex "" 974e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 975e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 976e5c31af7Sopenharmony_ci uniform Struct val; 977e5c31af7Sopenharmony_ci void main() 978e5c31af7Sopenharmony_ci { 979e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 980e5c31af7Sopenharmony_ci } 981e5c31af7Sopenharmony_ci "" 982e5c31af7Sopenharmony_ci fragment "" 983e5c31af7Sopenharmony_ci precision mediump float; 984e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 985e5c31af7Sopenharmony_ci uniform Struct val; 986e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 987e5c31af7Sopenharmony_ci void main() 988e5c31af7Sopenharmony_ci { 989e5c31af7Sopenharmony_ci out0 = val.a.x + val.b.y; 990e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 991e5c31af7Sopenharmony_ci } 992e5c31af7Sopenharmony_ci "" 993e5c31af7Sopenharmony_ciend 994e5c31af7Sopenharmony_ci 995e5c31af7Sopenharmony_cicase uniform_struct_partial_vec4_vec3 996e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4 and vec3" 997e5c31af7Sopenharmony_ci values { 998e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 999e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 1000e5c31af7Sopenharmony_ci output float out0 = 3.0; 1001e5c31af7Sopenharmony_ci } 1002e5c31af7Sopenharmony_ci vertex "" 1003e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1004e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 1005e5c31af7Sopenharmony_ci uniform Struct val; 1006e5c31af7Sopenharmony_ci varying mediump float res; 1007e5c31af7Sopenharmony_ci void main() 1008e5c31af7Sopenharmony_ci { 1009e5c31af7Sopenharmony_ci res = val.a.x; 1010e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1011e5c31af7Sopenharmony_ci } 1012e5c31af7Sopenharmony_ci "" 1013e5c31af7Sopenharmony_ci fragment "" 1014e5c31af7Sopenharmony_ci precision mediump float; 1015e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 1016e5c31af7Sopenharmony_ci uniform Struct val; 1017e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1018e5c31af7Sopenharmony_ci varying mediump float res; 1019e5c31af7Sopenharmony_ci void main() 1020e5c31af7Sopenharmony_ci { 1021e5c31af7Sopenharmony_ci out0 = res + val.b.y; 1022e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1023e5c31af7Sopenharmony_ci } 1024e5c31af7Sopenharmony_ci "" 1025e5c31af7Sopenharmony_ciend 1026e5c31af7Sopenharmony_ci 1027e5c31af7Sopenharmony_cicase uniform_struct_vec4_float 1028e5c31af7Sopenharmony_ci desc "Same uniform struct in both shaders. Datatype vec4 and float" 1029e5c31af7Sopenharmony_ci values { 1030e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 1031e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 1032e5c31af7Sopenharmony_ci output float out0 = 3.0; 1033e5c31af7Sopenharmony_ci } 1034e5c31af7Sopenharmony_ci vertex "" 1035e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1036e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 1037e5c31af7Sopenharmony_ci uniform Struct val; 1038e5c31af7Sopenharmony_ci varying mediump float dummy; 1039e5c31af7Sopenharmony_ci void main() 1040e5c31af7Sopenharmony_ci { 1041e5c31af7Sopenharmony_ci dummy = val.a.x + val.b; 1042e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1043e5c31af7Sopenharmony_ci } 1044e5c31af7Sopenharmony_ci "" 1045e5c31af7Sopenharmony_ci fragment "" 1046e5c31af7Sopenharmony_ci precision mediump float; 1047e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 1048e5c31af7Sopenharmony_ci uniform Struct val; 1049e5c31af7Sopenharmony_ci varying mediump float dummy; 1050e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1051e5c31af7Sopenharmony_ci void main() 1052e5c31af7Sopenharmony_ci { 1053e5c31af7Sopenharmony_ci out0 = val.b + val.a.x; 1054e5c31af7Sopenharmony_ci out0 = out0 + dummy; 1055e5c31af7Sopenharmony_ci out0 = out0 - dummy; 1056e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1057e5c31af7Sopenharmony_ci } 1058e5c31af7Sopenharmony_ci "" 1059e5c31af7Sopenharmony_ciend 1060e5c31af7Sopenharmony_ci 1061e5c31af7Sopenharmony_cicase uniform_struct_vertex_only_vec4_float 1062e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and float" 1063e5c31af7Sopenharmony_ci values { 1064e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 1065e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 1066e5c31af7Sopenharmony_ci output float out0 = 3.0; 1067e5c31af7Sopenharmony_ci } 1068e5c31af7Sopenharmony_ci vertex "" 1069e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1070e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 1071e5c31af7Sopenharmony_ci uniform Struct val; 1072e5c31af7Sopenharmony_ci varying mediump float res; 1073e5c31af7Sopenharmony_ci void main() 1074e5c31af7Sopenharmony_ci { 1075e5c31af7Sopenharmony_ci res = val.a.x + val.b; 1076e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1077e5c31af7Sopenharmony_ci } 1078e5c31af7Sopenharmony_ci "" 1079e5c31af7Sopenharmony_ci fragment "" 1080e5c31af7Sopenharmony_ci precision mediump float; 1081e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 1082e5c31af7Sopenharmony_ci uniform Struct val; 1083e5c31af7Sopenharmony_ci varying mediump float res; 1084e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1085e5c31af7Sopenharmony_ci void main() 1086e5c31af7Sopenharmony_ci { 1087e5c31af7Sopenharmony_ci out0 = res; 1088e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1089e5c31af7Sopenharmony_ci } 1090e5c31af7Sopenharmony_ci "" 1091e5c31af7Sopenharmony_ciend 1092e5c31af7Sopenharmony_ci 1093e5c31af7Sopenharmony_cicase uniform_struct_fragment_only_vec4_float 1094e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and float" 1095e5c31af7Sopenharmony_ci values { 1096e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 1097e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 1098e5c31af7Sopenharmony_ci output float out0 = 3.0; 1099e5c31af7Sopenharmony_ci } 1100e5c31af7Sopenharmony_ci vertex "" 1101e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1102e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 1103e5c31af7Sopenharmony_ci uniform Struct val; 1104e5c31af7Sopenharmony_ci void main() 1105e5c31af7Sopenharmony_ci { 1106e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1107e5c31af7Sopenharmony_ci } 1108e5c31af7Sopenharmony_ci "" 1109e5c31af7Sopenharmony_ci fragment "" 1110e5c31af7Sopenharmony_ci precision mediump float; 1111e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 1112e5c31af7Sopenharmony_ci uniform Struct val; 1113e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1114e5c31af7Sopenharmony_ci void main() 1115e5c31af7Sopenharmony_ci { 1116e5c31af7Sopenharmony_ci out0 = val.a.x + val.b; 1117e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1118e5c31af7Sopenharmony_ci } 1119e5c31af7Sopenharmony_ci "" 1120e5c31af7Sopenharmony_ciend 1121e5c31af7Sopenharmony_ci 1122e5c31af7Sopenharmony_cicase uniform_struct_partial_vec4_float 1123e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4 and float" 1124e5c31af7Sopenharmony_ci values { 1125e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 1126e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 1127e5c31af7Sopenharmony_ci output float out0 = 3.0; 1128e5c31af7Sopenharmony_ci } 1129e5c31af7Sopenharmony_ci vertex "" 1130e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1131e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 1132e5c31af7Sopenharmony_ci uniform Struct val; 1133e5c31af7Sopenharmony_ci varying mediump float res; 1134e5c31af7Sopenharmony_ci void main() 1135e5c31af7Sopenharmony_ci { 1136e5c31af7Sopenharmony_ci res = val.a.x; 1137e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1138e5c31af7Sopenharmony_ci } 1139e5c31af7Sopenharmony_ci "" 1140e5c31af7Sopenharmony_ci fragment "" 1141e5c31af7Sopenharmony_ci precision mediump float; 1142e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 1143e5c31af7Sopenharmony_ci uniform Struct val; 1144e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1145e5c31af7Sopenharmony_ci varying mediump float res; 1146e5c31af7Sopenharmony_ci void main() 1147e5c31af7Sopenharmony_ci { 1148e5c31af7Sopenharmony_ci out0 = res + val.b; 1149e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1150e5c31af7Sopenharmony_ci } 1151e5c31af7Sopenharmony_ci "" 1152e5c31af7Sopenharmony_ciend 1153e5c31af7Sopenharmony_ci 1154e5c31af7Sopenharmony_cicase uniform_struct_partial_vec4_struct 1155e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec4" 1156e5c31af7Sopenharmony_ci values { 1157e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 1158e5c31af7Sopenharmony_ci uniform vec4 val.b.c = vec4(1.0, 2.0, 3.0, 4.0); 1159e5c31af7Sopenharmony_ci output float out0 = 3.0; 1160e5c31af7Sopenharmony_ci } 1161e5c31af7Sopenharmony_ci vertex "" 1162e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1163e5c31af7Sopenharmony_ci struct Inner {mediump vec4 c;}; 1164e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; Inner b;}; 1165e5c31af7Sopenharmony_ci uniform Struct val; 1166e5c31af7Sopenharmony_ci varying mediump float res; 1167e5c31af7Sopenharmony_ci void main() 1168e5c31af7Sopenharmony_ci { 1169e5c31af7Sopenharmony_ci res = val.a.x; 1170e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1171e5c31af7Sopenharmony_ci } 1172e5c31af7Sopenharmony_ci "" 1173e5c31af7Sopenharmony_ci fragment "" 1174e5c31af7Sopenharmony_ci precision mediump float; 1175e5c31af7Sopenharmony_ci struct Inner {mediump vec4 c;}; 1176e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; Inner b;}; 1177e5c31af7Sopenharmony_ci uniform Struct val; 1178e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1179e5c31af7Sopenharmony_ci varying mediump float res; 1180e5c31af7Sopenharmony_ci void main() 1181e5c31af7Sopenharmony_ci { 1182e5c31af7Sopenharmony_ci out0 = res + val.b.c.y; 1183e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1184e5c31af7Sopenharmony_ci } 1185e5c31af7Sopenharmony_ci "" 1186e5c31af7Sopenharmony_ciend 1187e5c31af7Sopenharmony_ci 1188e5c31af7Sopenharmony_ci 1189e5c31af7Sopenharmony_ci 1190e5c31af7Sopenharmony_cicase uniform_struct_partial_vec4_vec3_struct 1191e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec3" 1192e5c31af7Sopenharmony_ci values { 1193e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 1194e5c31af7Sopenharmony_ci uniform vec3 val.b.c = vec3(1.0, 2.0, 3.0); 1195e5c31af7Sopenharmony_ci output float out0 = 3.0; 1196e5c31af7Sopenharmony_ci } 1197e5c31af7Sopenharmony_ci vertex "" 1198e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1199e5c31af7Sopenharmony_ci struct Inner {mediump vec3 c;}; 1200e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; Inner b;}; 1201e5c31af7Sopenharmony_ci uniform Struct val; 1202e5c31af7Sopenharmony_ci varying mediump float res; 1203e5c31af7Sopenharmony_ci void main() 1204e5c31af7Sopenharmony_ci { 1205e5c31af7Sopenharmony_ci res = val.a.x; 1206e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1207e5c31af7Sopenharmony_ci } 1208e5c31af7Sopenharmony_ci "" 1209e5c31af7Sopenharmony_ci fragment "" 1210e5c31af7Sopenharmony_ci precision mediump float; 1211e5c31af7Sopenharmony_ci struct Inner {mediump vec3 c;}; 1212e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; Inner b;}; 1213e5c31af7Sopenharmony_ci uniform Struct val; 1214e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1215e5c31af7Sopenharmony_ci varying mediump float res; 1216e5c31af7Sopenharmony_ci void main() 1217e5c31af7Sopenharmony_ci { 1218e5c31af7Sopenharmony_ci out0 = res + val.b.c.y; 1219e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1220e5c31af7Sopenharmony_ci } 1221e5c31af7Sopenharmony_ci "" 1222e5c31af7Sopenharmony_ciend 1223e5c31af7Sopenharmony_ci 1224e5c31af7Sopenharmony_cicase uniform_struct_partial_vec2_vec3 1225e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec2 and vec3" 1226e5c31af7Sopenharmony_ci values { 1227e5c31af7Sopenharmony_ci uniform vec2 val.a = vec2(1.0, 2.0); 1228e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 1229e5c31af7Sopenharmony_ci output float out0 = 3.0; 1230e5c31af7Sopenharmony_ci } 1231e5c31af7Sopenharmony_ci vertex "" 1232e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1233e5c31af7Sopenharmony_ci struct Struct {mediump vec2 a; mediump vec3 b;}; 1234e5c31af7Sopenharmony_ci uniform Struct val; 1235e5c31af7Sopenharmony_ci varying mediump float res; 1236e5c31af7Sopenharmony_ci void main() 1237e5c31af7Sopenharmony_ci { 1238e5c31af7Sopenharmony_ci res = val.a.x; 1239e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1240e5c31af7Sopenharmony_ci } 1241e5c31af7Sopenharmony_ci "" 1242e5c31af7Sopenharmony_ci fragment "" 1243e5c31af7Sopenharmony_ci precision mediump float; 1244e5c31af7Sopenharmony_ci struct Struct {mediump vec2 a; mediump vec3 b;}; 1245e5c31af7Sopenharmony_ci uniform Struct val; 1246e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1247e5c31af7Sopenharmony_ci varying mediump float res; 1248e5c31af7Sopenharmony_ci void main() 1249e5c31af7Sopenharmony_ci { 1250e5c31af7Sopenharmony_ci out0 = res + val.b.y; 1251e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1252e5c31af7Sopenharmony_ci } 1253e5c31af7Sopenharmony_ci "" 1254e5c31af7Sopenharmony_ciend 1255e5c31af7Sopenharmony_ci 1256e5c31af7Sopenharmony_cicase uniform_struct_partial_vec2_int 1257e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec2 and int" 1258e5c31af7Sopenharmony_ci values { 1259e5c31af7Sopenharmony_ci uniform vec2 val.a = vec2(1.0, 2.0); 1260e5c31af7Sopenharmony_ci uniform int val.b = 2; 1261e5c31af7Sopenharmony_ci output float out0 = 3.0; 1262e5c31af7Sopenharmony_ci } 1263e5c31af7Sopenharmony_ci vertex "" 1264e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1265e5c31af7Sopenharmony_ci struct Struct {mediump vec2 a; mediump int b;}; 1266e5c31af7Sopenharmony_ci uniform Struct val; 1267e5c31af7Sopenharmony_ci varying mediump float res; 1268e5c31af7Sopenharmony_ci void main() 1269e5c31af7Sopenharmony_ci { 1270e5c31af7Sopenharmony_ci res = val.a.x; 1271e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1272e5c31af7Sopenharmony_ci } 1273e5c31af7Sopenharmony_ci "" 1274e5c31af7Sopenharmony_ci fragment "" 1275e5c31af7Sopenharmony_ci precision mediump float; 1276e5c31af7Sopenharmony_ci struct Struct {mediump vec2 a; mediump int b;}; 1277e5c31af7Sopenharmony_ci uniform Struct val; 1278e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1279e5c31af7Sopenharmony_ci varying mediump float res; 1280e5c31af7Sopenharmony_ci void main() 1281e5c31af7Sopenharmony_ci { 1282e5c31af7Sopenharmony_ci out0 = res + float(val.b); 1283e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1284e5c31af7Sopenharmony_ci } 1285e5c31af7Sopenharmony_ci "" 1286e5c31af7Sopenharmony_ciend 1287e5c31af7Sopenharmony_ci 1288e5c31af7Sopenharmony_cicase uniform_struct_partial_int_float 1289e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype int and float" 1290e5c31af7Sopenharmony_ci values { 1291e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 1292e5c31af7Sopenharmony_ci uniform int val.b = 2; 1293e5c31af7Sopenharmony_ci output float out0 = 3.0; 1294e5c31af7Sopenharmony_ci } 1295e5c31af7Sopenharmony_ci vertex "" 1296e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1297e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump int b;}; 1298e5c31af7Sopenharmony_ci uniform Struct val; 1299e5c31af7Sopenharmony_ci varying mediump float res; 1300e5c31af7Sopenharmony_ci void main() 1301e5c31af7Sopenharmony_ci { 1302e5c31af7Sopenharmony_ci res = val.a; 1303e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1304e5c31af7Sopenharmony_ci } 1305e5c31af7Sopenharmony_ci "" 1306e5c31af7Sopenharmony_ci fragment "" 1307e5c31af7Sopenharmony_ci precision mediump float; 1308e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump int b;}; 1309e5c31af7Sopenharmony_ci uniform Struct val; 1310e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1311e5c31af7Sopenharmony_ci varying mediump float res; 1312e5c31af7Sopenharmony_ci void main() 1313e5c31af7Sopenharmony_ci { 1314e5c31af7Sopenharmony_ci out0 = res + float(val.b); 1315e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1316e5c31af7Sopenharmony_ci } 1317e5c31af7Sopenharmony_ci "" 1318e5c31af7Sopenharmony_ciend 1319e5c31af7Sopenharmony_ci 1320e5c31af7Sopenharmony_cicase uniform_struct_partial_bvec2_vec2 1321e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype bvec2 and vec2" 1322e5c31af7Sopenharmony_ci values { 1323e5c31af7Sopenharmony_ci uniform bvec2 val.a = bvec2(true, true); 1324e5c31af7Sopenharmony_ci uniform vec2 val.b = vec2(1.0, 2.0); 1325e5c31af7Sopenharmony_ci output float out0 = 3.0; 1326e5c31af7Sopenharmony_ci } 1327e5c31af7Sopenharmony_ci vertex "" 1328e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1329e5c31af7Sopenharmony_ci struct Struct {bvec2 a; mediump vec2 b;}; 1330e5c31af7Sopenharmony_ci uniform Struct val; 1331e5c31af7Sopenharmony_ci varying mediump float res; 1332e5c31af7Sopenharmony_ci void main() 1333e5c31af7Sopenharmony_ci { 1334e5c31af7Sopenharmony_ci res = float(val.a.x); 1335e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1336e5c31af7Sopenharmony_ci } 1337e5c31af7Sopenharmony_ci "" 1338e5c31af7Sopenharmony_ci fragment "" 1339e5c31af7Sopenharmony_ci precision mediump float; 1340e5c31af7Sopenharmony_ci struct Struct {bvec2 a; mediump vec2 b;}; 1341e5c31af7Sopenharmony_ci uniform Struct val; 1342e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1343e5c31af7Sopenharmony_ci varying mediump float res; 1344e5c31af7Sopenharmony_ci void main() 1345e5c31af7Sopenharmony_ci { 1346e5c31af7Sopenharmony_ci out0 = res + val.b.y; 1347e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1348e5c31af7Sopenharmony_ci } 1349e5c31af7Sopenharmony_ci "" 1350e5c31af7Sopenharmony_ciend 1351e5c31af7Sopenharmony_ci 1352e5c31af7Sopenharmony_cicase uniform_struct_partial_ivec2_vec2 1353e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and vec2" 1354e5c31af7Sopenharmony_ci values { 1355e5c31af7Sopenharmony_ci uniform ivec2 val.a = ivec2(1, 2); 1356e5c31af7Sopenharmony_ci uniform vec2 val.b = vec2(1.0, 2.0); 1357e5c31af7Sopenharmony_ci output float out0 = 3.0; 1358e5c31af7Sopenharmony_ci } 1359e5c31af7Sopenharmony_ci vertex "" 1360e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1361e5c31af7Sopenharmony_ci struct Struct {mediump ivec2 a; mediump vec2 b;}; 1362e5c31af7Sopenharmony_ci uniform Struct val; 1363e5c31af7Sopenharmony_ci varying mediump float res; 1364e5c31af7Sopenharmony_ci void main() 1365e5c31af7Sopenharmony_ci { 1366e5c31af7Sopenharmony_ci res = vec2(val.a).x; 1367e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1368e5c31af7Sopenharmony_ci } 1369e5c31af7Sopenharmony_ci "" 1370e5c31af7Sopenharmony_ci fragment "" 1371e5c31af7Sopenharmony_ci precision mediump float; 1372e5c31af7Sopenharmony_ci struct Struct {mediump ivec2 a; mediump vec2 b;}; 1373e5c31af7Sopenharmony_ci uniform Struct val; 1374e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1375e5c31af7Sopenharmony_ci varying mediump float res; 1376e5c31af7Sopenharmony_ci void main() 1377e5c31af7Sopenharmony_ci { 1378e5c31af7Sopenharmony_ci out0 = res + val.b.y; 1379e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1380e5c31af7Sopenharmony_ci } 1381e5c31af7Sopenharmony_ci "" 1382e5c31af7Sopenharmony_ciend 1383e5c31af7Sopenharmony_ci 1384e5c31af7Sopenharmony_cicase uniform_struct_partial_ivec2_ivec2 1385e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and ivec2" 1386e5c31af7Sopenharmony_ci values { 1387e5c31af7Sopenharmony_ci uniform ivec2 val.a = ivec2(1, 2); 1388e5c31af7Sopenharmony_ci uniform ivec2 val.b = ivec2(1, 2); 1389e5c31af7Sopenharmony_ci output float out0 = 3.0; 1390e5c31af7Sopenharmony_ci } 1391e5c31af7Sopenharmony_ci vertex "" 1392e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1393e5c31af7Sopenharmony_ci struct Struct {mediump ivec2 a; mediump ivec2 b;}; 1394e5c31af7Sopenharmony_ci uniform Struct val; 1395e5c31af7Sopenharmony_ci varying mediump float res; 1396e5c31af7Sopenharmony_ci void main() 1397e5c31af7Sopenharmony_ci { 1398e5c31af7Sopenharmony_ci res = vec2(val.a).x; 1399e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1400e5c31af7Sopenharmony_ci } 1401e5c31af7Sopenharmony_ci "" 1402e5c31af7Sopenharmony_ci fragment "" 1403e5c31af7Sopenharmony_ci precision mediump float; 1404e5c31af7Sopenharmony_ci struct Struct {mediump ivec2 a; mediump ivec2 b;}; 1405e5c31af7Sopenharmony_ci uniform Struct val; 1406e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1407e5c31af7Sopenharmony_ci varying mediump float res; 1408e5c31af7Sopenharmony_ci void main() 1409e5c31af7Sopenharmony_ci { 1410e5c31af7Sopenharmony_ci out0 = res + vec2(val.b).y; 1411e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1412e5c31af7Sopenharmony_ci } 1413e5c31af7Sopenharmony_ci "" 1414e5c31af7Sopenharmony_ciend 1415e5c31af7Sopenharmony_ci 1416e5c31af7Sopenharmony_cicase uniform_struct_type_conflict_1 1417e5c31af7Sopenharmony_ci desc "Fragment struct has one less member than fragment version" 1418e5c31af7Sopenharmony_ci expect link_fail 1419e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 1420e5c31af7Sopenharmony_ci vertex "" 1421e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1422e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 1423e5c31af7Sopenharmony_ci uniform Struct val; 1424e5c31af7Sopenharmony_ci varying mediump float res; 1425e5c31af7Sopenharmony_ci void main() 1426e5c31af7Sopenharmony_ci { 1427e5c31af7Sopenharmony_ci res = val.a; 1428e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1429e5c31af7Sopenharmony_ci } 1430e5c31af7Sopenharmony_ci "" 1431e5c31af7Sopenharmony_ci fragment "" 1432e5c31af7Sopenharmony_ci precision mediump float; 1433e5c31af7Sopenharmony_ci struct Struct {mediump float a;}; 1434e5c31af7Sopenharmony_ci uniform Struct val; 1435e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1436e5c31af7Sopenharmony_ci varying mediump float res; 1437e5c31af7Sopenharmony_ci void main() 1438e5c31af7Sopenharmony_ci { 1439e5c31af7Sopenharmony_ci out0 = res + val.a; 1440e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1441e5c31af7Sopenharmony_ci } 1442e5c31af7Sopenharmony_ci "" 1443e5c31af7Sopenharmony_ciend 1444e5c31af7Sopenharmony_ci 1445e5c31af7Sopenharmony_cicase uniform_struct_type_conflict_2 1446e5c31af7Sopenharmony_ci desc "Vertex struct has int, fragment struct has float." 1447e5c31af7Sopenharmony_ci expect link_fail 1448e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 1449e5c31af7Sopenharmony_ci vertex "" 1450e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1451e5c31af7Sopenharmony_ci struct Struct {mediump int a;}; 1452e5c31af7Sopenharmony_ci uniform Struct val; 1453e5c31af7Sopenharmony_ci varying mediump float res; 1454e5c31af7Sopenharmony_ci void main() 1455e5c31af7Sopenharmony_ci { 1456e5c31af7Sopenharmony_ci res = float(val.a); 1457e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1458e5c31af7Sopenharmony_ci } 1459e5c31af7Sopenharmony_ci "" 1460e5c31af7Sopenharmony_ci fragment "" 1461e5c31af7Sopenharmony_ci precision mediump float; 1462e5c31af7Sopenharmony_ci struct Struct {mediump float a;}; 1463e5c31af7Sopenharmony_ci uniform Struct val; 1464e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1465e5c31af7Sopenharmony_ci varying mediump float res; 1466e5c31af7Sopenharmony_ci void main() 1467e5c31af7Sopenharmony_ci { 1468e5c31af7Sopenharmony_ci out0 = val.a; 1469e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1470e5c31af7Sopenharmony_ci } 1471e5c31af7Sopenharmony_ci "" 1472e5c31af7Sopenharmony_ciend 1473e5c31af7Sopenharmony_ci 1474e5c31af7Sopenharmony_cicase uniform_struct_type_conflict_3 1475e5c31af7Sopenharmony_ci desc "Vertex struct has vec3, fragment struct has vec4." 1476e5c31af7Sopenharmony_ci expect link_fail 1477e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 1478e5c31af7Sopenharmony_ci vertex "" 1479e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1480e5c31af7Sopenharmony_ci struct Struct {mediump vec3 a;}; 1481e5c31af7Sopenharmony_ci uniform Struct val; 1482e5c31af7Sopenharmony_ci varying mediump float res; 1483e5c31af7Sopenharmony_ci void main() 1484e5c31af7Sopenharmony_ci { 1485e5c31af7Sopenharmony_ci res = float(val.a.x); 1486e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1487e5c31af7Sopenharmony_ci } 1488e5c31af7Sopenharmony_ci "" 1489e5c31af7Sopenharmony_ci fragment "" 1490e5c31af7Sopenharmony_ci precision mediump float; 1491e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a;}; 1492e5c31af7Sopenharmony_ci uniform Struct val; 1493e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1494e5c31af7Sopenharmony_ci varying mediump float res; 1495e5c31af7Sopenharmony_ci void main() 1496e5c31af7Sopenharmony_ci { 1497e5c31af7Sopenharmony_ci out0 = val.a.x; 1498e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1499e5c31af7Sopenharmony_ci } 1500e5c31af7Sopenharmony_ci "" 1501e5c31af7Sopenharmony_ciend 1502e5c31af7Sopenharmony_ci 1503e5c31af7Sopenharmony_cicase uniform_struct_precision_conflict_1 1504e5c31af7Sopenharmony_ci desc "Vertex side struct has highp, fragment side struct mediump." 1505e5c31af7Sopenharmony_ci expect link_fail 1506e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 1507e5c31af7Sopenharmony_ci vertex "" 1508e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1509e5c31af7Sopenharmony_ci struct Struct {highp float a;}; 1510e5c31af7Sopenharmony_ci uniform Struct val; 1511e5c31af7Sopenharmony_ci varying mediump float res; 1512e5c31af7Sopenharmony_ci void main() 1513e5c31af7Sopenharmony_ci { 1514e5c31af7Sopenharmony_ci res = val.a; 1515e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1516e5c31af7Sopenharmony_ci } 1517e5c31af7Sopenharmony_ci "" 1518e5c31af7Sopenharmony_ci fragment "" 1519e5c31af7Sopenharmony_ci precision mediump float; 1520e5c31af7Sopenharmony_ci struct Struct {mediump float a;}; 1521e5c31af7Sopenharmony_ci uniform Struct val; 1522e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1523e5c31af7Sopenharmony_ci varying mediump float res; 1524e5c31af7Sopenharmony_ci void main() 1525e5c31af7Sopenharmony_ci { 1526e5c31af7Sopenharmony_ci out0 = val.a; 1527e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1528e5c31af7Sopenharmony_ci } 1529e5c31af7Sopenharmony_ci "" 1530e5c31af7Sopenharmony_ciend 1531e5c31af7Sopenharmony_ci 1532e5c31af7Sopenharmony_cicase uniform_struct_precision_conflict_2 1533e5c31af7Sopenharmony_ci desc "Vertex side struct has mediump, fragment side struct lowp." 1534e5c31af7Sopenharmony_ci expect link_fail 1535e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 1536e5c31af7Sopenharmony_ci vertex "" 1537e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1538e5c31af7Sopenharmony_ci struct Struct {mediump float a;}; 1539e5c31af7Sopenharmony_ci uniform Struct val; 1540e5c31af7Sopenharmony_ci varying mediump float res; 1541e5c31af7Sopenharmony_ci void main() 1542e5c31af7Sopenharmony_ci { 1543e5c31af7Sopenharmony_ci res = val.a; 1544e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1545e5c31af7Sopenharmony_ci } 1546e5c31af7Sopenharmony_ci "" 1547e5c31af7Sopenharmony_ci fragment "" 1548e5c31af7Sopenharmony_ci precision mediump float; 1549e5c31af7Sopenharmony_ci struct Struct {lowp float a;}; 1550e5c31af7Sopenharmony_ci uniform Struct val; 1551e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1552e5c31af7Sopenharmony_ci varying mediump float res; 1553e5c31af7Sopenharmony_ci void main() 1554e5c31af7Sopenharmony_ci { 1555e5c31af7Sopenharmony_ci out0 = val.a; 1556e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1557e5c31af7Sopenharmony_ci } 1558e5c31af7Sopenharmony_ci "" 1559e5c31af7Sopenharmony_ciend 1560e5c31af7Sopenharmony_ci 1561e5c31af7Sopenharmony_cicase uniform_struct_precision_conflict_3 1562e5c31af7Sopenharmony_ci desc "Vertex side struct has lowp, fragment side struct mediump." 1563e5c31af7Sopenharmony_ci expect link_fail 1564e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 1565e5c31af7Sopenharmony_ci vertex "" 1566e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1567e5c31af7Sopenharmony_ci struct Struct {lowp float a;}; 1568e5c31af7Sopenharmony_ci uniform Struct val; 1569e5c31af7Sopenharmony_ci varying mediump float res; 1570e5c31af7Sopenharmony_ci void main() 1571e5c31af7Sopenharmony_ci { 1572e5c31af7Sopenharmony_ci res = val.a; 1573e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1574e5c31af7Sopenharmony_ci } 1575e5c31af7Sopenharmony_ci "" 1576e5c31af7Sopenharmony_ci fragment "" 1577e5c31af7Sopenharmony_ci precision mediump float; 1578e5c31af7Sopenharmony_ci struct Struct {mediump float a;}; 1579e5c31af7Sopenharmony_ci uniform Struct val; 1580e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1581e5c31af7Sopenharmony_ci varying mediump float res; 1582e5c31af7Sopenharmony_ci void main() 1583e5c31af7Sopenharmony_ci { 1584e5c31af7Sopenharmony_ci out0 = val.a; 1585e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1586e5c31af7Sopenharmony_ci } 1587e5c31af7Sopenharmony_ci "" 1588e5c31af7Sopenharmony_ciend 1589e5c31af7Sopenharmony_ci 1590e5c31af7Sopenharmony_cicase uniform_struct_precision_conflict_4 1591e5c31af7Sopenharmony_ci desc "Vertex side struct has lowp, fragment side struct implicit mediump." 1592e5c31af7Sopenharmony_ci expect link_fail 1593e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 1594e5c31af7Sopenharmony_ci vertex "" 1595e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1596e5c31af7Sopenharmony_ci struct Struct {lowp float a;}; 1597e5c31af7Sopenharmony_ci uniform Struct val; 1598e5c31af7Sopenharmony_ci varying mediump float res; 1599e5c31af7Sopenharmony_ci void main() 1600e5c31af7Sopenharmony_ci { 1601e5c31af7Sopenharmony_ci res = val.a; 1602e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1603e5c31af7Sopenharmony_ci } 1604e5c31af7Sopenharmony_ci "" 1605e5c31af7Sopenharmony_ci fragment "" 1606e5c31af7Sopenharmony_ci precision mediump float; 1607e5c31af7Sopenharmony_ci struct Struct {float a;}; 1608e5c31af7Sopenharmony_ci uniform Struct val; 1609e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1610e5c31af7Sopenharmony_ci varying mediump float res; 1611e5c31af7Sopenharmony_ci void main() 1612e5c31af7Sopenharmony_ci { 1613e5c31af7Sopenharmony_ci out0 = val.a; 1614e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1615e5c31af7Sopenharmony_ci } 1616e5c31af7Sopenharmony_ci "" 1617e5c31af7Sopenharmony_ciend 1618e5c31af7Sopenharmony_ci 1619e5c31af7Sopenharmony_cicase uniform_struct_use_case_rip 1620e5c31af7Sopenharmony_ci desc "Complex Light struct from use case tests." 1621e5c31af7Sopenharmony_ci values { 1622e5c31af7Sopenharmony_ci uniform float val.constantAttenuation = 1.0; 1623e5c31af7Sopenharmony_ci uniform float val.quadraticAttenuation = 1.0; 1624e5c31af7Sopenharmony_ci output float out0 = 2.0; 1625e5c31af7Sopenharmony_ci } 1626e5c31af7Sopenharmony_ci vertex "" 1627e5c31af7Sopenharmony_ci struct Light 1628e5c31af7Sopenharmony_ci { 1629e5c31af7Sopenharmony_ci mediump vec3 color; 1630e5c31af7Sopenharmony_ci highp vec4 position; 1631e5c31af7Sopenharmony_ci highp vec3 direction; 1632e5c31af7Sopenharmony_ci mediump float constantAttenuation; 1633e5c31af7Sopenharmony_ci mediump float linearAttenuation; 1634e5c31af7Sopenharmony_ci mediump float quadraticAttenuation; 1635e5c31af7Sopenharmony_ci }; 1636e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1637e5c31af7Sopenharmony_ci uniform Light val; 1638e5c31af7Sopenharmony_ci varying mediump float res; 1639e5c31af7Sopenharmony_ci void main() 1640e5c31af7Sopenharmony_ci { 1641e5c31af7Sopenharmony_ci res = val.constantAttenuation; 1642e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1643e5c31af7Sopenharmony_ci } 1644e5c31af7Sopenharmony_ci "" 1645e5c31af7Sopenharmony_ci fragment "" 1646e5c31af7Sopenharmony_ci precision mediump float; 1647e5c31af7Sopenharmony_ci struct Light 1648e5c31af7Sopenharmony_ci { 1649e5c31af7Sopenharmony_ci mediump vec3 color; 1650e5c31af7Sopenharmony_ci highp vec4 position; 1651e5c31af7Sopenharmony_ci highp vec3 direction; 1652e5c31af7Sopenharmony_ci mediump float constantAttenuation; 1653e5c31af7Sopenharmony_ci mediump float linearAttenuation; 1654e5c31af7Sopenharmony_ci mediump float quadraticAttenuation; 1655e5c31af7Sopenharmony_ci }; 1656e5c31af7Sopenharmony_ci struct Struct {float a;}; 1657e5c31af7Sopenharmony_ci uniform Light val; 1658e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1659e5c31af7Sopenharmony_ci varying mediump float res; 1660e5c31af7Sopenharmony_ci void main() 1661e5c31af7Sopenharmony_ci { 1662e5c31af7Sopenharmony_ci out0 = res + val.quadraticAttenuation; 1663e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1664e5c31af7Sopenharmony_ci } 1665e5c31af7Sopenharmony_ci "" 1666e5c31af7Sopenharmony_ciend 1667e5c31af7Sopenharmony_ci 1668e5c31af7Sopenharmony_cicase uniform_struct_use_case_rip_sans_highp 1669e5c31af7Sopenharmony_ci desc "Complex Light struct from use case tests, without highp usage" 1670e5c31af7Sopenharmony_ci values { 1671e5c31af7Sopenharmony_ci uniform float val.constantAttenuation = 1.0; 1672e5c31af7Sopenharmony_ci uniform float val.quadraticAttenuation = 1.0; 1673e5c31af7Sopenharmony_ci output float out0 = 2.0; 1674e5c31af7Sopenharmony_ci } 1675e5c31af7Sopenharmony_ci vertex "" 1676e5c31af7Sopenharmony_ci struct Light 1677e5c31af7Sopenharmony_ci { 1678e5c31af7Sopenharmony_ci mediump vec3 color; 1679e5c31af7Sopenharmony_ci mediump vec4 position; 1680e5c31af7Sopenharmony_ci mediump vec3 direction; 1681e5c31af7Sopenharmony_ci mediump float constantAttenuation; 1682e5c31af7Sopenharmony_ci mediump float linearAttenuation; 1683e5c31af7Sopenharmony_ci mediump float quadraticAttenuation; 1684e5c31af7Sopenharmony_ci }; 1685e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1686e5c31af7Sopenharmony_ci uniform Light val; 1687e5c31af7Sopenharmony_ci varying mediump float res; 1688e5c31af7Sopenharmony_ci void main() 1689e5c31af7Sopenharmony_ci { 1690e5c31af7Sopenharmony_ci res = val.constantAttenuation; 1691e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1692e5c31af7Sopenharmony_ci } 1693e5c31af7Sopenharmony_ci "" 1694e5c31af7Sopenharmony_ci fragment "" 1695e5c31af7Sopenharmony_ci precision mediump float; 1696e5c31af7Sopenharmony_ci struct Light 1697e5c31af7Sopenharmony_ci { 1698e5c31af7Sopenharmony_ci mediump vec3 color; 1699e5c31af7Sopenharmony_ci mediump vec4 position; 1700e5c31af7Sopenharmony_ci mediump vec3 direction; 1701e5c31af7Sopenharmony_ci mediump float constantAttenuation; 1702e5c31af7Sopenharmony_ci mediump float linearAttenuation; 1703e5c31af7Sopenharmony_ci mediump float quadraticAttenuation; 1704e5c31af7Sopenharmony_ci }; 1705e5c31af7Sopenharmony_ci struct Struct {float a;}; 1706e5c31af7Sopenharmony_ci uniform Light val; 1707e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1708e5c31af7Sopenharmony_ci varying mediump float res; 1709e5c31af7Sopenharmony_ci void main() 1710e5c31af7Sopenharmony_ci { 1711e5c31af7Sopenharmony_ci out0 = res + val.quadraticAttenuation; 1712e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1713e5c31af7Sopenharmony_ci } 1714e5c31af7Sopenharmony_ci "" 1715e5c31af7Sopenharmony_ciend 1716