1e5c31af7Sopenharmony_cigroup struct "Uniform structs" 2e5c31af7Sopenharmony_ci # Struct linkage handling 3e5c31af7Sopenharmony_ci case basic 4e5c31af7Sopenharmony_ci version 450 5e5c31af7Sopenharmony_ci desc "Same uniform struct in both shaders" 6e5c31af7Sopenharmony_ci values { 7e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 8e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 9e5c31af7Sopenharmony_ci output float out0 = 3.0; 10e5c31af7Sopenharmony_ci } 11e5c31af7Sopenharmony_ci vertex "" 12e5c31af7Sopenharmony_ci #version 450 13e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 14e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 15e5c31af7Sopenharmony_ci uniform Struct val; 16e5c31af7Sopenharmony_ci out mediump float dummy; 17e5c31af7Sopenharmony_ci void main() 18e5c31af7Sopenharmony_ci { 19e5c31af7Sopenharmony_ci dummy = val.a + val.b; 20e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 21e5c31af7Sopenharmony_ci } 22e5c31af7Sopenharmony_ci "" 23e5c31af7Sopenharmony_ci fragment "" 24e5c31af7Sopenharmony_ci #version 450 25e5c31af7Sopenharmony_ci precision mediump float; 26e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 27e5c31af7Sopenharmony_ci uniform Struct val; 28e5c31af7Sopenharmony_ci in mediump float dummy; 29e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 30e5c31af7Sopenharmony_ci void main() 31e5c31af7Sopenharmony_ci { 32e5c31af7Sopenharmony_ci out0 = val.b + val.a; 33e5c31af7Sopenharmony_ci out0 = out0 + dummy; 34e5c31af7Sopenharmony_ci out0 = out0 - dummy; 35e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 36e5c31af7Sopenharmony_ci } 37e5c31af7Sopenharmony_ci "" 38e5c31af7Sopenharmony_ci end 39e5c31af7Sopenharmony_ci 40e5c31af7Sopenharmony_ci case vertex_only 41e5c31af7Sopenharmony_ci version 450 42e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in vertex." 43e5c31af7Sopenharmony_ci values { 44e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 45e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 46e5c31af7Sopenharmony_ci output float out0 = 3.0; 47e5c31af7Sopenharmony_ci } 48e5c31af7Sopenharmony_ci vertex "" 49e5c31af7Sopenharmony_ci #version 450 50e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 51e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 52e5c31af7Sopenharmony_ci uniform Struct val; 53e5c31af7Sopenharmony_ci out mediump float res; 54e5c31af7Sopenharmony_ci void main() 55e5c31af7Sopenharmony_ci { 56e5c31af7Sopenharmony_ci res = val.a + val.b; 57e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 58e5c31af7Sopenharmony_ci } 59e5c31af7Sopenharmony_ci "" 60e5c31af7Sopenharmony_ci fragment "" 61e5c31af7Sopenharmony_ci #version 450 62e5c31af7Sopenharmony_ci precision mediump float; 63e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 64e5c31af7Sopenharmony_ci uniform Struct val; 65e5c31af7Sopenharmony_ci in mediump float res; 66e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 67e5c31af7Sopenharmony_ci void main() 68e5c31af7Sopenharmony_ci { 69e5c31af7Sopenharmony_ci out0 = res; 70e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 71e5c31af7Sopenharmony_ci } 72e5c31af7Sopenharmony_ci "" 73e5c31af7Sopenharmony_ci end 74e5c31af7Sopenharmony_ci 75e5c31af7Sopenharmony_ci case fragment_only 76e5c31af7Sopenharmony_ci version 450 77e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in fragment." 78e5c31af7Sopenharmony_ci values { 79e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 80e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 81e5c31af7Sopenharmony_ci output float out0 = 3.0; 82e5c31af7Sopenharmony_ci } 83e5c31af7Sopenharmony_ci vertex "" 84e5c31af7Sopenharmony_ci #version 450 85e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 86e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 87e5c31af7Sopenharmony_ci uniform Struct val; 88e5c31af7Sopenharmony_ci void main() 89e5c31af7Sopenharmony_ci { 90e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 91e5c31af7Sopenharmony_ci } 92e5c31af7Sopenharmony_ci "" 93e5c31af7Sopenharmony_ci fragment "" 94e5c31af7Sopenharmony_ci #version 450 95e5c31af7Sopenharmony_ci precision mediump float; 96e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 97e5c31af7Sopenharmony_ci uniform Struct val; 98e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 99e5c31af7Sopenharmony_ci void main() 100e5c31af7Sopenharmony_ci { 101e5c31af7Sopenharmony_ci out0 = val.a + val.b; 102e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 103e5c31af7Sopenharmony_ci } 104e5c31af7Sopenharmony_ci "" 105e5c31af7Sopenharmony_ci end 106e5c31af7Sopenharmony_ci 107e5c31af7Sopenharmony_ci case partial 108e5c31af7Sopenharmony_ci version 450 109e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both." 110e5c31af7Sopenharmony_ci values { 111e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 112e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 113e5c31af7Sopenharmony_ci output float out0 = 3.0; 114e5c31af7Sopenharmony_ci } 115e5c31af7Sopenharmony_ci vertex "" 116e5c31af7Sopenharmony_ci #version 450 117e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 118e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 119e5c31af7Sopenharmony_ci uniform Struct val; 120e5c31af7Sopenharmony_ci out mediump float res; 121e5c31af7Sopenharmony_ci void main() 122e5c31af7Sopenharmony_ci { 123e5c31af7Sopenharmony_ci res = val.a; 124e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 125e5c31af7Sopenharmony_ci } 126e5c31af7Sopenharmony_ci "" 127e5c31af7Sopenharmony_ci fragment "" 128e5c31af7Sopenharmony_ci #version 450 129e5c31af7Sopenharmony_ci precision mediump float; 130e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 131e5c31af7Sopenharmony_ci uniform Struct val; 132e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 133e5c31af7Sopenharmony_ci in mediump float res; 134e5c31af7Sopenharmony_ci void main() 135e5c31af7Sopenharmony_ci { 136e5c31af7Sopenharmony_ci out0 = res + val.b; 137e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 138e5c31af7Sopenharmony_ci } 139e5c31af7Sopenharmony_ci "" 140e5c31af7Sopenharmony_ci end 141e5c31af7Sopenharmony_ci 142e5c31af7Sopenharmony_ci case vec4 143e5c31af7Sopenharmony_ci version 450 144e5c31af7Sopenharmony_ci desc "Same uniform struct in both shaders. Datatype vec4" 145e5c31af7Sopenharmony_ci values { 146e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 147e5c31af7Sopenharmony_ci uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 148e5c31af7Sopenharmony_ci output float out0 = 3.0; 149e5c31af7Sopenharmony_ci } 150e5c31af7Sopenharmony_ci vertex "" 151e5c31af7Sopenharmony_ci #version 450 152e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 153e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 154e5c31af7Sopenharmony_ci uniform Struct val; 155e5c31af7Sopenharmony_ci out mediump float dummy; 156e5c31af7Sopenharmony_ci void main() 157e5c31af7Sopenharmony_ci { 158e5c31af7Sopenharmony_ci dummy = val.a.x + val.b.y; 159e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 160e5c31af7Sopenharmony_ci } 161e5c31af7Sopenharmony_ci "" 162e5c31af7Sopenharmony_ci fragment "" 163e5c31af7Sopenharmony_ci #version 450 164e5c31af7Sopenharmony_ci precision mediump float; 165e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 166e5c31af7Sopenharmony_ci uniform Struct val; 167e5c31af7Sopenharmony_ci in mediump float dummy; 168e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 169e5c31af7Sopenharmony_ci void main() 170e5c31af7Sopenharmony_ci { 171e5c31af7Sopenharmony_ci out0 = val.b.y + val.a.x; 172e5c31af7Sopenharmony_ci out0 = out0 + dummy; 173e5c31af7Sopenharmony_ci out0 = out0 - dummy; 174e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 175e5c31af7Sopenharmony_ci } 176e5c31af7Sopenharmony_ci "" 177e5c31af7Sopenharmony_ci end 178e5c31af7Sopenharmony_ci 179e5c31af7Sopenharmony_ci case vertex_only_vec4 180e5c31af7Sopenharmony_ci version 450 181e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in vertex. Datatype vec4 " 182e5c31af7Sopenharmony_ci values { 183e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 184e5c31af7Sopenharmony_ci uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 185e5c31af7Sopenharmony_ci output float out0 = 3.0; 186e5c31af7Sopenharmony_ci } 187e5c31af7Sopenharmony_ci vertex "" 188e5c31af7Sopenharmony_ci #version 450 189e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 190e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 191e5c31af7Sopenharmony_ci uniform Struct val; 192e5c31af7Sopenharmony_ci out mediump float res; 193e5c31af7Sopenharmony_ci void main() 194e5c31af7Sopenharmony_ci { 195e5c31af7Sopenharmony_ci res = val.a.x + val.b.y; 196e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 197e5c31af7Sopenharmony_ci } 198e5c31af7Sopenharmony_ci "" 199e5c31af7Sopenharmony_ci fragment "" 200e5c31af7Sopenharmony_ci #version 450 201e5c31af7Sopenharmony_ci precision mediump float; 202e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 203e5c31af7Sopenharmony_ci uniform Struct val; 204e5c31af7Sopenharmony_ci in mediump float res; 205e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 206e5c31af7Sopenharmony_ci void main() 207e5c31af7Sopenharmony_ci { out0 = res; 208e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 209e5c31af7Sopenharmony_ci } 210e5c31af7Sopenharmony_ci "" 211e5c31af7Sopenharmony_ci end 212e5c31af7Sopenharmony_ci 213e5c31af7Sopenharmony_ci case fragment_only_vec4 214e5c31af7Sopenharmony_ci version 450 215e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in fragment. Datatype vec4" 216e5c31af7Sopenharmony_ci values { 217e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 218e5c31af7Sopenharmony_ci uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 219e5c31af7Sopenharmony_ci output float out0 = 3.0; 220e5c31af7Sopenharmony_ci } 221e5c31af7Sopenharmony_ci vertex "" 222e5c31af7Sopenharmony_ci #version 450 223e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 224e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 225e5c31af7Sopenharmony_ci uniform Struct val; 226e5c31af7Sopenharmony_ci void main() 227e5c31af7Sopenharmony_ci { 228e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 229e5c31af7Sopenharmony_ci } 230e5c31af7Sopenharmony_ci "" 231e5c31af7Sopenharmony_ci fragment "" 232e5c31af7Sopenharmony_ci #version 450 233e5c31af7Sopenharmony_ci precision mediump float; 234e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 235e5c31af7Sopenharmony_ci uniform Struct val; 236e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 237e5c31af7Sopenharmony_ci void main() 238e5c31af7Sopenharmony_ci { out0 = val.a.x + val.b.y; 239e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 240e5c31af7Sopenharmony_ci } 241e5c31af7Sopenharmony_ci "" 242e5c31af7Sopenharmony_ci end 243e5c31af7Sopenharmony_ci 244e5c31af7Sopenharmony_ci case partial_vec4 245e5c31af7Sopenharmony_ci version 450 246e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4" 247e5c31af7Sopenharmony_ci values { 248e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 249e5c31af7Sopenharmony_ci uniform vec4 val.b = vec4(1.0, 2.0, 3.0, 4.0); 250e5c31af7Sopenharmony_ci output float out0 = 3.0; 251e5c31af7Sopenharmony_ci } 252e5c31af7Sopenharmony_ci vertex "" 253e5c31af7Sopenharmony_ci #version 450 254e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 255e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 256e5c31af7Sopenharmony_ci uniform Struct val; 257e5c31af7Sopenharmony_ci out mediump float res; 258e5c31af7Sopenharmony_ci void main() 259e5c31af7Sopenharmony_ci { 260e5c31af7Sopenharmony_ci res = val.a.x; 261e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 262e5c31af7Sopenharmony_ci } 263e5c31af7Sopenharmony_ci "" 264e5c31af7Sopenharmony_ci fragment "" 265e5c31af7Sopenharmony_ci #version 450 266e5c31af7Sopenharmony_ci precision mediump float; 267e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec4 b;}; 268e5c31af7Sopenharmony_ci uniform Struct val; 269e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 270e5c31af7Sopenharmony_ci in mediump float res; 271e5c31af7Sopenharmony_ci void main() 272e5c31af7Sopenharmony_ci { out0 = res + val.b.y; 273e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 274e5c31af7Sopenharmony_ci } 275e5c31af7Sopenharmony_ci "" 276e5c31af7Sopenharmony_ci end 277e5c31af7Sopenharmony_ci 278e5c31af7Sopenharmony_ci case vec4_vec3 279e5c31af7Sopenharmony_ci version 450 280e5c31af7Sopenharmony_ci desc "Same uniform struct in both shaders. Datatype vec4 and vec3" 281e5c31af7Sopenharmony_ci values { 282e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 283e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 284e5c31af7Sopenharmony_ci output float out0 = 3.0; 285e5c31af7Sopenharmony_ci } 286e5c31af7Sopenharmony_ci vertex "" 287e5c31af7Sopenharmony_ci #version 450 288e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 289e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 290e5c31af7Sopenharmony_ci uniform Struct val; 291e5c31af7Sopenharmony_ci out mediump float dummy; 292e5c31af7Sopenharmony_ci void main() 293e5c31af7Sopenharmony_ci { 294e5c31af7Sopenharmony_ci dummy = val.a.x + val.b.y; 295e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 296e5c31af7Sopenharmony_ci } 297e5c31af7Sopenharmony_ci "" 298e5c31af7Sopenharmony_ci fragment "" 299e5c31af7Sopenharmony_ci #version 450 300e5c31af7Sopenharmony_ci precision mediump float; 301e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 302e5c31af7Sopenharmony_ci uniform Struct val; 303e5c31af7Sopenharmony_ci in mediump float dummy; 304e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 305e5c31af7Sopenharmony_ci void main() 306e5c31af7Sopenharmony_ci { out0 = val.b.y + val.a.x; 307e5c31af7Sopenharmony_ci out0 = out0 + dummy; 308e5c31af7Sopenharmony_ci out0 = out0 - dummy; 309e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 310e5c31af7Sopenharmony_ci } 311e5c31af7Sopenharmony_ci "" 312e5c31af7Sopenharmony_ci end 313e5c31af7Sopenharmony_ci 314e5c31af7Sopenharmony_ci case vertex_only_vec4_vec3 315e5c31af7Sopenharmony_ci version 450 316e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and vec3" 317e5c31af7Sopenharmony_ci values { 318e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 319e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 320e5c31af7Sopenharmony_ci output float out0 = 3.0; 321e5c31af7Sopenharmony_ci } 322e5c31af7Sopenharmony_ci vertex "" 323e5c31af7Sopenharmony_ci #version 450 324e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 325e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 326e5c31af7Sopenharmony_ci uniform Struct val; 327e5c31af7Sopenharmony_ci out mediump float res; 328e5c31af7Sopenharmony_ci void main() 329e5c31af7Sopenharmony_ci { 330e5c31af7Sopenharmony_ci res = val.a.x + val.b.y; 331e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 332e5c31af7Sopenharmony_ci } 333e5c31af7Sopenharmony_ci "" 334e5c31af7Sopenharmony_ci fragment "" 335e5c31af7Sopenharmony_ci #version 450 336e5c31af7Sopenharmony_ci precision mediump float; 337e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 338e5c31af7Sopenharmony_ci uniform Struct val; 339e5c31af7Sopenharmony_ci in mediump float res; 340e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 341e5c31af7Sopenharmony_ci void main() 342e5c31af7Sopenharmony_ci { out0 = res; 343e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 344e5c31af7Sopenharmony_ci } 345e5c31af7Sopenharmony_ci "" 346e5c31af7Sopenharmony_ci end 347e5c31af7Sopenharmony_ci 348e5c31af7Sopenharmony_ci case fragment_only_vec4_vec3 349e5c31af7Sopenharmony_ci version 450 350e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and vec3" 351e5c31af7Sopenharmony_ci values { 352e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 353e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 354e5c31af7Sopenharmony_ci output float out0 = 3.0; 355e5c31af7Sopenharmony_ci } 356e5c31af7Sopenharmony_ci vertex "" 357e5c31af7Sopenharmony_ci #version 450 358e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 359e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 360e5c31af7Sopenharmony_ci uniform Struct val; 361e5c31af7Sopenharmony_ci void main() 362e5c31af7Sopenharmony_ci { 363e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 364e5c31af7Sopenharmony_ci } 365e5c31af7Sopenharmony_ci "" 366e5c31af7Sopenharmony_ci fragment "" 367e5c31af7Sopenharmony_ci #version 450 368e5c31af7Sopenharmony_ci precision mediump float; 369e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 370e5c31af7Sopenharmony_ci uniform Struct val; 371e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 372e5c31af7Sopenharmony_ci void main() 373e5c31af7Sopenharmony_ci { out0 = val.a.x + val.b.y; 374e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 375e5c31af7Sopenharmony_ci } 376e5c31af7Sopenharmony_ci "" 377e5c31af7Sopenharmony_ci end 378e5c31af7Sopenharmony_ci 379e5c31af7Sopenharmony_ci case partial_vec4_vec3 380e5c31af7Sopenharmony_ci version 450 381e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4 and vec3" 382e5c31af7Sopenharmony_ci values { 383e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 384e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 385e5c31af7Sopenharmony_ci output float out0 = 3.0; 386e5c31af7Sopenharmony_ci } 387e5c31af7Sopenharmony_ci vertex "" 388e5c31af7Sopenharmony_ci #version 450 389e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 390e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 391e5c31af7Sopenharmony_ci uniform Struct val; 392e5c31af7Sopenharmony_ci out mediump float res; 393e5c31af7Sopenharmony_ci void main() 394e5c31af7Sopenharmony_ci { 395e5c31af7Sopenharmony_ci res = val.a.x; 396e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 397e5c31af7Sopenharmony_ci } 398e5c31af7Sopenharmony_ci "" 399e5c31af7Sopenharmony_ci fragment "" 400e5c31af7Sopenharmony_ci #version 450 401e5c31af7Sopenharmony_ci precision mediump float; 402e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump vec3 b;}; 403e5c31af7Sopenharmony_ci uniform Struct val; 404e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 405e5c31af7Sopenharmony_ci in mediump float res; 406e5c31af7Sopenharmony_ci void main() 407e5c31af7Sopenharmony_ci { out0 = res + val.b.y; 408e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 409e5c31af7Sopenharmony_ci } 410e5c31af7Sopenharmony_ci "" 411e5c31af7Sopenharmony_ci end 412e5c31af7Sopenharmony_ci 413e5c31af7Sopenharmony_ci case vec4_float 414e5c31af7Sopenharmony_ci version 450 415e5c31af7Sopenharmony_ci desc "Same uniform struct in both shaders. Datatype vec4 and float" 416e5c31af7Sopenharmony_ci values { 417e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 418e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 419e5c31af7Sopenharmony_ci output float out0 = 3.0; 420e5c31af7Sopenharmony_ci } 421e5c31af7Sopenharmony_ci vertex "" 422e5c31af7Sopenharmony_ci #version 450 423e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 424e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 425e5c31af7Sopenharmony_ci uniform Struct val; 426e5c31af7Sopenharmony_ci out mediump float dummy; 427e5c31af7Sopenharmony_ci void main() 428e5c31af7Sopenharmony_ci { 429e5c31af7Sopenharmony_ci dummy = val.a.x + val.b; 430e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 431e5c31af7Sopenharmony_ci } 432e5c31af7Sopenharmony_ci "" 433e5c31af7Sopenharmony_ci fragment "" 434e5c31af7Sopenharmony_ci #version 450 435e5c31af7Sopenharmony_ci precision mediump float; 436e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 437e5c31af7Sopenharmony_ci uniform Struct val; 438e5c31af7Sopenharmony_ci in mediump float dummy; 439e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 440e5c31af7Sopenharmony_ci void main() 441e5c31af7Sopenharmony_ci { out0 = val.b + val.a.x; 442e5c31af7Sopenharmony_ci out0 = out0 + dummy; 443e5c31af7Sopenharmony_ci out0 = out0 - dummy; 444e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 445e5c31af7Sopenharmony_ci } 446e5c31af7Sopenharmony_ci "" 447e5c31af7Sopenharmony_ci end 448e5c31af7Sopenharmony_ci 449e5c31af7Sopenharmony_ci case vertex_only_vec4_float 450e5c31af7Sopenharmony_ci version 450 451e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in vertex. Datatype vec4 and float" 452e5c31af7Sopenharmony_ci values { 453e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 454e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 455e5c31af7Sopenharmony_ci output float out0 = 3.0; 456e5c31af7Sopenharmony_ci } 457e5c31af7Sopenharmony_ci vertex "" 458e5c31af7Sopenharmony_ci #version 450 459e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 460e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 461e5c31af7Sopenharmony_ci uniform Struct val; 462e5c31af7Sopenharmony_ci out mediump float res; 463e5c31af7Sopenharmony_ci void main() 464e5c31af7Sopenharmony_ci { 465e5c31af7Sopenharmony_ci res = val.a.x + val.b; 466e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 467e5c31af7Sopenharmony_ci } 468e5c31af7Sopenharmony_ci "" 469e5c31af7Sopenharmony_ci fragment "" 470e5c31af7Sopenharmony_ci #version 450 471e5c31af7Sopenharmony_ci precision mediump float; 472e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 473e5c31af7Sopenharmony_ci uniform Struct val; 474e5c31af7Sopenharmony_ci in mediump float res; 475e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 476e5c31af7Sopenharmony_ci void main() 477e5c31af7Sopenharmony_ci { out0 = res; 478e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 479e5c31af7Sopenharmony_ci } 480e5c31af7Sopenharmony_ci "" 481e5c31af7Sopenharmony_ci end 482e5c31af7Sopenharmony_ci 483e5c31af7Sopenharmony_ci case fragment_only_vec4_float 484e5c31af7Sopenharmony_ci version 450 485e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used only in fragment. Datatype vec4 and float" 486e5c31af7Sopenharmony_ci values { 487e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 488e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 489e5c31af7Sopenharmony_ci output float out0 = 3.0; 490e5c31af7Sopenharmony_ci } 491e5c31af7Sopenharmony_ci vertex "" 492e5c31af7Sopenharmony_ci #version 450 493e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 494e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 495e5c31af7Sopenharmony_ci uniform Struct val; 496e5c31af7Sopenharmony_ci void main() 497e5c31af7Sopenharmony_ci { 498e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 499e5c31af7Sopenharmony_ci } 500e5c31af7Sopenharmony_ci "" 501e5c31af7Sopenharmony_ci fragment "" 502e5c31af7Sopenharmony_ci #version 450 503e5c31af7Sopenharmony_ci precision mediump float; 504e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 505e5c31af7Sopenharmony_ci uniform Struct val; 506e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 507e5c31af7Sopenharmony_ci void main() 508e5c31af7Sopenharmony_ci { out0 = val.a.x + val.b; 509e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 510e5c31af7Sopenharmony_ci } 511e5c31af7Sopenharmony_ci "" 512e5c31af7Sopenharmony_ci end 513e5c31af7Sopenharmony_ci 514e5c31af7Sopenharmony_ci case partial_vec4_float 515e5c31af7Sopenharmony_ci version 450 516e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4 and float" 517e5c31af7Sopenharmony_ci values { 518e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 519e5c31af7Sopenharmony_ci uniform float val.b = 2.0; 520e5c31af7Sopenharmony_ci output float out0 = 3.0; 521e5c31af7Sopenharmony_ci } 522e5c31af7Sopenharmony_ci vertex "" 523e5c31af7Sopenharmony_ci #version 450 524e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 525e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 526e5c31af7Sopenharmony_ci uniform Struct val; 527e5c31af7Sopenharmony_ci out mediump float res; 528e5c31af7Sopenharmony_ci void main() 529e5c31af7Sopenharmony_ci { 530e5c31af7Sopenharmony_ci res = val.a.x; 531e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 532e5c31af7Sopenharmony_ci } 533e5c31af7Sopenharmony_ci "" 534e5c31af7Sopenharmony_ci fragment "" 535e5c31af7Sopenharmony_ci #version 450 536e5c31af7Sopenharmony_ci precision mediump float; 537e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; mediump float b;}; 538e5c31af7Sopenharmony_ci uniform Struct val; 539e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 540e5c31af7Sopenharmony_ci in mediump float res; 541e5c31af7Sopenharmony_ci void main() 542e5c31af7Sopenharmony_ci { out0 = res + val.b; 543e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 544e5c31af7Sopenharmony_ci } 545e5c31af7Sopenharmony_ci "" 546e5c31af7Sopenharmony_ci end 547e5c31af7Sopenharmony_ci 548e5c31af7Sopenharmony_ci case partial_vec4_struct 549e5c31af7Sopenharmony_ci version 450 550e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec4" 551e5c31af7Sopenharmony_ci values { 552e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 553e5c31af7Sopenharmony_ci uniform vec4 val.b.c = vec4(1.0, 2.0, 3.0, 4.0); 554e5c31af7Sopenharmony_ci output float out0 = 3.0; 555e5c31af7Sopenharmony_ci } 556e5c31af7Sopenharmony_ci vertex "" 557e5c31af7Sopenharmony_ci #version 450 558e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 559e5c31af7Sopenharmony_ci struct Inner {mediump vec4 c;}; 560e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; Inner b;}; 561e5c31af7Sopenharmony_ci uniform Struct val; 562e5c31af7Sopenharmony_ci out mediump float res; 563e5c31af7Sopenharmony_ci void main() 564e5c31af7Sopenharmony_ci { 565e5c31af7Sopenharmony_ci res = val.a.x; 566e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 567e5c31af7Sopenharmony_ci } 568e5c31af7Sopenharmony_ci "" 569e5c31af7Sopenharmony_ci fragment "" 570e5c31af7Sopenharmony_ci #version 450 571e5c31af7Sopenharmony_ci precision mediump float; 572e5c31af7Sopenharmony_ci struct Inner {mediump vec4 c;}; 573e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; Inner b;}; 574e5c31af7Sopenharmony_ci uniform Struct val; 575e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 576e5c31af7Sopenharmony_ci in mediump float res; 577e5c31af7Sopenharmony_ci void main() 578e5c31af7Sopenharmony_ci { out0 = res + val.b.c.y; 579e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 580e5c31af7Sopenharmony_ci } 581e5c31af7Sopenharmony_ci "" 582e5c31af7Sopenharmony_ci end 583e5c31af7Sopenharmony_ci 584e5c31af7Sopenharmony_ci case partial_vec4_vec3_struct 585e5c31af7Sopenharmony_ci version 450 586e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec4 and struct with vec3" 587e5c31af7Sopenharmony_ci values { 588e5c31af7Sopenharmony_ci uniform vec4 val.a = vec4(1.0, 2.0, 3.0, 4.0); 589e5c31af7Sopenharmony_ci uniform vec3 val.b.c = vec3(1.0, 2.0, 3.0); 590e5c31af7Sopenharmony_ci output float out0 = 3.0; 591e5c31af7Sopenharmony_ci } 592e5c31af7Sopenharmony_ci vertex "" 593e5c31af7Sopenharmony_ci #version 450 594e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 595e5c31af7Sopenharmony_ci struct Inner {mediump vec3 c;}; 596e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; Inner b;}; 597e5c31af7Sopenharmony_ci uniform Struct val; 598e5c31af7Sopenharmony_ci out mediump float res; 599e5c31af7Sopenharmony_ci void main() 600e5c31af7Sopenharmony_ci { 601e5c31af7Sopenharmony_ci res = val.a.x; 602e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 603e5c31af7Sopenharmony_ci } 604e5c31af7Sopenharmony_ci "" 605e5c31af7Sopenharmony_ci fragment "" 606e5c31af7Sopenharmony_ci #version 450 607e5c31af7Sopenharmony_ci precision mediump float; 608e5c31af7Sopenharmony_ci struct Inner {mediump vec3 c;}; 609e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a; Inner b;}; 610e5c31af7Sopenharmony_ci uniform Struct val; 611e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 612e5c31af7Sopenharmony_ci in mediump float res; 613e5c31af7Sopenharmony_ci void main() 614e5c31af7Sopenharmony_ci { out0 = res + val.b.c.y; 615e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 616e5c31af7Sopenharmony_ci } 617e5c31af7Sopenharmony_ci "" 618e5c31af7Sopenharmony_ci end 619e5c31af7Sopenharmony_ci 620e5c31af7Sopenharmony_ci case partial_vec2_vec3 621e5c31af7Sopenharmony_ci version 450 622e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec2 and vec3" 623e5c31af7Sopenharmony_ci values { 624e5c31af7Sopenharmony_ci uniform vec2 val.a = vec2(1.0, 2.0); 625e5c31af7Sopenharmony_ci uniform vec3 val.b = vec3(1.0, 2.0, 3.0); 626e5c31af7Sopenharmony_ci output float out0 = 3.0; 627e5c31af7Sopenharmony_ci } 628e5c31af7Sopenharmony_ci vertex "" 629e5c31af7Sopenharmony_ci #version 450 630e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 631e5c31af7Sopenharmony_ci struct Struct {mediump vec2 a; mediump vec3 b;}; 632e5c31af7Sopenharmony_ci uniform Struct val; 633e5c31af7Sopenharmony_ci out mediump float res; 634e5c31af7Sopenharmony_ci void main() 635e5c31af7Sopenharmony_ci { 636e5c31af7Sopenharmony_ci res = val.a.x; 637e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 638e5c31af7Sopenharmony_ci } 639e5c31af7Sopenharmony_ci "" 640e5c31af7Sopenharmony_ci fragment "" 641e5c31af7Sopenharmony_ci #version 450 642e5c31af7Sopenharmony_ci precision mediump float; 643e5c31af7Sopenharmony_ci struct Struct {mediump vec2 a; mediump vec3 b;}; 644e5c31af7Sopenharmony_ci uniform Struct val; 645e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 646e5c31af7Sopenharmony_ci in mediump float res; 647e5c31af7Sopenharmony_ci void main() 648e5c31af7Sopenharmony_ci { out0 = res + val.b.y; 649e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 650e5c31af7Sopenharmony_ci } 651e5c31af7Sopenharmony_ci "" 652e5c31af7Sopenharmony_ci end 653e5c31af7Sopenharmony_ci 654e5c31af7Sopenharmony_ci case partial_vec2_int 655e5c31af7Sopenharmony_ci version 450 656e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype vec2 and int" 657e5c31af7Sopenharmony_ci values { 658e5c31af7Sopenharmony_ci uniform vec2 val.a = vec2(1.0, 2.0); 659e5c31af7Sopenharmony_ci uniform int val.b = 2; 660e5c31af7Sopenharmony_ci output float out0 = 3.0; 661e5c31af7Sopenharmony_ci } 662e5c31af7Sopenharmony_ci vertex "" 663e5c31af7Sopenharmony_ci #version 450 664e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 665e5c31af7Sopenharmony_ci struct Struct {mediump vec2 a; mediump int b;}; 666e5c31af7Sopenharmony_ci uniform Struct val; 667e5c31af7Sopenharmony_ci out mediump float res; 668e5c31af7Sopenharmony_ci void main() 669e5c31af7Sopenharmony_ci { 670e5c31af7Sopenharmony_ci res = val.a.x; 671e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 672e5c31af7Sopenharmony_ci } 673e5c31af7Sopenharmony_ci "" 674e5c31af7Sopenharmony_ci fragment "" 675e5c31af7Sopenharmony_ci #version 450 676e5c31af7Sopenharmony_ci precision mediump float; 677e5c31af7Sopenharmony_ci struct Struct {mediump vec2 a; mediump int b;}; 678e5c31af7Sopenharmony_ci uniform Struct val; 679e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 680e5c31af7Sopenharmony_ci in mediump float res; 681e5c31af7Sopenharmony_ci void main() 682e5c31af7Sopenharmony_ci { out0 = res + float(val.b); 683e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 684e5c31af7Sopenharmony_ci } 685e5c31af7Sopenharmony_ci "" 686e5c31af7Sopenharmony_ci end 687e5c31af7Sopenharmony_ci 688e5c31af7Sopenharmony_ci case partial_int_float 689e5c31af7Sopenharmony_ci version 450 690e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype int and float" 691e5c31af7Sopenharmony_ci values { 692e5c31af7Sopenharmony_ci uniform float val.a = 1.0; 693e5c31af7Sopenharmony_ci uniform int val.b = 2; 694e5c31af7Sopenharmony_ci output float out0 = 3.0; 695e5c31af7Sopenharmony_ci } 696e5c31af7Sopenharmony_ci vertex "" 697e5c31af7Sopenharmony_ci #version 450 698e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 699e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump int b;}; 700e5c31af7Sopenharmony_ci uniform Struct val; 701e5c31af7Sopenharmony_ci out mediump float res; 702e5c31af7Sopenharmony_ci void main() 703e5c31af7Sopenharmony_ci { 704e5c31af7Sopenharmony_ci res = val.a; 705e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 706e5c31af7Sopenharmony_ci } 707e5c31af7Sopenharmony_ci "" 708e5c31af7Sopenharmony_ci fragment "" 709e5c31af7Sopenharmony_ci #version 450 710e5c31af7Sopenharmony_ci precision mediump float; 711e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump int b;}; 712e5c31af7Sopenharmony_ci uniform Struct val; 713e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 714e5c31af7Sopenharmony_ci in mediump float res; 715e5c31af7Sopenharmony_ci void main() 716e5c31af7Sopenharmony_ci { out0 = res + float(val.b); 717e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 718e5c31af7Sopenharmony_ci } 719e5c31af7Sopenharmony_ci "" 720e5c31af7Sopenharmony_ci end 721e5c31af7Sopenharmony_ci 722e5c31af7Sopenharmony_ci case partial_bvec2_vec2 723e5c31af7Sopenharmony_ci version 450 724e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype bvec2 and vec2" 725e5c31af7Sopenharmony_ci values { 726e5c31af7Sopenharmony_ci uniform bvec2 val.a = bvec2(true, true); 727e5c31af7Sopenharmony_ci uniform vec2 val.b = vec2(1.0, 2.0); 728e5c31af7Sopenharmony_ci output float out0 = 3.0; 729e5c31af7Sopenharmony_ci } 730e5c31af7Sopenharmony_ci vertex "" 731e5c31af7Sopenharmony_ci #version 450 732e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 733e5c31af7Sopenharmony_ci struct Struct {bvec2 a; mediump vec2 b;}; 734e5c31af7Sopenharmony_ci uniform Struct val; 735e5c31af7Sopenharmony_ci out mediump float res; 736e5c31af7Sopenharmony_ci void main() 737e5c31af7Sopenharmony_ci { 738e5c31af7Sopenharmony_ci res = float(val.a.x); 739e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 740e5c31af7Sopenharmony_ci } 741e5c31af7Sopenharmony_ci "" 742e5c31af7Sopenharmony_ci fragment "" 743e5c31af7Sopenharmony_ci #version 450 744e5c31af7Sopenharmony_ci precision mediump float; 745e5c31af7Sopenharmony_ci struct Struct {bvec2 a; mediump vec2 b;}; 746e5c31af7Sopenharmony_ci uniform Struct val; 747e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 748e5c31af7Sopenharmony_ci in mediump float res; 749e5c31af7Sopenharmony_ci void main() 750e5c31af7Sopenharmony_ci { out0 = res + val.b.y; 751e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 752e5c31af7Sopenharmony_ci } 753e5c31af7Sopenharmony_ci "" 754e5c31af7Sopenharmony_ci end 755e5c31af7Sopenharmony_ci 756e5c31af7Sopenharmony_ci case partial_ivec2_vec2 757e5c31af7Sopenharmony_ci version 450 758e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and vec2" 759e5c31af7Sopenharmony_ci values { 760e5c31af7Sopenharmony_ci uniform ivec2 val.a = ivec2(1, 2); 761e5c31af7Sopenharmony_ci uniform vec2 val.b = vec2(1.0, 2.0); 762e5c31af7Sopenharmony_ci output float out0 = 3.0; 763e5c31af7Sopenharmony_ci } 764e5c31af7Sopenharmony_ci vertex "" 765e5c31af7Sopenharmony_ci #version 450 766e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 767e5c31af7Sopenharmony_ci struct Struct {mediump ivec2 a; mediump vec2 b;}; 768e5c31af7Sopenharmony_ci uniform Struct val; 769e5c31af7Sopenharmony_ci out mediump float res; 770e5c31af7Sopenharmony_ci void main() 771e5c31af7Sopenharmony_ci { 772e5c31af7Sopenharmony_ci res = vec2(val.a).x; 773e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 774e5c31af7Sopenharmony_ci } 775e5c31af7Sopenharmony_ci "" 776e5c31af7Sopenharmony_ci fragment "" 777e5c31af7Sopenharmony_ci #version 450 778e5c31af7Sopenharmony_ci precision mediump float; 779e5c31af7Sopenharmony_ci struct Struct {mediump ivec2 a; mediump vec2 b;}; 780e5c31af7Sopenharmony_ci uniform Struct val; 781e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 782e5c31af7Sopenharmony_ci in mediump float res; 783e5c31af7Sopenharmony_ci void main() 784e5c31af7Sopenharmony_ci { out0 = res + val.b.y; 785e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 786e5c31af7Sopenharmony_ci } 787e5c31af7Sopenharmony_ci "" 788e5c31af7Sopenharmony_ci end 789e5c31af7Sopenharmony_ci 790e5c31af7Sopenharmony_ci case partial_ivec2_ivec2 791e5c31af7Sopenharmony_ci version 450 792e5c31af7Sopenharmony_ci desc "Uniform struct declared in both, used partially in both. Datatype ivec2 and ivec2" 793e5c31af7Sopenharmony_ci values { 794e5c31af7Sopenharmony_ci uniform ivec2 val.a = ivec2(1, 2); 795e5c31af7Sopenharmony_ci uniform ivec2 val.b = ivec2(1, 2); 796e5c31af7Sopenharmony_ci output float out0 = 3.0; 797e5c31af7Sopenharmony_ci } 798e5c31af7Sopenharmony_ci vertex "" 799e5c31af7Sopenharmony_ci #version 450 800e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 801e5c31af7Sopenharmony_ci struct Struct {mediump ivec2 a; mediump ivec2 b;}; 802e5c31af7Sopenharmony_ci uniform Struct val; 803e5c31af7Sopenharmony_ci out mediump float res; 804e5c31af7Sopenharmony_ci void main() 805e5c31af7Sopenharmony_ci { 806e5c31af7Sopenharmony_ci res = vec2(val.a).x; 807e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 808e5c31af7Sopenharmony_ci } 809e5c31af7Sopenharmony_ci "" 810e5c31af7Sopenharmony_ci fragment "" 811e5c31af7Sopenharmony_ci #version 450 812e5c31af7Sopenharmony_ci precision mediump float; 813e5c31af7Sopenharmony_ci struct Struct {mediump ivec2 a; mediump ivec2 b;}; 814e5c31af7Sopenharmony_ci uniform Struct val; 815e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 816e5c31af7Sopenharmony_ci in mediump float res; 817e5c31af7Sopenharmony_ci void main() 818e5c31af7Sopenharmony_ci { out0 = res + vec2(val.b).y; 819e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 820e5c31af7Sopenharmony_ci } 821e5c31af7Sopenharmony_ci "" 822e5c31af7Sopenharmony_ci end 823e5c31af7Sopenharmony_ci 824e5c31af7Sopenharmony_ci case type_conflict_1 825e5c31af7Sopenharmony_ci version 450 826e5c31af7Sopenharmony_ci desc "Fragment struct has one less member than fragment version" 827e5c31af7Sopenharmony_ci expect link_fail 828e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 829e5c31af7Sopenharmony_ci vertex "" 830e5c31af7Sopenharmony_ci #version 450 831e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 832e5c31af7Sopenharmony_ci struct Struct {mediump float a; mediump float b;}; 833e5c31af7Sopenharmony_ci uniform Struct val; 834e5c31af7Sopenharmony_ci out mediump float res; 835e5c31af7Sopenharmony_ci void main() 836e5c31af7Sopenharmony_ci { 837e5c31af7Sopenharmony_ci res = val.a; 838e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 839e5c31af7Sopenharmony_ci } 840e5c31af7Sopenharmony_ci "" 841e5c31af7Sopenharmony_ci fragment "" 842e5c31af7Sopenharmony_ci #version 450 843e5c31af7Sopenharmony_ci precision mediump float; 844e5c31af7Sopenharmony_ci struct Struct {mediump float a;}; 845e5c31af7Sopenharmony_ci uniform Struct val; 846e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 847e5c31af7Sopenharmony_ci in mediump float res; 848e5c31af7Sopenharmony_ci void main() 849e5c31af7Sopenharmony_ci { out0 = res + val.a; 850e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 851e5c31af7Sopenharmony_ci } 852e5c31af7Sopenharmony_ci "" 853e5c31af7Sopenharmony_ci end 854e5c31af7Sopenharmony_ci 855e5c31af7Sopenharmony_ci case type_conflict_2 856e5c31af7Sopenharmony_ci version 450 857e5c31af7Sopenharmony_ci desc "Vertex struct has int, fragment struct has float." 858e5c31af7Sopenharmony_ci expect link_fail 859e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 860e5c31af7Sopenharmony_ci vertex "" 861e5c31af7Sopenharmony_ci #version 450 862e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 863e5c31af7Sopenharmony_ci struct Struct {mediump int a;}; 864e5c31af7Sopenharmony_ci uniform Struct val; 865e5c31af7Sopenharmony_ci out mediump float res; 866e5c31af7Sopenharmony_ci void main() 867e5c31af7Sopenharmony_ci { 868e5c31af7Sopenharmony_ci res = float(val.a); 869e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 870e5c31af7Sopenharmony_ci } 871e5c31af7Sopenharmony_ci "" 872e5c31af7Sopenharmony_ci fragment "" 873e5c31af7Sopenharmony_ci #version 450 874e5c31af7Sopenharmony_ci precision mediump float; 875e5c31af7Sopenharmony_ci struct Struct {mediump float a;}; 876e5c31af7Sopenharmony_ci uniform Struct val; 877e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 878e5c31af7Sopenharmony_ci in mediump float res; 879e5c31af7Sopenharmony_ci void main() 880e5c31af7Sopenharmony_ci { out0 = val.a; 881e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 882e5c31af7Sopenharmony_ci } 883e5c31af7Sopenharmony_ci "" 884e5c31af7Sopenharmony_ci end 885e5c31af7Sopenharmony_ci 886e5c31af7Sopenharmony_ci case type_conflict_3 887e5c31af7Sopenharmony_ci version 450 888e5c31af7Sopenharmony_ci desc "Vertex struct has vec3, fragment struct has vec4." 889e5c31af7Sopenharmony_ci expect link_fail 890e5c31af7Sopenharmony_ci values {output float out0 = 3.0;} 891e5c31af7Sopenharmony_ci vertex "" 892e5c31af7Sopenharmony_ci #version 450 893e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 894e5c31af7Sopenharmony_ci struct Struct {mediump vec3 a;}; 895e5c31af7Sopenharmony_ci uniform Struct val; 896e5c31af7Sopenharmony_ci out mediump float res; 897e5c31af7Sopenharmony_ci void main() 898e5c31af7Sopenharmony_ci { 899e5c31af7Sopenharmony_ci res = float(val.a.x); 900e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 901e5c31af7Sopenharmony_ci } 902e5c31af7Sopenharmony_ci "" 903e5c31af7Sopenharmony_ci fragment "" 904e5c31af7Sopenharmony_ci #version 450 905e5c31af7Sopenharmony_ci precision mediump float; 906e5c31af7Sopenharmony_ci struct Struct {mediump vec4 a;}; 907e5c31af7Sopenharmony_ci uniform Struct val; 908e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 909e5c31af7Sopenharmony_ci in mediump float res; 910e5c31af7Sopenharmony_ci void main() 911e5c31af7Sopenharmony_ci { out0 = val.a.x; 912e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 913e5c31af7Sopenharmony_ci } 914e5c31af7Sopenharmony_ci "" 915e5c31af7Sopenharmony_ci end 916e5c31af7Sopenharmony_ci 917e5c31af7Sopenharmony_ci case light_struct_highp 918e5c31af7Sopenharmony_ci version 450 919e5c31af7Sopenharmony_ci desc "Complex Light struct from use case tests." 920e5c31af7Sopenharmony_ci values { 921e5c31af7Sopenharmony_ci uniform float val.constantAttenuation = 1.0; 922e5c31af7Sopenharmony_ci uniform float val.quadraticAttenuation = 1.0; 923e5c31af7Sopenharmony_ci output float out0 = 2.0; 924e5c31af7Sopenharmony_ci } 925e5c31af7Sopenharmony_ci vertex "" 926e5c31af7Sopenharmony_ci #version 450 927e5c31af7Sopenharmony_ci struct Light 928e5c31af7Sopenharmony_ci { 929e5c31af7Sopenharmony_ci mediump vec3 color; 930e5c31af7Sopenharmony_ci highp vec4 position; 931e5c31af7Sopenharmony_ci highp vec3 direction; 932e5c31af7Sopenharmony_ci mediump float constantAttenuation; 933e5c31af7Sopenharmony_ci mediump float linearAttenuation; 934e5c31af7Sopenharmony_ci mediump float quadraticAttenuation; 935e5c31af7Sopenharmony_ci }; 936e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 937e5c31af7Sopenharmony_ci uniform Light val; 938e5c31af7Sopenharmony_ci out mediump float res; 939e5c31af7Sopenharmony_ci void main() 940e5c31af7Sopenharmony_ci { 941e5c31af7Sopenharmony_ci res = val.constantAttenuation; 942e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 943e5c31af7Sopenharmony_ci } 944e5c31af7Sopenharmony_ci "" 945e5c31af7Sopenharmony_ci fragment "" 946e5c31af7Sopenharmony_ci #version 450 947e5c31af7Sopenharmony_ci precision mediump float; 948e5c31af7Sopenharmony_ci struct Light 949e5c31af7Sopenharmony_ci { 950e5c31af7Sopenharmony_ci mediump vec3 color; 951e5c31af7Sopenharmony_ci highp vec4 position; 952e5c31af7Sopenharmony_ci highp vec3 direction; 953e5c31af7Sopenharmony_ci mediump float constantAttenuation; 954e5c31af7Sopenharmony_ci mediump float linearAttenuation; 955e5c31af7Sopenharmony_ci mediump float quadraticAttenuation; 956e5c31af7Sopenharmony_ci }; 957e5c31af7Sopenharmony_ci struct Struct {float a;}; 958e5c31af7Sopenharmony_ci uniform Light val; 959e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 960e5c31af7Sopenharmony_ci in mediump float res; 961e5c31af7Sopenharmony_ci void main() 962e5c31af7Sopenharmony_ci { 963e5c31af7Sopenharmony_ci out0 = res + val.quadraticAttenuation; 964e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 965e5c31af7Sopenharmony_ci } 966e5c31af7Sopenharmony_ci "" 967e5c31af7Sopenharmony_ci end 968e5c31af7Sopenharmony_ci 969e5c31af7Sopenharmony_ci case light_struct_mediump 970e5c31af7Sopenharmony_ci version 450 971e5c31af7Sopenharmony_ci desc "Complex Light struct from use case tests, without highp usage" 972e5c31af7Sopenharmony_ci values { 973e5c31af7Sopenharmony_ci uniform float val.constantAttenuation = 1.0; 974e5c31af7Sopenharmony_ci uniform float val.quadraticAttenuation = 1.0; 975e5c31af7Sopenharmony_ci output float out0 = 2.0; 976e5c31af7Sopenharmony_ci } 977e5c31af7Sopenharmony_ci vertex "" 978e5c31af7Sopenharmony_ci #version 450 979e5c31af7Sopenharmony_ci struct Light 980e5c31af7Sopenharmony_ci { 981e5c31af7Sopenharmony_ci mediump vec3 color; 982e5c31af7Sopenharmony_ci mediump vec4 position; 983e5c31af7Sopenharmony_ci mediump vec3 direction; 984e5c31af7Sopenharmony_ci mediump float constantAttenuation; 985e5c31af7Sopenharmony_ci mediump float linearAttenuation; 986e5c31af7Sopenharmony_ci mediump float quadraticAttenuation; 987e5c31af7Sopenharmony_ci }; 988e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 989e5c31af7Sopenharmony_ci uniform Light val; 990e5c31af7Sopenharmony_ci out mediump float res; 991e5c31af7Sopenharmony_ci void main() 992e5c31af7Sopenharmony_ci { 993e5c31af7Sopenharmony_ci res = val.constantAttenuation; 994e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 995e5c31af7Sopenharmony_ci } 996e5c31af7Sopenharmony_ci "" 997e5c31af7Sopenharmony_ci fragment "" 998e5c31af7Sopenharmony_ci #version 450 999e5c31af7Sopenharmony_ci precision mediump float; 1000e5c31af7Sopenharmony_ci struct Light 1001e5c31af7Sopenharmony_ci { 1002e5c31af7Sopenharmony_ci mediump vec3 color; 1003e5c31af7Sopenharmony_ci mediump vec4 position; 1004e5c31af7Sopenharmony_ci mediump vec3 direction; 1005e5c31af7Sopenharmony_ci mediump float constantAttenuation; 1006e5c31af7Sopenharmony_ci mediump float linearAttenuation; 1007e5c31af7Sopenharmony_ci mediump float quadraticAttenuation; 1008e5c31af7Sopenharmony_ci }; 1009e5c31af7Sopenharmony_ci struct Struct {float a;}; 1010e5c31af7Sopenharmony_ci uniform Light val; 1011e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1012e5c31af7Sopenharmony_ci in mediump float res; 1013e5c31af7Sopenharmony_ci void main() 1014e5c31af7Sopenharmony_ci { 1015e5c31af7Sopenharmony_ci out0 = res + val.quadraticAttenuation; 1016e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1017e5c31af7Sopenharmony_ci } 1018e5c31af7Sopenharmony_ci "" 1019e5c31af7Sopenharmony_ci end 1020e5c31af7Sopenharmony_ciend 1021e5c31af7Sopenharmony_ci 1022e5c31af7Sopenharmony_cigroup block "Uniform blocks" 1023e5c31af7Sopenharmony_ci case differing_precision 1024e5c31af7Sopenharmony_ci version 450 1025e5c31af7Sopenharmony_ci expect build_successful 1026e5c31af7Sopenharmony_ci vertex "" 1027e5c31af7Sopenharmony_ci #version 450 1028e5c31af7Sopenharmony_ci 1029e5c31af7Sopenharmony_ci uniform Block 1030e5c31af7Sopenharmony_ci { 1031e5c31af7Sopenharmony_ci highp vec4 val; 1032e5c31af7Sopenharmony_ci }; 1033e5c31af7Sopenharmony_ci 1034e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1035e5c31af7Sopenharmony_ci out mediump float res; 1036e5c31af7Sopenharmony_ci void main() 1037e5c31af7Sopenharmony_ci { 1038e5c31af7Sopenharmony_ci res = val.x; 1039e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1040e5c31af7Sopenharmony_ci } 1041e5c31af7Sopenharmony_ci "" 1042e5c31af7Sopenharmony_ci fragment "" 1043e5c31af7Sopenharmony_ci #version 450 1044e5c31af7Sopenharmony_ci 1045e5c31af7Sopenharmony_ci uniform Block 1046e5c31af7Sopenharmony_ci { 1047e5c31af7Sopenharmony_ci mediump vec4 val; 1048e5c31af7Sopenharmony_ci }; 1049e5c31af7Sopenharmony_ci 1050e5c31af7Sopenharmony_ci precision mediump float; 1051e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1052e5c31af7Sopenharmony_ci in mediump float res; 1053e5c31af7Sopenharmony_ci void main() 1054e5c31af7Sopenharmony_ci { 1055e5c31af7Sopenharmony_ci dEQP_FragColor = val; 1056e5c31af7Sopenharmony_ci } 1057e5c31af7Sopenharmony_ci "" 1058e5c31af7Sopenharmony_ci end 1059e5c31af7Sopenharmony_ci 1060e5c31af7Sopenharmony_ci case type_mismatch 1061e5c31af7Sopenharmony_ci version 450 1062e5c31af7Sopenharmony_ci expect link_fail 1063e5c31af7Sopenharmony_ci vertex "" 1064e5c31af7Sopenharmony_ci #version 450 1065e5c31af7Sopenharmony_ci 1066e5c31af7Sopenharmony_ci uniform Block 1067e5c31af7Sopenharmony_ci { 1068e5c31af7Sopenharmony_ci highp vec4 val; 1069e5c31af7Sopenharmony_ci }; 1070e5c31af7Sopenharmony_ci 1071e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1072e5c31af7Sopenharmony_ci out mediump float res; 1073e5c31af7Sopenharmony_ci void main() 1074e5c31af7Sopenharmony_ci { 1075e5c31af7Sopenharmony_ci res = val.x; 1076e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1077e5c31af7Sopenharmony_ci } 1078e5c31af7Sopenharmony_ci "" 1079e5c31af7Sopenharmony_ci fragment "" 1080e5c31af7Sopenharmony_ci #version 450 1081e5c31af7Sopenharmony_ci 1082e5c31af7Sopenharmony_ci uniform Block 1083e5c31af7Sopenharmony_ci { 1084e5c31af7Sopenharmony_ci highp vec3 val; 1085e5c31af7Sopenharmony_ci }; 1086e5c31af7Sopenharmony_ci 1087e5c31af7Sopenharmony_ci precision mediump float; 1088e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1089e5c31af7Sopenharmony_ci in mediump float res; 1090e5c31af7Sopenharmony_ci void main() 1091e5c31af7Sopenharmony_ci { 1092e5c31af7Sopenharmony_ci dEQP_FragColor = vec4(val, 1.0); 1093e5c31af7Sopenharmony_ci } 1094e5c31af7Sopenharmony_ci "" 1095e5c31af7Sopenharmony_ci end 1096e5c31af7Sopenharmony_ci 1097e5c31af7Sopenharmony_ci case members_mismatch 1098e5c31af7Sopenharmony_ci version 450 1099e5c31af7Sopenharmony_ci expect link_fail 1100e5c31af7Sopenharmony_ci vertex "" 1101e5c31af7Sopenharmony_ci #version 450 1102e5c31af7Sopenharmony_ci 1103e5c31af7Sopenharmony_ci uniform Block 1104e5c31af7Sopenharmony_ci { 1105e5c31af7Sopenharmony_ci highp vec4 val; 1106e5c31af7Sopenharmony_ci }; 1107e5c31af7Sopenharmony_ci 1108e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1109e5c31af7Sopenharmony_ci out mediump float res; 1110e5c31af7Sopenharmony_ci void main() 1111e5c31af7Sopenharmony_ci { 1112e5c31af7Sopenharmony_ci res = val.x; 1113e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1114e5c31af7Sopenharmony_ci } 1115e5c31af7Sopenharmony_ci "" 1116e5c31af7Sopenharmony_ci fragment "" 1117e5c31af7Sopenharmony_ci #version 450 1118e5c31af7Sopenharmony_ci 1119e5c31af7Sopenharmony_ci uniform Block 1120e5c31af7Sopenharmony_ci { 1121e5c31af7Sopenharmony_ci highp vec4 val; 1122e5c31af7Sopenharmony_ci lowp uint u; 1123e5c31af7Sopenharmony_ci }; 1124e5c31af7Sopenharmony_ci 1125e5c31af7Sopenharmony_ci precision mediump float; 1126e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1127e5c31af7Sopenharmony_ci in mediump float res; 1128e5c31af7Sopenharmony_ci void main() 1129e5c31af7Sopenharmony_ci { 1130e5c31af7Sopenharmony_ci dEQP_FragColor = vec4(val); 1131e5c31af7Sopenharmony_ci } 1132e5c31af7Sopenharmony_ci "" 1133e5c31af7Sopenharmony_ci end 1134e5c31af7Sopenharmony_ci 1135e5c31af7Sopenharmony_ci case layout_qualifier_mismatch_4 1136e5c31af7Sopenharmony_ci version 450 1137e5c31af7Sopenharmony_ci expect link_fail 1138e5c31af7Sopenharmony_ci vertex "" 1139e5c31af7Sopenharmony_ci #version 450 1140e5c31af7Sopenharmony_ci 1141e5c31af7Sopenharmony_ci layout(row_major) uniform Block 1142e5c31af7Sopenharmony_ci { 1143e5c31af7Sopenharmony_ci highp mat3 val; 1144e5c31af7Sopenharmony_ci }; 1145e5c31af7Sopenharmony_ci 1146e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1147e5c31af7Sopenharmony_ci out mediump float res; 1148e5c31af7Sopenharmony_ci void main() 1149e5c31af7Sopenharmony_ci { 1150e5c31af7Sopenharmony_ci res = val[0][1]; 1151e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1152e5c31af7Sopenharmony_ci } 1153e5c31af7Sopenharmony_ci "" 1154e5c31af7Sopenharmony_ci fragment "" 1155e5c31af7Sopenharmony_ci #version 450 1156e5c31af7Sopenharmony_ci 1157e5c31af7Sopenharmony_ci layout(column_major) uniform Block 1158e5c31af7Sopenharmony_ci { 1159e5c31af7Sopenharmony_ci highp mat3 val; 1160e5c31af7Sopenharmony_ci }; 1161e5c31af7Sopenharmony_ci 1162e5c31af7Sopenharmony_ci precision mediump float; 1163e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1164e5c31af7Sopenharmony_ci in mediump float res; 1165e5c31af7Sopenharmony_ci void main() 1166e5c31af7Sopenharmony_ci { 1167e5c31af7Sopenharmony_ci dEQP_FragColor = vec4(val[2], 1.0); 1168e5c31af7Sopenharmony_ci } 1169e5c31af7Sopenharmony_ci "" 1170e5c31af7Sopenharmony_ci end 1171e5c31af7Sopenharmony_ci 1172e5c31af7Sopenharmony_ci case layout_qualifier_mismatch_5 1173e5c31af7Sopenharmony_ci version 450 1174e5c31af7Sopenharmony_ci expect link_fail 1175e5c31af7Sopenharmony_ci vertex "" 1176e5c31af7Sopenharmony_ci #version 450 1177e5c31af7Sopenharmony_ci 1178e5c31af7Sopenharmony_ci uniform Block 1179e5c31af7Sopenharmony_ci { 1180e5c31af7Sopenharmony_ci layout(row_major) uniform highp mat3 val; 1181e5c31af7Sopenharmony_ci }; 1182e5c31af7Sopenharmony_ci 1183e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1184e5c31af7Sopenharmony_ci out mediump float res; 1185e5c31af7Sopenharmony_ci void main() 1186e5c31af7Sopenharmony_ci { 1187e5c31af7Sopenharmony_ci res = val[0][1]; 1188e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1189e5c31af7Sopenharmony_ci } 1190e5c31af7Sopenharmony_ci "" 1191e5c31af7Sopenharmony_ci fragment "" 1192e5c31af7Sopenharmony_ci #version 450 1193e5c31af7Sopenharmony_ci 1194e5c31af7Sopenharmony_ci uniform Block 1195e5c31af7Sopenharmony_ci { 1196e5c31af7Sopenharmony_ci layout(column_major) uniform highp mat3 val; 1197e5c31af7Sopenharmony_ci }; 1198e5c31af7Sopenharmony_ci 1199e5c31af7Sopenharmony_ci precision mediump float; 1200e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1201e5c31af7Sopenharmony_ci in mediump float res; 1202e5c31af7Sopenharmony_ci void main() 1203e5c31af7Sopenharmony_ci { 1204e5c31af7Sopenharmony_ci dEQP_FragColor = vec4(val[2], 1.0); 1205e5c31af7Sopenharmony_ci } 1206e5c31af7Sopenharmony_ci "" 1207e5c31af7Sopenharmony_ci end 1208e5c31af7Sopenharmony_ciend 1209