1e5c31af7Sopenharmony_ci# ------------------------------------------------- 2e5c31af7Sopenharmony_ci# drawElements Quality Program OpenGL ES 3.2 Module 3e5c31af7Sopenharmony_ci# ------------------------------------------------- 4e5c31af7Sopenharmony_ci# 5e5c31af7Sopenharmony_ci# Copyright 2016 The Android Open Source Project 6e5c31af7Sopenharmony_ci# 7e5c31af7Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 8e5c31af7Sopenharmony_ci# you may not use this file except in compliance with the License. 9e5c31af7Sopenharmony_ci# You may obtain a copy of the License at 10e5c31af7Sopenharmony_ci# 11e5c31af7Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 12e5c31af7Sopenharmony_ci# 13e5c31af7Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 14e5c31af7Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 15e5c31af7Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16e5c31af7Sopenharmony_ci# See the License for the specific language governing permissions and 17e5c31af7Sopenharmony_ci# limitations under the License. 18e5c31af7Sopenharmony_ci 19e5c31af7Sopenharmony_ci 20e5c31af7Sopenharmony_cicase duplicate_location 21e5c31af7Sopenharmony_ci expect compile_or_link_fail 22e5c31af7Sopenharmony_ci version 320 es 23e5c31af7Sopenharmony_ci values { output float out0 = 0.0; } 24e5c31af7Sopenharmony_ci 25e5c31af7Sopenharmony_ci both "" 26e5c31af7Sopenharmony_ci #version 320 es 27e5c31af7Sopenharmony_ci precision highp float; 28e5c31af7Sopenharmony_ci layout(location = 0) uniform float uni0; 29e5c31af7Sopenharmony_ci layout(location = 0) uniform float uni1; 30e5c31af7Sopenharmony_ci ${DECLARATIONS} 31e5c31af7Sopenharmony_ci 32e5c31af7Sopenharmony_ci void main() 33e5c31af7Sopenharmony_ci { 34e5c31af7Sopenharmony_ci out0 = uni0 + uni1; 35e5c31af7Sopenharmony_ci ${OUTPUT} 36e5c31af7Sopenharmony_ci } 37e5c31af7Sopenharmony_ci "" 38e5c31af7Sopenharmony_ciend 39e5c31af7Sopenharmony_ci 40e5c31af7Sopenharmony_cicase duplicate_location_unused 41e5c31af7Sopenharmony_ci expect compile_or_link_fail 42e5c31af7Sopenharmony_ci version 320 es 43e5c31af7Sopenharmony_ci values { output float out0 = 0.0; } 44e5c31af7Sopenharmony_ci 45e5c31af7Sopenharmony_ci both "" 46e5c31af7Sopenharmony_ci #version 320 es 47e5c31af7Sopenharmony_ci precision highp float; 48e5c31af7Sopenharmony_ci layout(location = 0) uniform float uni0; 49e5c31af7Sopenharmony_ci layout(location = 0) uniform float uni1; 50e5c31af7Sopenharmony_ci ${DECLARATIONS} 51e5c31af7Sopenharmony_ci 52e5c31af7Sopenharmony_ci void main() 53e5c31af7Sopenharmony_ci { 54e5c31af7Sopenharmony_ci out0 = 0.0; 55e5c31af7Sopenharmony_ci ${OUTPUT} 56e5c31af7Sopenharmony_ci } 57e5c31af7Sopenharmony_ci "" 58e5c31af7Sopenharmony_ciend 59e5c31af7Sopenharmony_ci 60e5c31af7Sopenharmony_cicase duplicate_location_split 61e5c31af7Sopenharmony_ci expect compile_or_link_fail 62e5c31af7Sopenharmony_ci version 320 es 63e5c31af7Sopenharmony_ci values{ output float out0 = 0.0; } 64e5c31af7Sopenharmony_ci 65e5c31af7Sopenharmony_ci vertex "" 66e5c31af7Sopenharmony_ci #version 320 es 67e5c31af7Sopenharmony_ci precision highp float; 68e5c31af7Sopenharmony_ci layout(location = 0) uniform float uni0; 69e5c31af7Sopenharmony_ci 70e5c31af7Sopenharmony_ci in highp vec4 dEQP_Position; 71e5c31af7Sopenharmony_ci 72e5c31af7Sopenharmony_ci void main() 73e5c31af7Sopenharmony_ci { 74e5c31af7Sopenharmony_ci gl_Position = dEQP_Position; 75e5c31af7Sopenharmony_ci } 76e5c31af7Sopenharmony_ci "" 77e5c31af7Sopenharmony_ci 78e5c31af7Sopenharmony_ci fragment "" 79e5c31af7Sopenharmony_ci #version 320 es 80e5c31af7Sopenharmony_ci precision highp float; 81e5c31af7Sopenharmony_ci layout(location = 0) uniform float uni1; 82e5c31af7Sopenharmony_ci 83e5c31af7Sopenharmony_ci layout(location = 0) out mediump vec4 dEQP_FragColor; 84e5c31af7Sopenharmony_ci 85e5c31af7Sopenharmony_ci void main() 86e5c31af7Sopenharmony_ci { 87e5c31af7Sopenharmony_ci dEQP_FragColor = vec4(1); 88e5c31af7Sopenharmony_ci } 89e5c31af7Sopenharmony_ci "" 90e5c31af7Sopenharmony_ciend 91e5c31af7Sopenharmony_ci 92e5c31af7Sopenharmony_cicase array_overlap 93e5c31af7Sopenharmony_ci expect compile_or_link_fail 94e5c31af7Sopenharmony_ci version 320 es 95e5c31af7Sopenharmony_ci values { output float out0 = 0.0; } 96e5c31af7Sopenharmony_ci 97e5c31af7Sopenharmony_ci both "" 98e5c31af7Sopenharmony_ci #version 320 es 99e5c31af7Sopenharmony_ci precision highp float; 100e5c31af7Sopenharmony_ci layout(location = 0) uniform float uni0[8]; 101e5c31af7Sopenharmony_ci layout(location = 5) uniform float uni1; 102e5c31af7Sopenharmony_ci ${DECLARATIONS} 103e5c31af7Sopenharmony_ci 104e5c31af7Sopenharmony_ci void main() 105e5c31af7Sopenharmony_ci { 106e5c31af7Sopenharmony_ci out0 = uni0[0] + uni1; 107e5c31af7Sopenharmony_ci ${OUTPUT} 108e5c31af7Sopenharmony_ci } 109e5c31af7Sopenharmony_ci "" 110e5c31af7Sopenharmony_ciend 111e5c31af7Sopenharmony_ci 112e5c31af7Sopenharmony_cicase array_overlap_unused 113e5c31af7Sopenharmony_ci expect compile_or_link_fail 114e5c31af7Sopenharmony_ci version 320 es 115e5c31af7Sopenharmony_ci values { output float out0 = 0.0; } 116e5c31af7Sopenharmony_ci 117e5c31af7Sopenharmony_ci both "" 118e5c31af7Sopenharmony_ci #version 320 es 119e5c31af7Sopenharmony_ci precision highp float; 120e5c31af7Sopenharmony_ci layout(location = 0) uniform float uni0[8]; 121e5c31af7Sopenharmony_ci layout(location = 5) uniform float uni1; 122e5c31af7Sopenharmony_ci ${DECLARATIONS} 123e5c31af7Sopenharmony_ci 124e5c31af7Sopenharmony_ci void main() 125e5c31af7Sopenharmony_ci { 126e5c31af7Sopenharmony_ci out0 = 0.0; 127e5c31af7Sopenharmony_ci ${OUTPUT} 128e5c31af7Sopenharmony_ci } 129e5c31af7Sopenharmony_ci "" 130e5c31af7Sopenharmony_ciend 131e5c31af7Sopenharmony_ci 132e5c31af7Sopenharmony_cicase array_overlap_split 133e5c31af7Sopenharmony_ci expect compile_or_link_fail 134e5c31af7Sopenharmony_ci version 320 es 135e5c31af7Sopenharmony_ci values{ output float out0 = 0.0; } 136e5c31af7Sopenharmony_ci 137e5c31af7Sopenharmony_ci vertex "" 138e5c31af7Sopenharmony_ci #version 320 es 139e5c31af7Sopenharmony_ci precision highp float; 140e5c31af7Sopenharmony_ci layout(location = 0) uniform float uni0[8]; 141e5c31af7Sopenharmony_ci 142e5c31af7Sopenharmony_ci in highp vec4 dEQP_Position; 143e5c31af7Sopenharmony_ci 144e5c31af7Sopenharmony_ci void main() 145e5c31af7Sopenharmony_ci { 146e5c31af7Sopenharmony_ci gl_Position = dEQP_Position; 147e5c31af7Sopenharmony_ci } 148e5c31af7Sopenharmony_ci "" 149e5c31af7Sopenharmony_ci 150e5c31af7Sopenharmony_ci fragment "" 151e5c31af7Sopenharmony_ci #version 320 es 152e5c31af7Sopenharmony_ci precision highp float; 153e5c31af7Sopenharmony_ci layout(location = 7) uniform float uni1[4]; 154e5c31af7Sopenharmony_ci 155e5c31af7Sopenharmony_ci layout(location = 0) out mediump vec4 dEQP_FragColor; 156e5c31af7Sopenharmony_ci 157e5c31af7Sopenharmony_ci void main() 158e5c31af7Sopenharmony_ci { 159e5c31af7Sopenharmony_ci dEQP_FragColor = vec4(1); 160e5c31af7Sopenharmony_ci } 161e5c31af7Sopenharmony_ci "" 162e5c31af7Sopenharmony_ciend 163e5c31af7Sopenharmony_ci 164e5c31af7Sopenharmony_cicase struct_overlap 165e5c31af7Sopenharmony_ci expect compile_or_link_fail 166e5c31af7Sopenharmony_ci version 320 es 167e5c31af7Sopenharmony_ci values { output float out0 = 0.0; } 168e5c31af7Sopenharmony_ci 169e5c31af7Sopenharmony_ci both "" 170e5c31af7Sopenharmony_ci #version 320 es 171e5c31af7Sopenharmony_ci precision highp float; 172e5c31af7Sopenharmony_ci 173e5c31af7Sopenharmony_ci struct S 174e5c31af7Sopenharmony_ci { 175e5c31af7Sopenharmony_ci vec4 a; 176e5c31af7Sopenharmony_ci int b; 177e5c31af7Sopenharmony_ci mat4 c; 178e5c31af7Sopenharmony_ci }; 179e5c31af7Sopenharmony_ci 180e5c31af7Sopenharmony_ci layout(location = 0) uniform S uni0; 181e5c31af7Sopenharmony_ci layout(location = 2) uniform float uni1; 182e5c31af7Sopenharmony_ci ${DECLARATIONS} 183e5c31af7Sopenharmony_ci 184e5c31af7Sopenharmony_ci void main() 185e5c31af7Sopenharmony_ci { 186e5c31af7Sopenharmony_ci out0 = uni0.a.x + uni1; 187e5c31af7Sopenharmony_ci ${OUTPUT} 188e5c31af7Sopenharmony_ci } 189e5c31af7Sopenharmony_ci "" 190e5c31af7Sopenharmony_ciend 191e5c31af7Sopenharmony_ci 192e5c31af7Sopenharmony_cicase struct_overlap_unused 193e5c31af7Sopenharmony_ci expect compile_or_link_fail 194e5c31af7Sopenharmony_ci version 320 es 195e5c31af7Sopenharmony_ci values { output float out0 = 0.0; } 196e5c31af7Sopenharmony_ci 197e5c31af7Sopenharmony_ci both "" 198e5c31af7Sopenharmony_ci #version 320 es 199e5c31af7Sopenharmony_ci precision highp float; 200e5c31af7Sopenharmony_ci 201e5c31af7Sopenharmony_ci struct S 202e5c31af7Sopenharmony_ci { 203e5c31af7Sopenharmony_ci vec4 a; 204e5c31af7Sopenharmony_ci int b; 205e5c31af7Sopenharmony_ci mat4 c; 206e5c31af7Sopenharmony_ci }; 207e5c31af7Sopenharmony_ci 208e5c31af7Sopenharmony_ci layout(location = 0) uniform S uni0; 209e5c31af7Sopenharmony_ci layout(location = 2) uniform float uni1; 210e5c31af7Sopenharmony_ci ${DECLARATIONS} 211e5c31af7Sopenharmony_ci 212e5c31af7Sopenharmony_ci void main() 213e5c31af7Sopenharmony_ci { 214e5c31af7Sopenharmony_ci out0 = 0.0; 215e5c31af7Sopenharmony_ci ${OUTPUT} 216e5c31af7Sopenharmony_ci } 217e5c31af7Sopenharmony_ci "" 218e5c31af7Sopenharmony_ciend 219e5c31af7Sopenharmony_ci 220e5c31af7Sopenharmony_cicase struct_overlap_split 221e5c31af7Sopenharmony_ci expect compile_or_link_fail 222e5c31af7Sopenharmony_ci version 320 es 223e5c31af7Sopenharmony_ci values{ output float out0 = 0.0; } 224e5c31af7Sopenharmony_ci 225e5c31af7Sopenharmony_ci vertex "" 226e5c31af7Sopenharmony_ci #version 320 es 227e5c31af7Sopenharmony_ci precision highp float; 228e5c31af7Sopenharmony_ci 229e5c31af7Sopenharmony_ci struct S 230e5c31af7Sopenharmony_ci { 231e5c31af7Sopenharmony_ci vec4 a; 232e5c31af7Sopenharmony_ci int b; 233e5c31af7Sopenharmony_ci uint c; 234e5c31af7Sopenharmony_ci vec2 d; 235e5c31af7Sopenharmony_ci }; 236e5c31af7Sopenharmony_ci 237e5c31af7Sopenharmony_ci layout(location = 7) uniform S uni0; 238e5c31af7Sopenharmony_ci layout(location = 12) uniform float uni2; 239e5c31af7Sopenharmony_ci 240e5c31af7Sopenharmony_ci in highp vec4 dEQP_Position; 241e5c31af7Sopenharmony_ci 242e5c31af7Sopenharmony_ci void main() 243e5c31af7Sopenharmony_ci { 244e5c31af7Sopenharmony_ci gl_Position = dEQP_Position; 245e5c31af7Sopenharmony_ci } 246e5c31af7Sopenharmony_ci "" 247e5c31af7Sopenharmony_ci 248e5c31af7Sopenharmony_ci fragment "" 249e5c31af7Sopenharmony_ci #version 320 es 250e5c31af7Sopenharmony_ci precision highp float; 251e5c31af7Sopenharmony_ci layout(location = 9) uniform float uni1[4]; 252e5c31af7Sopenharmony_ci 253e5c31af7Sopenharmony_ci layout(location = 0) out mediump vec4 dEQP_FragColor; 254e5c31af7Sopenharmony_ci 255e5c31af7Sopenharmony_ci void main() 256e5c31af7Sopenharmony_ci { 257e5c31af7Sopenharmony_ci dEQP_FragColor = vec4(1); 258e5c31af7Sopenharmony_ci } 259e5c31af7Sopenharmony_ci "" 260e5c31af7Sopenharmony_ciend 261e5c31af7Sopenharmony_ci 262e5c31af7Sopenharmony_cicase complex_overlap 263e5c31af7Sopenharmony_ci expect compile_or_link_fail 264e5c31af7Sopenharmony_ci version 320 es 265e5c31af7Sopenharmony_ci values { output float out0 = 0.0; } 266e5c31af7Sopenharmony_ci 267e5c31af7Sopenharmony_ci both "" 268e5c31af7Sopenharmony_ci #version 320 es 269e5c31af7Sopenharmony_ci precision highp float; 270e5c31af7Sopenharmony_ci 271e5c31af7Sopenharmony_ci struct S // size 2 272e5c31af7Sopenharmony_ci { 273e5c31af7Sopenharmony_ci vec3 a; 274e5c31af7Sopenharmony_ci float b; 275e5c31af7Sopenharmony_ci }; 276e5c31af7Sopenharmony_ci 277e5c31af7Sopenharmony_ci struct T // size 5 278e5c31af7Sopenharmony_ci { 279e5c31af7Sopenharmony_ci S s[2]; 280e5c31af7Sopenharmony_ci mat2 a; 281e5c31af7Sopenharmony_ci }; 282e5c31af7Sopenharmony_ci 283e5c31af7Sopenharmony_ci struct U // size 6 284e5c31af7Sopenharmony_ci { 285e5c31af7Sopenharmony_ci S s; 286e5c31af7Sopenharmony_ci float a[4]; 287e5c31af7Sopenharmony_ci }; 288e5c31af7Sopenharmony_ci 289e5c31af7Sopenharmony_ci layout(location = 0) uniform S uni0; // good 290e5c31af7Sopenharmony_ci layout(location = 1) uniform T uni1; // bad 291e5c31af7Sopenharmony_ci layout(location = 6) uniform T uni2; // good 292e5c31af7Sopenharmony_ci layout(location = 11) uniform U uni3[3]; // good 293e5c31af7Sopenharmony_ci layout(location = 20) uniform S uni4; // bad 294e5c31af7Sopenharmony_ci layout(location = 28) uniform int uni5; // bad 295e5c31af7Sopenharmony_ci ${DECLARATIONS} 296e5c31af7Sopenharmony_ci 297e5c31af7Sopenharmony_ci void main() 298e5c31af7Sopenharmony_ci { 299e5c31af7Sopenharmony_ci out0 = 0.0; 300e5c31af7Sopenharmony_ci ${OUTPUT} 301e5c31af7Sopenharmony_ci } 302e5c31af7Sopenharmony_ci "" 303e5c31af7Sopenharmony_ciend 304e5c31af7Sopenharmony_ci 305e5c31af7Sopenharmony_cicase atomic 306e5c31af7Sopenharmony_ci # \todo [2014-02-14 otto] invalid layout qualifier is generally a compiler error but spec does not yet say that this should be an error. Verify & fix once final 3.1 spec is out 307e5c31af7Sopenharmony_ci expect compile_fail 308e5c31af7Sopenharmony_ci version 320 es 309e5c31af7Sopenharmony_ci values { output float out0 = 0.0; } 310e5c31af7Sopenharmony_ci 311e5c31af7Sopenharmony_ci both "" 312e5c31af7Sopenharmony_ci #version 320 es 313e5c31af7Sopenharmony_ci precision highp float; 314e5c31af7Sopenharmony_ci layout(location = 3, binding = 0, offset = 0) uniform atomic_uint uni0; 315e5c31af7Sopenharmony_ci ${DECLARATIONS} 316e5c31af7Sopenharmony_ci 317e5c31af7Sopenharmony_ci void main() 318e5c31af7Sopenharmony_ci { 319e5c31af7Sopenharmony_ci out0 = 0.0; 320e5c31af7Sopenharmony_ci ${OUTPUT} 321e5c31af7Sopenharmony_ci } 322e5c31af7Sopenharmony_ci "" 323e5c31af7Sopenharmony_ciend 324