1e5c31af7Sopenharmony_ci 2e5c31af7Sopenharmony_ci# Varying tests 3e5c31af7Sopenharmony_cigroup varying "Varying linkage" 4e5c31af7Sopenharmony_ci 5e5c31af7Sopenharmony_ci # Linking rules 6e5c31af7Sopenharmony_ci group rules "Varying linking rules" 7e5c31af7Sopenharmony_ci # not declared in vertex shader, declared in fragment shader 8e5c31af7Sopenharmony_ci case fragment_declare 9e5c31af7Sopenharmony_ci version 300 es 10e5c31af7Sopenharmony_ci desc "varying declared in fragment shader, no reference in vertex shader" 11e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 12e5c31af7Sopenharmony_ci vertex "" 13e5c31af7Sopenharmony_ci #version 300 es 14e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 15e5c31af7Sopenharmony_ci void main() 16e5c31af7Sopenharmony_ci { 17e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 18e5c31af7Sopenharmony_ci } 19e5c31af7Sopenharmony_ci "" 20e5c31af7Sopenharmony_ci fragment "" 21e5c31af7Sopenharmony_ci #version 300 es 22e5c31af7Sopenharmony_ci precision mediump float; 23e5c31af7Sopenharmony_ci in mediump float var; 24e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 25e5c31af7Sopenharmony_ci void main() 26e5c31af7Sopenharmony_ci { 27e5c31af7Sopenharmony_ci out0 = 1.0; 28e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 29e5c31af7Sopenharmony_ci } 30e5c31af7Sopenharmony_ci "" 31e5c31af7Sopenharmony_ci end 32e5c31af7Sopenharmony_ci 33e5c31af7Sopenharmony_ci # declared in vertex shader, no reference in frag shader 34e5c31af7Sopenharmony_ci case vertex_declare 35e5c31af7Sopenharmony_ci version 300 es 36e5c31af7Sopenharmony_ci desc "varying declared in vertex shader, no reference in fragment shader" 37e5c31af7Sopenharmony_ci vertex "" 38e5c31af7Sopenharmony_ci #version 300 es 39e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 40e5c31af7Sopenharmony_ci out mediump float var; 41e5c31af7Sopenharmony_ci void main() 42e5c31af7Sopenharmony_ci { 43e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 44e5c31af7Sopenharmony_ci } 45e5c31af7Sopenharmony_ci "" 46e5c31af7Sopenharmony_ci fragment "" 47e5c31af7Sopenharmony_ci #version 300 es 48e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 49e5c31af7Sopenharmony_ci void main() 50e5c31af7Sopenharmony_ci { 51e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 52e5c31af7Sopenharmony_ci } 53e5c31af7Sopenharmony_ci "" 54e5c31af7Sopenharmony_ci end 55e5c31af7Sopenharmony_ci 56e5c31af7Sopenharmony_ci # declared in vertex shader, declared in frag shader 57e5c31af7Sopenharmony_ci case both_declare 58e5c31af7Sopenharmony_ci version 300 es 59e5c31af7Sopenharmony_ci desc "varying declared in both vertex and fragment shader, but not used" 60e5c31af7Sopenharmony_ci vertex "" 61e5c31af7Sopenharmony_ci #version 300 es 62e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 63e5c31af7Sopenharmony_ci out mediump float var; 64e5c31af7Sopenharmony_ci void main() 65e5c31af7Sopenharmony_ci { 66e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 67e5c31af7Sopenharmony_ci } 68e5c31af7Sopenharmony_ci "" 69e5c31af7Sopenharmony_ci fragment "" 70e5c31af7Sopenharmony_ci #version 300 es 71e5c31af7Sopenharmony_ci in mediump float var; 72e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 73e5c31af7Sopenharmony_ci void main() 74e5c31af7Sopenharmony_ci { 75e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 76e5c31af7Sopenharmony_ci } 77e5c31af7Sopenharmony_ci "" 78e5c31af7Sopenharmony_ci end 79e5c31af7Sopenharmony_ci 80e5c31af7Sopenharmony_ci # declared in vertex shader, static use in frag shader 81e5c31af7Sopenharmony_ci case vertex_declare_fragment_use 82e5c31af7Sopenharmony_ci version 300 es 83e5c31af7Sopenharmony_ci desc "varying declared in both shaders, statically used in fragment shader" 84e5c31af7Sopenharmony_ci values { uniform bool u_false = false; } 85e5c31af7Sopenharmony_ci vertex "" 86e5c31af7Sopenharmony_ci #version 300 es 87e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 88e5c31af7Sopenharmony_ci out mediump float var; 89e5c31af7Sopenharmony_ci void main() 90e5c31af7Sopenharmony_ci { 91e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 92e5c31af7Sopenharmony_ci } 93e5c31af7Sopenharmony_ci "" 94e5c31af7Sopenharmony_ci fragment "" 95e5c31af7Sopenharmony_ci #version 300 es 96e5c31af7Sopenharmony_ci in mediump float var; 97e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 98e5c31af7Sopenharmony_ci void main() 99e5c31af7Sopenharmony_ci { 100e5c31af7Sopenharmony_ci if (u_false) 101e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(var); 102e5c31af7Sopenharmony_ci else 103e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 104e5c31af7Sopenharmony_ci } 105e5c31af7Sopenharmony_ci "" 106e5c31af7Sopenharmony_ci end 107e5c31af7Sopenharmony_ci 108e5c31af7Sopenharmony_ci # static use in vertex shader, no reference in fragment shader 109e5c31af7Sopenharmony_ci case vertex_use_fragment_declare 110e5c31af7Sopenharmony_ci version 300 es 111e5c31af7Sopenharmony_ci desc "varying declared and statically used in vertex shader, no reference in fragment shader" 112e5c31af7Sopenharmony_ci values { uniform bool u_false = false; } 113e5c31af7Sopenharmony_ci vertex "" 114e5c31af7Sopenharmony_ci #version 300 es 115e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 116e5c31af7Sopenharmony_ci out 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 #version 300 es 126e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 127e5c31af7Sopenharmony_ci void main() 128e5c31af7Sopenharmony_ci { 129e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 130e5c31af7Sopenharmony_ci } 131e5c31af7Sopenharmony_ci "" 132e5c31af7Sopenharmony_ci end 133e5c31af7Sopenharmony_ci 134e5c31af7Sopenharmony_ci # static use in vertex shader, declared in fragment shader 135e5c31af7Sopenharmony_ci case vertex_use_declare_fragment 136e5c31af7Sopenharmony_ci version 300 es 137e5c31af7Sopenharmony_ci desc "varying declared and statically used in vertex shader, only declared in fragment shader" 138e5c31af7Sopenharmony_ci values { uniform bool u_false = false; } 139e5c31af7Sopenharmony_ci vertex "" 140e5c31af7Sopenharmony_ci #version 300 es 141e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 142e5c31af7Sopenharmony_ci out mediump float var; 143e5c31af7Sopenharmony_ci void main() 144e5c31af7Sopenharmony_ci { 145e5c31af7Sopenharmony_ci if (u_false) 146e5c31af7Sopenharmony_ci var = 1.0; 147e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 148e5c31af7Sopenharmony_ci } 149e5c31af7Sopenharmony_ci "" 150e5c31af7Sopenharmony_ci fragment "" 151e5c31af7Sopenharmony_ci #version 300 es 152e5c31af7Sopenharmony_ci in mediump float var; 153e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 154e5c31af7Sopenharmony_ci void main() 155e5c31af7Sopenharmony_ci { 156e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 157e5c31af7Sopenharmony_ci } 158e5c31af7Sopenharmony_ci "" 159e5c31af7Sopenharmony_ci end 160e5c31af7Sopenharmony_ci 161e5c31af7Sopenharmony_ci # static use in vertex shader, used in fragment shader 162e5c31af7Sopenharmony_ci case vertex_use_fragment_use 163e5c31af7Sopenharmony_ci version 300 es 164e5c31af7Sopenharmony_ci desc "varying statically used in both vertex and fragment shader" 165e5c31af7Sopenharmony_ci values { uniform bool u_false = false; } 166e5c31af7Sopenharmony_ci vertex "" 167e5c31af7Sopenharmony_ci #version 300 es 168e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 169e5c31af7Sopenharmony_ci out mediump float var; 170e5c31af7Sopenharmony_ci void main() 171e5c31af7Sopenharmony_ci { 172e5c31af7Sopenharmony_ci if (u_false) 173e5c31af7Sopenharmony_ci var = 1.0; 174e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 175e5c31af7Sopenharmony_ci } 176e5c31af7Sopenharmony_ci "" 177e5c31af7Sopenharmony_ci fragment "" 178e5c31af7Sopenharmony_ci #version 300 es 179e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 180e5c31af7Sopenharmony_ci in mediump float var; 181e5c31af7Sopenharmony_ci void main() 182e5c31af7Sopenharmony_ci { 183e5c31af7Sopenharmony_ci if (u_false) 184e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(var); 185e5c31af7Sopenharmony_ci else 186e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 187e5c31af7Sopenharmony_ci } 188e5c31af7Sopenharmony_ci "" 189e5c31af7Sopenharmony_ci end 190e5c31af7Sopenharmony_ci 191e5c31af7Sopenharmony_ci # differing precision tests 192e5c31af7Sopenharmony_ci case differing_precision_1 193e5c31af7Sopenharmony_ci version 300 es 194e5c31af7Sopenharmony_ci desc "varying declared as highp in vertex shader, but mediump in fragment shader" 195e5c31af7Sopenharmony_ci values 196e5c31af7Sopenharmony_ci { 197e5c31af7Sopenharmony_ci input float in0 = [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ]; 198e5c31af7Sopenharmony_ci output float out0 = [ -1.25 | -25.55 | 1.0 | 2.25 | 3.4 | 16.0 ]; 199e5c31af7Sopenharmony_ci } 200e5c31af7Sopenharmony_ci 201e5c31af7Sopenharmony_ci vertex "" 202e5c31af7Sopenharmony_ci #version 300 es 203e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 204e5c31af7Sopenharmony_ci out highp float var; 205e5c31af7Sopenharmony_ci void main() 206e5c31af7Sopenharmony_ci { 207e5c31af7Sopenharmony_ci var = in0; 208e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 209e5c31af7Sopenharmony_ci } 210e5c31af7Sopenharmony_ci "" 211e5c31af7Sopenharmony_ci fragment "" 212e5c31af7Sopenharmony_ci #version 300 es 213e5c31af7Sopenharmony_ci precision mediump float; 214e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 215e5c31af7Sopenharmony_ci in mediump float var; 216e5c31af7Sopenharmony_ci void main() 217e5c31af7Sopenharmony_ci { 218e5c31af7Sopenharmony_ci out0 = var; 219e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 220e5c31af7Sopenharmony_ci } 221e5c31af7Sopenharmony_ci "" 222e5c31af7Sopenharmony_ci end 223e5c31af7Sopenharmony_ci 224e5c31af7Sopenharmony_ci # differing precision tests 225e5c31af7Sopenharmony_ci case differing_precision_2 226e5c31af7Sopenharmony_ci version 300 es 227e5c31af7Sopenharmony_ci desc "varying declared as highp in vertex shader, but lowp in fragment shader" 228e5c31af7Sopenharmony_ci values 229e5c31af7Sopenharmony_ci { 230e5c31af7Sopenharmony_ci input float in0 = [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ]; 231e5c31af7Sopenharmony_ci output float out0 = [ -1.25 | -25.56 | 1.0 | 2.25 | 3.4 | 16.0 ]; 232e5c31af7Sopenharmony_ci } 233e5c31af7Sopenharmony_ci 234e5c31af7Sopenharmony_ci vertex "" 235e5c31af7Sopenharmony_ci #version 300 es 236e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 237e5c31af7Sopenharmony_ci out highp vec2 var; 238e5c31af7Sopenharmony_ci void main() 239e5c31af7Sopenharmony_ci { 240e5c31af7Sopenharmony_ci var = vec2(in0, 2.0*in0); 241e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 242e5c31af7Sopenharmony_ci } 243e5c31af7Sopenharmony_ci "" 244e5c31af7Sopenharmony_ci fragment "" 245e5c31af7Sopenharmony_ci #version 300 es 246e5c31af7Sopenharmony_ci precision mediump float; 247e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 248e5c31af7Sopenharmony_ci in lowp vec2 var; 249e5c31af7Sopenharmony_ci void main() 250e5c31af7Sopenharmony_ci { 251e5c31af7Sopenharmony_ci out0 = var.y - var.x; 252e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 253e5c31af7Sopenharmony_ci } 254e5c31af7Sopenharmony_ci "" 255e5c31af7Sopenharmony_ci end 256e5c31af7Sopenharmony_ci 257e5c31af7Sopenharmony_ci # differing precision tests 258e5c31af7Sopenharmony_ci case differing_precision_3 259e5c31af7Sopenharmony_ci version 300 es 260e5c31af7Sopenharmony_ci desc "varying declared as lowp in vertex shader, but mediump in fragment shader" 261e5c31af7Sopenharmony_ci values 262e5c31af7Sopenharmony_ci { 263e5c31af7Sopenharmony_ci input float in0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ]; 264e5c31af7Sopenharmony_ci output float out0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ]; 265e5c31af7Sopenharmony_ci } 266e5c31af7Sopenharmony_ci 267e5c31af7Sopenharmony_ci vertex "" 268e5c31af7Sopenharmony_ci #version 300 es 269e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 270e5c31af7Sopenharmony_ci out lowp vec4 var; 271e5c31af7Sopenharmony_ci void main() 272e5c31af7Sopenharmony_ci { 273e5c31af7Sopenharmony_ci var = vec4(in0, 2.0*in0, -in0, -in0); 274e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 275e5c31af7Sopenharmony_ci } 276e5c31af7Sopenharmony_ci "" 277e5c31af7Sopenharmony_ci fragment "" 278e5c31af7Sopenharmony_ci #version 300 es 279e5c31af7Sopenharmony_ci precision mediump float; 280e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 281e5c31af7Sopenharmony_ci in mediump vec4 var; 282e5c31af7Sopenharmony_ci void main() 283e5c31af7Sopenharmony_ci { 284e5c31af7Sopenharmony_ci out0 = var.x + var.y + var.z + var.w; 285e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 286e5c31af7Sopenharmony_ci } 287e5c31af7Sopenharmony_ci "" 288e5c31af7Sopenharmony_ci end 289e5c31af7Sopenharmony_ci 290e5c31af7Sopenharmony_ci # mismatched type, static use but no runtime use in the fragment shader 291e5c31af7Sopenharmony_ci case type_mismatch_1 292e5c31af7Sopenharmony_ci version 300 es 293e5c31af7Sopenharmony_ci desc "varying type mismatch (float vs. vec2), static use but no runtime use in the fragment shader" 294e5c31af7Sopenharmony_ci expect link_fail 295e5c31af7Sopenharmony_ci vertex "" 296e5c31af7Sopenharmony_ci #version 300 es 297e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 298e5c31af7Sopenharmony_ci out mediump float var; 299e5c31af7Sopenharmony_ci void main() 300e5c31af7Sopenharmony_ci { 301e5c31af7Sopenharmony_ci var = 2.0; 302e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 303e5c31af7Sopenharmony_ci } 304e5c31af7Sopenharmony_ci "" 305e5c31af7Sopenharmony_ci fragment "" 306e5c31af7Sopenharmony_ci #version 300 es 307e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 308e5c31af7Sopenharmony_ci in mediump vec2 var; 309e5c31af7Sopenharmony_ci void main() 310e5c31af7Sopenharmony_ci { 311e5c31af7Sopenharmony_ci if (false) 312e5c31af7Sopenharmony_ci { 313e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(var.y); 314e5c31af7Sopenharmony_ci } 315e5c31af7Sopenharmony_ci else 316e5c31af7Sopenharmony_ci { 317e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 318e5c31af7Sopenharmony_ci } 319e5c31af7Sopenharmony_ci } 320e5c31af7Sopenharmony_ci "" 321e5c31af7Sopenharmony_ci end 322e5c31af7Sopenharmony_ci 323e5c31af7Sopenharmony_ci # mismatched type, varyings used 324e5c31af7Sopenharmony_ci case type_mismatch_2 325e5c31af7Sopenharmony_ci version 300 es 326e5c31af7Sopenharmony_ci desc "varying type mismatch (float vs. vec2)" 327e5c31af7Sopenharmony_ci expect link_fail 328e5c31af7Sopenharmony_ci vertex "" 329e5c31af7Sopenharmony_ci #version 300 es 330e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 331e5c31af7Sopenharmony_ci out mediump float var; 332e5c31af7Sopenharmony_ci void main() 333e5c31af7Sopenharmony_ci { 334e5c31af7Sopenharmony_ci var = 2.0; 335e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 336e5c31af7Sopenharmony_ci } 337e5c31af7Sopenharmony_ci "" 338e5c31af7Sopenharmony_ci fragment "" 339e5c31af7Sopenharmony_ci #version 300 es 340e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 341e5c31af7Sopenharmony_ci in mediump vec2 var; 342e5c31af7Sopenharmony_ci void main() 343e5c31af7Sopenharmony_ci { 344e5c31af7Sopenharmony_ci ${FRAG_COLOR} = var.xyyx; 345e5c31af7Sopenharmony_ci } 346e5c31af7Sopenharmony_ci "" 347e5c31af7Sopenharmony_ci end 348e5c31af7Sopenharmony_ci 349e5c31af7Sopenharmony_ci # mismatched type, varyings used 350e5c31af7Sopenharmony_ci case type_mismatch_3 351e5c31af7Sopenharmony_ci version 300 es 352e5c31af7Sopenharmony_ci desc "varying type mismatch (int vs. uint)" 353e5c31af7Sopenharmony_ci expect link_fail 354e5c31af7Sopenharmony_ci vertex "" 355e5c31af7Sopenharmony_ci #version 300 es 356e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 357e5c31af7Sopenharmony_ci flat out mediump int var; 358e5c31af7Sopenharmony_ci void main() 359e5c31af7Sopenharmony_ci { 360e5c31af7Sopenharmony_ci var = 2; 361e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 362e5c31af7Sopenharmony_ci } 363e5c31af7Sopenharmony_ci "" 364e5c31af7Sopenharmony_ci fragment "" 365e5c31af7Sopenharmony_ci #version 300 es 366e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 367e5c31af7Sopenharmony_ci flat in mediump uint var; 368e5c31af7Sopenharmony_ci void main() 369e5c31af7Sopenharmony_ci { 370e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(var); 371e5c31af7Sopenharmony_ci } 372e5c31af7Sopenharmony_ci "" 373e5c31af7Sopenharmony_ci end 374e5c31af7Sopenharmony_ci 375e5c31af7Sopenharmony_ci # mismatched type, varyings used 376e5c31af7Sopenharmony_ci case struct_type_mismatch_1 377e5c31af7Sopenharmony_ci version 300 es 378e5c31af7Sopenharmony_ci desc "struct member mismatch" 379e5c31af7Sopenharmony_ci expect link_fail 380e5c31af7Sopenharmony_ci vertex "" 381e5c31af7Sopenharmony_ci #version 300 es 382e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 383e5c31af7Sopenharmony_ci struct S { highp float a; highp vec2 b; }; 384e5c31af7Sopenharmony_ci out S var; 385e5c31af7Sopenharmony_ci void main() 386e5c31af7Sopenharmony_ci { 387e5c31af7Sopenharmony_ci var.a = 2.0; 388e5c31af7Sopenharmony_ci var.b = vec2(1.0, 0.0); 389e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 390e5c31af7Sopenharmony_ci } 391e5c31af7Sopenharmony_ci "" 392e5c31af7Sopenharmony_ci fragment "" 393e5c31af7Sopenharmony_ci #version 300 es 394e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 395e5c31af7Sopenharmony_ci struct S { highp float a; highp vec3 b; }; 396e5c31af7Sopenharmony_ci in S var; 397e5c31af7Sopenharmony_ci void main() 398e5c31af7Sopenharmony_ci { 399e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(var.a, var.b); 400e5c31af7Sopenharmony_ci } 401e5c31af7Sopenharmony_ci "" 402e5c31af7Sopenharmony_ci end 403e5c31af7Sopenharmony_ci 404e5c31af7Sopenharmony_ci # mismatched type, varyings unused in fragment shader (runtime) 405e5c31af7Sopenharmony_ci case struct_type_mismatch_2 406e5c31af7Sopenharmony_ci version 300 es 407e5c31af7Sopenharmony_ci desc "struct member mismatch" 408e5c31af7Sopenharmony_ci expect link_fail 409e5c31af7Sopenharmony_ci vertex "" 410e5c31af7Sopenharmony_ci #version 300 es 411e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 412e5c31af7Sopenharmony_ci struct S { highp float a; highp vec2 b; }; 413e5c31af7Sopenharmony_ci out S var; 414e5c31af7Sopenharmony_ci void main() 415e5c31af7Sopenharmony_ci { 416e5c31af7Sopenharmony_ci var.a = 2.0; 417e5c31af7Sopenharmony_ci var.b = vec2(1.0, 0.0); 418e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 419e5c31af7Sopenharmony_ci } 420e5c31af7Sopenharmony_ci "" 421e5c31af7Sopenharmony_ci fragment "" 422e5c31af7Sopenharmony_ci #version 300 es 423e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 424e5c31af7Sopenharmony_ci struct S { highp float a; highp vec3 b; }; 425e5c31af7Sopenharmony_ci in S var; 426e5c31af7Sopenharmony_ci void main() 427e5c31af7Sopenharmony_ci { 428e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(var.a); 429e5c31af7Sopenharmony_ci if (false) 430e5c31af7Sopenharmony_ci ${FRAG_COLOR}.yzw = var.b; 431e5c31af7Sopenharmony_ci } 432e5c31af7Sopenharmony_ci "" 433e5c31af7Sopenharmony_ci end 434e5c31af7Sopenharmony_ci 435e5c31af7Sopenharmony_ci # mismatched type, varyings unused in both (runtime) 436e5c31af7Sopenharmony_ci case struct_type_mismatch_3 437e5c31af7Sopenharmony_ci version 300 es 438e5c31af7Sopenharmony_ci desc "struct member mismatch" 439e5c31af7Sopenharmony_ci expect link_fail 440e5c31af7Sopenharmony_ci vertex "" 441e5c31af7Sopenharmony_ci #version 300 es 442e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 443e5c31af7Sopenharmony_ci struct S { highp float a; highp vec2 b; }; 444e5c31af7Sopenharmony_ci out S var; 445e5c31af7Sopenharmony_ci void main() 446e5c31af7Sopenharmony_ci { 447e5c31af7Sopenharmony_ci var.a = 2.0; 448e5c31af7Sopenharmony_ci if (false) 449e5c31af7Sopenharmony_ci var.b = vec2(1.0, 0.0); 450e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 451e5c31af7Sopenharmony_ci } 452e5c31af7Sopenharmony_ci "" 453e5c31af7Sopenharmony_ci fragment "" 454e5c31af7Sopenharmony_ci #version 300 es 455e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 456e5c31af7Sopenharmony_ci struct S { highp float a; highp vec3 b; }; 457e5c31af7Sopenharmony_ci in S var; 458e5c31af7Sopenharmony_ci void main() 459e5c31af7Sopenharmony_ci { 460e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(var.a); 461e5c31af7Sopenharmony_ci if (false) 462e5c31af7Sopenharmony_ci ${FRAG_COLOR}.yzw = var.b; 463e5c31af7Sopenharmony_ci } 464e5c31af7Sopenharmony_ci "" 465e5c31af7Sopenharmony_ci end 466e5c31af7Sopenharmony_ci 467e5c31af7Sopenharmony_ci # interpolation_mismatch 468e5c31af7Sopenharmony_ci case interpolation_mismatch_1 469e5c31af7Sopenharmony_ci version 300 es 470e5c31af7Sopenharmony_ci desc "varying interpolation different (flat vs. smooth)" 471e5c31af7Sopenharmony_ci expect link_fail 472e5c31af7Sopenharmony_ci 473e5c31af7Sopenharmony_ci vertex "" 474e5c31af7Sopenharmony_ci #version 300 es 475e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 476e5c31af7Sopenharmony_ci in highp float in0; 477e5c31af7Sopenharmony_ci flat out mediump float var; 478e5c31af7Sopenharmony_ci void main() 479e5c31af7Sopenharmony_ci { 480e5c31af7Sopenharmony_ci var = in0; 481e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 482e5c31af7Sopenharmony_ci } 483e5c31af7Sopenharmony_ci "" 484e5c31af7Sopenharmony_ci fragment "" 485e5c31af7Sopenharmony_ci #version 300 es 486e5c31af7Sopenharmony_ci precision mediump float; 487e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 488e5c31af7Sopenharmony_ci in mediump float var; 489e5c31af7Sopenharmony_ci void main() 490e5c31af7Sopenharmony_ci { 491e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(var); 492e5c31af7Sopenharmony_ci } 493e5c31af7Sopenharmony_ci "" 494e5c31af7Sopenharmony_ci end 495e5c31af7Sopenharmony_ci 496e5c31af7Sopenharmony_ci # different interpolation 497e5c31af7Sopenharmony_ci case differing_interpolation_2 498e5c31af7Sopenharmony_ci version 300 es 499e5c31af7Sopenharmony_ci desc "varying interpolation different (smooth vs. centroid)" 500e5c31af7Sopenharmony_ci values 501e5c31af7Sopenharmony_ci { 502e5c31af7Sopenharmony_ci input float in0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ]; 503e5c31af7Sopenharmony_ci output float out0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ]; 504e5c31af7Sopenharmony_ci } 505e5c31af7Sopenharmony_ci 506e5c31af7Sopenharmony_ci vertex "" 507e5c31af7Sopenharmony_ci #version 300 es 508e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 509e5c31af7Sopenharmony_ci smooth out mediump float var; 510e5c31af7Sopenharmony_ci void main() 511e5c31af7Sopenharmony_ci { 512e5c31af7Sopenharmony_ci var = in0; 513e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 514e5c31af7Sopenharmony_ci } 515e5c31af7Sopenharmony_ci "" 516e5c31af7Sopenharmony_ci fragment "" 517e5c31af7Sopenharmony_ci #version 300 es 518e5c31af7Sopenharmony_ci precision mediump float; 519e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 520e5c31af7Sopenharmony_ci centroid in mediump float var; 521e5c31af7Sopenharmony_ci void main() 522e5c31af7Sopenharmony_ci { 523e5c31af7Sopenharmony_ci out0 = var; 524e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 525e5c31af7Sopenharmony_ci } 526e5c31af7Sopenharmony_ci "" 527e5c31af7Sopenharmony_ci end 528e5c31af7Sopenharmony_ci 529e5c31af7Sopenharmony_ci # no declaration in vertex shader, but static use in fragment 530e5c31af7Sopenharmony_ci case illegal_usage_1 531e5c31af7Sopenharmony_ci version 300 es 532e5c31af7Sopenharmony_ci desc "varying not declared in vertex shader, but statically used in fragment shader" 533e5c31af7Sopenharmony_ci expect link_fail 534e5c31af7Sopenharmony_ci vertex "" 535e5c31af7Sopenharmony_ci #version 300 es 536e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 537e5c31af7Sopenharmony_ci void main() 538e5c31af7Sopenharmony_ci { 539e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 540e5c31af7Sopenharmony_ci } 541e5c31af7Sopenharmony_ci "" 542e5c31af7Sopenharmony_ci fragment "" 543e5c31af7Sopenharmony_ci #version 300 es 544e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 545e5c31af7Sopenharmony_ci in mediump float var; 546e5c31af7Sopenharmony_ci void main() 547e5c31af7Sopenharmony_ci { 548e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(var); 549e5c31af7Sopenharmony_ci } 550e5c31af7Sopenharmony_ci "" 551e5c31af7Sopenharmony_ci end 552e5c31af7Sopenharmony_ci 553e5c31af7Sopenharmony_ci # non-flat integer varyings not allowed 554e5c31af7Sopenharmony_ci case invalid_type_int 555e5c31af7Sopenharmony_ci version 300 es 556e5c31af7Sopenharmony_ci desc "integer varying used" 557e5c31af7Sopenharmony_ci expect compile_fail 558e5c31af7Sopenharmony_ci vertex "" 559e5c31af7Sopenharmony_ci #version 300 es 560e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 561e5c31af7Sopenharmony_ci out mediump int var; 562e5c31af7Sopenharmony_ci void main() 563e5c31af7Sopenharmony_ci { 564e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 565e5c31af7Sopenharmony_ci } 566e5c31af7Sopenharmony_ci "" 567e5c31af7Sopenharmony_ci fragment "" 568e5c31af7Sopenharmony_ci #version 300 es 569e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 570e5c31af7Sopenharmony_ci in mediump int var; 571e5c31af7Sopenharmony_ci void main() 572e5c31af7Sopenharmony_ci { 573e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 574e5c31af7Sopenharmony_ci } 575e5c31af7Sopenharmony_ci "" 576e5c31af7Sopenharmony_ci end 577e5c31af7Sopenharmony_ci 578e5c31af7Sopenharmony_ci # non-flat integer varyings not allowed 579e5c31af7Sopenharmony_ci case invalid_type_uint 580e5c31af7Sopenharmony_ci version 300 es 581e5c31af7Sopenharmony_ci desc "integer varying used" 582e5c31af7Sopenharmony_ci expect compile_fail 583e5c31af7Sopenharmony_ci vertex "" 584e5c31af7Sopenharmony_ci #version 300 es 585e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 586e5c31af7Sopenharmony_ci out mediump uint var; 587e5c31af7Sopenharmony_ci void main() 588e5c31af7Sopenharmony_ci { 589e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 590e5c31af7Sopenharmony_ci } 591e5c31af7Sopenharmony_ci "" 592e5c31af7Sopenharmony_ci fragment "" 593e5c31af7Sopenharmony_ci #version 300 es 594e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 595e5c31af7Sopenharmony_ci in mediump uint var; 596e5c31af7Sopenharmony_ci void main() 597e5c31af7Sopenharmony_ci { 598e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 599e5c31af7Sopenharmony_ci } 600e5c31af7Sopenharmony_ci "" 601e5c31af7Sopenharmony_ci end 602e5c31af7Sopenharmony_ci 603e5c31af7Sopenharmony_ci # bool varyings not allowed 604e5c31af7Sopenharmony_ci case invalid_type_bool 605e5c31af7Sopenharmony_ci version 300 es 606e5c31af7Sopenharmony_ci desc "boolean varying used" 607e5c31af7Sopenharmony_ci expect compile_fail 608e5c31af7Sopenharmony_ci vertex "" 609e5c31af7Sopenharmony_ci #version 300 es 610e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 611e5c31af7Sopenharmony_ci out bool var; 612e5c31af7Sopenharmony_ci void main() 613e5c31af7Sopenharmony_ci { 614e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 615e5c31af7Sopenharmony_ci } 616e5c31af7Sopenharmony_ci "" 617e5c31af7Sopenharmony_ci fragment "" 618e5c31af7Sopenharmony_ci #version 300 es 619e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 620e5c31af7Sopenharmony_ci in bool var; 621e5c31af7Sopenharmony_ci void main() 622e5c31af7Sopenharmony_ci { 623e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 624e5c31af7Sopenharmony_ci } 625e5c31af7Sopenharmony_ci "" 626e5c31af7Sopenharmony_ci end 627e5c31af7Sopenharmony_ci 628e5c31af7Sopenharmony_ci case invalid_type_struct_array 629e5c31af7Sopenharmony_ci version 300 es 630e5c31af7Sopenharmony_ci desc "float array inside struct" 631e5c31af7Sopenharmony_ci expect compile_fail 632e5c31af7Sopenharmony_ci vertex "" 633e5c31af7Sopenharmony_ci #version 300 es 634e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 635e5c31af7Sopenharmony_ci struct S { mediump float a[3]; }; 636e5c31af7Sopenharmony_ci out S var; 637e5c31af7Sopenharmony_ci void main() 638e5c31af7Sopenharmony_ci { 639e5c31af7Sopenharmony_ci var.a[0] = 1.0; 640e5c31af7Sopenharmony_ci var.a[1] = 1.0; 641e5c31af7Sopenharmony_ci var.a[2] = 1.0; 642e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 643e5c31af7Sopenharmony_ci } 644e5c31af7Sopenharmony_ci "" 645e5c31af7Sopenharmony_ci fragment "" 646e5c31af7Sopenharmony_ci #version 300 es 647e5c31af7Sopenharmony_ci precision mediump float; 648e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 649e5c31af7Sopenharmony_ci struct S { mediump float a[3]; }; 650e5c31af7Sopenharmony_ci in S var; 651e5c31af7Sopenharmony_ci void main() 652e5c31af7Sopenharmony_ci { 653e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 654e5c31af7Sopenharmony_ci } 655e5c31af7Sopenharmony_ci "" 656e5c31af7Sopenharmony_ci end 657e5c31af7Sopenharmony_ci 658e5c31af7Sopenharmony_ci case invalid_type_struct_struct 659e5c31af7Sopenharmony_ci version 300 es 660e5c31af7Sopenharmony_ci desc "struct inside struct" 661e5c31af7Sopenharmony_ci expect compile_fail 662e5c31af7Sopenharmony_ci vertex "" 663e5c31af7Sopenharmony_ci #version 300 es 664e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 665e5c31af7Sopenharmony_ci struct S { mediump float a; }; 666e5c31af7Sopenharmony_ci struct T { S s; }; 667e5c31af7Sopenharmony_ci out T var; 668e5c31af7Sopenharmony_ci void main() 669e5c31af7Sopenharmony_ci { 670e5c31af7Sopenharmony_ci var.s.a = 1.0; 671e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 672e5c31af7Sopenharmony_ci } 673e5c31af7Sopenharmony_ci "" 674e5c31af7Sopenharmony_ci fragment "" 675e5c31af7Sopenharmony_ci #version 300 es 676e5c31af7Sopenharmony_ci precision mediump float; 677e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 678e5c31af7Sopenharmony_ci struct S { mediump float a; }; 679e5c31af7Sopenharmony_ci struct T { S s; }; 680e5c31af7Sopenharmony_ci in T var; 681e5c31af7Sopenharmony_ci void main() 682e5c31af7Sopenharmony_ci { 683e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 684e5c31af7Sopenharmony_ci } 685e5c31af7Sopenharmony_ci "" 686e5c31af7Sopenharmony_ci end 687e5c31af7Sopenharmony_ci 688e5c31af7Sopenharmony_ci case invalid_type_array_struct 689e5c31af7Sopenharmony_ci version 300 es 690e5c31af7Sopenharmony_ci desc "array of structs" 691e5c31af7Sopenharmony_ci expect compile_fail 692e5c31af7Sopenharmony_ci vertex "" 693e5c31af7Sopenharmony_ci #version 300 es 694e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 695e5c31af7Sopenharmony_ci struct S { mediump int a; }; 696e5c31af7Sopenharmony_ci flat out S var[2]; 697e5c31af7Sopenharmony_ci void main() 698e5c31af7Sopenharmony_ci { 699e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 700e5c31af7Sopenharmony_ci var[0].a = 1; 701e5c31af7Sopenharmony_ci var[1].a = 1; 702e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 703e5c31af7Sopenharmony_ci } 704e5c31af7Sopenharmony_ci "" 705e5c31af7Sopenharmony_ci fragment "" 706e5c31af7Sopenharmony_ci #version 300 es 707e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 708e5c31af7Sopenharmony_ci struct S { mediump int a; }; 709e5c31af7Sopenharmony_ci flat in S var[2]; 710e5c31af7Sopenharmony_ci void main() 711e5c31af7Sopenharmony_ci { 712e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 713e5c31af7Sopenharmony_ci } 714e5c31af7Sopenharmony_ci "" 715e5c31af7Sopenharmony_ci end 716e5c31af7Sopenharmony_ci 717e5c31af7Sopenharmony_ci case invalid_type_array_array 718e5c31af7Sopenharmony_ci version 300 es 719e5c31af7Sopenharmony_ci desc "array of arrays" 720e5c31af7Sopenharmony_ci expect compile_fail 721e5c31af7Sopenharmony_ci vertex "" 722e5c31af7Sopenharmony_ci #version 300 es 723e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 724e5c31af7Sopenharmony_ci out mediump float var[2][2]; 725e5c31af7Sopenharmony_ci void main() 726e5c31af7Sopenharmony_ci { 727e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 728e5c31af7Sopenharmony_ci var[0][0] = 1.0; 729e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 730e5c31af7Sopenharmony_ci } 731e5c31af7Sopenharmony_ci "" 732e5c31af7Sopenharmony_ci fragment "" 733e5c31af7Sopenharmony_ci #version 300 es 734e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 735e5c31af7Sopenharmony_ci in mediump float var[2][2]; 736e5c31af7Sopenharmony_ci void main() 737e5c31af7Sopenharmony_ci { 738e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(1.0); 739e5c31af7Sopenharmony_ci } 740e5c31af7Sopenharmony_ci "" 741e5c31af7Sopenharmony_ci end 742e5c31af7Sopenharmony_ci end 743e5c31af7Sopenharmony_ci 744e5c31af7Sopenharmony_ci group basic_types "Basic varying types" 745e5c31af7Sopenharmony_ci case float 746e5c31af7Sopenharmony_ci version 300 es 747e5c31af7Sopenharmony_ci desc "varying of type float" 748e5c31af7Sopenharmony_ci values 749e5c31af7Sopenharmony_ci { 750e5c31af7Sopenharmony_ci input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ]; 751e5c31af7Sopenharmony_ci output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ]; 752e5c31af7Sopenharmony_ci } 753e5c31af7Sopenharmony_ci vertex "" 754e5c31af7Sopenharmony_ci #version 300 es 755e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 756e5c31af7Sopenharmony_ci out mediump float var; 757e5c31af7Sopenharmony_ci void main() 758e5c31af7Sopenharmony_ci { 759e5c31af7Sopenharmony_ci var = in0; 760e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 761e5c31af7Sopenharmony_ci } 762e5c31af7Sopenharmony_ci "" 763e5c31af7Sopenharmony_ci fragment "" 764e5c31af7Sopenharmony_ci #version 300 es 765e5c31af7Sopenharmony_ci precision mediump float; 766e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 767e5c31af7Sopenharmony_ci in float var; 768e5c31af7Sopenharmony_ci void main() 769e5c31af7Sopenharmony_ci { 770e5c31af7Sopenharmony_ci out0 = var; 771e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 772e5c31af7Sopenharmony_ci } 773e5c31af7Sopenharmony_ci "" 774e5c31af7Sopenharmony_ci end 775e5c31af7Sopenharmony_ci 776e5c31af7Sopenharmony_ci case vec2 777e5c31af7Sopenharmony_ci version 300 es 778e5c31af7Sopenharmony_ci desc "varying of type vec2" 779e5c31af7Sopenharmony_ci values 780e5c31af7Sopenharmony_ci { 781e5c31af7Sopenharmony_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) ]; 782e5c31af7Sopenharmony_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) ]; 783e5c31af7Sopenharmony_ci } 784e5c31af7Sopenharmony_ci vertex "" 785e5c31af7Sopenharmony_ci #version 300 es 786e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 787e5c31af7Sopenharmony_ci out mediump vec2 var; 788e5c31af7Sopenharmony_ci void main() 789e5c31af7Sopenharmony_ci { 790e5c31af7Sopenharmony_ci var = in0; 791e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 792e5c31af7Sopenharmony_ci } 793e5c31af7Sopenharmony_ci "" 794e5c31af7Sopenharmony_ci fragment "" 795e5c31af7Sopenharmony_ci #version 300 es 796e5c31af7Sopenharmony_ci precision mediump float; 797e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 798e5c31af7Sopenharmony_ci in vec2 var; 799e5c31af7Sopenharmony_ci void main() 800e5c31af7Sopenharmony_ci { 801e5c31af7Sopenharmony_ci out0 = var; 802e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 803e5c31af7Sopenharmony_ci } 804e5c31af7Sopenharmony_ci "" 805e5c31af7Sopenharmony_ci end 806e5c31af7Sopenharmony_ci 807e5c31af7Sopenharmony_ci case vec3 808e5c31af7Sopenharmony_ci version 300 es 809e5c31af7Sopenharmony_ci desc "varying of type vec3" 810e5c31af7Sopenharmony_ci values 811e5c31af7Sopenharmony_ci { 812e5c31af7Sopenharmony_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) ]; 813e5c31af7Sopenharmony_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) ]; 814e5c31af7Sopenharmony_ci } 815e5c31af7Sopenharmony_ci vertex "" 816e5c31af7Sopenharmony_ci #version 300 es 817e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 818e5c31af7Sopenharmony_ci out mediump vec3 var; 819e5c31af7Sopenharmony_ci void main() 820e5c31af7Sopenharmony_ci { 821e5c31af7Sopenharmony_ci var = in0; 822e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 823e5c31af7Sopenharmony_ci } 824e5c31af7Sopenharmony_ci "" 825e5c31af7Sopenharmony_ci fragment "" 826e5c31af7Sopenharmony_ci #version 300 es 827e5c31af7Sopenharmony_ci precision mediump float; 828e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 829e5c31af7Sopenharmony_ci in vec3 var; 830e5c31af7Sopenharmony_ci void main() 831e5c31af7Sopenharmony_ci { 832e5c31af7Sopenharmony_ci out0 = var; 833e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 834e5c31af7Sopenharmony_ci } 835e5c31af7Sopenharmony_ci "" 836e5c31af7Sopenharmony_ci end 837e5c31af7Sopenharmony_ci 838e5c31af7Sopenharmony_ci case vec4 839e5c31af7Sopenharmony_ci version 300 es 840e5c31af7Sopenharmony_ci desc "varying of type vec4" 841e5c31af7Sopenharmony_ci values 842e5c31af7Sopenharmony_ci { 843e5c31af7Sopenharmony_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) ]; 844e5c31af7Sopenharmony_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) ]; 845e5c31af7Sopenharmony_ci } 846e5c31af7Sopenharmony_ci vertex "" 847e5c31af7Sopenharmony_ci #version 300 es 848e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 849e5c31af7Sopenharmony_ci out mediump vec4 var; 850e5c31af7Sopenharmony_ci void main() 851e5c31af7Sopenharmony_ci { 852e5c31af7Sopenharmony_ci var = in0; 853e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 854e5c31af7Sopenharmony_ci } 855e5c31af7Sopenharmony_ci "" 856e5c31af7Sopenharmony_ci fragment "" 857e5c31af7Sopenharmony_ci #version 300 es 858e5c31af7Sopenharmony_ci precision mediump float; 859e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 860e5c31af7Sopenharmony_ci in vec4 var; 861e5c31af7Sopenharmony_ci void main() 862e5c31af7Sopenharmony_ci { 863e5c31af7Sopenharmony_ci out0 = var; 864e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 865e5c31af7Sopenharmony_ci } 866e5c31af7Sopenharmony_ci "" 867e5c31af7Sopenharmony_ci end 868e5c31af7Sopenharmony_ci 869e5c31af7Sopenharmony_ci case mat2 870e5c31af7Sopenharmony_ci version 300 es 871e5c31af7Sopenharmony_ci desc "varying of type mat2" 872e5c31af7Sopenharmony_ci values 873e5c31af7Sopenharmony_ci { 874e5c31af7Sopenharmony_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) ]; 875e5c31af7Sopenharmony_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) ]; 876e5c31af7Sopenharmony_ci } 877e5c31af7Sopenharmony_ci vertex "" 878e5c31af7Sopenharmony_ci #version 300 es 879e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 880e5c31af7Sopenharmony_ci out mediump mat2 var; 881e5c31af7Sopenharmony_ci void main() 882e5c31af7Sopenharmony_ci { 883e5c31af7Sopenharmony_ci var = in0; 884e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 885e5c31af7Sopenharmony_ci } 886e5c31af7Sopenharmony_ci "" 887e5c31af7Sopenharmony_ci fragment "" 888e5c31af7Sopenharmony_ci #version 300 es 889e5c31af7Sopenharmony_ci precision mediump float; 890e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 891e5c31af7Sopenharmony_ci in mat2 var; 892e5c31af7Sopenharmony_ci void main() 893e5c31af7Sopenharmony_ci { 894e5c31af7Sopenharmony_ci out0 = var; 895e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 896e5c31af7Sopenharmony_ci } 897e5c31af7Sopenharmony_ci "" 898e5c31af7Sopenharmony_ci end 899e5c31af7Sopenharmony_ci 900e5c31af7Sopenharmony_ci case mat2x3 901e5c31af7Sopenharmony_ci version 300 es 902e5c31af7Sopenharmony_ci desc "varying of type mat2x3" 903e5c31af7Sopenharmony_ci values 904e5c31af7Sopenharmony_ci { 905e5c31af7Sopenharmony_ci input mat2x3 in0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ]; 906e5c31af7Sopenharmony_ci output mat2x3 out0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ]; 907e5c31af7Sopenharmony_ci } 908e5c31af7Sopenharmony_ci vertex "" 909e5c31af7Sopenharmony_ci #version 300 es 910e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 911e5c31af7Sopenharmony_ci out mediump mat2x3 var; 912e5c31af7Sopenharmony_ci void main() 913e5c31af7Sopenharmony_ci { 914e5c31af7Sopenharmony_ci var = in0; 915e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 916e5c31af7Sopenharmony_ci } 917e5c31af7Sopenharmony_ci "" 918e5c31af7Sopenharmony_ci fragment "" 919e5c31af7Sopenharmony_ci #version 300 es 920e5c31af7Sopenharmony_ci precision mediump float; 921e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 922e5c31af7Sopenharmony_ci in mat2x3 var; 923e5c31af7Sopenharmony_ci void main() 924e5c31af7Sopenharmony_ci { 925e5c31af7Sopenharmony_ci out0 = var; 926e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 927e5c31af7Sopenharmony_ci } 928e5c31af7Sopenharmony_ci "" 929e5c31af7Sopenharmony_ci end 930e5c31af7Sopenharmony_ci 931e5c31af7Sopenharmony_ci case mat2x4 932e5c31af7Sopenharmony_ci version 300 es 933e5c31af7Sopenharmony_ci desc "varying of type mat2x4" 934e5c31af7Sopenharmony_ci values 935e5c31af7Sopenharmony_ci { 936e5c31af7Sopenharmony_ci input mat2x4 in0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ]; 937e5c31af7Sopenharmony_ci output mat2x4 out0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ]; 938e5c31af7Sopenharmony_ci } 939e5c31af7Sopenharmony_ci vertex "" 940e5c31af7Sopenharmony_ci #version 300 es 941e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 942e5c31af7Sopenharmony_ci out mediump mat2x4 var; 943e5c31af7Sopenharmony_ci void main() 944e5c31af7Sopenharmony_ci { 945e5c31af7Sopenharmony_ci var = in0; 946e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 947e5c31af7Sopenharmony_ci } 948e5c31af7Sopenharmony_ci "" 949e5c31af7Sopenharmony_ci fragment "" 950e5c31af7Sopenharmony_ci #version 300 es 951e5c31af7Sopenharmony_ci precision mediump float; 952e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 953e5c31af7Sopenharmony_ci in mat2x4 var; 954e5c31af7Sopenharmony_ci void main() 955e5c31af7Sopenharmony_ci { 956e5c31af7Sopenharmony_ci out0 = var; 957e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 958e5c31af7Sopenharmony_ci } 959e5c31af7Sopenharmony_ci "" 960e5c31af7Sopenharmony_ci end 961e5c31af7Sopenharmony_ci 962e5c31af7Sopenharmony_ci case mat3x2 963e5c31af7Sopenharmony_ci version 300 es 964e5c31af7Sopenharmony_ci desc "varying of type mat3x2" 965e5c31af7Sopenharmony_ci values 966e5c31af7Sopenharmony_ci { 967e5c31af7Sopenharmony_ci input mat3x2 in0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ]; 968e5c31af7Sopenharmony_ci output mat3x2 out0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ]; 969e5c31af7Sopenharmony_ci } 970e5c31af7Sopenharmony_ci vertex "" 971e5c31af7Sopenharmony_ci #version 300 es 972e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 973e5c31af7Sopenharmony_ci out mediump mat3x2 var; 974e5c31af7Sopenharmony_ci void main() 975e5c31af7Sopenharmony_ci { 976e5c31af7Sopenharmony_ci var = in0; 977e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 978e5c31af7Sopenharmony_ci } 979e5c31af7Sopenharmony_ci "" 980e5c31af7Sopenharmony_ci fragment "" 981e5c31af7Sopenharmony_ci #version 300 es 982e5c31af7Sopenharmony_ci precision mediump float; 983e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 984e5c31af7Sopenharmony_ci in mat3x2 var; 985e5c31af7Sopenharmony_ci void main() 986e5c31af7Sopenharmony_ci { 987e5c31af7Sopenharmony_ci out0 = var; 988e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 989e5c31af7Sopenharmony_ci } 990e5c31af7Sopenharmony_ci "" 991e5c31af7Sopenharmony_ci end 992e5c31af7Sopenharmony_ci 993e5c31af7Sopenharmony_ci case mat3 994e5c31af7Sopenharmony_ci version 300 es 995e5c31af7Sopenharmony_ci desc "varying of type mat3" 996e5c31af7Sopenharmony_ci values 997e5c31af7Sopenharmony_ci { 998e5c31af7Sopenharmony_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) ]; 999e5c31af7Sopenharmony_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) ]; 1000e5c31af7Sopenharmony_ci } 1001e5c31af7Sopenharmony_ci vertex "" 1002e5c31af7Sopenharmony_ci #version 300 es 1003e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1004e5c31af7Sopenharmony_ci out mediump mat3 var; 1005e5c31af7Sopenharmony_ci void main() 1006e5c31af7Sopenharmony_ci { 1007e5c31af7Sopenharmony_ci var = in0; 1008e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1009e5c31af7Sopenharmony_ci } 1010e5c31af7Sopenharmony_ci "" 1011e5c31af7Sopenharmony_ci fragment "" 1012e5c31af7Sopenharmony_ci #version 300 es 1013e5c31af7Sopenharmony_ci precision mediump float; 1014e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1015e5c31af7Sopenharmony_ci in mat3 var; 1016e5c31af7Sopenharmony_ci void main() 1017e5c31af7Sopenharmony_ci { 1018e5c31af7Sopenharmony_ci out0 = var; 1019e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1020e5c31af7Sopenharmony_ci } 1021e5c31af7Sopenharmony_ci "" 1022e5c31af7Sopenharmony_ci end 1023e5c31af7Sopenharmony_ci 1024e5c31af7Sopenharmony_ci case mat3x4 1025e5c31af7Sopenharmony_ci version 300 es 1026e5c31af7Sopenharmony_ci desc "varying of type mat3x4" 1027e5c31af7Sopenharmony_ci values 1028e5c31af7Sopenharmony_ci { 1029e5c31af7Sopenharmony_ci input mat3x4 in0 = [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ]; 1030e5c31af7Sopenharmony_ci output mat3x4 out0 = [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ]; 1031e5c31af7Sopenharmony_ci } 1032e5c31af7Sopenharmony_ci vertex "" 1033e5c31af7Sopenharmony_ci #version 300 es 1034e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1035e5c31af7Sopenharmony_ci out mediump mat3x4 var; 1036e5c31af7Sopenharmony_ci void main() 1037e5c31af7Sopenharmony_ci { 1038e5c31af7Sopenharmony_ci var = in0; 1039e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1040e5c31af7Sopenharmony_ci } 1041e5c31af7Sopenharmony_ci "" 1042e5c31af7Sopenharmony_ci fragment "" 1043e5c31af7Sopenharmony_ci #version 300 es 1044e5c31af7Sopenharmony_ci precision mediump float; 1045e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1046e5c31af7Sopenharmony_ci in mat3x4 var; 1047e5c31af7Sopenharmony_ci void main() 1048e5c31af7Sopenharmony_ci { 1049e5c31af7Sopenharmony_ci out0 = var; 1050e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1051e5c31af7Sopenharmony_ci } 1052e5c31af7Sopenharmony_ci "" 1053e5c31af7Sopenharmony_ci end 1054e5c31af7Sopenharmony_ci 1055e5c31af7Sopenharmony_ci case mat4x2 1056e5c31af7Sopenharmony_ci version 300 es 1057e5c31af7Sopenharmony_ci desc "varying of type mat4x2" 1058e5c31af7Sopenharmony_ci values 1059e5c31af7Sopenharmony_ci { 1060e5c31af7Sopenharmony_ci input mat4x2 in0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ]; 1061e5c31af7Sopenharmony_ci output mat4x2 out0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ]; 1062e5c31af7Sopenharmony_ci } 1063e5c31af7Sopenharmony_ci vertex "" 1064e5c31af7Sopenharmony_ci #version 300 es 1065e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1066e5c31af7Sopenharmony_ci out mediump mat4x2 var; 1067e5c31af7Sopenharmony_ci void main() 1068e5c31af7Sopenharmony_ci { 1069e5c31af7Sopenharmony_ci var = in0; 1070e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1071e5c31af7Sopenharmony_ci } 1072e5c31af7Sopenharmony_ci "" 1073e5c31af7Sopenharmony_ci fragment "" 1074e5c31af7Sopenharmony_ci #version 300 es 1075e5c31af7Sopenharmony_ci precision mediump float; 1076e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1077e5c31af7Sopenharmony_ci in mat4x2 var; 1078e5c31af7Sopenharmony_ci void main() 1079e5c31af7Sopenharmony_ci { 1080e5c31af7Sopenharmony_ci out0 = var; 1081e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1082e5c31af7Sopenharmony_ci } 1083e5c31af7Sopenharmony_ci "" 1084e5c31af7Sopenharmony_ci end 1085e5c31af7Sopenharmony_ci 1086e5c31af7Sopenharmony_ci case mat4x3 1087e5c31af7Sopenharmony_ci version 300 es 1088e5c31af7Sopenharmony_ci desc "varying of type mat4x3" 1089e5c31af7Sopenharmony_ci values 1090e5c31af7Sopenharmony_ci { 1091e5c31af7Sopenharmony_ci input mat4x3 in0 = [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ]; 1092e5c31af7Sopenharmony_ci output mat4x3 out0 = [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ]; 1093e5c31af7Sopenharmony_ci } 1094e5c31af7Sopenharmony_ci vertex "" 1095e5c31af7Sopenharmony_ci #version 300 es 1096e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1097e5c31af7Sopenharmony_ci out mediump mat4x3 var; 1098e5c31af7Sopenharmony_ci void main() 1099e5c31af7Sopenharmony_ci { 1100e5c31af7Sopenharmony_ci var = in0; 1101e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1102e5c31af7Sopenharmony_ci } 1103e5c31af7Sopenharmony_ci "" 1104e5c31af7Sopenharmony_ci fragment "" 1105e5c31af7Sopenharmony_ci #version 300 es 1106e5c31af7Sopenharmony_ci precision mediump float; 1107e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1108e5c31af7Sopenharmony_ci in mat4x3 var; 1109e5c31af7Sopenharmony_ci void main() 1110e5c31af7Sopenharmony_ci { 1111e5c31af7Sopenharmony_ci out0 = var; 1112e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1113e5c31af7Sopenharmony_ci } 1114e5c31af7Sopenharmony_ci "" 1115e5c31af7Sopenharmony_ci end 1116e5c31af7Sopenharmony_ci 1117e5c31af7Sopenharmony_ci case mat4 1118e5c31af7Sopenharmony_ci version 300 es 1119e5c31af7Sopenharmony_ci desc "varying of type mat4" 1120e5c31af7Sopenharmony_ci values 1121e5c31af7Sopenharmony_ci { 1122e5c31af7Sopenharmony_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) ]; 1123e5c31af7Sopenharmony_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) ]; 1124e5c31af7Sopenharmony_ci } 1125e5c31af7Sopenharmony_ci vertex "" 1126e5c31af7Sopenharmony_ci #version 300 es 1127e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1128e5c31af7Sopenharmony_ci out mediump mat4 var; 1129e5c31af7Sopenharmony_ci void main() 1130e5c31af7Sopenharmony_ci { 1131e5c31af7Sopenharmony_ci var = in0; 1132e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1133e5c31af7Sopenharmony_ci } 1134e5c31af7Sopenharmony_ci "" 1135e5c31af7Sopenharmony_ci fragment "" 1136e5c31af7Sopenharmony_ci #version 300 es 1137e5c31af7Sopenharmony_ci precision mediump float; 1138e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1139e5c31af7Sopenharmony_ci in mat4 var; 1140e5c31af7Sopenharmony_ci void main() 1141e5c31af7Sopenharmony_ci { 1142e5c31af7Sopenharmony_ci out0 = var; 1143e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1144e5c31af7Sopenharmony_ci } 1145e5c31af7Sopenharmony_ci "" 1146e5c31af7Sopenharmony_ci end 1147e5c31af7Sopenharmony_ci 1148e5c31af7Sopenharmony_ci case int 1149e5c31af7Sopenharmony_ci version 300 es 1150e5c31af7Sopenharmony_ci desc "varying of type int" 1151e5c31af7Sopenharmony_ci values 1152e5c31af7Sopenharmony_ci { 1153e5c31af7Sopenharmony_ci input int in0 = [ -1 | -25 | 1 | 2 | 3 | 16 ]; 1154e5c31af7Sopenharmony_ci output int out0 = [ -1 | -25 | 1 | 2 | 3 | 16 ]; 1155e5c31af7Sopenharmony_ci } 1156e5c31af7Sopenharmony_ci vertex "" 1157e5c31af7Sopenharmony_ci #version 300 es 1158e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1159e5c31af7Sopenharmony_ci flat out mediump int var; 1160e5c31af7Sopenharmony_ci void main() 1161e5c31af7Sopenharmony_ci { 1162e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 1163e5c31af7Sopenharmony_ci var = in0; 1164e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1165e5c31af7Sopenharmony_ci } 1166e5c31af7Sopenharmony_ci "" 1167e5c31af7Sopenharmony_ci fragment "" 1168e5c31af7Sopenharmony_ci #version 300 es 1169e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1170e5c31af7Sopenharmony_ci flat in int var; 1171e5c31af7Sopenharmony_ci void main() 1172e5c31af7Sopenharmony_ci { 1173e5c31af7Sopenharmony_ci out0 = var; 1174e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1175e5c31af7Sopenharmony_ci } 1176e5c31af7Sopenharmony_ci "" 1177e5c31af7Sopenharmony_ci end 1178e5c31af7Sopenharmony_ci 1179e5c31af7Sopenharmony_ci case ivec2 1180e5c31af7Sopenharmony_ci version 300 es 1181e5c31af7Sopenharmony_ci desc "varying of type ivec2" 1182e5c31af7Sopenharmony_ci values 1183e5c31af7Sopenharmony_ci { 1184e5c31af7Sopenharmony_ci input ivec2 in0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ]; 1185e5c31af7Sopenharmony_ci output ivec2 out0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ]; 1186e5c31af7Sopenharmony_ci } 1187e5c31af7Sopenharmony_ci vertex "" 1188e5c31af7Sopenharmony_ci #version 300 es 1189e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1190e5c31af7Sopenharmony_ci flat out mediump ivec2 var; 1191e5c31af7Sopenharmony_ci void main() 1192e5c31af7Sopenharmony_ci { 1193e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 1194e5c31af7Sopenharmony_ci var = in0; 1195e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1196e5c31af7Sopenharmony_ci } 1197e5c31af7Sopenharmony_ci "" 1198e5c31af7Sopenharmony_ci fragment "" 1199e5c31af7Sopenharmony_ci #version 300 es 1200e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1201e5c31af7Sopenharmony_ci flat in ivec2 var; 1202e5c31af7Sopenharmony_ci void main() 1203e5c31af7Sopenharmony_ci { 1204e5c31af7Sopenharmony_ci out0 = var; 1205e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1206e5c31af7Sopenharmony_ci } 1207e5c31af7Sopenharmony_ci "" 1208e5c31af7Sopenharmony_ci end 1209e5c31af7Sopenharmony_ci 1210e5c31af7Sopenharmony_ci case ivec3 1211e5c31af7Sopenharmony_ci version 300 es 1212e5c31af7Sopenharmony_ci desc "varying of type ivec3" 1213e5c31af7Sopenharmony_ci values 1214e5c31af7Sopenharmony_ci { 1215e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ]; 1216e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ]; 1217e5c31af7Sopenharmony_ci } 1218e5c31af7Sopenharmony_ci vertex "" 1219e5c31af7Sopenharmony_ci #version 300 es 1220e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1221e5c31af7Sopenharmony_ci flat out mediump ivec3 var; 1222e5c31af7Sopenharmony_ci void main() 1223e5c31af7Sopenharmony_ci { 1224e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 1225e5c31af7Sopenharmony_ci var = in0; 1226e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1227e5c31af7Sopenharmony_ci } 1228e5c31af7Sopenharmony_ci "" 1229e5c31af7Sopenharmony_ci fragment "" 1230e5c31af7Sopenharmony_ci #version 300 es 1231e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1232e5c31af7Sopenharmony_ci flat in ivec3 var; 1233e5c31af7Sopenharmony_ci void main() 1234e5c31af7Sopenharmony_ci { 1235e5c31af7Sopenharmony_ci out0 = var; 1236e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1237e5c31af7Sopenharmony_ci } 1238e5c31af7Sopenharmony_ci "" 1239e5c31af7Sopenharmony_ci end 1240e5c31af7Sopenharmony_ci 1241e5c31af7Sopenharmony_ci case ivec4 1242e5c31af7Sopenharmony_ci version 300 es 1243e5c31af7Sopenharmony_ci desc "varying of type ivec4" 1244e5c31af7Sopenharmony_ci values 1245e5c31af7Sopenharmony_ci { 1246e5c31af7Sopenharmony_ci input ivec4 in0 = [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ]; 1247e5c31af7Sopenharmony_ci output ivec4 out0 = [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ]; 1248e5c31af7Sopenharmony_ci } 1249e5c31af7Sopenharmony_ci vertex "" 1250e5c31af7Sopenharmony_ci #version 300 es 1251e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1252e5c31af7Sopenharmony_ci flat out mediump ivec4 var; 1253e5c31af7Sopenharmony_ci void main() 1254e5c31af7Sopenharmony_ci { 1255e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 1256e5c31af7Sopenharmony_ci var = in0; 1257e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1258e5c31af7Sopenharmony_ci } 1259e5c31af7Sopenharmony_ci "" 1260e5c31af7Sopenharmony_ci fragment "" 1261e5c31af7Sopenharmony_ci #version 300 es 1262e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1263e5c31af7Sopenharmony_ci flat in ivec4 var; 1264e5c31af7Sopenharmony_ci void main() 1265e5c31af7Sopenharmony_ci { 1266e5c31af7Sopenharmony_ci out0 = var; 1267e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1268e5c31af7Sopenharmony_ci } 1269e5c31af7Sopenharmony_ci "" 1270e5c31af7Sopenharmony_ci end 1271e5c31af7Sopenharmony_ci 1272e5c31af7Sopenharmony_ci case uint 1273e5c31af7Sopenharmony_ci version 300 es 1274e5c31af7Sopenharmony_ci desc "varying of type int" 1275e5c31af7Sopenharmony_ci values 1276e5c31af7Sopenharmony_ci { 1277e5c31af7Sopenharmony_ci input uint in0 = [ 1 | 2 | 3 | 16 ]; 1278e5c31af7Sopenharmony_ci output uint out0 = [ 1 | 2 | 3 | 16 ]; 1279e5c31af7Sopenharmony_ci } 1280e5c31af7Sopenharmony_ci vertex "" 1281e5c31af7Sopenharmony_ci #version 300 es 1282e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1283e5c31af7Sopenharmony_ci flat out mediump uint var; 1284e5c31af7Sopenharmony_ci void main() 1285e5c31af7Sopenharmony_ci { 1286e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 1287e5c31af7Sopenharmony_ci var = in0; 1288e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1289e5c31af7Sopenharmony_ci } 1290e5c31af7Sopenharmony_ci "" 1291e5c31af7Sopenharmony_ci fragment "" 1292e5c31af7Sopenharmony_ci #version 300 es 1293e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1294e5c31af7Sopenharmony_ci flat in uint var; 1295e5c31af7Sopenharmony_ci void main() 1296e5c31af7Sopenharmony_ci { 1297e5c31af7Sopenharmony_ci out0 = var; 1298e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1299e5c31af7Sopenharmony_ci } 1300e5c31af7Sopenharmony_ci "" 1301e5c31af7Sopenharmony_ci end 1302e5c31af7Sopenharmony_ci 1303e5c31af7Sopenharmony_ci case uvec2 1304e5c31af7Sopenharmony_ci version 300 es 1305e5c31af7Sopenharmony_ci desc "varying of type uvec2" 1306e5c31af7Sopenharmony_ci values 1307e5c31af7Sopenharmony_ci { 1308e5c31af7Sopenharmony_ci input uvec2 in0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ]; 1309e5c31af7Sopenharmony_ci output uvec2 out0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ]; 1310e5c31af7Sopenharmony_ci } 1311e5c31af7Sopenharmony_ci vertex "" 1312e5c31af7Sopenharmony_ci #version 300 es 1313e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1314e5c31af7Sopenharmony_ci flat out mediump uvec2 var; 1315e5c31af7Sopenharmony_ci void main() 1316e5c31af7Sopenharmony_ci { 1317e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 1318e5c31af7Sopenharmony_ci var = in0; 1319e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1320e5c31af7Sopenharmony_ci } 1321e5c31af7Sopenharmony_ci "" 1322e5c31af7Sopenharmony_ci fragment "" 1323e5c31af7Sopenharmony_ci #version 300 es 1324e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1325e5c31af7Sopenharmony_ci flat in uvec2 var; 1326e5c31af7Sopenharmony_ci void main() 1327e5c31af7Sopenharmony_ci { 1328e5c31af7Sopenharmony_ci out0 = var; 1329e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1330e5c31af7Sopenharmony_ci } 1331e5c31af7Sopenharmony_ci "" 1332e5c31af7Sopenharmony_ci end 1333e5c31af7Sopenharmony_ci 1334e5c31af7Sopenharmony_ci case uvec3 1335e5c31af7Sopenharmony_ci version 300 es 1336e5c31af7Sopenharmony_ci desc "varying of type uvec3" 1337e5c31af7Sopenharmony_ci values 1338e5c31af7Sopenharmony_ci { 1339e5c31af7Sopenharmony_ci input uvec3 in0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ]; 1340e5c31af7Sopenharmony_ci output uvec3 out0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ]; 1341e5c31af7Sopenharmony_ci } 1342e5c31af7Sopenharmony_ci vertex "" 1343e5c31af7Sopenharmony_ci #version 300 es 1344e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1345e5c31af7Sopenharmony_ci flat out mediump uvec3 var; 1346e5c31af7Sopenharmony_ci void main() 1347e5c31af7Sopenharmony_ci { 1348e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 1349e5c31af7Sopenharmony_ci var = in0; 1350e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1351e5c31af7Sopenharmony_ci } 1352e5c31af7Sopenharmony_ci "" 1353e5c31af7Sopenharmony_ci fragment "" 1354e5c31af7Sopenharmony_ci #version 300 es 1355e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1356e5c31af7Sopenharmony_ci flat in uvec3 var; 1357e5c31af7Sopenharmony_ci void main() 1358e5c31af7Sopenharmony_ci { 1359e5c31af7Sopenharmony_ci out0 = var; 1360e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1361e5c31af7Sopenharmony_ci } 1362e5c31af7Sopenharmony_ci "" 1363e5c31af7Sopenharmony_ci end 1364e5c31af7Sopenharmony_ci 1365e5c31af7Sopenharmony_ci case uvec4 1366e5c31af7Sopenharmony_ci version 300 es 1367e5c31af7Sopenharmony_ci desc "varying of type uvec4" 1368e5c31af7Sopenharmony_ci values 1369e5c31af7Sopenharmony_ci { 1370e5c31af7Sopenharmony_ci input uvec4 in0 = [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ]; 1371e5c31af7Sopenharmony_ci output uvec4 out0 = [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ]; 1372e5c31af7Sopenharmony_ci } 1373e5c31af7Sopenharmony_ci vertex "" 1374e5c31af7Sopenharmony_ci #version 300 es 1375e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1376e5c31af7Sopenharmony_ci flat out mediump uvec4 var; 1377e5c31af7Sopenharmony_ci void main() 1378e5c31af7Sopenharmony_ci { 1379e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 1380e5c31af7Sopenharmony_ci var = in0; 1381e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1382e5c31af7Sopenharmony_ci } 1383e5c31af7Sopenharmony_ci "" 1384e5c31af7Sopenharmony_ci fragment "" 1385e5c31af7Sopenharmony_ci #version 300 es 1386e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1387e5c31af7Sopenharmony_ci flat in uvec4 var; 1388e5c31af7Sopenharmony_ci void main() 1389e5c31af7Sopenharmony_ci { 1390e5c31af7Sopenharmony_ci out0 = var; 1391e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1392e5c31af7Sopenharmony_ci } 1393e5c31af7Sopenharmony_ci "" 1394e5c31af7Sopenharmony_ci end 1395e5c31af7Sopenharmony_ci end 1396e5c31af7Sopenharmony_ci 1397e5c31af7Sopenharmony_ci group struct "Structure varyings" 1398e5c31af7Sopenharmony_ci case float 1399e5c31af7Sopenharmony_ci version 300 es 1400e5c31af7Sopenharmony_ci desc "varying of type float inside struct" 1401e5c31af7Sopenharmony_ci values 1402e5c31af7Sopenharmony_ci { 1403e5c31af7Sopenharmony_ci input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ]; 1404e5c31af7Sopenharmony_ci output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ]; 1405e5c31af7Sopenharmony_ci } 1406e5c31af7Sopenharmony_ci vertex "" 1407e5c31af7Sopenharmony_ci #version 300 es 1408e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1409e5c31af7Sopenharmony_ci struct S { mediump float a; }; 1410e5c31af7Sopenharmony_ci out S var; 1411e5c31af7Sopenharmony_ci void main() 1412e5c31af7Sopenharmony_ci { 1413e5c31af7Sopenharmony_ci var.a = in0; 1414e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1415e5c31af7Sopenharmony_ci } 1416e5c31af7Sopenharmony_ci "" 1417e5c31af7Sopenharmony_ci fragment "" 1418e5c31af7Sopenharmony_ci #version 300 es 1419e5c31af7Sopenharmony_ci precision mediump float; 1420e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1421e5c31af7Sopenharmony_ci struct S { mediump float a; }; 1422e5c31af7Sopenharmony_ci in S var; 1423e5c31af7Sopenharmony_ci void main() 1424e5c31af7Sopenharmony_ci { 1425e5c31af7Sopenharmony_ci out0 = var.a; 1426e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1427e5c31af7Sopenharmony_ci } 1428e5c31af7Sopenharmony_ci "" 1429e5c31af7Sopenharmony_ci end 1430e5c31af7Sopenharmony_ci 1431e5c31af7Sopenharmony_ci case vec2 1432e5c31af7Sopenharmony_ci version 300 es 1433e5c31af7Sopenharmony_ci desc "varying of type vec2 inside struct" 1434e5c31af7Sopenharmony_ci values 1435e5c31af7Sopenharmony_ci { 1436e5c31af7Sopenharmony_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) ]; 1437e5c31af7Sopenharmony_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) ]; 1438e5c31af7Sopenharmony_ci } 1439e5c31af7Sopenharmony_ci vertex "" 1440e5c31af7Sopenharmony_ci #version 300 es 1441e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1442e5c31af7Sopenharmony_ci struct S { mediump vec2 a; }; 1443e5c31af7Sopenharmony_ci out S var; 1444e5c31af7Sopenharmony_ci void main() 1445e5c31af7Sopenharmony_ci { 1446e5c31af7Sopenharmony_ci var.a = in0; 1447e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1448e5c31af7Sopenharmony_ci } 1449e5c31af7Sopenharmony_ci "" 1450e5c31af7Sopenharmony_ci fragment "" 1451e5c31af7Sopenharmony_ci #version 300 es 1452e5c31af7Sopenharmony_ci precision mediump float; 1453e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1454e5c31af7Sopenharmony_ci struct S { mediump vec2 a; }; 1455e5c31af7Sopenharmony_ci in S var; 1456e5c31af7Sopenharmony_ci void main() 1457e5c31af7Sopenharmony_ci { 1458e5c31af7Sopenharmony_ci out0 = var.a; 1459e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1460e5c31af7Sopenharmony_ci } 1461e5c31af7Sopenharmony_ci "" 1462e5c31af7Sopenharmony_ci end 1463e5c31af7Sopenharmony_ci 1464e5c31af7Sopenharmony_ci case vec3 1465e5c31af7Sopenharmony_ci version 300 es 1466e5c31af7Sopenharmony_ci desc "varying of type vec3 inside struct" 1467e5c31af7Sopenharmony_ci values 1468e5c31af7Sopenharmony_ci { 1469e5c31af7Sopenharmony_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) ]; 1470e5c31af7Sopenharmony_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) ]; 1471e5c31af7Sopenharmony_ci } 1472e5c31af7Sopenharmony_ci vertex "" 1473e5c31af7Sopenharmony_ci #version 300 es 1474e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1475e5c31af7Sopenharmony_ci struct S { mediump vec3 a; }; 1476e5c31af7Sopenharmony_ci out S var; 1477e5c31af7Sopenharmony_ci void main() 1478e5c31af7Sopenharmony_ci { 1479e5c31af7Sopenharmony_ci var.a = in0; 1480e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1481e5c31af7Sopenharmony_ci } 1482e5c31af7Sopenharmony_ci "" 1483e5c31af7Sopenharmony_ci fragment "" 1484e5c31af7Sopenharmony_ci #version 300 es 1485e5c31af7Sopenharmony_ci precision mediump float; 1486e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1487e5c31af7Sopenharmony_ci struct S { mediump vec3 a; }; 1488e5c31af7Sopenharmony_ci in S var; 1489e5c31af7Sopenharmony_ci void main() 1490e5c31af7Sopenharmony_ci { 1491e5c31af7Sopenharmony_ci out0 = var.a; 1492e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1493e5c31af7Sopenharmony_ci } 1494e5c31af7Sopenharmony_ci "" 1495e5c31af7Sopenharmony_ci end 1496e5c31af7Sopenharmony_ci 1497e5c31af7Sopenharmony_ci case vec4 1498e5c31af7Sopenharmony_ci version 300 es 1499e5c31af7Sopenharmony_ci desc "varying of type vec4 inside struct" 1500e5c31af7Sopenharmony_ci values 1501e5c31af7Sopenharmony_ci { 1502e5c31af7Sopenharmony_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) ]; 1503e5c31af7Sopenharmony_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) ]; 1504e5c31af7Sopenharmony_ci } 1505e5c31af7Sopenharmony_ci vertex "" 1506e5c31af7Sopenharmony_ci #version 300 es 1507e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1508e5c31af7Sopenharmony_ci struct S { mediump vec4 a; }; 1509e5c31af7Sopenharmony_ci out S var; 1510e5c31af7Sopenharmony_ci void main() 1511e5c31af7Sopenharmony_ci { 1512e5c31af7Sopenharmony_ci var.a = in0; 1513e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1514e5c31af7Sopenharmony_ci } 1515e5c31af7Sopenharmony_ci "" 1516e5c31af7Sopenharmony_ci fragment "" 1517e5c31af7Sopenharmony_ci #version 300 es 1518e5c31af7Sopenharmony_ci precision mediump float; 1519e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1520e5c31af7Sopenharmony_ci struct S { mediump vec4 a; }; 1521e5c31af7Sopenharmony_ci in S var; 1522e5c31af7Sopenharmony_ci void main() 1523e5c31af7Sopenharmony_ci { 1524e5c31af7Sopenharmony_ci out0 = var.a; 1525e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1526e5c31af7Sopenharmony_ci } 1527e5c31af7Sopenharmony_ci "" 1528e5c31af7Sopenharmony_ci end 1529e5c31af7Sopenharmony_ci 1530e5c31af7Sopenharmony_ci case mat2 1531e5c31af7Sopenharmony_ci version 300 es 1532e5c31af7Sopenharmony_ci desc "varying of type mat2 inside struct" 1533e5c31af7Sopenharmony_ci values 1534e5c31af7Sopenharmony_ci { 1535e5c31af7Sopenharmony_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) ]; 1536e5c31af7Sopenharmony_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) ]; 1537e5c31af7Sopenharmony_ci } 1538e5c31af7Sopenharmony_ci vertex "" 1539e5c31af7Sopenharmony_ci #version 300 es 1540e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1541e5c31af7Sopenharmony_ci struct S { mediump mat2 a; }; 1542e5c31af7Sopenharmony_ci out S var; 1543e5c31af7Sopenharmony_ci void main() 1544e5c31af7Sopenharmony_ci { 1545e5c31af7Sopenharmony_ci var.a = in0; 1546e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1547e5c31af7Sopenharmony_ci } 1548e5c31af7Sopenharmony_ci "" 1549e5c31af7Sopenharmony_ci fragment "" 1550e5c31af7Sopenharmony_ci #version 300 es 1551e5c31af7Sopenharmony_ci precision mediump float; 1552e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1553e5c31af7Sopenharmony_ci struct S { mediump mat2 a; }; 1554e5c31af7Sopenharmony_ci in S var; 1555e5c31af7Sopenharmony_ci void main() 1556e5c31af7Sopenharmony_ci { 1557e5c31af7Sopenharmony_ci out0 = var.a; 1558e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1559e5c31af7Sopenharmony_ci } 1560e5c31af7Sopenharmony_ci "" 1561e5c31af7Sopenharmony_ci end 1562e5c31af7Sopenharmony_ci 1563e5c31af7Sopenharmony_ci case mat2x3 1564e5c31af7Sopenharmony_ci version 300 es 1565e5c31af7Sopenharmony_ci desc "varying of type mat2x3 inside struct" 1566e5c31af7Sopenharmony_ci values 1567e5c31af7Sopenharmony_ci { 1568e5c31af7Sopenharmony_ci input mat2x3 in0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ]; 1569e5c31af7Sopenharmony_ci output mat2x3 out0 = [ mat2x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ]; 1570e5c31af7Sopenharmony_ci } 1571e5c31af7Sopenharmony_ci vertex "" 1572e5c31af7Sopenharmony_ci #version 300 es 1573e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1574e5c31af7Sopenharmony_ci struct S { mediump mat2x3 a; }; 1575e5c31af7Sopenharmony_ci out S var; 1576e5c31af7Sopenharmony_ci void main() 1577e5c31af7Sopenharmony_ci { 1578e5c31af7Sopenharmony_ci var.a = in0; 1579e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1580e5c31af7Sopenharmony_ci } 1581e5c31af7Sopenharmony_ci "" 1582e5c31af7Sopenharmony_ci fragment "" 1583e5c31af7Sopenharmony_ci #version 300 es 1584e5c31af7Sopenharmony_ci precision mediump float; 1585e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1586e5c31af7Sopenharmony_ci struct S { mediump mat2x3 a; }; 1587e5c31af7Sopenharmony_ci in S var; 1588e5c31af7Sopenharmony_ci void main() 1589e5c31af7Sopenharmony_ci { 1590e5c31af7Sopenharmony_ci out0 = var.a; 1591e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1592e5c31af7Sopenharmony_ci } 1593e5c31af7Sopenharmony_ci "" 1594e5c31af7Sopenharmony_ci end 1595e5c31af7Sopenharmony_ci 1596e5c31af7Sopenharmony_ci case mat2x4 1597e5c31af7Sopenharmony_ci version 300 es 1598e5c31af7Sopenharmony_ci desc "varying of type mat2x4 inside struct" 1599e5c31af7Sopenharmony_ci values 1600e5c31af7Sopenharmony_ci { 1601e5c31af7Sopenharmony_ci input mat2x4 in0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ]; 1602e5c31af7Sopenharmony_ci output mat2x4 out0 = [ mat2x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ]; 1603e5c31af7Sopenharmony_ci } 1604e5c31af7Sopenharmony_ci vertex "" 1605e5c31af7Sopenharmony_ci #version 300 es 1606e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1607e5c31af7Sopenharmony_ci struct S { mediump mat2x4 a; }; 1608e5c31af7Sopenharmony_ci out S var; 1609e5c31af7Sopenharmony_ci void main() 1610e5c31af7Sopenharmony_ci { 1611e5c31af7Sopenharmony_ci var.a = in0; 1612e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1613e5c31af7Sopenharmony_ci } 1614e5c31af7Sopenharmony_ci "" 1615e5c31af7Sopenharmony_ci fragment "" 1616e5c31af7Sopenharmony_ci #version 300 es 1617e5c31af7Sopenharmony_ci precision mediump float; 1618e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1619e5c31af7Sopenharmony_ci struct S { mediump mat2x4 a; }; 1620e5c31af7Sopenharmony_ci in S var; 1621e5c31af7Sopenharmony_ci void main() 1622e5c31af7Sopenharmony_ci { 1623e5c31af7Sopenharmony_ci out0 = var.a; 1624e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1625e5c31af7Sopenharmony_ci } 1626e5c31af7Sopenharmony_ci "" 1627e5c31af7Sopenharmony_ci end 1628e5c31af7Sopenharmony_ci 1629e5c31af7Sopenharmony_ci case mat3x2 1630e5c31af7Sopenharmony_ci version 300 es 1631e5c31af7Sopenharmony_ci desc "varying of type mat3x2 inside struct" 1632e5c31af7Sopenharmony_ci values 1633e5c31af7Sopenharmony_ci { 1634e5c31af7Sopenharmony_ci input mat3x2 in0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ]; 1635e5c31af7Sopenharmony_ci output mat3x2 out0 = [ mat3x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25) ]; 1636e5c31af7Sopenharmony_ci } 1637e5c31af7Sopenharmony_ci vertex "" 1638e5c31af7Sopenharmony_ci #version 300 es 1639e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1640e5c31af7Sopenharmony_ci struct S { mediump mat3x2 a; }; 1641e5c31af7Sopenharmony_ci out S var; 1642e5c31af7Sopenharmony_ci void main() 1643e5c31af7Sopenharmony_ci { 1644e5c31af7Sopenharmony_ci var.a = in0; 1645e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1646e5c31af7Sopenharmony_ci } 1647e5c31af7Sopenharmony_ci "" 1648e5c31af7Sopenharmony_ci fragment "" 1649e5c31af7Sopenharmony_ci #version 300 es 1650e5c31af7Sopenharmony_ci precision mediump float; 1651e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1652e5c31af7Sopenharmony_ci struct S { mediump mat3x2 a; }; 1653e5c31af7Sopenharmony_ci in S var; 1654e5c31af7Sopenharmony_ci void main() 1655e5c31af7Sopenharmony_ci { 1656e5c31af7Sopenharmony_ci out0 = var.a; 1657e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1658e5c31af7Sopenharmony_ci } 1659e5c31af7Sopenharmony_ci "" 1660e5c31af7Sopenharmony_ci end 1661e5c31af7Sopenharmony_ci 1662e5c31af7Sopenharmony_ci case mat3 1663e5c31af7Sopenharmony_ci version 300 es 1664e5c31af7Sopenharmony_ci desc "varying of type mat3 inside struct" 1665e5c31af7Sopenharmony_ci values 1666e5c31af7Sopenharmony_ci { 1667e5c31af7Sopenharmony_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) ]; 1668e5c31af7Sopenharmony_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) ]; 1669e5c31af7Sopenharmony_ci } 1670e5c31af7Sopenharmony_ci vertex "" 1671e5c31af7Sopenharmony_ci #version 300 es 1672e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1673e5c31af7Sopenharmony_ci struct S { mediump mat3 a; }; 1674e5c31af7Sopenharmony_ci out S var; 1675e5c31af7Sopenharmony_ci void main() 1676e5c31af7Sopenharmony_ci { 1677e5c31af7Sopenharmony_ci var.a = in0; 1678e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1679e5c31af7Sopenharmony_ci } 1680e5c31af7Sopenharmony_ci "" 1681e5c31af7Sopenharmony_ci fragment "" 1682e5c31af7Sopenharmony_ci #version 300 es 1683e5c31af7Sopenharmony_ci precision mediump float; 1684e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1685e5c31af7Sopenharmony_ci struct S { mediump mat3 a; }; 1686e5c31af7Sopenharmony_ci in S var; 1687e5c31af7Sopenharmony_ci void main() 1688e5c31af7Sopenharmony_ci { 1689e5c31af7Sopenharmony_ci out0 = var.a; 1690e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1691e5c31af7Sopenharmony_ci } 1692e5c31af7Sopenharmony_ci "" 1693e5c31af7Sopenharmony_ci end 1694e5c31af7Sopenharmony_ci 1695e5c31af7Sopenharmony_ci case mat3x4 1696e5c31af7Sopenharmony_ci version 300 es 1697e5c31af7Sopenharmony_ci desc "varying of type mat3x4 inside struct" 1698e5c31af7Sopenharmony_ci values 1699e5c31af7Sopenharmony_ci { 1700e5c31af7Sopenharmony_ci input mat3x4 in0 = [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ]; 1701e5c31af7Sopenharmony_ci output mat3x4 out0 = [ mat3x4(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ]; 1702e5c31af7Sopenharmony_ci } 1703e5c31af7Sopenharmony_ci vertex "" 1704e5c31af7Sopenharmony_ci #version 300 es 1705e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1706e5c31af7Sopenharmony_ci struct S { mediump mat3x4 a; }; 1707e5c31af7Sopenharmony_ci out S var; 1708e5c31af7Sopenharmony_ci void main() 1709e5c31af7Sopenharmony_ci { 1710e5c31af7Sopenharmony_ci var.a = in0; 1711e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1712e5c31af7Sopenharmony_ci } 1713e5c31af7Sopenharmony_ci "" 1714e5c31af7Sopenharmony_ci fragment "" 1715e5c31af7Sopenharmony_ci #version 300 es 1716e5c31af7Sopenharmony_ci precision mediump float; 1717e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1718e5c31af7Sopenharmony_ci struct S { mediump mat3x4 a; }; 1719e5c31af7Sopenharmony_ci in S var; 1720e5c31af7Sopenharmony_ci void main() 1721e5c31af7Sopenharmony_ci { 1722e5c31af7Sopenharmony_ci out0 = var.a; 1723e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1724e5c31af7Sopenharmony_ci } 1725e5c31af7Sopenharmony_ci "" 1726e5c31af7Sopenharmony_ci end 1727e5c31af7Sopenharmony_ci 1728e5c31af7Sopenharmony_ci case mat4x2 1729e5c31af7Sopenharmony_ci version 300 es 1730e5c31af7Sopenharmony_ci desc "varying of type mat4x2 inside struct" 1731e5c31af7Sopenharmony_ci values 1732e5c31af7Sopenharmony_ci { 1733e5c31af7Sopenharmony_ci input mat4x2 in0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ]; 1734e5c31af7Sopenharmony_ci output mat4x2 out0 = [ mat4x2(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7) ]; 1735e5c31af7Sopenharmony_ci } 1736e5c31af7Sopenharmony_ci vertex "" 1737e5c31af7Sopenharmony_ci #version 300 es 1738e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1739e5c31af7Sopenharmony_ci struct S { mediump mat4x2 a; }; 1740e5c31af7Sopenharmony_ci out S var; 1741e5c31af7Sopenharmony_ci void main() 1742e5c31af7Sopenharmony_ci { 1743e5c31af7Sopenharmony_ci var.a = in0; 1744e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1745e5c31af7Sopenharmony_ci } 1746e5c31af7Sopenharmony_ci "" 1747e5c31af7Sopenharmony_ci fragment "" 1748e5c31af7Sopenharmony_ci #version 300 es 1749e5c31af7Sopenharmony_ci precision mediump float; 1750e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1751e5c31af7Sopenharmony_ci struct S { mediump mat4x2 a; }; 1752e5c31af7Sopenharmony_ci in S var; 1753e5c31af7Sopenharmony_ci void main() 1754e5c31af7Sopenharmony_ci { 1755e5c31af7Sopenharmony_ci out0 = var.a; 1756e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1757e5c31af7Sopenharmony_ci } 1758e5c31af7Sopenharmony_ci "" 1759e5c31af7Sopenharmony_ci end 1760e5c31af7Sopenharmony_ci 1761e5c31af7Sopenharmony_ci case mat4x3 1762e5c31af7Sopenharmony_ci version 300 es 1763e5c31af7Sopenharmony_ci desc "varying of type mat4x3 inside struct" 1764e5c31af7Sopenharmony_ci values 1765e5c31af7Sopenharmony_ci { 1766e5c31af7Sopenharmony_ci input mat4x3 in0 = [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ]; 1767e5c31af7Sopenharmony_ci output mat4x3 out0 = [ mat4x3(-1.25, 1.25, -9.5, -12.2, -25.65, -7.25, 14.21, -77.7, 0.0, 1.0, -1.0, 2.0) ]; 1768e5c31af7Sopenharmony_ci } 1769e5c31af7Sopenharmony_ci vertex "" 1770e5c31af7Sopenharmony_ci #version 300 es 1771e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1772e5c31af7Sopenharmony_ci struct S { mediump mat4x3 a; }; 1773e5c31af7Sopenharmony_ci out S var; 1774e5c31af7Sopenharmony_ci void main() 1775e5c31af7Sopenharmony_ci { 1776e5c31af7Sopenharmony_ci var.a = in0; 1777e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1778e5c31af7Sopenharmony_ci } 1779e5c31af7Sopenharmony_ci "" 1780e5c31af7Sopenharmony_ci fragment "" 1781e5c31af7Sopenharmony_ci #version 300 es 1782e5c31af7Sopenharmony_ci precision mediump float; 1783e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1784e5c31af7Sopenharmony_ci struct S { mediump mat4x3 a; }; 1785e5c31af7Sopenharmony_ci in S var; 1786e5c31af7Sopenharmony_ci void main() 1787e5c31af7Sopenharmony_ci { 1788e5c31af7Sopenharmony_ci out0 = var.a; 1789e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1790e5c31af7Sopenharmony_ci } 1791e5c31af7Sopenharmony_ci "" 1792e5c31af7Sopenharmony_ci end 1793e5c31af7Sopenharmony_ci 1794e5c31af7Sopenharmony_ci case mat4 1795e5c31af7Sopenharmony_ci version 300 es 1796e5c31af7Sopenharmony_ci desc "varying of type mat4 inside struct" 1797e5c31af7Sopenharmony_ci values 1798e5c31af7Sopenharmony_ci { 1799e5c31af7Sopenharmony_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) ]; 1800e5c31af7Sopenharmony_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) ]; 1801e5c31af7Sopenharmony_ci } 1802e5c31af7Sopenharmony_ci vertex "" 1803e5c31af7Sopenharmony_ci #version 300 es 1804e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1805e5c31af7Sopenharmony_ci struct S { mediump mat4 a; }; 1806e5c31af7Sopenharmony_ci out S var; 1807e5c31af7Sopenharmony_ci void main() 1808e5c31af7Sopenharmony_ci { 1809e5c31af7Sopenharmony_ci var.a = in0; 1810e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1811e5c31af7Sopenharmony_ci } 1812e5c31af7Sopenharmony_ci "" 1813e5c31af7Sopenharmony_ci fragment "" 1814e5c31af7Sopenharmony_ci #version 300 es 1815e5c31af7Sopenharmony_ci precision mediump float; 1816e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1817e5c31af7Sopenharmony_ci struct S { mediump mat4 a; }; 1818e5c31af7Sopenharmony_ci in S var; 1819e5c31af7Sopenharmony_ci void main() 1820e5c31af7Sopenharmony_ci { 1821e5c31af7Sopenharmony_ci out0 = var.a; 1822e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1823e5c31af7Sopenharmony_ci } 1824e5c31af7Sopenharmony_ci "" 1825e5c31af7Sopenharmony_ci end 1826e5c31af7Sopenharmony_ci 1827e5c31af7Sopenharmony_ci case int 1828e5c31af7Sopenharmony_ci version 300 es 1829e5c31af7Sopenharmony_ci desc "varying of type int inside struct" 1830e5c31af7Sopenharmony_ci values 1831e5c31af7Sopenharmony_ci { 1832e5c31af7Sopenharmony_ci input int in0 = [ -1 | -25 | 1 | 2 | 3 | 16 ]; 1833e5c31af7Sopenharmony_ci output int out0 = [ -1 | -25 | 1 | 2 | 3 | 16 ]; 1834e5c31af7Sopenharmony_ci } 1835e5c31af7Sopenharmony_ci vertex "" 1836e5c31af7Sopenharmony_ci #version 300 es 1837e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1838e5c31af7Sopenharmony_ci struct S { mediump int a; }; 1839e5c31af7Sopenharmony_ci flat out S var; 1840e5c31af7Sopenharmony_ci void main() 1841e5c31af7Sopenharmony_ci { 1842e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 1843e5c31af7Sopenharmony_ci var.a = in0; 1844e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1845e5c31af7Sopenharmony_ci } 1846e5c31af7Sopenharmony_ci "" 1847e5c31af7Sopenharmony_ci fragment "" 1848e5c31af7Sopenharmony_ci #version 300 es 1849e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1850e5c31af7Sopenharmony_ci struct S { mediump int a; }; 1851e5c31af7Sopenharmony_ci flat in S var; 1852e5c31af7Sopenharmony_ci void main() 1853e5c31af7Sopenharmony_ci { 1854e5c31af7Sopenharmony_ci out0 = var.a; 1855e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1856e5c31af7Sopenharmony_ci } 1857e5c31af7Sopenharmony_ci "" 1858e5c31af7Sopenharmony_ci end 1859e5c31af7Sopenharmony_ci 1860e5c31af7Sopenharmony_ci case ivec2 1861e5c31af7Sopenharmony_ci version 300 es 1862e5c31af7Sopenharmony_ci desc "varying of type ivec2 inside struct" 1863e5c31af7Sopenharmony_ci values 1864e5c31af7Sopenharmony_ci { 1865e5c31af7Sopenharmony_ci input ivec2 in0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ]; 1866e5c31af7Sopenharmony_ci output ivec2 out0 = [ ivec2(-1, 1) | ivec2(-25, 25) | ivec2(1, 1) | ivec2(2, 3) | ivec2(16, 17) ]; 1867e5c31af7Sopenharmony_ci } 1868e5c31af7Sopenharmony_ci vertex "" 1869e5c31af7Sopenharmony_ci #version 300 es 1870e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1871e5c31af7Sopenharmony_ci struct S { mediump ivec2 a; }; 1872e5c31af7Sopenharmony_ci flat out S var; 1873e5c31af7Sopenharmony_ci void main() 1874e5c31af7Sopenharmony_ci { 1875e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 1876e5c31af7Sopenharmony_ci var.a = in0; 1877e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1878e5c31af7Sopenharmony_ci } 1879e5c31af7Sopenharmony_ci "" 1880e5c31af7Sopenharmony_ci fragment "" 1881e5c31af7Sopenharmony_ci #version 300 es 1882e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1883e5c31af7Sopenharmony_ci struct S { mediump ivec2 a; }; 1884e5c31af7Sopenharmony_ci flat in S var; 1885e5c31af7Sopenharmony_ci void main() 1886e5c31af7Sopenharmony_ci { 1887e5c31af7Sopenharmony_ci out0 = var.a; 1888e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1889e5c31af7Sopenharmony_ci } 1890e5c31af7Sopenharmony_ci "" 1891e5c31af7Sopenharmony_ci end 1892e5c31af7Sopenharmony_ci 1893e5c31af7Sopenharmony_ci case ivec3 1894e5c31af7Sopenharmony_ci version 300 es 1895e5c31af7Sopenharmony_ci desc "varying of type ivec3 inside struct" 1896e5c31af7Sopenharmony_ci values 1897e5c31af7Sopenharmony_ci { 1898e5c31af7Sopenharmony_ci input ivec3 in0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ]; 1899e5c31af7Sopenharmony_ci output ivec3 out0 = [ ivec3(-1, 1, -2) | ivec3(-25, 25, -3) | ivec3(1, 1, 1) | ivec3(2, 3, 4) | ivec3(16, 17, 18) ]; 1900e5c31af7Sopenharmony_ci } 1901e5c31af7Sopenharmony_ci vertex "" 1902e5c31af7Sopenharmony_ci #version 300 es 1903e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1904e5c31af7Sopenharmony_ci struct S { mediump ivec3 a; }; 1905e5c31af7Sopenharmony_ci flat out S var; 1906e5c31af7Sopenharmony_ci void main() 1907e5c31af7Sopenharmony_ci { 1908e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 1909e5c31af7Sopenharmony_ci var.a = in0; 1910e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1911e5c31af7Sopenharmony_ci } 1912e5c31af7Sopenharmony_ci "" 1913e5c31af7Sopenharmony_ci fragment "" 1914e5c31af7Sopenharmony_ci #version 300 es 1915e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1916e5c31af7Sopenharmony_ci struct S { mediump ivec3 a; }; 1917e5c31af7Sopenharmony_ci flat in S var; 1918e5c31af7Sopenharmony_ci void main() 1919e5c31af7Sopenharmony_ci { 1920e5c31af7Sopenharmony_ci out0 = var.a; 1921e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1922e5c31af7Sopenharmony_ci } 1923e5c31af7Sopenharmony_ci "" 1924e5c31af7Sopenharmony_ci end 1925e5c31af7Sopenharmony_ci 1926e5c31af7Sopenharmony_ci case ivec4 1927e5c31af7Sopenharmony_ci version 300 es 1928e5c31af7Sopenharmony_ci desc "varying of type ivec4 inside struct" 1929e5c31af7Sopenharmony_ci values 1930e5c31af7Sopenharmony_ci { 1931e5c31af7Sopenharmony_ci input ivec4 in0 = [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ]; 1932e5c31af7Sopenharmony_ci output ivec4 out0 = [ ivec4(-1, 1, -2, 2) | ivec4(-25, 25, -3, 3) | ivec4(1, 1, 1, 1) | ivec4(2, 3, 4, 5) | ivec4(16, 17, 18, 19) ]; 1933e5c31af7Sopenharmony_ci } 1934e5c31af7Sopenharmony_ci vertex "" 1935e5c31af7Sopenharmony_ci #version 300 es 1936e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1937e5c31af7Sopenharmony_ci struct S { mediump ivec4 a; }; 1938e5c31af7Sopenharmony_ci flat out S var; 1939e5c31af7Sopenharmony_ci void main() 1940e5c31af7Sopenharmony_ci { 1941e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 1942e5c31af7Sopenharmony_ci var.a = in0; 1943e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1944e5c31af7Sopenharmony_ci } 1945e5c31af7Sopenharmony_ci "" 1946e5c31af7Sopenharmony_ci fragment "" 1947e5c31af7Sopenharmony_ci #version 300 es 1948e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1949e5c31af7Sopenharmony_ci struct S { mediump ivec4 a; }; 1950e5c31af7Sopenharmony_ci flat in S var; 1951e5c31af7Sopenharmony_ci void main() 1952e5c31af7Sopenharmony_ci { 1953e5c31af7Sopenharmony_ci out0 = var.a; 1954e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1955e5c31af7Sopenharmony_ci } 1956e5c31af7Sopenharmony_ci "" 1957e5c31af7Sopenharmony_ci end 1958e5c31af7Sopenharmony_ci 1959e5c31af7Sopenharmony_ci case uint 1960e5c31af7Sopenharmony_ci version 300 es 1961e5c31af7Sopenharmony_ci desc "varying of type uint in struct" 1962e5c31af7Sopenharmony_ci values 1963e5c31af7Sopenharmony_ci { 1964e5c31af7Sopenharmony_ci input uint in0 = [ 1 | 2 | 3 | 16 ]; 1965e5c31af7Sopenharmony_ci output uint out0 = [ 1 | 2 | 3 | 16 ]; 1966e5c31af7Sopenharmony_ci } 1967e5c31af7Sopenharmony_ci vertex "" 1968e5c31af7Sopenharmony_ci #version 300 es 1969e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1970e5c31af7Sopenharmony_ci struct S { mediump uint a; }; 1971e5c31af7Sopenharmony_ci flat out S var; 1972e5c31af7Sopenharmony_ci void main() 1973e5c31af7Sopenharmony_ci { 1974e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 1975e5c31af7Sopenharmony_ci var.a = in0; 1976e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1977e5c31af7Sopenharmony_ci } 1978e5c31af7Sopenharmony_ci "" 1979e5c31af7Sopenharmony_ci fragment "" 1980e5c31af7Sopenharmony_ci #version 300 es 1981e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1982e5c31af7Sopenharmony_ci struct S { mediump uint a; }; 1983e5c31af7Sopenharmony_ci flat in S var; 1984e5c31af7Sopenharmony_ci void main() 1985e5c31af7Sopenharmony_ci { 1986e5c31af7Sopenharmony_ci out0 = var.a; 1987e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1988e5c31af7Sopenharmony_ci } 1989e5c31af7Sopenharmony_ci "" 1990e5c31af7Sopenharmony_ci end 1991e5c31af7Sopenharmony_ci 1992e5c31af7Sopenharmony_ci case uvec2 1993e5c31af7Sopenharmony_ci version 300 es 1994e5c31af7Sopenharmony_ci desc "varying of type uvec2 inside struct" 1995e5c31af7Sopenharmony_ci values 1996e5c31af7Sopenharmony_ci { 1997e5c31af7Sopenharmony_ci input uvec2 in0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ]; 1998e5c31af7Sopenharmony_ci output uvec2 out0 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) ]; 1999e5c31af7Sopenharmony_ci } 2000e5c31af7Sopenharmony_ci vertex "" 2001e5c31af7Sopenharmony_ci #version 300 es 2002e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2003e5c31af7Sopenharmony_ci struct S { mediump uvec2 a; }; 2004e5c31af7Sopenharmony_ci flat out S var; 2005e5c31af7Sopenharmony_ci void main() 2006e5c31af7Sopenharmony_ci { 2007e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 2008e5c31af7Sopenharmony_ci var.a = in0; 2009e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2010e5c31af7Sopenharmony_ci } 2011e5c31af7Sopenharmony_ci "" 2012e5c31af7Sopenharmony_ci fragment "" 2013e5c31af7Sopenharmony_ci #version 300 es 2014e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2015e5c31af7Sopenharmony_ci struct S { mediump uvec2 a; }; 2016e5c31af7Sopenharmony_ci flat in S var; 2017e5c31af7Sopenharmony_ci void main() 2018e5c31af7Sopenharmony_ci { 2019e5c31af7Sopenharmony_ci out0 = var.a; 2020e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2021e5c31af7Sopenharmony_ci } 2022e5c31af7Sopenharmony_ci "" 2023e5c31af7Sopenharmony_ci end 2024e5c31af7Sopenharmony_ci 2025e5c31af7Sopenharmony_ci case uvec3 2026e5c31af7Sopenharmony_ci version 300 es 2027e5c31af7Sopenharmony_ci desc "varying of type uvec3 inside struct" 2028e5c31af7Sopenharmony_ci values 2029e5c31af7Sopenharmony_ci { 2030e5c31af7Sopenharmony_ci input uvec3 in0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ]; 2031e5c31af7Sopenharmony_ci output uvec3 out0 = [ uvec3(1, 1, 2) | uvec3(25, 25, 3) | uvec3(1, 1, 1) | uvec3(2, 3, 4) | uvec3(16, 17, 18) ]; 2032e5c31af7Sopenharmony_ci } 2033e5c31af7Sopenharmony_ci vertex "" 2034e5c31af7Sopenharmony_ci #version 300 es 2035e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2036e5c31af7Sopenharmony_ci struct S { mediump uvec3 a; }; 2037e5c31af7Sopenharmony_ci flat out S var; 2038e5c31af7Sopenharmony_ci void main() 2039e5c31af7Sopenharmony_ci { 2040e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 2041e5c31af7Sopenharmony_ci var.a = in0; 2042e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2043e5c31af7Sopenharmony_ci } 2044e5c31af7Sopenharmony_ci "" 2045e5c31af7Sopenharmony_ci fragment "" 2046e5c31af7Sopenharmony_ci #version 300 es 2047e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2048e5c31af7Sopenharmony_ci struct S { mediump uvec3 a; }; 2049e5c31af7Sopenharmony_ci flat in S var; 2050e5c31af7Sopenharmony_ci void main() 2051e5c31af7Sopenharmony_ci { 2052e5c31af7Sopenharmony_ci out0 = var.a; 2053e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2054e5c31af7Sopenharmony_ci } 2055e5c31af7Sopenharmony_ci "" 2056e5c31af7Sopenharmony_ci end 2057e5c31af7Sopenharmony_ci 2058e5c31af7Sopenharmony_ci case uvec4 2059e5c31af7Sopenharmony_ci version 300 es 2060e5c31af7Sopenharmony_ci desc "varying of type uvec4 inside struct" 2061e5c31af7Sopenharmony_ci values 2062e5c31af7Sopenharmony_ci { 2063e5c31af7Sopenharmony_ci input uvec4 in0 = [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ]; 2064e5c31af7Sopenharmony_ci output uvec4 out0 = [ uvec4(1, 1, 2, 2) | uvec4(25, 25, 3, 3) | uvec4(1, 1, 1, 1) | uvec4(2, 3, 4, 5) | uvec4(16, 17, 18, 19) ]; 2065e5c31af7Sopenharmony_ci } 2066e5c31af7Sopenharmony_ci vertex "" 2067e5c31af7Sopenharmony_ci #version 300 es 2068e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2069e5c31af7Sopenharmony_ci struct S { mediump uvec4 a; }; 2070e5c31af7Sopenharmony_ci flat out S var; 2071e5c31af7Sopenharmony_ci void main() 2072e5c31af7Sopenharmony_ci { 2073e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 2074e5c31af7Sopenharmony_ci var.a = in0; 2075e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2076e5c31af7Sopenharmony_ci } 2077e5c31af7Sopenharmony_ci "" 2078e5c31af7Sopenharmony_ci fragment "" 2079e5c31af7Sopenharmony_ci #version 300 es 2080e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2081e5c31af7Sopenharmony_ci struct S { mediump uvec4 a; }; 2082e5c31af7Sopenharmony_ci flat in S var; 2083e5c31af7Sopenharmony_ci void main() 2084e5c31af7Sopenharmony_ci { 2085e5c31af7Sopenharmony_ci out0 = var.a; 2086e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2087e5c31af7Sopenharmony_ci } 2088e5c31af7Sopenharmony_ci "" 2089e5c31af7Sopenharmony_ci end 2090e5c31af7Sopenharmony_ci 2091e5c31af7Sopenharmony_ci case float_vec3 2092e5c31af7Sopenharmony_ci version 300 es 2093e5c31af7Sopenharmony_ci desc "varyings of type float and vec3 inside struct" 2094e5c31af7Sopenharmony_ci values 2095e5c31af7Sopenharmony_ci { 2096e5c31af7Sopenharmony_ci input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ]; 2097e5c31af7Sopenharmony_ci output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ]; 2098e5c31af7Sopenharmony_ci input vec3 in1 = [ 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) ]; 2099e5c31af7Sopenharmony_ci output vec3 out1 = [ 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) ]; 2100e5c31af7Sopenharmony_ci } 2101e5c31af7Sopenharmony_ci vertex "" 2102e5c31af7Sopenharmony_ci #version 300 es 2103e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2104e5c31af7Sopenharmony_ci struct S { mediump float a; highp vec3 b; }; 2105e5c31af7Sopenharmony_ci out S var; 2106e5c31af7Sopenharmony_ci void main() 2107e5c31af7Sopenharmony_ci { 2108e5c31af7Sopenharmony_ci var.a = in0; 2109e5c31af7Sopenharmony_ci var.b = in1; 2110e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2111e5c31af7Sopenharmony_ci } 2112e5c31af7Sopenharmony_ci "" 2113e5c31af7Sopenharmony_ci fragment "" 2114e5c31af7Sopenharmony_ci #version 300 es 2115e5c31af7Sopenharmony_ci precision mediump float; 2116e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2117e5c31af7Sopenharmony_ci struct S { mediump float a; highp vec3 b; }; 2118e5c31af7Sopenharmony_ci in S var; 2119e5c31af7Sopenharmony_ci void main() 2120e5c31af7Sopenharmony_ci { 2121e5c31af7Sopenharmony_ci out0 = var.a; 2122e5c31af7Sopenharmony_ci out1 = var.b; 2123e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2124e5c31af7Sopenharmony_ci } 2125e5c31af7Sopenharmony_ci "" 2126e5c31af7Sopenharmony_ci end 2127e5c31af7Sopenharmony_ci 2128e5c31af7Sopenharmony_ci case float_uvec2_vec3 2129e5c31af7Sopenharmony_ci version 300 es 2130e5c31af7Sopenharmony_ci desc "varyings of type float and vec3 inside struct" 2131e5c31af7Sopenharmony_ci values 2132e5c31af7Sopenharmony_ci { 2133e5c31af7Sopenharmony_ci input float in0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ]; 2134e5c31af7Sopenharmony_ci output float out0 = [ -1.25 | -25.65 | 1.0 | 2.25 | 3.4 | 16.0 ]; 2135e5c31af7Sopenharmony_ci input uvec2 in1 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ]; 2136e5c31af7Sopenharmony_ci output uvec2 out1 = [ uvec2(1, 1) | uvec2(25, 25) | uvec2(1, 1) | uvec2(2, 3) | uvec2(16, 17) | uvec2(8, 7) ]; 2137e5c31af7Sopenharmony_ci input vec3 in2 = [ 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) ]; 2138e5c31af7Sopenharmony_ci output vec3 out2 = [ 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) ]; 2139e5c31af7Sopenharmony_ci } 2140e5c31af7Sopenharmony_ci vertex "" 2141e5c31af7Sopenharmony_ci #version 300 es 2142e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2143e5c31af7Sopenharmony_ci struct S { mediump float a; highp uvec2 b; highp vec3 c; }; 2144e5c31af7Sopenharmony_ci flat out S var; 2145e5c31af7Sopenharmony_ci void main() 2146e5c31af7Sopenharmony_ci { 2147e5c31af7Sopenharmony_ci ${VERTEX_SETUP} 2148e5c31af7Sopenharmony_ci var.a = in0; 2149e5c31af7Sopenharmony_ci var.b = in1; 2150e5c31af7Sopenharmony_ci var.c = in2; 2151e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2152e5c31af7Sopenharmony_ci } 2153e5c31af7Sopenharmony_ci "" 2154e5c31af7Sopenharmony_ci fragment "" 2155e5c31af7Sopenharmony_ci #version 300 es 2156e5c31af7Sopenharmony_ci precision mediump float; 2157e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2158e5c31af7Sopenharmony_ci struct S { mediump float a; highp uvec2 b; highp vec3 c; }; 2159e5c31af7Sopenharmony_ci flat in S var; 2160e5c31af7Sopenharmony_ci void main() 2161e5c31af7Sopenharmony_ci { 2162e5c31af7Sopenharmony_ci out0 = var.a; 2163e5c31af7Sopenharmony_ci out1 = var.b; 2164e5c31af7Sopenharmony_ci out2 = var.c; 2165e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2166e5c31af7Sopenharmony_ci } 2167e5c31af7Sopenharmony_ci "" 2168e5c31af7Sopenharmony_ci end 2169e5c31af7Sopenharmony_ci end 2170e5c31af7Sopenharmony_ci 2171e5c31af7Sopenharmony_ci group interpolation "Varying interpolation modes" 2172e5c31af7Sopenharmony_ci case smooth 2173e5c31af7Sopenharmony_ci version 300 es 2174e5c31af7Sopenharmony_ci desc "varying of type vec4" 2175e5c31af7Sopenharmony_ci values 2176e5c31af7Sopenharmony_ci { 2177e5c31af7Sopenharmony_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) ]; 2178e5c31af7Sopenharmony_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) ]; 2179e5c31af7Sopenharmony_ci } 2180e5c31af7Sopenharmony_ci vertex "" 2181e5c31af7Sopenharmony_ci #version 300 es 2182e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2183e5c31af7Sopenharmony_ci smooth out mediump vec4 var; 2184e5c31af7Sopenharmony_ci void main() 2185e5c31af7Sopenharmony_ci { 2186e5c31af7Sopenharmony_ci var = in0; 2187e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2188e5c31af7Sopenharmony_ci } 2189e5c31af7Sopenharmony_ci "" 2190e5c31af7Sopenharmony_ci fragment "" 2191e5c31af7Sopenharmony_ci #version 300 es 2192e5c31af7Sopenharmony_ci precision mediump float; 2193e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2194e5c31af7Sopenharmony_ci smooth in vec4 var; 2195e5c31af7Sopenharmony_ci void main() 2196e5c31af7Sopenharmony_ci { 2197e5c31af7Sopenharmony_ci out0 = var; 2198e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2199e5c31af7Sopenharmony_ci } 2200e5c31af7Sopenharmony_ci "" 2201e5c31af7Sopenharmony_ci end 2202e5c31af7Sopenharmony_ci 2203e5c31af7Sopenharmony_ci case centroid 2204e5c31af7Sopenharmony_ci version 300 es 2205e5c31af7Sopenharmony_ci desc "varying of type vec4" 2206e5c31af7Sopenharmony_ci values 2207e5c31af7Sopenharmony_ci { 2208e5c31af7Sopenharmony_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) ]; 2209e5c31af7Sopenharmony_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) ]; 2210e5c31af7Sopenharmony_ci } 2211e5c31af7Sopenharmony_ci vertex "" 2212e5c31af7Sopenharmony_ci #version 300 es 2213e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2214e5c31af7Sopenharmony_ci centroid out mediump vec4 var; 2215e5c31af7Sopenharmony_ci void main() 2216e5c31af7Sopenharmony_ci { 2217e5c31af7Sopenharmony_ci var = in0; 2218e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2219e5c31af7Sopenharmony_ci } 2220e5c31af7Sopenharmony_ci "" 2221e5c31af7Sopenharmony_ci fragment "" 2222e5c31af7Sopenharmony_ci #version 300 es 2223e5c31af7Sopenharmony_ci precision mediump float; 2224e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2225e5c31af7Sopenharmony_ci centroid in vec4 var; 2226e5c31af7Sopenharmony_ci void main() 2227e5c31af7Sopenharmony_ci { 2228e5c31af7Sopenharmony_ci out0 = var; 2229e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2230e5c31af7Sopenharmony_ci } 2231e5c31af7Sopenharmony_ci "" 2232e5c31af7Sopenharmony_ci end 2233e5c31af7Sopenharmony_ci 2234e5c31af7Sopenharmony_ci case flat 2235e5c31af7Sopenharmony_ci version 300 es 2236e5c31af7Sopenharmony_ci desc "varying of type vec4" 2237e5c31af7Sopenharmony_ci values 2238e5c31af7Sopenharmony_ci { 2239e5c31af7Sopenharmony_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) ]; 2240e5c31af7Sopenharmony_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) ]; 2241e5c31af7Sopenharmony_ci } 2242e5c31af7Sopenharmony_ci vertex "" 2243e5c31af7Sopenharmony_ci #version 300 es 2244e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2245e5c31af7Sopenharmony_ci flat out mediump vec4 var; 2246e5c31af7Sopenharmony_ci void main() 2247e5c31af7Sopenharmony_ci { 2248e5c31af7Sopenharmony_ci var = in0; 2249e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2250e5c31af7Sopenharmony_ci } 2251e5c31af7Sopenharmony_ci "" 2252e5c31af7Sopenharmony_ci fragment "" 2253e5c31af7Sopenharmony_ci #version 300 es 2254e5c31af7Sopenharmony_ci precision mediump float; 2255e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2256e5c31af7Sopenharmony_ci flat in vec4 var; 2257e5c31af7Sopenharmony_ci void main() 2258e5c31af7Sopenharmony_ci { 2259e5c31af7Sopenharmony_ci out0 = var; 2260e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2261e5c31af7Sopenharmony_ci } 2262e5c31af7Sopenharmony_ci "" 2263e5c31af7Sopenharmony_ci end 2264e5c31af7Sopenharmony_ci end 2265e5c31af7Sopenharmony_ci 2266e5c31af7Sopenharmony_ci group usage "Varying usage in shaders" 2267e5c31af7Sopenharmony_ci case readback_1 2268e5c31af7Sopenharmony_ci version 300 es 2269e5c31af7Sopenharmony_ci desc "read back (an already written) varying in the vertex shader" 2270e5c31af7Sopenharmony_ci values 2271e5c31af7Sopenharmony_ci { 2272e5c31af7Sopenharmony_ci input float in0 = [ 1.0 | 0.0 | -2.0 | 10.0 ]; 2273e5c31af7Sopenharmony_ci output float out0 = [ 3.0 | 0.0 | -6.0 | 30.0 ]; 2274e5c31af7Sopenharmony_ci } 2275e5c31af7Sopenharmony_ci vertex "" 2276e5c31af7Sopenharmony_ci #version 300 es 2277e5c31af7Sopenharmony_ci precision mediump float; 2278e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2279e5c31af7Sopenharmony_ci out float var1; 2280e5c31af7Sopenharmony_ci out float var2; 2281e5c31af7Sopenharmony_ci 2282e5c31af7Sopenharmony_ci void main() 2283e5c31af7Sopenharmony_ci { 2284e5c31af7Sopenharmony_ci var1 = in0; 2285e5c31af7Sopenharmony_ci var2 = var1 + in0; 2286e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2287e5c31af7Sopenharmony_ci } 2288e5c31af7Sopenharmony_ci "" 2289e5c31af7Sopenharmony_ci fragment "" 2290e5c31af7Sopenharmony_ci #version 300 es 2291e5c31af7Sopenharmony_ci precision mediump float; 2292e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2293e5c31af7Sopenharmony_ci in float var1; 2294e5c31af7Sopenharmony_ci in float var2; 2295e5c31af7Sopenharmony_ci 2296e5c31af7Sopenharmony_ci void main() 2297e5c31af7Sopenharmony_ci { 2298e5c31af7Sopenharmony_ci out0 = var1 + var2; 2299e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2300e5c31af7Sopenharmony_ci } 2301e5c31af7Sopenharmony_ci "" 2302e5c31af7Sopenharmony_ci end 2303e5c31af7Sopenharmony_ci 2304e5c31af7Sopenharmony_ci case writeback_1 2305e5c31af7Sopenharmony_ci version 300 es 2306e5c31af7Sopenharmony_ci desc "write back a varying in the fragment shader" 2307e5c31af7Sopenharmony_ci values 2308e5c31af7Sopenharmony_ci { 2309e5c31af7Sopenharmony_ci input float in0 = [ 1.0 | 0.0 | -2.0 | 10.0 ]; 2310e5c31af7Sopenharmony_ci } 2311e5c31af7Sopenharmony_ci expect compile_fail 2312e5c31af7Sopenharmony_ci vertex "" 2313e5c31af7Sopenharmony_ci #version 300 es 2314e5c31af7Sopenharmony_ci precision mediump float; 2315e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2316e5c31af7Sopenharmony_ci out float var1; 2317e5c31af7Sopenharmony_ci out float var2; 2318e5c31af7Sopenharmony_ci 2319e5c31af7Sopenharmony_ci void main() 2320e5c31af7Sopenharmony_ci { 2321e5c31af7Sopenharmony_ci var1 = in0; 2322e5c31af7Sopenharmony_ci var2 = var1 + in0; 2323e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2324e5c31af7Sopenharmony_ci } 2325e5c31af7Sopenharmony_ci "" 2326e5c31af7Sopenharmony_ci fragment "" 2327e5c31af7Sopenharmony_ci #version 300 es 2328e5c31af7Sopenharmony_ci precision mediump float; 2329e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2330e5c31af7Sopenharmony_ci in float var1; 2331e5c31af7Sopenharmony_ci in float var2; 2332e5c31af7Sopenharmony_ci 2333e5c31af7Sopenharmony_ci void main() 2334e5c31af7Sopenharmony_ci { 2335e5c31af7Sopenharmony_ci var2 = var1; 2336e5c31af7Sopenharmony_ci out0 = var1; 2337e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2338e5c31af7Sopenharmony_ci } 2339e5c31af7Sopenharmony_ci "" 2340e5c31af7Sopenharmony_ci end 2341e5c31af7Sopenharmony_ci end 2342e5c31af7Sopenharmony_ciend 2343e5c31af7Sopenharmony_ci 2344e5c31af7Sopenharmony_cigroup uniform "Uniform linkage" 2345e5c31af7Sopenharmony_ci group basic "Default block uniforms of scalar and vector types" 2346e5c31af7Sopenharmony_ci case precision_conflict_1 2347e5c31af7Sopenharmony_ci version 300 es 2348e5c31af7Sopenharmony_ci desc "Vertex side uniform has highp, fragment side uniform mediump." 2349e5c31af7Sopenharmony_ci expect link_fail 2350e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 2351e5c31af7Sopenharmony_ci vertex "" 2352e5c31af7Sopenharmony_ci #version 300 es 2353e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2354e5c31af7Sopenharmony_ci uniform highp float u_val; 2355e5c31af7Sopenharmony_ci out mediump float res; 2356e5c31af7Sopenharmony_ci void main() 2357e5c31af7Sopenharmony_ci { 2358e5c31af7Sopenharmony_ci res = u_val; 2359e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2360e5c31af7Sopenharmony_ci } 2361e5c31af7Sopenharmony_ci "" 2362e5c31af7Sopenharmony_ci fragment "" 2363e5c31af7Sopenharmony_ci #version 300 es 2364e5c31af7Sopenharmony_ci precision mediump float; 2365e5c31af7Sopenharmony_ci uniform float u_val; 2366e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2367e5c31af7Sopenharmony_ci in mediump float res; 2368e5c31af7Sopenharmony_ci void main() 2369e5c31af7Sopenharmony_ci { 2370e5c31af7Sopenharmony_ci out0 = u_val + res; 2371e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2372e5c31af7Sopenharmony_ci } 2373e5c31af7Sopenharmony_ci "" 2374e5c31af7Sopenharmony_ci end 2375e5c31af7Sopenharmony_ci case precision_conflict_2 2376e5c31af7Sopenharmony_ci version 300 es 2377e5c31af7Sopenharmony_ci desc "Vertex side uniform has highp, fragment side uniform mediump." 2378e5c31af7Sopenharmony_ci expect link_fail 2379e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 2380e5c31af7Sopenharmony_ci vertex "" 2381e5c31af7Sopenharmony_ci #version 300 es 2382e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2383e5c31af7Sopenharmony_ci uniform highp float u_val; 2384e5c31af7Sopenharmony_ci out mediump float res; 2385e5c31af7Sopenharmony_ci void main() 2386e5c31af7Sopenharmony_ci { 2387e5c31af7Sopenharmony_ci res = u_val; 2388e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2389e5c31af7Sopenharmony_ci } 2390e5c31af7Sopenharmony_ci "" 2391e5c31af7Sopenharmony_ci fragment "" 2392e5c31af7Sopenharmony_ci #version 300 es 2393e5c31af7Sopenharmony_ci precision highp float; 2394e5c31af7Sopenharmony_ci uniform mediump float u_val; 2395e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2396e5c31af7Sopenharmony_ci in mediump float res; 2397e5c31af7Sopenharmony_ci void main() 2398e5c31af7Sopenharmony_ci { 2399e5c31af7Sopenharmony_ci out0 = u_val + res; 2400e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2401e5c31af7Sopenharmony_ci } 2402e5c31af7Sopenharmony_ci "" 2403e5c31af7Sopenharmony_ci end 2404e5c31af7Sopenharmony_ci case precision_conflict_3 2405e5c31af7Sopenharmony_ci version 300 es 2406e5c31af7Sopenharmony_ci desc "Vertex side uniform has lowp, fragment side uniform highp." 2407e5c31af7Sopenharmony_ci expect link_fail 2408e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 2409e5c31af7Sopenharmony_ci vertex "" 2410e5c31af7Sopenharmony_ci #version 300 es 2411e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2412e5c31af7Sopenharmony_ci uniform lowp int u_val; 2413e5c31af7Sopenharmony_ci out mediump float res; 2414e5c31af7Sopenharmony_ci void main() 2415e5c31af7Sopenharmony_ci { 2416e5c31af7Sopenharmony_ci res = float(u_val); 2417e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2418e5c31af7Sopenharmony_ci } 2419e5c31af7Sopenharmony_ci "" 2420e5c31af7Sopenharmony_ci fragment "" 2421e5c31af7Sopenharmony_ci #version 300 es 2422e5c31af7Sopenharmony_ci precision highp float; 2423e5c31af7Sopenharmony_ci uniform highp int u_val; 2424e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2425e5c31af7Sopenharmony_ci in mediump float res; 2426e5c31af7Sopenharmony_ci void main() 2427e5c31af7Sopenharmony_ci { 2428e5c31af7Sopenharmony_ci out0 = float(u_val) + res; 2429e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2430e5c31af7Sopenharmony_ci } 2431e5c31af7Sopenharmony_ci "" 2432e5c31af7Sopenharmony_ci end 2433e5c31af7Sopenharmony_ci case precision_conflict_4 2434e5c31af7Sopenharmony_ci version 300 es 2435e5c31af7Sopenharmony_ci desc "Vertex side uniform has lowp, fragment side uniform mediump." 2436e5c31af7Sopenharmony_ci expect link_fail 2437e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 2438e5c31af7Sopenharmony_ci vertex "" 2439e5c31af7Sopenharmony_ci #version 300 es 2440e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2441e5c31af7Sopenharmony_ci uniform lowp vec3 u_val; 2442e5c31af7Sopenharmony_ci out mediump float res; 2443e5c31af7Sopenharmony_ci void main() 2444e5c31af7Sopenharmony_ci { 2445e5c31af7Sopenharmony_ci res = u_val.y; 2446e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2447e5c31af7Sopenharmony_ci } 2448e5c31af7Sopenharmony_ci "" 2449e5c31af7Sopenharmony_ci fragment "" 2450e5c31af7Sopenharmony_ci #version 300 es 2451e5c31af7Sopenharmony_ci precision highp float; 2452e5c31af7Sopenharmony_ci uniform mediump vec3 u_val; 2453e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2454e5c31af7Sopenharmony_ci in mediump float res; 2455e5c31af7Sopenharmony_ci void main() 2456e5c31af7Sopenharmony_ci { 2457e5c31af7Sopenharmony_ci out0 = u_val.z + res; 2458e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2459e5c31af7Sopenharmony_ci } 2460e5c31af7Sopenharmony_ci "" 2461e5c31af7Sopenharmony_ci end 2462e5c31af7Sopenharmony_ci end 2463e5c31af7Sopenharmony_ci 2464e5c31af7Sopenharmony_ci group struct "Uniform structs" 2465e5c31af7Sopenharmony_ci # Struct linkage handling 2466e5c31af7Sopenharmony_ci case basic 2467e5c31af7Sopenharmony_ci version 300 es 2468e5c31af7Sopenharmony_ci desc "Same uniform struct in both shaders" 2469e5c31af7Sopenharmony_ci values { 2470e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 2471e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 2472e5c31af7Sopenharmony_ci output float out0 = 3.0; 2473e5c31af7Sopenharmony_ci } 2474e5c31af7Sopenharmony_ci vertex "" 2475e5c31af7Sopenharmony_ci #version 300 es 2476e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2477e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 2478e5c31af7Sopenharmony_ci uniform Struct val; 2479e5c31af7Sopenharmony_ci out mediump float dummy; 2480e5c31af7Sopenharmony_ci void main() 2481e5c31af7Sopenharmony_ci { 2482e5c31af7Sopenharmony_ci dummy = val.a + val.b; 2483e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2484e5c31af7Sopenharmony_ci } 2485e5c31af7Sopenharmony_ci "" 2486e5c31af7Sopenharmony_ci fragment "" 2487e5c31af7Sopenharmony_ci #version 300 es 2488e5c31af7Sopenharmony_ci precision mediump float; 2489e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 2490e5c31af7Sopenharmony_ci uniform Struct val; 2491e5c31af7Sopenharmony_ci in mediump float dummy; 2492e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2493e5c31af7Sopenharmony_ci void main() 2494e5c31af7Sopenharmony_ci { 2495e5c31af7Sopenharmony_ci out0 = val.b + val.a; 2496e5c31af7Sopenharmony_ci out0 = out0 + dummy; 2497e5c31af7Sopenharmony_ci out0 = out0 - dummy; 2498e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2499e5c31af7Sopenharmony_ci } 2500e5c31af7Sopenharmony_ci "" 2501e5c31af7Sopenharmony_ci end 2502e5c31af7Sopenharmony_ci 2503e5c31af7Sopenharmony_ci case vertex_only 2504e5c31af7Sopenharmony_ci version 300 es 2505e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in vertex." 2506e5c31af7Sopenharmony_ci values { 2507e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 2508e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 2509e5c31af7Sopenharmony_ci output float out0 = 3.0; 2510e5c31af7Sopenharmony_ci } 2511e5c31af7Sopenharmony_ci vertex "" 2512e5c31af7Sopenharmony_ci #version 300 es 2513e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2514e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 2515e5c31af7Sopenharmony_ci uniform Struct val; 2516e5c31af7Sopenharmony_ci out mediump float res; 2517e5c31af7Sopenharmony_ci void main() 2518e5c31af7Sopenharmony_ci { 2519e5c31af7Sopenharmony_ci res = val.a + val.b; 2520e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2521e5c31af7Sopenharmony_ci } 2522e5c31af7Sopenharmony_ci "" 2523e5c31af7Sopenharmony_ci fragment "" 2524e5c31af7Sopenharmony_ci #version 300 es 2525e5c31af7Sopenharmony_ci precision mediump float; 2526e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 2527e5c31af7Sopenharmony_ci uniform Struct val; 2528e5c31af7Sopenharmony_ci in mediump float res; 2529e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2530e5c31af7Sopenharmony_ci void main() 2531e5c31af7Sopenharmony_ci { 2532e5c31af7Sopenharmony_ci out0 = res; 2533e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2534e5c31af7Sopenharmony_ci } 2535e5c31af7Sopenharmony_ci "" 2536e5c31af7Sopenharmony_ci end 2537e5c31af7Sopenharmony_ci 2538e5c31af7Sopenharmony_ci case fragment_only 2539e5c31af7Sopenharmony_ci version 300 es 2540e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in fragment." 2541e5c31af7Sopenharmony_ci values { 2542e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 2543e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 2544e5c31af7Sopenharmony_ci output float out0 = 3.0; 2545e5c31af7Sopenharmony_ci } 2546e5c31af7Sopenharmony_ci vertex "" 2547e5c31af7Sopenharmony_ci #version 300 es 2548e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2549e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 2550e5c31af7Sopenharmony_ci uniform Struct val; 2551e5c31af7Sopenharmony_ci void main() 2552e5c31af7Sopenharmony_ci { 2553e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2554e5c31af7Sopenharmony_ci } 2555e5c31af7Sopenharmony_ci "" 2556e5c31af7Sopenharmony_ci fragment "" 2557e5c31af7Sopenharmony_ci #version 300 es 2558e5c31af7Sopenharmony_ci precision mediump float; 2559e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 2560e5c31af7Sopenharmony_ci uniform Struct val; 2561e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2562e5c31af7Sopenharmony_ci void main() 2563e5c31af7Sopenharmony_ci { 2564e5c31af7Sopenharmony_ci out0 = val.a + val.b; 2565e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2566e5c31af7Sopenharmony_ci } 2567e5c31af7Sopenharmony_ci "" 2568e5c31af7Sopenharmony_ci end 2569e5c31af7Sopenharmony_ci 2570e5c31af7Sopenharmony_ci case partial 2571e5c31af7Sopenharmony_ci version 300 es 2572e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both." 2573e5c31af7Sopenharmony_ci values { 2574e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 2575e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 2576e5c31af7Sopenharmony_ci output float out0 = 3.0; 2577e5c31af7Sopenharmony_ci } 2578e5c31af7Sopenharmony_ci vertex "" 2579e5c31af7Sopenharmony_ci #version 300 es 2580e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2581e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 2582e5c31af7Sopenharmony_ci uniform Struct val; 2583e5c31af7Sopenharmony_ci out mediump float res; 2584e5c31af7Sopenharmony_ci void main() 2585e5c31af7Sopenharmony_ci { 2586e5c31af7Sopenharmony_ci res = val.a; 2587e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2588e5c31af7Sopenharmony_ci } 2589e5c31af7Sopenharmony_ci "" 2590e5c31af7Sopenharmony_ci fragment "" 2591e5c31af7Sopenharmony_ci #version 300 es 2592e5c31af7Sopenharmony_ci precision mediump float; 2593e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 2594e5c31af7Sopenharmony_ci uniform Struct val; 2595e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2596e5c31af7Sopenharmony_ci in mediump float res; 2597e5c31af7Sopenharmony_ci void main() 2598e5c31af7Sopenharmony_ci { 2599e5c31af7Sopenharmony_ci out0 = res + val.b; 2600e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2601e5c31af7Sopenharmony_ci } 2602e5c31af7Sopenharmony_ci "" 2603e5c31af7Sopenharmony_ci end 2604e5c31af7Sopenharmony_ci 2605e5c31af7Sopenharmony_ci case vec4 2606e5c31af7Sopenharmony_ci version 300 es 2607e5c31af7Sopenharmony_ci desc "Same uniform struct in both shaders. Datatype vec4" 2608e5c31af7Sopenharmony_ci values { 2609e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 2610e5c31af7Sopenharmony_ci uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 2611e5c31af7Sopenharmony_ci output float out0 = 3.0; 2612e5c31af7Sopenharmony_ci } 2613e5c31af7Sopenharmony_ci vertex "" 2614e5c31af7Sopenharmony_ci #version 300 es 2615e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2616e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 2617e5c31af7Sopenharmony_ci uniform Struct val; 2618e5c31af7Sopenharmony_ci out mediump float dummy; 2619e5c31af7Sopenharmony_ci void main() 2620e5c31af7Sopenharmony_ci { 2621e5c31af7Sopenharmony_ci dummy = val.a.x + val.b.y; 2622e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2623e5c31af7Sopenharmony_ci } 2624e5c31af7Sopenharmony_ci "" 2625e5c31af7Sopenharmony_ci fragment "" 2626e5c31af7Sopenharmony_ci #version 300 es 2627e5c31af7Sopenharmony_ci precision mediump float; 2628e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 2629e5c31af7Sopenharmony_ci uniform Struct val; 2630e5c31af7Sopenharmony_ci in mediump float dummy; 2631e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2632e5c31af7Sopenharmony_ci void main() 2633e5c31af7Sopenharmony_ci { 2634e5c31af7Sopenharmony_ci out0 = val.b.y + val.a.x; 2635e5c31af7Sopenharmony_ci out0 = out0 + dummy; 2636e5c31af7Sopenharmony_ci out0 = out0 - dummy; 2637e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2638e5c31af7Sopenharmony_ci } 2639e5c31af7Sopenharmony_ci "" 2640e5c31af7Sopenharmony_ci end 2641e5c31af7Sopenharmony_ci 2642e5c31af7Sopenharmony_ci case vertex_only_vec4 2643e5c31af7Sopenharmony_ci version 300 es 2644e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in vertex. Datatype vec4 " 2645e5c31af7Sopenharmony_ci values { 2646e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 2647e5c31af7Sopenharmony_ci uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 2648e5c31af7Sopenharmony_ci output float out0 = 3.0; 2649e5c31af7Sopenharmony_ci } 2650e5c31af7Sopenharmony_ci vertex "" 2651e5c31af7Sopenharmony_ci #version 300 es 2652e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2653e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 2654e5c31af7Sopenharmony_ci uniform Struct val; 2655e5c31af7Sopenharmony_ci out mediump float res; 2656e5c31af7Sopenharmony_ci void main() 2657e5c31af7Sopenharmony_ci { 2658e5c31af7Sopenharmony_ci res = val.a.x + val.b.y; 2659e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2660e5c31af7Sopenharmony_ci } 2661e5c31af7Sopenharmony_ci "" 2662e5c31af7Sopenharmony_ci fragment "" 2663e5c31af7Sopenharmony_ci #version 300 es 2664e5c31af7Sopenharmony_ci precision mediump float; 2665e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 2666e5c31af7Sopenharmony_ci uniform Struct val; 2667e5c31af7Sopenharmony_ci in mediump float res; 2668e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2669e5c31af7Sopenharmony_ci void main() 2670e5c31af7Sopenharmony_ci { out0 = res; 2671e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2672e5c31af7Sopenharmony_ci } 2673e5c31af7Sopenharmony_ci "" 2674e5c31af7Sopenharmony_ci end 2675e5c31af7Sopenharmony_ci 2676e5c31af7Sopenharmony_ci case fragment_only_vec4 2677e5c31af7Sopenharmony_ci version 300 es 2678e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in fragment. Datatype vec4" 2679e5c31af7Sopenharmony_ci values { 2680e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 2681e5c31af7Sopenharmony_ci uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 2682e5c31af7Sopenharmony_ci output float out0 = 3.0; 2683e5c31af7Sopenharmony_ci } 2684e5c31af7Sopenharmony_ci vertex "" 2685e5c31af7Sopenharmony_ci #version 300 es 2686e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2687e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 2688e5c31af7Sopenharmony_ci uniform Struct val; 2689e5c31af7Sopenharmony_ci void main() 2690e5c31af7Sopenharmony_ci { 2691e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2692e5c31af7Sopenharmony_ci } 2693e5c31af7Sopenharmony_ci "" 2694e5c31af7Sopenharmony_ci fragment "" 2695e5c31af7Sopenharmony_ci #version 300 es 2696e5c31af7Sopenharmony_ci precision mediump float; 2697e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 2698e5c31af7Sopenharmony_ci uniform Struct val; 2699e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2700e5c31af7Sopenharmony_ci void main() 2701e5c31af7Sopenharmony_ci { out0 = val.a.x + val.b.y; 2702e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2703e5c31af7Sopenharmony_ci } 2704e5c31af7Sopenharmony_ci "" 2705e5c31af7Sopenharmony_ci end 2706e5c31af7Sopenharmony_ci 2707e5c31af7Sopenharmony_ci case partial_vec4 2708e5c31af7Sopenharmony_ci version 300 es 2709e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4" 2710e5c31af7Sopenharmony_ci values { 2711e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 2712e5c31af7Sopenharmony_ci uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 2713e5c31af7Sopenharmony_ci output float out0 = 3.0; 2714e5c31af7Sopenharmony_ci } 2715e5c31af7Sopenharmony_ci vertex "" 2716e5c31af7Sopenharmony_ci #version 300 es 2717e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2718e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 2719e5c31af7Sopenharmony_ci uniform Struct val; 2720e5c31af7Sopenharmony_ci out mediump float res; 2721e5c31af7Sopenharmony_ci void main() 2722e5c31af7Sopenharmony_ci { 2723e5c31af7Sopenharmony_ci res = val.a.x; 2724e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2725e5c31af7Sopenharmony_ci } 2726e5c31af7Sopenharmony_ci "" 2727e5c31af7Sopenharmony_ci fragment "" 2728e5c31af7Sopenharmony_ci #version 300 es 2729e5c31af7Sopenharmony_ci precision mediump float; 2730e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 2731e5c31af7Sopenharmony_ci uniform Struct val; 2732e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2733e5c31af7Sopenharmony_ci in mediump float res; 2734e5c31af7Sopenharmony_ci void main() 2735e5c31af7Sopenharmony_ci { out0 = res + val.b.y; 2736e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2737e5c31af7Sopenharmony_ci } 2738e5c31af7Sopenharmony_ci "" 2739e5c31af7Sopenharmony_ci end 2740e5c31af7Sopenharmony_ci 2741e5c31af7Sopenharmony_ci case vec4_vec3 2742e5c31af7Sopenharmony_ci version 300 es 2743e5c31af7Sopenharmony_ci desc "Same uniform struct in both shaders. Datatype vec4 and vec3" 2744e5c31af7Sopenharmony_ci values { 2745e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 2746e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 2747e5c31af7Sopenharmony_ci output float out0 = 3.0; 2748e5c31af7Sopenharmony_ci } 2749e5c31af7Sopenharmony_ci vertex "" 2750e5c31af7Sopenharmony_ci #version 300 es 2751e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2752e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 2753e5c31af7Sopenharmony_ci uniform Struct val; 2754e5c31af7Sopenharmony_ci out mediump float dummy; 2755e5c31af7Sopenharmony_ci void main() 2756e5c31af7Sopenharmony_ci { 2757e5c31af7Sopenharmony_ci dummy = val.a.x + val.b.y; 2758e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2759e5c31af7Sopenharmony_ci } 2760e5c31af7Sopenharmony_ci "" 2761e5c31af7Sopenharmony_ci fragment "" 2762e5c31af7Sopenharmony_ci #version 300 es 2763e5c31af7Sopenharmony_ci precision mediump float; 2764e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 2765e5c31af7Sopenharmony_ci uniform Struct val; 2766e5c31af7Sopenharmony_ci in mediump float dummy; 2767e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2768e5c31af7Sopenharmony_ci void main() 2769e5c31af7Sopenharmony_ci { out0 = val.b.y + val.a.x; 2770e5c31af7Sopenharmony_ci out0 = out0 + dummy; 2771e5c31af7Sopenharmony_ci out0 = out0 - dummy; 2772e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2773e5c31af7Sopenharmony_ci } 2774e5c31af7Sopenharmony_ci "" 2775e5c31af7Sopenharmony_ci end 2776e5c31af7Sopenharmony_ci 2777e5c31af7Sopenharmony_ci case vertex_only_vec4_vec3 2778e5c31af7Sopenharmony_ci version 300 es 2779e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and vec3" 2780e5c31af7Sopenharmony_ci values { 2781e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 2782e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 2783e5c31af7Sopenharmony_ci output float out0 = 3.0; 2784e5c31af7Sopenharmony_ci } 2785e5c31af7Sopenharmony_ci vertex "" 2786e5c31af7Sopenharmony_ci #version 300 es 2787e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2788e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 2789e5c31af7Sopenharmony_ci uniform Struct val; 2790e5c31af7Sopenharmony_ci out mediump float res; 2791e5c31af7Sopenharmony_ci void main() 2792e5c31af7Sopenharmony_ci { 2793e5c31af7Sopenharmony_ci res = val.a.x + val.b.y; 2794e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2795e5c31af7Sopenharmony_ci } 2796e5c31af7Sopenharmony_ci "" 2797e5c31af7Sopenharmony_ci fragment "" 2798e5c31af7Sopenharmony_ci #version 300 es 2799e5c31af7Sopenharmony_ci precision mediump float; 2800e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 2801e5c31af7Sopenharmony_ci uniform Struct val; 2802e5c31af7Sopenharmony_ci in mediump float res; 2803e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2804e5c31af7Sopenharmony_ci void main() 2805e5c31af7Sopenharmony_ci { out0 = res; 2806e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2807e5c31af7Sopenharmony_ci } 2808e5c31af7Sopenharmony_ci "" 2809e5c31af7Sopenharmony_ci end 2810e5c31af7Sopenharmony_ci 2811e5c31af7Sopenharmony_ci case fragment_only_vec4_vec3 2812e5c31af7Sopenharmony_ci version 300 es 2813e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and vec3" 2814e5c31af7Sopenharmony_ci values { 2815e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 2816e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 2817e5c31af7Sopenharmony_ci output float out0 = 3.0; 2818e5c31af7Sopenharmony_ci } 2819e5c31af7Sopenharmony_ci vertex "" 2820e5c31af7Sopenharmony_ci #version 300 es 2821e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2822e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 2823e5c31af7Sopenharmony_ci uniform Struct val; 2824e5c31af7Sopenharmony_ci void main() 2825e5c31af7Sopenharmony_ci { 2826e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2827e5c31af7Sopenharmony_ci } 2828e5c31af7Sopenharmony_ci "" 2829e5c31af7Sopenharmony_ci fragment "" 2830e5c31af7Sopenharmony_ci #version 300 es 2831e5c31af7Sopenharmony_ci precision mediump float; 2832e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 2833e5c31af7Sopenharmony_ci uniform Struct val; 2834e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2835e5c31af7Sopenharmony_ci void main() 2836e5c31af7Sopenharmony_ci { out0 = val.a.x + val.b.y; 2837e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2838e5c31af7Sopenharmony_ci } 2839e5c31af7Sopenharmony_ci "" 2840e5c31af7Sopenharmony_ci end 2841e5c31af7Sopenharmony_ci 2842e5c31af7Sopenharmony_ci case partial_vec4_vec3 2843e5c31af7Sopenharmony_ci version 300 es 2844e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4 and vec3" 2845e5c31af7Sopenharmony_ci values { 2846e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 2847e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 2848e5c31af7Sopenharmony_ci output float out0 = 3.0; 2849e5c31af7Sopenharmony_ci } 2850e5c31af7Sopenharmony_ci vertex "" 2851e5c31af7Sopenharmony_ci #version 300 es 2852e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2853e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 2854e5c31af7Sopenharmony_ci uniform Struct val; 2855e5c31af7Sopenharmony_ci out mediump float res; 2856e5c31af7Sopenharmony_ci void main() 2857e5c31af7Sopenharmony_ci { 2858e5c31af7Sopenharmony_ci res = val.a.x; 2859e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2860e5c31af7Sopenharmony_ci } 2861e5c31af7Sopenharmony_ci "" 2862e5c31af7Sopenharmony_ci fragment "" 2863e5c31af7Sopenharmony_ci #version 300 es 2864e5c31af7Sopenharmony_ci precision mediump float; 2865e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 2866e5c31af7Sopenharmony_ci uniform Struct val; 2867e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2868e5c31af7Sopenharmony_ci in mediump float res; 2869e5c31af7Sopenharmony_ci void main() 2870e5c31af7Sopenharmony_ci { out0 = res + val.b.y; 2871e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2872e5c31af7Sopenharmony_ci } 2873e5c31af7Sopenharmony_ci "" 2874e5c31af7Sopenharmony_ci end 2875e5c31af7Sopenharmony_ci 2876e5c31af7Sopenharmony_ci case vec4_float 2877e5c31af7Sopenharmony_ci version 300 es 2878e5c31af7Sopenharmony_ci desc "Same uniform struct in both shaders. Datatype vec4 and float" 2879e5c31af7Sopenharmony_ci values { 2880e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 2881e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 2882e5c31af7Sopenharmony_ci output float out0 = 3.0; 2883e5c31af7Sopenharmony_ci } 2884e5c31af7Sopenharmony_ci vertex "" 2885e5c31af7Sopenharmony_ci #version 300 es 2886e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2887e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 2888e5c31af7Sopenharmony_ci uniform Struct val; 2889e5c31af7Sopenharmony_ci out mediump float dummy; 2890e5c31af7Sopenharmony_ci void main() 2891e5c31af7Sopenharmony_ci { 2892e5c31af7Sopenharmony_ci dummy = val.a.x + val.b; 2893e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2894e5c31af7Sopenharmony_ci } 2895e5c31af7Sopenharmony_ci "" 2896e5c31af7Sopenharmony_ci fragment "" 2897e5c31af7Sopenharmony_ci #version 300 es 2898e5c31af7Sopenharmony_ci precision mediump float; 2899e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 2900e5c31af7Sopenharmony_ci uniform Struct val; 2901e5c31af7Sopenharmony_ci in mediump float dummy; 2902e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2903e5c31af7Sopenharmony_ci void main() 2904e5c31af7Sopenharmony_ci { out0 = val.b + val.a.x; 2905e5c31af7Sopenharmony_ci out0 = out0 + dummy; 2906e5c31af7Sopenharmony_ci out0 = out0 - dummy; 2907e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2908e5c31af7Sopenharmony_ci } 2909e5c31af7Sopenharmony_ci "" 2910e5c31af7Sopenharmony_ci end 2911e5c31af7Sopenharmony_ci 2912e5c31af7Sopenharmony_ci case vertex_only_vec4_float 2913e5c31af7Sopenharmony_ci version 300 es 2914e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and float" 2915e5c31af7Sopenharmony_ci values { 2916e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 2917e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 2918e5c31af7Sopenharmony_ci output float out0 = 3.0; 2919e5c31af7Sopenharmony_ci } 2920e5c31af7Sopenharmony_ci vertex "" 2921e5c31af7Sopenharmony_ci #version 300 es 2922e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2923e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 2924e5c31af7Sopenharmony_ci uniform Struct val; 2925e5c31af7Sopenharmony_ci out mediump float res; 2926e5c31af7Sopenharmony_ci void main() 2927e5c31af7Sopenharmony_ci { 2928e5c31af7Sopenharmony_ci res = val.a.x + val.b; 2929e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2930e5c31af7Sopenharmony_ci } 2931e5c31af7Sopenharmony_ci "" 2932e5c31af7Sopenharmony_ci fragment "" 2933e5c31af7Sopenharmony_ci #version 300 es 2934e5c31af7Sopenharmony_ci precision mediump float; 2935e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 2936e5c31af7Sopenharmony_ci uniform Struct val; 2937e5c31af7Sopenharmony_ci in mediump float res; 2938e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2939e5c31af7Sopenharmony_ci void main() 2940e5c31af7Sopenharmony_ci { out0 = res; 2941e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2942e5c31af7Sopenharmony_ci } 2943e5c31af7Sopenharmony_ci "" 2944e5c31af7Sopenharmony_ci end 2945e5c31af7Sopenharmony_ci 2946e5c31af7Sopenharmony_ci case fragment_only_vec4_float 2947e5c31af7Sopenharmony_ci version 300 es 2948e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and float" 2949e5c31af7Sopenharmony_ci values { 2950e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 2951e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 2952e5c31af7Sopenharmony_ci output float out0 = 3.0; 2953e5c31af7Sopenharmony_ci } 2954e5c31af7Sopenharmony_ci vertex "" 2955e5c31af7Sopenharmony_ci #version 300 es 2956e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2957e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 2958e5c31af7Sopenharmony_ci uniform Struct val; 2959e5c31af7Sopenharmony_ci void main() 2960e5c31af7Sopenharmony_ci { 2961e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2962e5c31af7Sopenharmony_ci } 2963e5c31af7Sopenharmony_ci "" 2964e5c31af7Sopenharmony_ci fragment "" 2965e5c31af7Sopenharmony_ci #version 300 es 2966e5c31af7Sopenharmony_ci precision mediump float; 2967e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 2968e5c31af7Sopenharmony_ci uniform Struct val; 2969e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2970e5c31af7Sopenharmony_ci void main() 2971e5c31af7Sopenharmony_ci { out0 = val.a.x + val.b; 2972e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2973e5c31af7Sopenharmony_ci } 2974e5c31af7Sopenharmony_ci "" 2975e5c31af7Sopenharmony_ci end 2976e5c31af7Sopenharmony_ci 2977e5c31af7Sopenharmony_ci case partial_vec4_float 2978e5c31af7Sopenharmony_ci version 300 es 2979e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4 and float" 2980e5c31af7Sopenharmony_ci values { 2981e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 2982e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 2983e5c31af7Sopenharmony_ci output float out0 = 3.0; 2984e5c31af7Sopenharmony_ci } 2985e5c31af7Sopenharmony_ci vertex "" 2986e5c31af7Sopenharmony_ci #version 300 es 2987e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2988e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 2989e5c31af7Sopenharmony_ci uniform Struct val; 2990e5c31af7Sopenharmony_ci out mediump float res; 2991e5c31af7Sopenharmony_ci void main() 2992e5c31af7Sopenharmony_ci { 2993e5c31af7Sopenharmony_ci res = val.a.x; 2994e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2995e5c31af7Sopenharmony_ci } 2996e5c31af7Sopenharmony_ci "" 2997e5c31af7Sopenharmony_ci fragment "" 2998e5c31af7Sopenharmony_ci #version 300 es 2999e5c31af7Sopenharmony_ci precision mediump float; 3000e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 3001e5c31af7Sopenharmony_ci uniform Struct val; 3002e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3003e5c31af7Sopenharmony_ci in mediump float res; 3004e5c31af7Sopenharmony_ci void main() 3005e5c31af7Sopenharmony_ci { out0 = res + val.b; 3006e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3007e5c31af7Sopenharmony_ci } 3008e5c31af7Sopenharmony_ci "" 3009e5c31af7Sopenharmony_ci end 3010e5c31af7Sopenharmony_ci 3011e5c31af7Sopenharmony_ci case partial_vec4_struct 3012e5c31af7Sopenharmony_ci version 300 es 3013e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec4" 3014e5c31af7Sopenharmony_ci values { 3015e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 3016e5c31af7Sopenharmony_ci uniform vec4 val.b.c = vec4(1.0, 2.0, 3.0, 4.0); 3017e5c31af7Sopenharmony_ci output float out0 = 3.0; 3018e5c31af7Sopenharmony_ci } 3019e5c31af7Sopenharmony_ci vertex "" 3020e5c31af7Sopenharmony_ci #version 300 es 3021e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3022e5c31af7Sopenharmony_ci struct Inner {mediump vec4 c;}; 3023e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; Inner b;}; 3024e5c31af7Sopenharmony_ci uniform Struct val; 3025e5c31af7Sopenharmony_ci out mediump float res; 3026e5c31af7Sopenharmony_ci void main() 3027e5c31af7Sopenharmony_ci { 3028e5c31af7Sopenharmony_ci res = val.a.x; 3029e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3030e5c31af7Sopenharmony_ci } 3031e5c31af7Sopenharmony_ci "" 3032e5c31af7Sopenharmony_ci fragment "" 3033e5c31af7Sopenharmony_ci #version 300 es 3034e5c31af7Sopenharmony_ci precision mediump float; 3035e5c31af7Sopenharmony_ci struct Inner {mediump vec4 c;}; 3036e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; Inner b;}; 3037e5c31af7Sopenharmony_ci uniform Struct val; 3038e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3039e5c31af7Sopenharmony_ci in mediump float res; 3040e5c31af7Sopenharmony_ci void main() 3041e5c31af7Sopenharmony_ci { out0 = res + val.b.c.y; 3042e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3043e5c31af7Sopenharmony_ci } 3044e5c31af7Sopenharmony_ci "" 3045e5c31af7Sopenharmony_ci end 3046e5c31af7Sopenharmony_ci 3047e5c31af7Sopenharmony_ci case partial_vec4_vec3_struct 3048e5c31af7Sopenharmony_ci version 300 es 3049e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec3" 3050e5c31af7Sopenharmony_ci values { 3051e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 3052e5c31af7Sopenharmony_ci uniform vec3 val.b.c = vec3(1.0, 2.0, 3.0); 3053e5c31af7Sopenharmony_ci output float out0 = 3.0; 3054e5c31af7Sopenharmony_ci } 3055e5c31af7Sopenharmony_ci vertex "" 3056e5c31af7Sopenharmony_ci #version 300 es 3057e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3058e5c31af7Sopenharmony_ci struct Inner {mediump vec3 c;}; 3059e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; Inner b;}; 3060e5c31af7Sopenharmony_ci uniform Struct val; 3061e5c31af7Sopenharmony_ci out mediump float res; 3062e5c31af7Sopenharmony_ci void main() 3063e5c31af7Sopenharmony_ci { 3064e5c31af7Sopenharmony_ci res = val.a.x; 3065e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3066e5c31af7Sopenharmony_ci } 3067e5c31af7Sopenharmony_ci "" 3068e5c31af7Sopenharmony_ci fragment "" 3069e5c31af7Sopenharmony_ci #version 300 es 3070e5c31af7Sopenharmony_ci precision mediump float; 3071e5c31af7Sopenharmony_ci struct Inner {mediump vec3 c;}; 3072e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; Inner b;}; 3073e5c31af7Sopenharmony_ci uniform Struct val; 3074e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3075e5c31af7Sopenharmony_ci in mediump float res; 3076e5c31af7Sopenharmony_ci void main() 3077e5c31af7Sopenharmony_ci { out0 = res + val.b.c.y; 3078e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3079e5c31af7Sopenharmony_ci } 3080e5c31af7Sopenharmony_ci "" 3081e5c31af7Sopenharmony_ci end 3082e5c31af7Sopenharmony_ci 3083e5c31af7Sopenharmony_ci case partial_vec2_vec3 3084e5c31af7Sopenharmony_ci version 300 es 3085e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec2 and vec3" 3086e5c31af7Sopenharmony_ci values { 3087e5c31af7Sopenharmony_ci uniform vec2 val.a = vec2(1.0, 2.0); 3088e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 3089e5c31af7Sopenharmony_ci output float out0 = 3.0; 3090e5c31af7Sopenharmony_ci } 3091e5c31af7Sopenharmony_ci vertex "" 3092e5c31af7Sopenharmony_ci #version 300 es 3093e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3094e5c31af7Sopenharmony_ci struct Struct {mediump vec2 a; mediump vec3 b;}; 3095e5c31af7Sopenharmony_ci uniform Struct val; 3096e5c31af7Sopenharmony_ci out mediump float res; 3097e5c31af7Sopenharmony_ci void main() 3098e5c31af7Sopenharmony_ci { 3099e5c31af7Sopenharmony_ci res = val.a.x; 3100e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3101e5c31af7Sopenharmony_ci } 3102e5c31af7Sopenharmony_ci "" 3103e5c31af7Sopenharmony_ci fragment "" 3104e5c31af7Sopenharmony_ci #version 300 es 3105e5c31af7Sopenharmony_ci precision mediump float; 3106e5c31af7Sopenharmony_ci struct Struct {mediump vec2 a; mediump vec3 b;}; 3107e5c31af7Sopenharmony_ci uniform Struct val; 3108e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3109e5c31af7Sopenharmony_ci in mediump float res; 3110e5c31af7Sopenharmony_ci void main() 3111e5c31af7Sopenharmony_ci { out0 = res + val.b.y; 3112e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3113e5c31af7Sopenharmony_ci } 3114e5c31af7Sopenharmony_ci "" 3115e5c31af7Sopenharmony_ci end 3116e5c31af7Sopenharmony_ci 3117e5c31af7Sopenharmony_ci case partial_vec2_int 3118e5c31af7Sopenharmony_ci version 300 es 3119e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec2 and int" 3120e5c31af7Sopenharmony_ci values { 3121e5c31af7Sopenharmony_ci uniform vec2 val.a = vec2(1.0, 2.0); 3122e5c31af7Sopenharmony_ci uniform int val.b = 2; 3123e5c31af7Sopenharmony_ci output float out0 = 3.0; 3124e5c31af7Sopenharmony_ci } 3125e5c31af7Sopenharmony_ci vertex "" 3126e5c31af7Sopenharmony_ci #version 300 es 3127e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3128e5c31af7Sopenharmony_ci struct Struct {mediump vec2 a; mediump int b;}; 3129e5c31af7Sopenharmony_ci uniform Struct val; 3130e5c31af7Sopenharmony_ci out mediump float res; 3131e5c31af7Sopenharmony_ci void main() 3132e5c31af7Sopenharmony_ci { 3133e5c31af7Sopenharmony_ci res = val.a.x; 3134e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3135e5c31af7Sopenharmony_ci } 3136e5c31af7Sopenharmony_ci "" 3137e5c31af7Sopenharmony_ci fragment "" 3138e5c31af7Sopenharmony_ci #version 300 es 3139e5c31af7Sopenharmony_ci precision mediump float; 3140e5c31af7Sopenharmony_ci struct Struct {mediump vec2 a; mediump int b;}; 3141e5c31af7Sopenharmony_ci uniform Struct val; 3142e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3143e5c31af7Sopenharmony_ci in mediump float res; 3144e5c31af7Sopenharmony_ci void main() 3145e5c31af7Sopenharmony_ci { out0 = res + float(val.b); 3146e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3147e5c31af7Sopenharmony_ci } 3148e5c31af7Sopenharmony_ci "" 3149e5c31af7Sopenharmony_ci end 3150e5c31af7Sopenharmony_ci 3151e5c31af7Sopenharmony_ci case partial_int_float 3152e5c31af7Sopenharmony_ci version 300 es 3153e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype int and float" 3154e5c31af7Sopenharmony_ci values { 3155e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 3156e5c31af7Sopenharmony_ci uniform int val.b = 2; 3157e5c31af7Sopenharmony_ci output float out0 = 3.0; 3158e5c31af7Sopenharmony_ci } 3159e5c31af7Sopenharmony_ci vertex "" 3160e5c31af7Sopenharmony_ci #version 300 es 3161e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3162e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump int b;}; 3163e5c31af7Sopenharmony_ci uniform Struct val; 3164e5c31af7Sopenharmony_ci out mediump float res; 3165e5c31af7Sopenharmony_ci void main() 3166e5c31af7Sopenharmony_ci { 3167e5c31af7Sopenharmony_ci res = val.a; 3168e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3169e5c31af7Sopenharmony_ci } 3170e5c31af7Sopenharmony_ci "" 3171e5c31af7Sopenharmony_ci fragment "" 3172e5c31af7Sopenharmony_ci #version 300 es 3173e5c31af7Sopenharmony_ci precision mediump float; 3174e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump int b;}; 3175e5c31af7Sopenharmony_ci uniform Struct val; 3176e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3177e5c31af7Sopenharmony_ci in mediump float res; 3178e5c31af7Sopenharmony_ci void main() 3179e5c31af7Sopenharmony_ci { out0 = res + float(val.b); 3180e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3181e5c31af7Sopenharmony_ci } 3182e5c31af7Sopenharmony_ci "" 3183e5c31af7Sopenharmony_ci end 3184e5c31af7Sopenharmony_ci 3185e5c31af7Sopenharmony_ci case partial_bvec2_vec2 3186e5c31af7Sopenharmony_ci version 300 es 3187e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype bvec2 and vec2" 3188e5c31af7Sopenharmony_ci values { 3189e5c31af7Sopenharmony_ci uniform bvec2 val.a = bvec2(true, true); 3190e5c31af7Sopenharmony_ci uniform vec2 val.b = vec2(1.0, 2.0); 3191e5c31af7Sopenharmony_ci output float out0 = 3.0; 3192e5c31af7Sopenharmony_ci } 3193e5c31af7Sopenharmony_ci vertex "" 3194e5c31af7Sopenharmony_ci #version 300 es 3195e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3196e5c31af7Sopenharmony_ci struct Struct {bvec2 a; mediump vec2 b;}; 3197e5c31af7Sopenharmony_ci uniform Struct val; 3198e5c31af7Sopenharmony_ci out mediump float res; 3199e5c31af7Sopenharmony_ci void main() 3200e5c31af7Sopenharmony_ci { 3201e5c31af7Sopenharmony_ci res = float(val.a.x); 3202e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3203e5c31af7Sopenharmony_ci } 3204e5c31af7Sopenharmony_ci "" 3205e5c31af7Sopenharmony_ci fragment "" 3206e5c31af7Sopenharmony_ci #version 300 es 3207e5c31af7Sopenharmony_ci precision mediump float; 3208e5c31af7Sopenharmony_ci struct Struct {bvec2 a; mediump vec2 b;}; 3209e5c31af7Sopenharmony_ci uniform Struct val; 3210e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3211e5c31af7Sopenharmony_ci in mediump float res; 3212e5c31af7Sopenharmony_ci void main() 3213e5c31af7Sopenharmony_ci { out0 = res + val.b.y; 3214e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3215e5c31af7Sopenharmony_ci } 3216e5c31af7Sopenharmony_ci "" 3217e5c31af7Sopenharmony_ci end 3218e5c31af7Sopenharmony_ci 3219e5c31af7Sopenharmony_ci case partial_ivec2_vec2 3220e5c31af7Sopenharmony_ci version 300 es 3221e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and vec2" 3222e5c31af7Sopenharmony_ci values { 3223e5c31af7Sopenharmony_ci uniform ivec2 val.a = ivec2(1, 2); 3224e5c31af7Sopenharmony_ci uniform vec2 val.b = vec2(1.0, 2.0); 3225e5c31af7Sopenharmony_ci output float out0 = 3.0; 3226e5c31af7Sopenharmony_ci } 3227e5c31af7Sopenharmony_ci vertex "" 3228e5c31af7Sopenharmony_ci #version 300 es 3229e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3230e5c31af7Sopenharmony_ci struct Struct {mediump ivec2 a; mediump vec2 b;}; 3231e5c31af7Sopenharmony_ci uniform Struct val; 3232e5c31af7Sopenharmony_ci out mediump float res; 3233e5c31af7Sopenharmony_ci void main() 3234e5c31af7Sopenharmony_ci { 3235e5c31af7Sopenharmony_ci res = vec2(val.a).x; 3236e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3237e5c31af7Sopenharmony_ci } 3238e5c31af7Sopenharmony_ci "" 3239e5c31af7Sopenharmony_ci fragment "" 3240e5c31af7Sopenharmony_ci #version 300 es 3241e5c31af7Sopenharmony_ci precision mediump float; 3242e5c31af7Sopenharmony_ci struct Struct {mediump ivec2 a; mediump vec2 b;}; 3243e5c31af7Sopenharmony_ci uniform Struct val; 3244e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3245e5c31af7Sopenharmony_ci in mediump float res; 3246e5c31af7Sopenharmony_ci void main() 3247e5c31af7Sopenharmony_ci { out0 = res + val.b.y; 3248e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3249e5c31af7Sopenharmony_ci } 3250e5c31af7Sopenharmony_ci "" 3251e5c31af7Sopenharmony_ci end 3252e5c31af7Sopenharmony_ci 3253e5c31af7Sopenharmony_ci case partial_ivec2_ivec2 3254e5c31af7Sopenharmony_ci version 300 es 3255e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and ivec2" 3256e5c31af7Sopenharmony_ci values { 3257e5c31af7Sopenharmony_ci uniform ivec2 val.a = ivec2(1, 2); 3258e5c31af7Sopenharmony_ci uniform ivec2 val.b = ivec2(1, 2); 3259e5c31af7Sopenharmony_ci output float out0 = 3.0; 3260e5c31af7Sopenharmony_ci } 3261e5c31af7Sopenharmony_ci vertex "" 3262e5c31af7Sopenharmony_ci #version 300 es 3263e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3264e5c31af7Sopenharmony_ci struct Struct {mediump ivec2 a; mediump ivec2 b;}; 3265e5c31af7Sopenharmony_ci uniform Struct val; 3266e5c31af7Sopenharmony_ci out mediump float res; 3267e5c31af7Sopenharmony_ci void main() 3268e5c31af7Sopenharmony_ci { 3269e5c31af7Sopenharmony_ci res = vec2(val.a).x; 3270e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3271e5c31af7Sopenharmony_ci } 3272e5c31af7Sopenharmony_ci "" 3273e5c31af7Sopenharmony_ci fragment "" 3274e5c31af7Sopenharmony_ci #version 300 es 3275e5c31af7Sopenharmony_ci precision mediump float; 3276e5c31af7Sopenharmony_ci struct Struct {mediump ivec2 a; mediump ivec2 b;}; 3277e5c31af7Sopenharmony_ci uniform Struct val; 3278e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3279e5c31af7Sopenharmony_ci in mediump float res; 3280e5c31af7Sopenharmony_ci void main() 3281e5c31af7Sopenharmony_ci { out0 = res + vec2(val.b).y; 3282e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3283e5c31af7Sopenharmony_ci } 3284e5c31af7Sopenharmony_ci "" 3285e5c31af7Sopenharmony_ci end 3286e5c31af7Sopenharmony_ci 3287e5c31af7Sopenharmony_ci case type_conflict_1 3288e5c31af7Sopenharmony_ci version 300 es 3289e5c31af7Sopenharmony_ci desc "Fragment struct has one less member than fragment version" 3290e5c31af7Sopenharmony_ci expect link_fail 3291e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 3292e5c31af7Sopenharmony_ci vertex "" 3293e5c31af7Sopenharmony_ci #version 300 es 3294e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3295e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 3296e5c31af7Sopenharmony_ci uniform Struct val; 3297e5c31af7Sopenharmony_ci out mediump float res; 3298e5c31af7Sopenharmony_ci void main() 3299e5c31af7Sopenharmony_ci { 3300e5c31af7Sopenharmony_ci res = val.a; 3301e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3302e5c31af7Sopenharmony_ci } 3303e5c31af7Sopenharmony_ci "" 3304e5c31af7Sopenharmony_ci fragment "" 3305e5c31af7Sopenharmony_ci #version 300 es 3306e5c31af7Sopenharmony_ci precision mediump float; 3307e5c31af7Sopenharmony_ci struct Struct {mediump float a;}; 3308e5c31af7Sopenharmony_ci uniform Struct val; 3309e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3310e5c31af7Sopenharmony_ci in mediump float res; 3311e5c31af7Sopenharmony_ci void main() 3312e5c31af7Sopenharmony_ci { out0 = res + val.a; 3313e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3314e5c31af7Sopenharmony_ci } 3315e5c31af7Sopenharmony_ci "" 3316e5c31af7Sopenharmony_ci end 3317e5c31af7Sopenharmony_ci 3318e5c31af7Sopenharmony_ci case type_conflict_2 3319e5c31af7Sopenharmony_ci version 300 es 3320e5c31af7Sopenharmony_ci desc "Vertex struct has int, fragment struct has float." 3321e5c31af7Sopenharmony_ci expect link_fail 3322e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 3323e5c31af7Sopenharmony_ci vertex "" 3324e5c31af7Sopenharmony_ci #version 300 es 3325e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3326e5c31af7Sopenharmony_ci struct Struct {mediump int a;}; 3327e5c31af7Sopenharmony_ci uniform Struct val; 3328e5c31af7Sopenharmony_ci out mediump float res; 3329e5c31af7Sopenharmony_ci void main() 3330e5c31af7Sopenharmony_ci { 3331e5c31af7Sopenharmony_ci res = float(val.a); 3332e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3333e5c31af7Sopenharmony_ci } 3334e5c31af7Sopenharmony_ci "" 3335e5c31af7Sopenharmony_ci fragment "" 3336e5c31af7Sopenharmony_ci #version 300 es 3337e5c31af7Sopenharmony_ci precision mediump float; 3338e5c31af7Sopenharmony_ci struct Struct {mediump float a;}; 3339e5c31af7Sopenharmony_ci uniform Struct val; 3340e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3341e5c31af7Sopenharmony_ci in mediump float res; 3342e5c31af7Sopenharmony_ci void main() 3343e5c31af7Sopenharmony_ci { out0 = val.a; 3344e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3345e5c31af7Sopenharmony_ci } 3346e5c31af7Sopenharmony_ci "" 3347e5c31af7Sopenharmony_ci end 3348e5c31af7Sopenharmony_ci 3349e5c31af7Sopenharmony_ci case type_conflict_3 3350e5c31af7Sopenharmony_ci version 300 es 3351e5c31af7Sopenharmony_ci desc "Vertex struct has vec3, fragment struct has vec4." 3352e5c31af7Sopenharmony_ci expect link_fail 3353e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 3354e5c31af7Sopenharmony_ci vertex "" 3355e5c31af7Sopenharmony_ci #version 300 es 3356e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3357e5c31af7Sopenharmony_ci struct Struct {mediump vec3 a;}; 3358e5c31af7Sopenharmony_ci uniform Struct val; 3359e5c31af7Sopenharmony_ci out mediump float res; 3360e5c31af7Sopenharmony_ci void main() 3361e5c31af7Sopenharmony_ci { 3362e5c31af7Sopenharmony_ci res = float(val.a.x); 3363e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3364e5c31af7Sopenharmony_ci } 3365e5c31af7Sopenharmony_ci "" 3366e5c31af7Sopenharmony_ci fragment "" 3367e5c31af7Sopenharmony_ci #version 300 es 3368e5c31af7Sopenharmony_ci precision mediump float; 3369e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a;}; 3370e5c31af7Sopenharmony_ci uniform Struct val; 3371e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3372e5c31af7Sopenharmony_ci in mediump float res; 3373e5c31af7Sopenharmony_ci void main() 3374e5c31af7Sopenharmony_ci { out0 = val.a.x; 3375e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3376e5c31af7Sopenharmony_ci } 3377e5c31af7Sopenharmony_ci "" 3378e5c31af7Sopenharmony_ci end 3379e5c31af7Sopenharmony_ci 3380e5c31af7Sopenharmony_ci case precision_conflict_1 3381e5c31af7Sopenharmony_ci version 300 es 3382e5c31af7Sopenharmony_ci desc "Vertex side struct has highp, fragment side struct mediump." 3383e5c31af7Sopenharmony_ci expect link_fail 3384e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 3385e5c31af7Sopenharmony_ci vertex "" 3386e5c31af7Sopenharmony_ci #version 300 es 3387e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3388e5c31af7Sopenharmony_ci struct Struct {highp float a;}; 3389e5c31af7Sopenharmony_ci uniform Struct val; 3390e5c31af7Sopenharmony_ci out mediump float res; 3391e5c31af7Sopenharmony_ci void main() 3392e5c31af7Sopenharmony_ci { 3393e5c31af7Sopenharmony_ci res = val.a; 3394e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3395e5c31af7Sopenharmony_ci } 3396e5c31af7Sopenharmony_ci "" 3397e5c31af7Sopenharmony_ci fragment "" 3398e5c31af7Sopenharmony_ci #version 300 es 3399e5c31af7Sopenharmony_ci precision mediump float; 3400e5c31af7Sopenharmony_ci struct Struct {mediump float a;}; 3401e5c31af7Sopenharmony_ci uniform Struct val; 3402e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3403e5c31af7Sopenharmony_ci in mediump float res; 3404e5c31af7Sopenharmony_ci void main() 3405e5c31af7Sopenharmony_ci { out0 = val.a; 3406e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3407e5c31af7Sopenharmony_ci } 3408e5c31af7Sopenharmony_ci "" 3409e5c31af7Sopenharmony_ci end 3410e5c31af7Sopenharmony_ci 3411e5c31af7Sopenharmony_ci case precision_conflict_2 3412e5c31af7Sopenharmony_ci version 300 es 3413e5c31af7Sopenharmony_ci desc "Vertex side struct has mediump, fragment side struct lowp." 3414e5c31af7Sopenharmony_ci expect link_fail 3415e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 3416e5c31af7Sopenharmony_ci vertex "" 3417e5c31af7Sopenharmony_ci #version 300 es 3418e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3419e5c31af7Sopenharmony_ci struct Struct {mediump float a;}; 3420e5c31af7Sopenharmony_ci uniform Struct val; 3421e5c31af7Sopenharmony_ci out mediump float res; 3422e5c31af7Sopenharmony_ci void main() 3423e5c31af7Sopenharmony_ci { 3424e5c31af7Sopenharmony_ci res = val.a; 3425e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3426e5c31af7Sopenharmony_ci } 3427e5c31af7Sopenharmony_ci "" 3428e5c31af7Sopenharmony_ci fragment "" 3429e5c31af7Sopenharmony_ci #version 300 es 3430e5c31af7Sopenharmony_ci precision mediump float; 3431e5c31af7Sopenharmony_ci struct Struct {lowp float a;}; 3432e5c31af7Sopenharmony_ci uniform Struct val; 3433e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3434e5c31af7Sopenharmony_ci in mediump float res; 3435e5c31af7Sopenharmony_ci void main() 3436e5c31af7Sopenharmony_ci { out0 = val.a; 3437e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3438e5c31af7Sopenharmony_ci } 3439e5c31af7Sopenharmony_ci "" 3440e5c31af7Sopenharmony_ci end 3441e5c31af7Sopenharmony_ci 3442e5c31af7Sopenharmony_ci case precision_conflict_3 3443e5c31af7Sopenharmony_ci version 300 es 3444e5c31af7Sopenharmony_ci desc "Vertex side struct has lowp, fragment side struct mediump." 3445e5c31af7Sopenharmony_ci expect link_fail 3446e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 3447e5c31af7Sopenharmony_ci vertex "" 3448e5c31af7Sopenharmony_ci #version 300 es 3449e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3450e5c31af7Sopenharmony_ci struct Struct {lowp float a;}; 3451e5c31af7Sopenharmony_ci uniform Struct val; 3452e5c31af7Sopenharmony_ci out mediump float res; 3453e5c31af7Sopenharmony_ci void main() 3454e5c31af7Sopenharmony_ci { 3455e5c31af7Sopenharmony_ci res = val.a; 3456e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3457e5c31af7Sopenharmony_ci } 3458e5c31af7Sopenharmony_ci "" 3459e5c31af7Sopenharmony_ci fragment "" 3460e5c31af7Sopenharmony_ci #version 300 es 3461e5c31af7Sopenharmony_ci precision mediump float; 3462e5c31af7Sopenharmony_ci struct Struct {mediump float a;}; 3463e5c31af7Sopenharmony_ci uniform Struct val; 3464e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3465e5c31af7Sopenharmony_ci in mediump float res; 3466e5c31af7Sopenharmony_ci void main() 3467e5c31af7Sopenharmony_ci { out0 = val.a; 3468e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3469e5c31af7Sopenharmony_ci } 3470e5c31af7Sopenharmony_ci "" 3471e5c31af7Sopenharmony_ci end 3472e5c31af7Sopenharmony_ci 3473e5c31af7Sopenharmony_ci case precision_conflict_4 3474e5c31af7Sopenharmony_ci version 300 es 3475e5c31af7Sopenharmony_ci desc "Vertex side struct has lowp, fragment side struct implicit mediump." 3476e5c31af7Sopenharmony_ci expect link_fail 3477e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 3478e5c31af7Sopenharmony_ci vertex "" 3479e5c31af7Sopenharmony_ci #version 300 es 3480e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3481e5c31af7Sopenharmony_ci struct Struct {lowp float a;}; 3482e5c31af7Sopenharmony_ci uniform Struct val; 3483e5c31af7Sopenharmony_ci out mediump float res; 3484e5c31af7Sopenharmony_ci void main() 3485e5c31af7Sopenharmony_ci { 3486e5c31af7Sopenharmony_ci res = val.a; 3487e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3488e5c31af7Sopenharmony_ci } 3489e5c31af7Sopenharmony_ci "" 3490e5c31af7Sopenharmony_ci fragment "" 3491e5c31af7Sopenharmony_ci #version 300 es 3492e5c31af7Sopenharmony_ci precision mediump float; 3493e5c31af7Sopenharmony_ci struct Struct {float a;}; 3494e5c31af7Sopenharmony_ci uniform Struct val; 3495e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3496e5c31af7Sopenharmony_ci in mediump float res; 3497e5c31af7Sopenharmony_ci void main() 3498e5c31af7Sopenharmony_ci { out0 = val.a; 3499e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3500e5c31af7Sopenharmony_ci } 3501e5c31af7Sopenharmony_ci "" 3502e5c31af7Sopenharmony_ci end 3503e5c31af7Sopenharmony_ci 3504e5c31af7Sopenharmony_ci case light_struct_highp 3505e5c31af7Sopenharmony_ci version 300 es 3506e5c31af7Sopenharmony_ci desc "Complex Light struct from use case tests." 3507e5c31af7Sopenharmony_ci values { 3508e5c31af7Sopenharmony_ci uniform float val.constantAttenuation = 1.0; 3509e5c31af7Sopenharmony_ci uniform float val.quadraticAttenuation = 1.0; 3510e5c31af7Sopenharmony_ci output float out0 = 2.0; 3511e5c31af7Sopenharmony_ci } 3512e5c31af7Sopenharmony_ci vertex "" 3513e5c31af7Sopenharmony_ci #version 300 es 3514e5c31af7Sopenharmony_ci struct Light 3515e5c31af7Sopenharmony_ci { 3516e5c31af7Sopenharmony_ci mediump vec3 color; 3517e5c31af7Sopenharmony_ci highp vec4 position; 3518e5c31af7Sopenharmony_ci highp vec3 direction; 3519e5c31af7Sopenharmony_ci mediump float constantAttenuation; 3520e5c31af7Sopenharmony_ci mediump float linearAttenuation; 3521e5c31af7Sopenharmony_ci mediump float quadraticAttenuation; 3522e5c31af7Sopenharmony_ci }; 3523e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3524e5c31af7Sopenharmony_ci uniform Light val; 3525e5c31af7Sopenharmony_ci out mediump float res; 3526e5c31af7Sopenharmony_ci void main() 3527e5c31af7Sopenharmony_ci { 3528e5c31af7Sopenharmony_ci res = val.constantAttenuation; 3529e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3530e5c31af7Sopenharmony_ci } 3531e5c31af7Sopenharmony_ci "" 3532e5c31af7Sopenharmony_ci fragment "" 3533e5c31af7Sopenharmony_ci #version 300 es 3534e5c31af7Sopenharmony_ci precision mediump float; 3535e5c31af7Sopenharmony_ci struct Light 3536e5c31af7Sopenharmony_ci { 3537e5c31af7Sopenharmony_ci mediump vec3 color; 3538e5c31af7Sopenharmony_ci highp vec4 position; 3539e5c31af7Sopenharmony_ci highp vec3 direction; 3540e5c31af7Sopenharmony_ci mediump float constantAttenuation; 3541e5c31af7Sopenharmony_ci mediump float linearAttenuation; 3542e5c31af7Sopenharmony_ci mediump float quadraticAttenuation; 3543e5c31af7Sopenharmony_ci }; 3544e5c31af7Sopenharmony_ci struct Struct {float a;}; 3545e5c31af7Sopenharmony_ci uniform Light val; 3546e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3547e5c31af7Sopenharmony_ci in mediump float res; 3548e5c31af7Sopenharmony_ci void main() 3549e5c31af7Sopenharmony_ci { 3550e5c31af7Sopenharmony_ci out0 = res + val.quadraticAttenuation; 3551e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3552e5c31af7Sopenharmony_ci } 3553e5c31af7Sopenharmony_ci "" 3554e5c31af7Sopenharmony_ci end 3555e5c31af7Sopenharmony_ci 3556e5c31af7Sopenharmony_ci case light_struct_mediump 3557e5c31af7Sopenharmony_ci version 300 es 3558e5c31af7Sopenharmony_ci desc "Complex Light struct from use case tests, without highp usage" 3559e5c31af7Sopenharmony_ci values { 3560e5c31af7Sopenharmony_ci uniform float val.constantAttenuation = 1.0; 3561e5c31af7Sopenharmony_ci uniform float val.quadraticAttenuation = 1.0; 3562e5c31af7Sopenharmony_ci output float out0 = 2.0; 3563e5c31af7Sopenharmony_ci } 3564e5c31af7Sopenharmony_ci vertex "" 3565e5c31af7Sopenharmony_ci #version 300 es 3566e5c31af7Sopenharmony_ci struct Light 3567e5c31af7Sopenharmony_ci { 3568e5c31af7Sopenharmony_ci mediump vec3 color; 3569e5c31af7Sopenharmony_ci mediump vec4 position; 3570e5c31af7Sopenharmony_ci mediump vec3 direction; 3571e5c31af7Sopenharmony_ci mediump float constantAttenuation; 3572e5c31af7Sopenharmony_ci mediump float linearAttenuation; 3573e5c31af7Sopenharmony_ci mediump float quadraticAttenuation; 3574e5c31af7Sopenharmony_ci }; 3575e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3576e5c31af7Sopenharmony_ci uniform Light val; 3577e5c31af7Sopenharmony_ci out mediump float res; 3578e5c31af7Sopenharmony_ci void main() 3579e5c31af7Sopenharmony_ci { 3580e5c31af7Sopenharmony_ci res = val.constantAttenuation; 3581e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3582e5c31af7Sopenharmony_ci } 3583e5c31af7Sopenharmony_ci "" 3584e5c31af7Sopenharmony_ci fragment "" 3585e5c31af7Sopenharmony_ci #version 300 es 3586e5c31af7Sopenharmony_ci precision mediump float; 3587e5c31af7Sopenharmony_ci struct Light 3588e5c31af7Sopenharmony_ci { 3589e5c31af7Sopenharmony_ci mediump vec3 color; 3590e5c31af7Sopenharmony_ci mediump vec4 position; 3591e5c31af7Sopenharmony_ci mediump vec3 direction; 3592e5c31af7Sopenharmony_ci mediump float constantAttenuation; 3593e5c31af7Sopenharmony_ci mediump float linearAttenuation; 3594e5c31af7Sopenharmony_ci mediump float quadraticAttenuation; 3595e5c31af7Sopenharmony_ci }; 3596e5c31af7Sopenharmony_ci struct Struct {float a;}; 3597e5c31af7Sopenharmony_ci uniform Light val; 3598e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3599e5c31af7Sopenharmony_ci in mediump float res; 3600e5c31af7Sopenharmony_ci void main() 3601e5c31af7Sopenharmony_ci { 3602e5c31af7Sopenharmony_ci out0 = res + val.quadraticAttenuation; 3603e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 3604e5c31af7Sopenharmony_ci } 3605e5c31af7Sopenharmony_ci "" 3606e5c31af7Sopenharmony_ci end 3607e5c31af7Sopenharmony_ci end 3608e5c31af7Sopenharmony_ci 3609e5c31af7Sopenharmony_ci group block "Uniform blocks" 3610e5c31af7Sopenharmony_ci case type_mismatch 3611e5c31af7Sopenharmony_ci version 300 es 3612e5c31af7Sopenharmony_ci expect link_fail 3613e5c31af7Sopenharmony_ci vertex "" 3614e5c31af7Sopenharmony_ci #version 300 es 3615e5c31af7Sopenharmony_ci 3616e5c31af7Sopenharmony_ci uniform Block 3617e5c31af7Sopenharmony_ci { 3618e5c31af7Sopenharmony_ci highp vec4 val; 3619e5c31af7Sopenharmony_ci }; 3620e5c31af7Sopenharmony_ci 3621e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3622e5c31af7Sopenharmony_ci out mediump float res; 3623e5c31af7Sopenharmony_ci void main() 3624e5c31af7Sopenharmony_ci { 3625e5c31af7Sopenharmony_ci res = val.x; 3626e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3627e5c31af7Sopenharmony_ci } 3628e5c31af7Sopenharmony_ci "" 3629e5c31af7Sopenharmony_ci fragment "" 3630e5c31af7Sopenharmony_ci #version 300 es 3631e5c31af7Sopenharmony_ci 3632e5c31af7Sopenharmony_ci uniform Block 3633e5c31af7Sopenharmony_ci { 3634e5c31af7Sopenharmony_ci highp vec3 val; 3635e5c31af7Sopenharmony_ci }; 3636e5c31af7Sopenharmony_ci 3637e5c31af7Sopenharmony_ci precision mediump float; 3638e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3639e5c31af7Sopenharmony_ci in mediump float res; 3640e5c31af7Sopenharmony_ci void main() 3641e5c31af7Sopenharmony_ci { 3642e5c31af7Sopenharmony_ci dEQP_FragColor = vec4(val, 1.0); 3643e5c31af7Sopenharmony_ci } 3644e5c31af7Sopenharmony_ci "" 3645e5c31af7Sopenharmony_ci end 3646e5c31af7Sopenharmony_ci 3647e5c31af7Sopenharmony_ci case members_mismatch 3648e5c31af7Sopenharmony_ci version 300 es 3649e5c31af7Sopenharmony_ci expect link_fail 3650e5c31af7Sopenharmony_ci vertex "" 3651e5c31af7Sopenharmony_ci #version 300 es 3652e5c31af7Sopenharmony_ci 3653e5c31af7Sopenharmony_ci uniform Block 3654e5c31af7Sopenharmony_ci { 3655e5c31af7Sopenharmony_ci highp vec4 val; 3656e5c31af7Sopenharmony_ci }; 3657e5c31af7Sopenharmony_ci 3658e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3659e5c31af7Sopenharmony_ci out mediump float res; 3660e5c31af7Sopenharmony_ci void main() 3661e5c31af7Sopenharmony_ci { 3662e5c31af7Sopenharmony_ci res = val.x; 3663e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3664e5c31af7Sopenharmony_ci } 3665e5c31af7Sopenharmony_ci "" 3666e5c31af7Sopenharmony_ci fragment "" 3667e5c31af7Sopenharmony_ci #version 300 es 3668e5c31af7Sopenharmony_ci 3669e5c31af7Sopenharmony_ci uniform Block 3670e5c31af7Sopenharmony_ci { 3671e5c31af7Sopenharmony_ci highp vec4 val; 3672e5c31af7Sopenharmony_ci lowp uint u; 3673e5c31af7Sopenharmony_ci }; 3674e5c31af7Sopenharmony_ci 3675e5c31af7Sopenharmony_ci precision mediump float; 3676e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3677e5c31af7Sopenharmony_ci in mediump float res; 3678e5c31af7Sopenharmony_ci void main() 3679e5c31af7Sopenharmony_ci { 3680e5c31af7Sopenharmony_ci dEQP_FragColor = vec4(val); 3681e5c31af7Sopenharmony_ci } 3682e5c31af7Sopenharmony_ci "" 3683e5c31af7Sopenharmony_ci end 3684e5c31af7Sopenharmony_ci 3685e5c31af7Sopenharmony_ci case layout_qualifier_mismatch_1 3686e5c31af7Sopenharmony_ci version 300 es 3687e5c31af7Sopenharmony_ci expect link_fail 3688e5c31af7Sopenharmony_ci vertex "" 3689e5c31af7Sopenharmony_ci #version 300 es 3690e5c31af7Sopenharmony_ci 3691e5c31af7Sopenharmony_ci layout(std140) uniform Block 3692e5c31af7Sopenharmony_ci { 3693e5c31af7Sopenharmony_ci highp vec4 val; 3694e5c31af7Sopenharmony_ci }; 3695e5c31af7Sopenharmony_ci 3696e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3697e5c31af7Sopenharmony_ci out mediump float res; 3698e5c31af7Sopenharmony_ci void main() 3699e5c31af7Sopenharmony_ci { 3700e5c31af7Sopenharmony_ci res = val.x; 3701e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3702e5c31af7Sopenharmony_ci } 3703e5c31af7Sopenharmony_ci "" 3704e5c31af7Sopenharmony_ci fragment "" 3705e5c31af7Sopenharmony_ci #version 300 es 3706e5c31af7Sopenharmony_ci 3707e5c31af7Sopenharmony_ci uniform Block 3708e5c31af7Sopenharmony_ci { 3709e5c31af7Sopenharmony_ci highp vec4 val; 3710e5c31af7Sopenharmony_ci }; 3711e5c31af7Sopenharmony_ci 3712e5c31af7Sopenharmony_ci precision mediump float; 3713e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3714e5c31af7Sopenharmony_ci in mediump float res; 3715e5c31af7Sopenharmony_ci void main() 3716e5c31af7Sopenharmony_ci { 3717e5c31af7Sopenharmony_ci dEQP_FragColor = vec4(val); 3718e5c31af7Sopenharmony_ci } 3719e5c31af7Sopenharmony_ci "" 3720e5c31af7Sopenharmony_ci end 3721e5c31af7Sopenharmony_ci 3722e5c31af7Sopenharmony_ci case layout_qualifier_mismatch_2 3723e5c31af7Sopenharmony_ci version 300 es 3724e5c31af7Sopenharmony_ci expect link_fail 3725e5c31af7Sopenharmony_ci vertex "" 3726e5c31af7Sopenharmony_ci #version 300 es 3727e5c31af7Sopenharmony_ci 3728e5c31af7Sopenharmony_ci layout(shared) uniform Block 3729e5c31af7Sopenharmony_ci { 3730e5c31af7Sopenharmony_ci highp vec4 val; 3731e5c31af7Sopenharmony_ci }; 3732e5c31af7Sopenharmony_ci 3733e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3734e5c31af7Sopenharmony_ci out mediump float res; 3735e5c31af7Sopenharmony_ci void main() 3736e5c31af7Sopenharmony_ci { 3737e5c31af7Sopenharmony_ci res = val.x; 3738e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3739e5c31af7Sopenharmony_ci } 3740e5c31af7Sopenharmony_ci "" 3741e5c31af7Sopenharmony_ci fragment "" 3742e5c31af7Sopenharmony_ci #version 300 es 3743e5c31af7Sopenharmony_ci 3744e5c31af7Sopenharmony_ci layout(packed) uniform Block 3745e5c31af7Sopenharmony_ci { 3746e5c31af7Sopenharmony_ci highp vec4 val; 3747e5c31af7Sopenharmony_ci }; 3748e5c31af7Sopenharmony_ci 3749e5c31af7Sopenharmony_ci precision mediump float; 3750e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3751e5c31af7Sopenharmony_ci in mediump float res; 3752e5c31af7Sopenharmony_ci void main() 3753e5c31af7Sopenharmony_ci { 3754e5c31af7Sopenharmony_ci dEQP_FragColor = vec4(val); 3755e5c31af7Sopenharmony_ci } 3756e5c31af7Sopenharmony_ci "" 3757e5c31af7Sopenharmony_ci end 3758e5c31af7Sopenharmony_ci 3759e5c31af7Sopenharmony_ci case layout_qualifier_mismatch_3 3760e5c31af7Sopenharmony_ci version 300 es 3761e5c31af7Sopenharmony_ci expect link_fail 3762e5c31af7Sopenharmony_ci vertex "" 3763e5c31af7Sopenharmony_ci #version 300 es 3764e5c31af7Sopenharmony_ci 3765e5c31af7Sopenharmony_ci layout(row_major) uniform Block 3766e5c31af7Sopenharmony_ci { 3767e5c31af7Sopenharmony_ci highp vec4 val; 3768e5c31af7Sopenharmony_ci }; 3769e5c31af7Sopenharmony_ci 3770e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3771e5c31af7Sopenharmony_ci out mediump float res; 3772e5c31af7Sopenharmony_ci void main() 3773e5c31af7Sopenharmony_ci { 3774e5c31af7Sopenharmony_ci res = val.x; 3775e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3776e5c31af7Sopenharmony_ci } 3777e5c31af7Sopenharmony_ci "" 3778e5c31af7Sopenharmony_ci fragment "" 3779e5c31af7Sopenharmony_ci #version 300 es 3780e5c31af7Sopenharmony_ci 3781e5c31af7Sopenharmony_ci layout(column_major) uniform Block 3782e5c31af7Sopenharmony_ci { 3783e5c31af7Sopenharmony_ci highp vec4 val; 3784e5c31af7Sopenharmony_ci }; 3785e5c31af7Sopenharmony_ci 3786e5c31af7Sopenharmony_ci precision mediump float; 3787e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3788e5c31af7Sopenharmony_ci in mediump float res; 3789e5c31af7Sopenharmony_ci void main() 3790e5c31af7Sopenharmony_ci { 3791e5c31af7Sopenharmony_ci dEQP_FragColor = vec4(val); 3792e5c31af7Sopenharmony_ci } 3793e5c31af7Sopenharmony_ci "" 3794e5c31af7Sopenharmony_ci end 3795e5c31af7Sopenharmony_ci 3796e5c31af7Sopenharmony_ci case layout_qualifier_mismatch_4 3797e5c31af7Sopenharmony_ci version 300 es 3798e5c31af7Sopenharmony_ci expect link_fail 3799e5c31af7Sopenharmony_ci vertex "" 3800e5c31af7Sopenharmony_ci #version 300 es 3801e5c31af7Sopenharmony_ci 3802e5c31af7Sopenharmony_ci layout(row_major) uniform Block 3803e5c31af7Sopenharmony_ci { 3804e5c31af7Sopenharmony_ci highp mat3 val; 3805e5c31af7Sopenharmony_ci }; 3806e5c31af7Sopenharmony_ci 3807e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3808e5c31af7Sopenharmony_ci out mediump float res; 3809e5c31af7Sopenharmony_ci void main() 3810e5c31af7Sopenharmony_ci { 3811e5c31af7Sopenharmony_ci res = val[0][1]; 3812e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3813e5c31af7Sopenharmony_ci } 3814e5c31af7Sopenharmony_ci "" 3815e5c31af7Sopenharmony_ci fragment "" 3816e5c31af7Sopenharmony_ci #version 300 es 3817e5c31af7Sopenharmony_ci 3818e5c31af7Sopenharmony_ci layout(column_major) uniform Block 3819e5c31af7Sopenharmony_ci { 3820e5c31af7Sopenharmony_ci highp mat3 val; 3821e5c31af7Sopenharmony_ci }; 3822e5c31af7Sopenharmony_ci 3823e5c31af7Sopenharmony_ci precision mediump float; 3824e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3825e5c31af7Sopenharmony_ci in mediump float res; 3826e5c31af7Sopenharmony_ci void main() 3827e5c31af7Sopenharmony_ci { 3828e5c31af7Sopenharmony_ci dEQP_FragColor = vec4(val[2], 1.0); 3829e5c31af7Sopenharmony_ci } 3830e5c31af7Sopenharmony_ci "" 3831e5c31af7Sopenharmony_ci end 3832e5c31af7Sopenharmony_ci 3833e5c31af7Sopenharmony_ci case layout_qualifier_mismatch_5 3834e5c31af7Sopenharmony_ci version 300 es 3835e5c31af7Sopenharmony_ci expect link_fail 3836e5c31af7Sopenharmony_ci vertex "" 3837e5c31af7Sopenharmony_ci #version 300 es 3838e5c31af7Sopenharmony_ci 3839e5c31af7Sopenharmony_ci uniform Block 3840e5c31af7Sopenharmony_ci { 3841e5c31af7Sopenharmony_ci layout(row_major) uniform highp mat3 val; 3842e5c31af7Sopenharmony_ci }; 3843e5c31af7Sopenharmony_ci 3844e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 3845e5c31af7Sopenharmony_ci out mediump float res; 3846e5c31af7Sopenharmony_ci void main() 3847e5c31af7Sopenharmony_ci { 3848e5c31af7Sopenharmony_ci res = val[0][1]; 3849e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 3850e5c31af7Sopenharmony_ci } 3851e5c31af7Sopenharmony_ci "" 3852e5c31af7Sopenharmony_ci fragment "" 3853e5c31af7Sopenharmony_ci #version 300 es 3854e5c31af7Sopenharmony_ci 3855e5c31af7Sopenharmony_ci uniform Block 3856e5c31af7Sopenharmony_ci { 3857e5c31af7Sopenharmony_ci layout(column_major) uniform highp mat3 val; 3858e5c31af7Sopenharmony_ci }; 3859e5c31af7Sopenharmony_ci 3860e5c31af7Sopenharmony_ci precision mediump float; 3861e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 3862e5c31af7Sopenharmony_ci in mediump float res; 3863e5c31af7Sopenharmony_ci void main() 3864e5c31af7Sopenharmony_ci { 3865e5c31af7Sopenharmony_ci dEQP_FragColor = vec4(val[2], 1.0); 3866e5c31af7Sopenharmony_ci } 3867e5c31af7Sopenharmony_ci "" 3868e5c31af7Sopenharmony_ci end 3869e5c31af7Sopenharmony_ci end 3870e5c31af7Sopenharmony_ciend 3871