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