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_cigroup varying "Varying linkage" 21e5c31af7Sopenharmony_ci group rules "Rules" 22e5c31af7Sopenharmony_ci case input_type_mismatch 23e5c31af7Sopenharmony_ci version 320 es 24e5c31af7Sopenharmony_ci desc "Geometry shader input type mismatch" 25e5c31af7Sopenharmony_ci expect link_fail 26e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 27e5c31af7Sopenharmony_ci vertex "" 28e5c31af7Sopenharmony_ci #version 320 es 29e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 30e5c31af7Sopenharmony_ci out mediump float geo_in; 31e5c31af7Sopenharmony_ci void main() 32e5c31af7Sopenharmony_ci { 33e5c31af7Sopenharmony_ci geo_in = 1.0; 34e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 35e5c31af7Sopenharmony_ci } 36e5c31af7Sopenharmony_ci "" 37e5c31af7Sopenharmony_ci geometry "" 38e5c31af7Sopenharmony_ci #version 320 es 39e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 40e5c31af7Sopenharmony_ci in mediump vec2 geo_in[]; 41e5c31af7Sopenharmony_ci out mediump float geo_out; 42e5c31af7Sopenharmony_ci void main() 43e5c31af7Sopenharmony_ci { 44e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 45e5c31af7Sopenharmony_ci { 46e5c31af7Sopenharmony_ci geo_out = geo_in[ndx].x + geo_in[ndx].y; 47e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 48e5c31af7Sopenharmony_ci EmitVertex(); 49e5c31af7Sopenharmony_ci } 50e5c31af7Sopenharmony_ci } 51e5c31af7Sopenharmony_ci "" 52e5c31af7Sopenharmony_ci fragment "" 53e5c31af7Sopenharmony_ci #version 320 es 54e5c31af7Sopenharmony_ci precision mediump float; 55e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 56e5c31af7Sopenharmony_ci in mediump float geo_out; 57e5c31af7Sopenharmony_ci void main() 58e5c31af7Sopenharmony_ci { 59e5c31af7Sopenharmony_ci out0 = geo_out; 60e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 61e5c31af7Sopenharmony_ci } 62e5c31af7Sopenharmony_ci "" 63e5c31af7Sopenharmony_ci end 64e5c31af7Sopenharmony_ci 65e5c31af7Sopenharmony_ci case output_type_mismatch 66e5c31af7Sopenharmony_ci version 320 es 67e5c31af7Sopenharmony_ci desc "Geometry shader output type mismatch" 68e5c31af7Sopenharmony_ci expect link_fail 69e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 70e5c31af7Sopenharmony_ci vertex "" 71e5c31af7Sopenharmony_ci #version 320 es 72e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 73e5c31af7Sopenharmony_ci void main() 74e5c31af7Sopenharmony_ci { 75e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 76e5c31af7Sopenharmony_ci } 77e5c31af7Sopenharmony_ci "" 78e5c31af7Sopenharmony_ci geometry "" 79e5c31af7Sopenharmony_ci #version 320 es 80e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 81e5c31af7Sopenharmony_ci out mediump float geo_out; 82e5c31af7Sopenharmony_ci void main() 83e5c31af7Sopenharmony_ci { 84e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 85e5c31af7Sopenharmony_ci { 86e5c31af7Sopenharmony_ci geo_out = 1.0; 87e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 88e5c31af7Sopenharmony_ci EmitVertex(); 89e5c31af7Sopenharmony_ci } 90e5c31af7Sopenharmony_ci } 91e5c31af7Sopenharmony_ci "" 92e5c31af7Sopenharmony_ci fragment "" 93e5c31af7Sopenharmony_ci #version 320 es 94e5c31af7Sopenharmony_ci precision mediump float; 95e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 96e5c31af7Sopenharmony_ci in mediump vec2 geo_out; 97e5c31af7Sopenharmony_ci void main() 98e5c31af7Sopenharmony_ci { 99e5c31af7Sopenharmony_ci out0 = geo_out.x + geo_out.y; 100e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 101e5c31af7Sopenharmony_ci } 102e5c31af7Sopenharmony_ci "" 103e5c31af7Sopenharmony_ci end 104e5c31af7Sopenharmony_ci 105e5c31af7Sopenharmony_ci case input_different_precision 106e5c31af7Sopenharmony_ci version 320 es 107e5c31af7Sopenharmony_ci desc "Geometry shader input precision mismatch" 108e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 109e5c31af7Sopenharmony_ci vertex "" 110e5c31af7Sopenharmony_ci #version 320 es 111e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 112e5c31af7Sopenharmony_ci out highp float geo_in; 113e5c31af7Sopenharmony_ci void main() 114e5c31af7Sopenharmony_ci { 115e5c31af7Sopenharmony_ci geo_in = 1.0; 116e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 117e5c31af7Sopenharmony_ci } 118e5c31af7Sopenharmony_ci "" 119e5c31af7Sopenharmony_ci geometry "" 120e5c31af7Sopenharmony_ci #version 320 es 121e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 122e5c31af7Sopenharmony_ci in lowp float geo_in[]; 123e5c31af7Sopenharmony_ci out mediump float geo_out; 124e5c31af7Sopenharmony_ci void main() 125e5c31af7Sopenharmony_ci { 126e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 127e5c31af7Sopenharmony_ci { 128e5c31af7Sopenharmony_ci geo_out = geo_in[ndx]; 129e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 130e5c31af7Sopenharmony_ci EmitVertex(); 131e5c31af7Sopenharmony_ci } 132e5c31af7Sopenharmony_ci } 133e5c31af7Sopenharmony_ci "" 134e5c31af7Sopenharmony_ci fragment "" 135e5c31af7Sopenharmony_ci #version 320 es 136e5c31af7Sopenharmony_ci precision mediump float; 137e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 138e5c31af7Sopenharmony_ci in mediump float geo_out; 139e5c31af7Sopenharmony_ci void main() 140e5c31af7Sopenharmony_ci { 141e5c31af7Sopenharmony_ci out0 = geo_out; 142e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 143e5c31af7Sopenharmony_ci } 144e5c31af7Sopenharmony_ci "" 145e5c31af7Sopenharmony_ci end 146e5c31af7Sopenharmony_ci 147e5c31af7Sopenharmony_ci case output_different_precision 148e5c31af7Sopenharmony_ci version 320 es 149e5c31af7Sopenharmony_ci desc "Geometry shader output precision mismatch" 150e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 151e5c31af7Sopenharmony_ci vertex "" 152e5c31af7Sopenharmony_ci #version 320 es 153e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 154e5c31af7Sopenharmony_ci void main() 155e5c31af7Sopenharmony_ci { 156e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 157e5c31af7Sopenharmony_ci } 158e5c31af7Sopenharmony_ci "" 159e5c31af7Sopenharmony_ci geometry "" 160e5c31af7Sopenharmony_ci #version 320 es 161e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 162e5c31af7Sopenharmony_ci out highp float geo_out; 163e5c31af7Sopenharmony_ci void main() 164e5c31af7Sopenharmony_ci { 165e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 166e5c31af7Sopenharmony_ci { 167e5c31af7Sopenharmony_ci geo_out = 1.0; 168e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 169e5c31af7Sopenharmony_ci EmitVertex(); 170e5c31af7Sopenharmony_ci } 171e5c31af7Sopenharmony_ci } 172e5c31af7Sopenharmony_ci "" 173e5c31af7Sopenharmony_ci fragment "" 174e5c31af7Sopenharmony_ci #version 320 es 175e5c31af7Sopenharmony_ci precision mediump float; 176e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 177e5c31af7Sopenharmony_ci in lowp float geo_out; 178e5c31af7Sopenharmony_ci void main() 179e5c31af7Sopenharmony_ci { 180e5c31af7Sopenharmony_ci out0 = geo_out; 181e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 182e5c31af7Sopenharmony_ci } 183e5c31af7Sopenharmony_ci "" 184e5c31af7Sopenharmony_ci end 185e5c31af7Sopenharmony_ci 186e5c31af7Sopenharmony_ci case input_no_declaration 187e5c31af7Sopenharmony_ci version 320 es 188e5c31af7Sopenharmony_ci desc "Geometry shader input has no matching output" 189e5c31af7Sopenharmony_ci expect link_fail 190e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 191e5c31af7Sopenharmony_ci vertex "" 192e5c31af7Sopenharmony_ci #version 320 es 193e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 194e5c31af7Sopenharmony_ci void main() 195e5c31af7Sopenharmony_ci { 196e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 197e5c31af7Sopenharmony_ci } 198e5c31af7Sopenharmony_ci "" 199e5c31af7Sopenharmony_ci geometry "" 200e5c31af7Sopenharmony_ci #version 320 es 201e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 202e5c31af7Sopenharmony_ci in lowp float geo_in[]; 203e5c31af7Sopenharmony_ci out mediump float geo_out; 204e5c31af7Sopenharmony_ci void main() 205e5c31af7Sopenharmony_ci { 206e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 207e5c31af7Sopenharmony_ci { 208e5c31af7Sopenharmony_ci geo_out = geo_in[ndx]; 209e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 210e5c31af7Sopenharmony_ci EmitVertex(); 211e5c31af7Sopenharmony_ci } 212e5c31af7Sopenharmony_ci } 213e5c31af7Sopenharmony_ci "" 214e5c31af7Sopenharmony_ci fragment "" 215e5c31af7Sopenharmony_ci #version 320 es 216e5c31af7Sopenharmony_ci precision mediump float; 217e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 218e5c31af7Sopenharmony_ci in mediump float geo_out; 219e5c31af7Sopenharmony_ci void main() 220e5c31af7Sopenharmony_ci { 221e5c31af7Sopenharmony_ci out0 = geo_out; 222e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 223e5c31af7Sopenharmony_ci } 224e5c31af7Sopenharmony_ci "" 225e5c31af7Sopenharmony_ci end 226e5c31af7Sopenharmony_ci 227e5c31af7Sopenharmony_ci case output_no_declaration 228e5c31af7Sopenharmony_ci version 320 es 229e5c31af7Sopenharmony_ci desc "Geometry shader has no output for an input" 230e5c31af7Sopenharmony_ci expect link_fail 231e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 232e5c31af7Sopenharmony_ci vertex "" 233e5c31af7Sopenharmony_ci #version 320 es 234e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 235e5c31af7Sopenharmony_ci void main() 236e5c31af7Sopenharmony_ci { 237e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 238e5c31af7Sopenharmony_ci } 239e5c31af7Sopenharmony_ci "" 240e5c31af7Sopenharmony_ci geometry "" 241e5c31af7Sopenharmony_ci #version 320 es 242e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 243e5c31af7Sopenharmony_ci void main() 244e5c31af7Sopenharmony_ci { 245e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 246e5c31af7Sopenharmony_ci { 247e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 248e5c31af7Sopenharmony_ci EmitVertex(); 249e5c31af7Sopenharmony_ci } 250e5c31af7Sopenharmony_ci } 251e5c31af7Sopenharmony_ci "" 252e5c31af7Sopenharmony_ci fragment "" 253e5c31af7Sopenharmony_ci #version 320 es 254e5c31af7Sopenharmony_ci precision mediump float; 255e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 256e5c31af7Sopenharmony_ci in mediump float geo_out; 257e5c31af7Sopenharmony_ci void main() 258e5c31af7Sopenharmony_ci { 259e5c31af7Sopenharmony_ci out0 = geo_out; 260e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 261e5c31af7Sopenharmony_ci } 262e5c31af7Sopenharmony_ci "" 263e5c31af7Sopenharmony_ci end 264e5c31af7Sopenharmony_ci 265e5c31af7Sopenharmony_ci case input_superfluous_declaration 266e5c31af7Sopenharmony_ci version 320 es 267e5c31af7Sopenharmony_ci desc "Geometry shader has no input for an output" 268e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 269e5c31af7Sopenharmony_ci vertex "" 270e5c31af7Sopenharmony_ci #version 320 es 271e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 272e5c31af7Sopenharmony_ci out mediump float geo_in; 273e5c31af7Sopenharmony_ci void main() 274e5c31af7Sopenharmony_ci { 275e5c31af7Sopenharmony_ci geo_in = 1.0; 276e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 277e5c31af7Sopenharmony_ci } 278e5c31af7Sopenharmony_ci "" 279e5c31af7Sopenharmony_ci geometry "" 280e5c31af7Sopenharmony_ci #version 320 es 281e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 282e5c31af7Sopenharmony_ci out mediump float geo_out; 283e5c31af7Sopenharmony_ci void main() 284e5c31af7Sopenharmony_ci { 285e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 286e5c31af7Sopenharmony_ci { 287e5c31af7Sopenharmony_ci geo_out = 1.0; 288e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 289e5c31af7Sopenharmony_ci EmitVertex(); 290e5c31af7Sopenharmony_ci } 291e5c31af7Sopenharmony_ci } 292e5c31af7Sopenharmony_ci "" 293e5c31af7Sopenharmony_ci fragment "" 294e5c31af7Sopenharmony_ci #version 320 es 295e5c31af7Sopenharmony_ci precision mediump float; 296e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 297e5c31af7Sopenharmony_ci in mediump float geo_out; 298e5c31af7Sopenharmony_ci void main() 299e5c31af7Sopenharmony_ci { 300e5c31af7Sopenharmony_ci out0 = geo_out; 301e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 302e5c31af7Sopenharmony_ci } 303e5c31af7Sopenharmony_ci "" 304e5c31af7Sopenharmony_ci end 305e5c31af7Sopenharmony_ci 306e5c31af7Sopenharmony_ci case output_superfluous_declaration 307e5c31af7Sopenharmony_ci version 320 es 308e5c31af7Sopenharmony_ci desc "Geometry shader has output without an matching input" 309e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 310e5c31af7Sopenharmony_ci vertex "" 311e5c31af7Sopenharmony_ci #version 320 es 312e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 313e5c31af7Sopenharmony_ci void main() 314e5c31af7Sopenharmony_ci { 315e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 316e5c31af7Sopenharmony_ci } 317e5c31af7Sopenharmony_ci "" 318e5c31af7Sopenharmony_ci geometry "" 319e5c31af7Sopenharmony_ci #version 320 es 320e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 321e5c31af7Sopenharmony_ci out mediump float geo_out; 322e5c31af7Sopenharmony_ci void main() 323e5c31af7Sopenharmony_ci { 324e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 325e5c31af7Sopenharmony_ci { 326e5c31af7Sopenharmony_ci geo_out = 1.0; 327e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 328e5c31af7Sopenharmony_ci EmitVertex(); 329e5c31af7Sopenharmony_ci } 330e5c31af7Sopenharmony_ci } 331e5c31af7Sopenharmony_ci "" 332e5c31af7Sopenharmony_ci fragment "" 333e5c31af7Sopenharmony_ci #version 320 es 334e5c31af7Sopenharmony_ci precision mediump float; 335e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 336e5c31af7Sopenharmony_ci void main() 337e5c31af7Sopenharmony_ci { 338e5c31af7Sopenharmony_ci out0 = 1.0; 339e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 340e5c31af7Sopenharmony_ci } 341e5c31af7Sopenharmony_ci "" 342e5c31af7Sopenharmony_ci end 343e5c31af7Sopenharmony_ci 344e5c31af7Sopenharmony_ci case input_array_explicit_size 345e5c31af7Sopenharmony_ci version 320 es 346e5c31af7Sopenharmony_ci desc "Geometry shader input is explicitly sized array" 347e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 348e5c31af7Sopenharmony_ci vertex "" 349e5c31af7Sopenharmony_ci #version 320 es 350e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 351e5c31af7Sopenharmony_ci out mediump float geo_in; 352e5c31af7Sopenharmony_ci void main() 353e5c31af7Sopenharmony_ci { 354e5c31af7Sopenharmony_ci geo_in = 1.0; 355e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 356e5c31af7Sopenharmony_ci } 357e5c31af7Sopenharmony_ci "" 358e5c31af7Sopenharmony_ci geometry "" 359e5c31af7Sopenharmony_ci #version 320 es 360e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 361e5c31af7Sopenharmony_ci in mediump float geo_in[3]; 362e5c31af7Sopenharmony_ci out mediump float geo_out; 363e5c31af7Sopenharmony_ci void main() 364e5c31af7Sopenharmony_ci { 365e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 366e5c31af7Sopenharmony_ci { 367e5c31af7Sopenharmony_ci geo_out = geo_in[ndx]; 368e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 369e5c31af7Sopenharmony_ci EmitVertex(); 370e5c31af7Sopenharmony_ci } 371e5c31af7Sopenharmony_ci } 372e5c31af7Sopenharmony_ci "" 373e5c31af7Sopenharmony_ci fragment "" 374e5c31af7Sopenharmony_ci #version 320 es 375e5c31af7Sopenharmony_ci precision mediump float; 376e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 377e5c31af7Sopenharmony_ci in mediump float geo_out; 378e5c31af7Sopenharmony_ci void main() 379e5c31af7Sopenharmony_ci { 380e5c31af7Sopenharmony_ci out0 = geo_out; 381e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 382e5c31af7Sopenharmony_ci } 383e5c31af7Sopenharmony_ci "" 384e5c31af7Sopenharmony_ci end 385e5c31af7Sopenharmony_ci 386e5c31af7Sopenharmony_ci case input_non_array 387e5c31af7Sopenharmony_ci version 320 es 388e5c31af7Sopenharmony_ci desc "Geometry shader has no input for an output" 389e5c31af7Sopenharmony_ci expect compile_or_link_fail 390e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 391e5c31af7Sopenharmony_ci vertex "" 392e5c31af7Sopenharmony_ci #version 320 es 393e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 394e5c31af7Sopenharmony_ci out mediump float geo_in; 395e5c31af7Sopenharmony_ci void main() 396e5c31af7Sopenharmony_ci { 397e5c31af7Sopenharmony_ci geo_in = 1.0; 398e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 399e5c31af7Sopenharmony_ci } 400e5c31af7Sopenharmony_ci "" 401e5c31af7Sopenharmony_ci geometry "" 402e5c31af7Sopenharmony_ci #version 320 es 403e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 404e5c31af7Sopenharmony_ci in mediump float geo_in; 405e5c31af7Sopenharmony_ci out mediump float geo_out; 406e5c31af7Sopenharmony_ci void main() 407e5c31af7Sopenharmony_ci { 408e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 409e5c31af7Sopenharmony_ci { 410e5c31af7Sopenharmony_ci geo_out = geo_in; 411e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 412e5c31af7Sopenharmony_ci EmitVertex(); 413e5c31af7Sopenharmony_ci } 414e5c31af7Sopenharmony_ci } 415e5c31af7Sopenharmony_ci "" 416e5c31af7Sopenharmony_ci fragment "" 417e5c31af7Sopenharmony_ci #version 320 es 418e5c31af7Sopenharmony_ci precision mediump float; 419e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 420e5c31af7Sopenharmony_ci in mediump float geo_out; 421e5c31af7Sopenharmony_ci void main() 422e5c31af7Sopenharmony_ci { 423e5c31af7Sopenharmony_ci out0 = geo_out; 424e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 425e5c31af7Sopenharmony_ci } 426e5c31af7Sopenharmony_ci "" 427e5c31af7Sopenharmony_ci end 428e5c31af7Sopenharmony_ci 429e5c31af7Sopenharmony_ci case input_array_size_mismatch 430e5c31af7Sopenharmony_ci version 320 es 431e5c31af7Sopenharmony_ci desc "Geometry shader input is explicitly sized array, but size does not match input primitive" 432e5c31af7Sopenharmony_ci expect compile_or_link_fail 433e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 434e5c31af7Sopenharmony_ci vertex "" 435e5c31af7Sopenharmony_ci #version 320 es 436e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 437e5c31af7Sopenharmony_ci out mediump float geo_in; 438e5c31af7Sopenharmony_ci void main() 439e5c31af7Sopenharmony_ci { 440e5c31af7Sopenharmony_ci geo_in = 1.0; 441e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 442e5c31af7Sopenharmony_ci } 443e5c31af7Sopenharmony_ci "" 444e5c31af7Sopenharmony_ci geometry "" 445e5c31af7Sopenharmony_ci #version 320 es 446e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 447e5c31af7Sopenharmony_ci in mediump float geo_in[4]; 448e5c31af7Sopenharmony_ci out mediump float geo_out; 449e5c31af7Sopenharmony_ci void main() 450e5c31af7Sopenharmony_ci { 451e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 452e5c31af7Sopenharmony_ci { 453e5c31af7Sopenharmony_ci geo_out = geo_in[ndx+1]; 454e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 455e5c31af7Sopenharmony_ci EmitVertex(); 456e5c31af7Sopenharmony_ci } 457e5c31af7Sopenharmony_ci } 458e5c31af7Sopenharmony_ci "" 459e5c31af7Sopenharmony_ci fragment "" 460e5c31af7Sopenharmony_ci #version 320 es 461e5c31af7Sopenharmony_ci precision mediump float; 462e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 463e5c31af7Sopenharmony_ci in mediump float geo_out; 464e5c31af7Sopenharmony_ci void main() 465e5c31af7Sopenharmony_ci { 466e5c31af7Sopenharmony_ci out0 = geo_out; 467e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 468e5c31af7Sopenharmony_ci } 469e5c31af7Sopenharmony_ci "" 470e5c31af7Sopenharmony_ci end 471e5c31af7Sopenharmony_ci 472e5c31af7Sopenharmony_ci case input_block 473e5c31af7Sopenharmony_ci version 320 es 474e5c31af7Sopenharmony_ci desc "Geometry shader input block" 475e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 476e5c31af7Sopenharmony_ci vertex "" 477e5c31af7Sopenharmony_ci #version 320 es 478e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 479e5c31af7Sopenharmony_ci out IOBlockName 480e5c31af7Sopenharmony_ci { 481e5c31af7Sopenharmony_ci mediump float var; 482e5c31af7Sopenharmony_ci } outputInstanceName; 483e5c31af7Sopenharmony_ci void main() 484e5c31af7Sopenharmony_ci { 485e5c31af7Sopenharmony_ci outputInstanceName.var = 1.0; 486e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 487e5c31af7Sopenharmony_ci } 488e5c31af7Sopenharmony_ci "" 489e5c31af7Sopenharmony_ci geometry "" 490e5c31af7Sopenharmony_ci #version 320 es 491e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 492e5c31af7Sopenharmony_ci in IOBlockName 493e5c31af7Sopenharmony_ci { 494e5c31af7Sopenharmony_ci mediump float var; 495e5c31af7Sopenharmony_ci } inputInstanceName[]; 496e5c31af7Sopenharmony_ci out mediump float geo_out; 497e5c31af7Sopenharmony_ci void main() 498e5c31af7Sopenharmony_ci { 499e5c31af7Sopenharmony_ci geo_out = inputInstanceName[0].var; 500e5c31af7Sopenharmony_ci gl_Position = gl_in[0].gl_Position; 501e5c31af7Sopenharmony_ci EmitVertex(); 502e5c31af7Sopenharmony_ci geo_out = inputInstanceName[1].var; 503e5c31af7Sopenharmony_ci gl_Position = gl_in[1].gl_Position; 504e5c31af7Sopenharmony_ci EmitVertex(); 505e5c31af7Sopenharmony_ci geo_out = inputInstanceName[2].var; 506e5c31af7Sopenharmony_ci gl_Position = gl_in[2].gl_Position; 507e5c31af7Sopenharmony_ci EmitVertex(); 508e5c31af7Sopenharmony_ci } 509e5c31af7Sopenharmony_ci "" 510e5c31af7Sopenharmony_ci fragment "" 511e5c31af7Sopenharmony_ci #version 320 es 512e5c31af7Sopenharmony_ci precision mediump float; 513e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 514e5c31af7Sopenharmony_ci in mediump float geo_out; 515e5c31af7Sopenharmony_ci void main() 516e5c31af7Sopenharmony_ci { 517e5c31af7Sopenharmony_ci out0 = geo_out; 518e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 519e5c31af7Sopenharmony_ci } 520e5c31af7Sopenharmony_ci "" 521e5c31af7Sopenharmony_ci end 522e5c31af7Sopenharmony_ci 523e5c31af7Sopenharmony_ci case input_block_explicit_size 524e5c31af7Sopenharmony_ci version 320 es 525e5c31af7Sopenharmony_ci desc "Geometry shader input block with explicit size" 526e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 527e5c31af7Sopenharmony_ci vertex "" 528e5c31af7Sopenharmony_ci #version 320 es 529e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 530e5c31af7Sopenharmony_ci out IOBlockName 531e5c31af7Sopenharmony_ci { 532e5c31af7Sopenharmony_ci mediump float var; 533e5c31af7Sopenharmony_ci } outputInstanceName; 534e5c31af7Sopenharmony_ci void main() 535e5c31af7Sopenharmony_ci { 536e5c31af7Sopenharmony_ci outputInstanceName.var = 1.0; 537e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 538e5c31af7Sopenharmony_ci } 539e5c31af7Sopenharmony_ci "" 540e5c31af7Sopenharmony_ci geometry "" 541e5c31af7Sopenharmony_ci #version 320 es 542e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 543e5c31af7Sopenharmony_ci in IOBlockName 544e5c31af7Sopenharmony_ci { 545e5c31af7Sopenharmony_ci mediump float var; 546e5c31af7Sopenharmony_ci } inputInstanceName[3]; 547e5c31af7Sopenharmony_ci out mediump float geo_out; 548e5c31af7Sopenharmony_ci void main() 549e5c31af7Sopenharmony_ci { 550e5c31af7Sopenharmony_ci geo_out = inputInstanceName[0].var; 551e5c31af7Sopenharmony_ci gl_Position = gl_in[0].gl_Position; 552e5c31af7Sopenharmony_ci EmitVertex(); 553e5c31af7Sopenharmony_ci geo_out = inputInstanceName[1].var; 554e5c31af7Sopenharmony_ci gl_Position = gl_in[1].gl_Position; 555e5c31af7Sopenharmony_ci EmitVertex(); 556e5c31af7Sopenharmony_ci geo_out = inputInstanceName[2].var; 557e5c31af7Sopenharmony_ci gl_Position = gl_in[2].gl_Position; 558e5c31af7Sopenharmony_ci EmitVertex(); 559e5c31af7Sopenharmony_ci } 560e5c31af7Sopenharmony_ci "" 561e5c31af7Sopenharmony_ci fragment "" 562e5c31af7Sopenharmony_ci #version 320 es 563e5c31af7Sopenharmony_ci precision mediump float; 564e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 565e5c31af7Sopenharmony_ci in mediump float geo_out; 566e5c31af7Sopenharmony_ci void main() 567e5c31af7Sopenharmony_ci { 568e5c31af7Sopenharmony_ci out0 = geo_out; 569e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 570e5c31af7Sopenharmony_ci } 571e5c31af7Sopenharmony_ci "" 572e5c31af7Sopenharmony_ci end 573e5c31af7Sopenharmony_ci 574e5c31af7Sopenharmony_ci case input_block_non_array 575e5c31af7Sopenharmony_ci version 320 es 576e5c31af7Sopenharmony_ci desc "Geometry shader input block is non an array" 577e5c31af7Sopenharmony_ci expect compile_or_link_fail 578e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 579e5c31af7Sopenharmony_ci vertex "" 580e5c31af7Sopenharmony_ci #version 320 es 581e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 582e5c31af7Sopenharmony_ci out IOBlockName 583e5c31af7Sopenharmony_ci { 584e5c31af7Sopenharmony_ci mediump float var; 585e5c31af7Sopenharmony_ci } outputInstanceName; 586e5c31af7Sopenharmony_ci void main() 587e5c31af7Sopenharmony_ci { 588e5c31af7Sopenharmony_ci outputInstanceName.var = 1.0; 589e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 590e5c31af7Sopenharmony_ci } 591e5c31af7Sopenharmony_ci "" 592e5c31af7Sopenharmony_ci geometry "" 593e5c31af7Sopenharmony_ci #version 320 es 594e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 595e5c31af7Sopenharmony_ci in IOBlockName 596e5c31af7Sopenharmony_ci { 597e5c31af7Sopenharmony_ci mediump float var; 598e5c31af7Sopenharmony_ci } inputInstanceName; 599e5c31af7Sopenharmony_ci out mediump float geo_out; 600e5c31af7Sopenharmony_ci void main() 601e5c31af7Sopenharmony_ci { 602e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 603e5c31af7Sopenharmony_ci { 604e5c31af7Sopenharmony_ci geo_out = inputInstanceName.var; 605e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 606e5c31af7Sopenharmony_ci EmitVertex(); 607e5c31af7Sopenharmony_ci } 608e5c31af7Sopenharmony_ci } 609e5c31af7Sopenharmony_ci "" 610e5c31af7Sopenharmony_ci fragment "" 611e5c31af7Sopenharmony_ci #version 320 es 612e5c31af7Sopenharmony_ci precision mediump float; 613e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 614e5c31af7Sopenharmony_ci in mediump float geo_out; 615e5c31af7Sopenharmony_ci void main() 616e5c31af7Sopenharmony_ci { 617e5c31af7Sopenharmony_ci out0 = geo_out; 618e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 619e5c31af7Sopenharmony_ci } 620e5c31af7Sopenharmony_ci "" 621e5c31af7Sopenharmony_ci end 622e5c31af7Sopenharmony_ci 623e5c31af7Sopenharmony_ci case input_block_array_size_mismatch 624e5c31af7Sopenharmony_ci version 320 es 625e5c31af7Sopenharmony_ci desc "Geometry shader input block invalid array size" 626e5c31af7Sopenharmony_ci expect compile_or_link_fail 627e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 628e5c31af7Sopenharmony_ci vertex "" 629e5c31af7Sopenharmony_ci #version 320 es 630e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 631e5c31af7Sopenharmony_ci out IOBlockName 632e5c31af7Sopenharmony_ci { 633e5c31af7Sopenharmony_ci mediump float var; 634e5c31af7Sopenharmony_ci } outputInstanceName; 635e5c31af7Sopenharmony_ci void main() 636e5c31af7Sopenharmony_ci { 637e5c31af7Sopenharmony_ci outputInstanceName.var = 1.0; 638e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 639e5c31af7Sopenharmony_ci } 640e5c31af7Sopenharmony_ci "" 641e5c31af7Sopenharmony_ci geometry "" 642e5c31af7Sopenharmony_ci #version 320 es 643e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 644e5c31af7Sopenharmony_ci in IOBlockName 645e5c31af7Sopenharmony_ci { 646e5c31af7Sopenharmony_ci mediump float var; 647e5c31af7Sopenharmony_ci } inputInstanceName[4]; 648e5c31af7Sopenharmony_ci out mediump float geo_out; 649e5c31af7Sopenharmony_ci void main() 650e5c31af7Sopenharmony_ci { 651e5c31af7Sopenharmony_ci geo_out = inputInstanceName[0].var; 652e5c31af7Sopenharmony_ci gl_Position = gl_in[0].gl_Position; 653e5c31af7Sopenharmony_ci EmitVertex(); 654e5c31af7Sopenharmony_ci geo_out = inputInstanceName[1].var; 655e5c31af7Sopenharmony_ci gl_Position = gl_in[1].gl_Position; 656e5c31af7Sopenharmony_ci EmitVertex(); 657e5c31af7Sopenharmony_ci geo_out = inputInstanceName[2].var + inputInstanceName[3].var; 658e5c31af7Sopenharmony_ci gl_Position = gl_in[2].gl_Position; 659e5c31af7Sopenharmony_ci EmitVertex(); 660e5c31af7Sopenharmony_ci } 661e5c31af7Sopenharmony_ci "" 662e5c31af7Sopenharmony_ci fragment "" 663e5c31af7Sopenharmony_ci #version 320 es 664e5c31af7Sopenharmony_ci precision mediump float; 665e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 666e5c31af7Sopenharmony_ci in mediump float geo_out; 667e5c31af7Sopenharmony_ci void main() 668e5c31af7Sopenharmony_ci { 669e5c31af7Sopenharmony_ci out0 = geo_out; 670e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 671e5c31af7Sopenharmony_ci } 672e5c31af7Sopenharmony_ci "" 673e5c31af7Sopenharmony_ci end 674e5c31af7Sopenharmony_ci 675e5c31af7Sopenharmony_ci case output_block 676e5c31af7Sopenharmony_ci version 320 es 677e5c31af7Sopenharmony_ci desc "Geometry shader output block" 678e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 679e5c31af7Sopenharmony_ci vertex "" 680e5c31af7Sopenharmony_ci #version 320 es 681e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 682e5c31af7Sopenharmony_ci void main() 683e5c31af7Sopenharmony_ci { 684e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 685e5c31af7Sopenharmony_ci } 686e5c31af7Sopenharmony_ci "" 687e5c31af7Sopenharmony_ci geometry "" 688e5c31af7Sopenharmony_ci #version 320 es 689e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 690e5c31af7Sopenharmony_ci out IOBlockName 691e5c31af7Sopenharmony_ci { 692e5c31af7Sopenharmony_ci mediump float var; 693e5c31af7Sopenharmony_ci } outputInstanceName; 694e5c31af7Sopenharmony_ci void main() 695e5c31af7Sopenharmony_ci { 696e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 697e5c31af7Sopenharmony_ci { 698e5c31af7Sopenharmony_ci outputInstanceName.var = 1.0; 699e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 700e5c31af7Sopenharmony_ci EmitVertex(); 701e5c31af7Sopenharmony_ci } 702e5c31af7Sopenharmony_ci } 703e5c31af7Sopenharmony_ci "" 704e5c31af7Sopenharmony_ci fragment "" 705e5c31af7Sopenharmony_ci #version 320 es 706e5c31af7Sopenharmony_ci precision mediump float; 707e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 708e5c31af7Sopenharmony_ci in IOBlockName 709e5c31af7Sopenharmony_ci { 710e5c31af7Sopenharmony_ci mediump float var; 711e5c31af7Sopenharmony_ci } inputInstanceName; 712e5c31af7Sopenharmony_ci void main() 713e5c31af7Sopenharmony_ci { 714e5c31af7Sopenharmony_ci out0 = inputInstanceName.var; 715e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 716e5c31af7Sopenharmony_ci } 717e5c31af7Sopenharmony_ci "" 718e5c31af7Sopenharmony_ci end 719e5c31af7Sopenharmony_ci 720e5c31af7Sopenharmony_ci case output_block_array 721e5c31af7Sopenharmony_ci version 320 es 722e5c31af7Sopenharmony_ci desc "Geometry shader output block array" 723e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 724e5c31af7Sopenharmony_ci vertex "" 725e5c31af7Sopenharmony_ci #version 320 es 726e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 727e5c31af7Sopenharmony_ci void main() 728e5c31af7Sopenharmony_ci { 729e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 730e5c31af7Sopenharmony_ci } 731e5c31af7Sopenharmony_ci "" 732e5c31af7Sopenharmony_ci geometry "" 733e5c31af7Sopenharmony_ci #version 320 es 734e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 735e5c31af7Sopenharmony_ci out IOBlockName 736e5c31af7Sopenharmony_ci { 737e5c31af7Sopenharmony_ci mediump float var; 738e5c31af7Sopenharmony_ci } outputInstanceName[2]; 739e5c31af7Sopenharmony_ci void main() 740e5c31af7Sopenharmony_ci { 741e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 742e5c31af7Sopenharmony_ci { 743e5c31af7Sopenharmony_ci outputInstanceName[0].var = 2.0; 744e5c31af7Sopenharmony_ci outputInstanceName[1].var = 1.0; 745e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 746e5c31af7Sopenharmony_ci EmitVertex(); 747e5c31af7Sopenharmony_ci } 748e5c31af7Sopenharmony_ci } 749e5c31af7Sopenharmony_ci "" 750e5c31af7Sopenharmony_ci fragment "" 751e5c31af7Sopenharmony_ci #version 320 es 752e5c31af7Sopenharmony_ci precision mediump float; 753e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 754e5c31af7Sopenharmony_ci in IOBlockName 755e5c31af7Sopenharmony_ci { 756e5c31af7Sopenharmony_ci mediump float var; 757e5c31af7Sopenharmony_ci } inputInstanceName[2]; 758e5c31af7Sopenharmony_ci void main() 759e5c31af7Sopenharmony_ci { 760e5c31af7Sopenharmony_ci out0 = inputInstanceName[0].var - inputInstanceName[1].var; 761e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 762e5c31af7Sopenharmony_ci } 763e5c31af7Sopenharmony_ci "" 764e5c31af7Sopenharmony_ci end 765e5c31af7Sopenharmony_ci 766e5c31af7Sopenharmony_ci case unspecified_input_primitive_type 767e5c31af7Sopenharmony_ci version 320 es 768e5c31af7Sopenharmony_ci desc "Geometry shader input type unspecified" 769e5c31af7Sopenharmony_ci expect compile_or_link_fail 770e5c31af7Sopenharmony_ci vertex "" 771e5c31af7Sopenharmony_ci #version 320 es 772e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 773e5c31af7Sopenharmony_ci void main() 774e5c31af7Sopenharmony_ci { 775e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 776e5c31af7Sopenharmony_ci } 777e5c31af7Sopenharmony_ci "" 778e5c31af7Sopenharmony_ci geometry "" 779e5c31af7Sopenharmony_ci #version 320 es 780e5c31af7Sopenharmony_ci layout (triangle_strip, max_vertices=3) out; 781e5c31af7Sopenharmony_ci void main() 782e5c31af7Sopenharmony_ci { 783e5c31af7Sopenharmony_ci gl_Position = vec4(0.0, 0.0, 0.0, 1.0); 784e5c31af7Sopenharmony_ci EmitVertex(); 785e5c31af7Sopenharmony_ci gl_Position = vec4(0.0, 1.0, 0.0, 1.0); 786e5c31af7Sopenharmony_ci EmitVertex(); 787e5c31af7Sopenharmony_ci gl_Position = vec4(1.0, 1.0, 0.0, 1.0); 788e5c31af7Sopenharmony_ci EmitVertex(); 789e5c31af7Sopenharmony_ci } 790e5c31af7Sopenharmony_ci "" 791e5c31af7Sopenharmony_ci fragment "" 792e5c31af7Sopenharmony_ci #version 320 es 793e5c31af7Sopenharmony_ci precision mediump float; 794e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 795e5c31af7Sopenharmony_ci void main() 796e5c31af7Sopenharmony_ci { 797e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 798e5c31af7Sopenharmony_ci } 799e5c31af7Sopenharmony_ci "" 800e5c31af7Sopenharmony_ci end 801e5c31af7Sopenharmony_ci 802e5c31af7Sopenharmony_ci case unspecified_output_primitive_type 803e5c31af7Sopenharmony_ci version 320 es 804e5c31af7Sopenharmony_ci desc "Geometry shader output type unspecified" 805e5c31af7Sopenharmony_ci expect compile_or_link_fail 806e5c31af7Sopenharmony_ci vertex "" 807e5c31af7Sopenharmony_ci #version 320 es 808e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 809e5c31af7Sopenharmony_ci void main() 810e5c31af7Sopenharmony_ci { 811e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 812e5c31af7Sopenharmony_ci } 813e5c31af7Sopenharmony_ci "" 814e5c31af7Sopenharmony_ci geometry "" 815e5c31af7Sopenharmony_ci #version 320 es 816e5c31af7Sopenharmony_ci layout (triangles) in; 817e5c31af7Sopenharmony_ci layout (max_vertices=3) out; 818e5c31af7Sopenharmony_ci void main() 819e5c31af7Sopenharmony_ci { 820e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 821e5c31af7Sopenharmony_ci { 822e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 823e5c31af7Sopenharmony_ci EmitVertex(); 824e5c31af7Sopenharmony_ci } 825e5c31af7Sopenharmony_ci } 826e5c31af7Sopenharmony_ci "" 827e5c31af7Sopenharmony_ci fragment "" 828e5c31af7Sopenharmony_ci #version 320 es 829e5c31af7Sopenharmony_ci precision mediump float; 830e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 831e5c31af7Sopenharmony_ci void main() 832e5c31af7Sopenharmony_ci { 833e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 834e5c31af7Sopenharmony_ci } 835e5c31af7Sopenharmony_ci "" 836e5c31af7Sopenharmony_ci end 837e5c31af7Sopenharmony_ci 838e5c31af7Sopenharmony_ci case unspecified_output_primitive_num_vertices 839e5c31af7Sopenharmony_ci version 320 es 840e5c31af7Sopenharmony_ci desc "Geometry shader output type unspecified" 841e5c31af7Sopenharmony_ci expect compile_or_link_fail 842e5c31af7Sopenharmony_ci vertex "" 843e5c31af7Sopenharmony_ci #version 320 es 844e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 845e5c31af7Sopenharmony_ci void main() 846e5c31af7Sopenharmony_ci { 847e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 848e5c31af7Sopenharmony_ci } 849e5c31af7Sopenharmony_ci "" 850e5c31af7Sopenharmony_ci geometry "" 851e5c31af7Sopenharmony_ci #version 320 es 852e5c31af7Sopenharmony_ci layout (triangles) in; 853e5c31af7Sopenharmony_ci layout (triangle_strip) out; 854e5c31af7Sopenharmony_ci void main() 855e5c31af7Sopenharmony_ci { 856e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 857e5c31af7Sopenharmony_ci { 858e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 859e5c31af7Sopenharmony_ci EmitVertex(); 860e5c31af7Sopenharmony_ci } 861e5c31af7Sopenharmony_ci } 862e5c31af7Sopenharmony_ci "" 863e5c31af7Sopenharmony_ci fragment "" 864e5c31af7Sopenharmony_ci #version 320 es 865e5c31af7Sopenharmony_ci precision mediump float; 866e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 867e5c31af7Sopenharmony_ci void main() 868e5c31af7Sopenharmony_ci { 869e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 870e5c31af7Sopenharmony_ci } 871e5c31af7Sopenharmony_ci "" 872e5c31af7Sopenharmony_ci end 873e5c31af7Sopenharmony_ci 874e5c31af7Sopenharmony_ci # access_more_than_available_input_vertices 875e5c31af7Sopenharmony_ci case access_more_than_available_input_vertices 876e5c31af7Sopenharmony_ci version 320 es 877e5c31af7Sopenharmony_ci desc "Geometry shader input block with explicit size" 878e5c31af7Sopenharmony_ci expect compile_or_link_fail 879e5c31af7Sopenharmony_ci vertex "" 880e5c31af7Sopenharmony_ci #version 320 es 881e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 882e5c31af7Sopenharmony_ci void main() 883e5c31af7Sopenharmony_ci { 884e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 885e5c31af7Sopenharmony_ci } 886e5c31af7Sopenharmony_ci "" 887e5c31af7Sopenharmony_ci geometry "" 888e5c31af7Sopenharmony_ci #version 320 es 889e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 890e5c31af7Sopenharmony_ci void main() 891e5c31af7Sopenharmony_ci { 892e5c31af7Sopenharmony_ci gl_Position = gl_in[0].gl_Position; 893e5c31af7Sopenharmony_ci EmitVertex(); 894e5c31af7Sopenharmony_ci gl_Position = gl_in[1].gl_Position; 895e5c31af7Sopenharmony_ci EmitVertex(); 896e5c31af7Sopenharmony_ci gl_Position = gl_in[4].gl_Position; // access more than available 897e5c31af7Sopenharmony_ci EmitVertex(); 898e5c31af7Sopenharmony_ci } 899e5c31af7Sopenharmony_ci "" 900e5c31af7Sopenharmony_ci fragment "" 901e5c31af7Sopenharmony_ci #version 320 es 902e5c31af7Sopenharmony_ci precision mediump float; 903e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 904e5c31af7Sopenharmony_ci void main() 905e5c31af7Sopenharmony_ci { 906e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 907e5c31af7Sopenharmony_ci } 908e5c31af7Sopenharmony_ci "" 909e5c31af7Sopenharmony_ci end 910e5c31af7Sopenharmony_ci end 911e5c31af7Sopenharmony_ci 912e5c31af7Sopenharmony_ci import "linkage_geometry_varying_types.test" 913e5c31af7Sopenharmony_ci 914e5c31af7Sopenharmony_ci group qualifiers "Varying qualifiers" 915e5c31af7Sopenharmony_ci case smooth 916e5c31af7Sopenharmony_ci version 320 es 917e5c31af7Sopenharmony_ci desc "varying with smooth interpolation" 918e5c31af7Sopenharmony_ci values 919e5c31af7Sopenharmony_ci { 920e5c31af7Sopenharmony_ci input float in0 = 1.0; 921e5c31af7Sopenharmony_ci output float out0 = 1.0; 922e5c31af7Sopenharmony_ci } 923e5c31af7Sopenharmony_ci vertex "" 924e5c31af7Sopenharmony_ci #version 320 es 925e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 926e5c31af7Sopenharmony_ci smooth out mediump float vtx_var; 927e5c31af7Sopenharmony_ci void main() 928e5c31af7Sopenharmony_ci { 929e5c31af7Sopenharmony_ci vtx_var = in0; 930e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 931e5c31af7Sopenharmony_ci } 932e5c31af7Sopenharmony_ci "" 933e5c31af7Sopenharmony_ci geometry "" 934e5c31af7Sopenharmony_ci #version 320 es 935e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 936e5c31af7Sopenharmony_ci smooth in mediump float vtx_var[]; 937e5c31af7Sopenharmony_ci smooth out mediump float geo_var; 938e5c31af7Sopenharmony_ci void main() 939e5c31af7Sopenharmony_ci { 940e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 941e5c31af7Sopenharmony_ci { 942e5c31af7Sopenharmony_ci geo_var = vtx_var[ndx]; 943e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 944e5c31af7Sopenharmony_ci EmitVertex(); 945e5c31af7Sopenharmony_ci } 946e5c31af7Sopenharmony_ci } 947e5c31af7Sopenharmony_ci "" 948e5c31af7Sopenharmony_ci fragment "" 949e5c31af7Sopenharmony_ci #version 320 es 950e5c31af7Sopenharmony_ci precision mediump float; 951e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 952e5c31af7Sopenharmony_ci smooth in float geo_var; 953e5c31af7Sopenharmony_ci void main() 954e5c31af7Sopenharmony_ci { 955e5c31af7Sopenharmony_ci out0 = geo_var; 956e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 957e5c31af7Sopenharmony_ci } 958e5c31af7Sopenharmony_ci "" 959e5c31af7Sopenharmony_ci end 960e5c31af7Sopenharmony_ci 961e5c31af7Sopenharmony_ci case flat 962e5c31af7Sopenharmony_ci version 320 es 963e5c31af7Sopenharmony_ci desc "varying with flat interpolation" 964e5c31af7Sopenharmony_ci values 965e5c31af7Sopenharmony_ci { 966e5c31af7Sopenharmony_ci input float in0 = 1.0; 967e5c31af7Sopenharmony_ci output float out0 = 1.0; 968e5c31af7Sopenharmony_ci } 969e5c31af7Sopenharmony_ci vertex "" 970e5c31af7Sopenharmony_ci #version 320 es 971e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 972e5c31af7Sopenharmony_ci flat out mediump float vtx_var; 973e5c31af7Sopenharmony_ci void main() 974e5c31af7Sopenharmony_ci { 975e5c31af7Sopenharmony_ci vtx_var = in0; 976e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 977e5c31af7Sopenharmony_ci } 978e5c31af7Sopenharmony_ci "" 979e5c31af7Sopenharmony_ci geometry "" 980e5c31af7Sopenharmony_ci #version 320 es 981e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 982e5c31af7Sopenharmony_ci flat in mediump float vtx_var[]; 983e5c31af7Sopenharmony_ci flat out mediump float geo_var; 984e5c31af7Sopenharmony_ci void main() 985e5c31af7Sopenharmony_ci { 986e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 987e5c31af7Sopenharmony_ci { 988e5c31af7Sopenharmony_ci geo_var = vtx_var[ndx]; 989e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 990e5c31af7Sopenharmony_ci EmitVertex(); 991e5c31af7Sopenharmony_ci } 992e5c31af7Sopenharmony_ci } 993e5c31af7Sopenharmony_ci "" 994e5c31af7Sopenharmony_ci fragment "" 995e5c31af7Sopenharmony_ci #version 320 es 996e5c31af7Sopenharmony_ci precision mediump float; 997e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 998e5c31af7Sopenharmony_ci flat in float geo_var; 999e5c31af7Sopenharmony_ci void main() 1000e5c31af7Sopenharmony_ci { 1001e5c31af7Sopenharmony_ci out0 = geo_var; 1002e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1003e5c31af7Sopenharmony_ci } 1004e5c31af7Sopenharmony_ci "" 1005e5c31af7Sopenharmony_ci end 1006e5c31af7Sopenharmony_ci 1007e5c31af7Sopenharmony_ci case centroid 1008e5c31af7Sopenharmony_ci version 320 es 1009e5c31af7Sopenharmony_ci desc "varying declared with centroid qualifier" 1010e5c31af7Sopenharmony_ci values 1011e5c31af7Sopenharmony_ci { 1012e5c31af7Sopenharmony_ci input float in0 = 1.0; 1013e5c31af7Sopenharmony_ci output float out0 = 1.0; 1014e5c31af7Sopenharmony_ci } 1015e5c31af7Sopenharmony_ci vertex "" 1016e5c31af7Sopenharmony_ci #version 320 es 1017e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1018e5c31af7Sopenharmony_ci centroid out mediump float vtx_var; 1019e5c31af7Sopenharmony_ci void main() 1020e5c31af7Sopenharmony_ci { 1021e5c31af7Sopenharmony_ci vtx_var = in0; 1022e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1023e5c31af7Sopenharmony_ci } 1024e5c31af7Sopenharmony_ci "" 1025e5c31af7Sopenharmony_ci geometry "" 1026e5c31af7Sopenharmony_ci #version 320 es 1027e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 1028e5c31af7Sopenharmony_ci centroid in mediump float vtx_var[]; 1029e5c31af7Sopenharmony_ci centroid out mediump float geo_var; 1030e5c31af7Sopenharmony_ci void main() 1031e5c31af7Sopenharmony_ci { 1032e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 1033e5c31af7Sopenharmony_ci { 1034e5c31af7Sopenharmony_ci geo_var = vtx_var[ndx]; 1035e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 1036e5c31af7Sopenharmony_ci EmitVertex(); 1037e5c31af7Sopenharmony_ci } 1038e5c31af7Sopenharmony_ci } 1039e5c31af7Sopenharmony_ci "" 1040e5c31af7Sopenharmony_ci fragment "" 1041e5c31af7Sopenharmony_ci #version 320 es 1042e5c31af7Sopenharmony_ci precision mediump float; 1043e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1044e5c31af7Sopenharmony_ci centroid in float geo_var; 1045e5c31af7Sopenharmony_ci void main() 1046e5c31af7Sopenharmony_ci { 1047e5c31af7Sopenharmony_ci out0 = geo_var; 1048e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1049e5c31af7Sopenharmony_ci } 1050e5c31af7Sopenharmony_ci "" 1051e5c31af7Sopenharmony_ci end 1052e5c31af7Sopenharmony_ci 1053e5c31af7Sopenharmony_ci case sample 1054e5c31af7Sopenharmony_ci version 320 es 1055e5c31af7Sopenharmony_ci desc "varying declared with sample qualifier" 1056e5c31af7Sopenharmony_ci values 1057e5c31af7Sopenharmony_ci { 1058e5c31af7Sopenharmony_ci input float in0 = 1.0; 1059e5c31af7Sopenharmony_ci output float out0 = 1.0; 1060e5c31af7Sopenharmony_ci } 1061e5c31af7Sopenharmony_ci vertex "" 1062e5c31af7Sopenharmony_ci #version 320 es 1063e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1064e5c31af7Sopenharmony_ci sample out mediump float vtx_var; 1065e5c31af7Sopenharmony_ci void main() 1066e5c31af7Sopenharmony_ci { 1067e5c31af7Sopenharmony_ci vtx_var = in0; 1068e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1069e5c31af7Sopenharmony_ci } 1070e5c31af7Sopenharmony_ci "" 1071e5c31af7Sopenharmony_ci geometry "" 1072e5c31af7Sopenharmony_ci #version 320 es 1073e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 1074e5c31af7Sopenharmony_ci sample in mediump float vtx_var[]; 1075e5c31af7Sopenharmony_ci sample out mediump float geo_var; 1076e5c31af7Sopenharmony_ci void main() 1077e5c31af7Sopenharmony_ci { 1078e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 1079e5c31af7Sopenharmony_ci { 1080e5c31af7Sopenharmony_ci geo_var = vtx_var[ndx]; 1081e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 1082e5c31af7Sopenharmony_ci EmitVertex(); 1083e5c31af7Sopenharmony_ci } 1084e5c31af7Sopenharmony_ci } 1085e5c31af7Sopenharmony_ci "" 1086e5c31af7Sopenharmony_ci fragment "" 1087e5c31af7Sopenharmony_ci #version 320 es 1088e5c31af7Sopenharmony_ci precision mediump float; 1089e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1090e5c31af7Sopenharmony_ci sample in float geo_var; 1091e5c31af7Sopenharmony_ci void main() 1092e5c31af7Sopenharmony_ci { 1093e5c31af7Sopenharmony_ci out0 = geo_var; 1094e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1095e5c31af7Sopenharmony_ci } 1096e5c31af7Sopenharmony_ci "" 1097e5c31af7Sopenharmony_ci end 1098e5c31af7Sopenharmony_ci end 1099e5c31af7Sopenharmony_ciend 1100e5c31af7Sopenharmony_ci 1101e5c31af7Sopenharmony_cigroup uniform "Uniform linkage" 1102e5c31af7Sopenharmony_ci group rules "Rules" 1103e5c31af7Sopenharmony_ci 1104e5c31af7Sopenharmony_ci case type_mismatch_1 1105e5c31af7Sopenharmony_ci version 320 es 1106e5c31af7Sopenharmony_ci desc "uniforms declared with different types" 1107e5c31af7Sopenharmony_ci expect link_fail 1108e5c31af7Sopenharmony_ci vertex "" 1109e5c31af7Sopenharmony_ci #version 320 es 1110e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1111e5c31af7Sopenharmony_ci uniform mediump float u_var; 1112e5c31af7Sopenharmony_ci out mediump float vtx_var; 1113e5c31af7Sopenharmony_ci void main() 1114e5c31af7Sopenharmony_ci { 1115e5c31af7Sopenharmony_ci vtx_var = u_var; 1116e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1117e5c31af7Sopenharmony_ci } 1118e5c31af7Sopenharmony_ci "" 1119e5c31af7Sopenharmony_ci geometry "" 1120e5c31af7Sopenharmony_ci #version 320 es 1121e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 1122e5c31af7Sopenharmony_ci uniform mediump vec4 u_var; 1123e5c31af7Sopenharmony_ci in mediump float vtx_var[]; 1124e5c31af7Sopenharmony_ci out mediump float geo_var; 1125e5c31af7Sopenharmony_ci void main() 1126e5c31af7Sopenharmony_ci { 1127e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 1128e5c31af7Sopenharmony_ci { 1129e5c31af7Sopenharmony_ci geo_var = vtx_var[ndx]; 1130e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position + u_var; 1131e5c31af7Sopenharmony_ci EmitVertex(); 1132e5c31af7Sopenharmony_ci } 1133e5c31af7Sopenharmony_ci } 1134e5c31af7Sopenharmony_ci "" 1135e5c31af7Sopenharmony_ci fragment "" 1136e5c31af7Sopenharmony_ci #version 320 es 1137e5c31af7Sopenharmony_ci precision mediump float; 1138e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1139e5c31af7Sopenharmony_ci in float geo_var; 1140e5c31af7Sopenharmony_ci void main() 1141e5c31af7Sopenharmony_ci { 1142e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(geo_var); 1143e5c31af7Sopenharmony_ci } 1144e5c31af7Sopenharmony_ci "" 1145e5c31af7Sopenharmony_ci end 1146e5c31af7Sopenharmony_ci 1147e5c31af7Sopenharmony_ci case type_mismatch_2 1148e5c31af7Sopenharmony_ci version 320 es 1149e5c31af7Sopenharmony_ci desc "uniforms declared with different types" 1150e5c31af7Sopenharmony_ci expect link_fail 1151e5c31af7Sopenharmony_ci require limit "GL_MAX_VERTEX_ATOMIC_COUNTERS" > 0 1152e5c31af7Sopenharmony_ci vertex "" 1153e5c31af7Sopenharmony_ci #version 320 es 1154e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1155e5c31af7Sopenharmony_ci layout(binding=0) uniform atomic_uint u_var; 1156e5c31af7Sopenharmony_ci out mediump float vtx_var; 1157e5c31af7Sopenharmony_ci void main() 1158e5c31af7Sopenharmony_ci { 1159e5c31af7Sopenharmony_ci uint result = atomicCounterIncrement(u_var); 1160e5c31af7Sopenharmony_ci vtx_var = float(result); 1161e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1162e5c31af7Sopenharmony_ci } 1163e5c31af7Sopenharmony_ci "" 1164e5c31af7Sopenharmony_ci geometry "" 1165e5c31af7Sopenharmony_ci #version 320 es 1166e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 1167e5c31af7Sopenharmony_ci uniform mediump vec4 u_var; 1168e5c31af7Sopenharmony_ci in mediump float vtx_var[]; 1169e5c31af7Sopenharmony_ci out mediump float geo_var; 1170e5c31af7Sopenharmony_ci void main() 1171e5c31af7Sopenharmony_ci { 1172e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 1173e5c31af7Sopenharmony_ci { 1174e5c31af7Sopenharmony_ci geo_var = vtx_var[ndx]; 1175e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position + u_var; 1176e5c31af7Sopenharmony_ci EmitVertex(); 1177e5c31af7Sopenharmony_ci } 1178e5c31af7Sopenharmony_ci } 1179e5c31af7Sopenharmony_ci "" 1180e5c31af7Sopenharmony_ci fragment "" 1181e5c31af7Sopenharmony_ci #version 320 es 1182e5c31af7Sopenharmony_ci precision mediump float; 1183e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1184e5c31af7Sopenharmony_ci in float geo_var; 1185e5c31af7Sopenharmony_ci void main() 1186e5c31af7Sopenharmony_ci { 1187e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(geo_var); 1188e5c31af7Sopenharmony_ci } 1189e5c31af7Sopenharmony_ci "" 1190e5c31af7Sopenharmony_ci end 1191e5c31af7Sopenharmony_ci 1192e5c31af7Sopenharmony_ci case type_mismatch_3 1193e5c31af7Sopenharmony_ci version 320 es 1194e5c31af7Sopenharmony_ci desc "uniforms declared with different types" 1195e5c31af7Sopenharmony_ci expect link_fail 1196e5c31af7Sopenharmony_ci require limit "GL_MAX_VERTEX_IMAGE_UNIFORMS" > 0 1197e5c31af7Sopenharmony_ci vertex "" 1198e5c31af7Sopenharmony_ci #version 320 es 1199e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1200e5c31af7Sopenharmony_ci layout(binding=0) layout(rgba8i) uniform readonly highp iimage2D u_var; 1201e5c31af7Sopenharmony_ci out mediump float vtx_var; 1202e5c31af7Sopenharmony_ci void main() 1203e5c31af7Sopenharmony_ci { 1204e5c31af7Sopenharmony_ci int result = imageSize(u_var).x; 1205e5c31af7Sopenharmony_ci vtx_var = float(result); 1206e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1207e5c31af7Sopenharmony_ci } 1208e5c31af7Sopenharmony_ci "" 1209e5c31af7Sopenharmony_ci geometry "" 1210e5c31af7Sopenharmony_ci #version 320 es 1211e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 1212e5c31af7Sopenharmony_ci uniform mediump vec4 u_var; 1213e5c31af7Sopenharmony_ci in mediump float vtx_var[]; 1214e5c31af7Sopenharmony_ci out mediump float geo_var; 1215e5c31af7Sopenharmony_ci void main() 1216e5c31af7Sopenharmony_ci { 1217e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 1218e5c31af7Sopenharmony_ci { 1219e5c31af7Sopenharmony_ci geo_var = vtx_var[ndx]; 1220e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position + u_var; 1221e5c31af7Sopenharmony_ci EmitVertex(); 1222e5c31af7Sopenharmony_ci } 1223e5c31af7Sopenharmony_ci } 1224e5c31af7Sopenharmony_ci "" 1225e5c31af7Sopenharmony_ci fragment "" 1226e5c31af7Sopenharmony_ci #version 320 es 1227e5c31af7Sopenharmony_ci precision mediump float; 1228e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1229e5c31af7Sopenharmony_ci in float geo_var; 1230e5c31af7Sopenharmony_ci void main() 1231e5c31af7Sopenharmony_ci { 1232e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(geo_var); 1233e5c31af7Sopenharmony_ci } 1234e5c31af7Sopenharmony_ci "" 1235e5c31af7Sopenharmony_ci end 1236e5c31af7Sopenharmony_ci 1237e5c31af7Sopenharmony_ci case precision_mismatch 1238e5c31af7Sopenharmony_ci version 320 es 1239e5c31af7Sopenharmony_ci desc "uniforms declared with different precisions" 1240e5c31af7Sopenharmony_ci expect link_fail 1241e5c31af7Sopenharmony_ci vertex "" 1242e5c31af7Sopenharmony_ci #version 320 es 1243e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1244e5c31af7Sopenharmony_ci uniform highp float u_var; 1245e5c31af7Sopenharmony_ci out mediump float vtx_var; 1246e5c31af7Sopenharmony_ci void main() 1247e5c31af7Sopenharmony_ci { 1248e5c31af7Sopenharmony_ci vtx_var = u_var; 1249e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1250e5c31af7Sopenharmony_ci } 1251e5c31af7Sopenharmony_ci "" 1252e5c31af7Sopenharmony_ci geometry "" 1253e5c31af7Sopenharmony_ci #version 320 es 1254e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 1255e5c31af7Sopenharmony_ci uniform mediump float u_var; 1256e5c31af7Sopenharmony_ci in mediump float vtx_var[]; 1257e5c31af7Sopenharmony_ci out mediump float geo_var; 1258e5c31af7Sopenharmony_ci void main() 1259e5c31af7Sopenharmony_ci { 1260e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 1261e5c31af7Sopenharmony_ci { 1262e5c31af7Sopenharmony_ci geo_var = vtx_var[ndx]; 1263e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position + vec4(u_var); 1264e5c31af7Sopenharmony_ci EmitVertex(); 1265e5c31af7Sopenharmony_ci } 1266e5c31af7Sopenharmony_ci } 1267e5c31af7Sopenharmony_ci "" 1268e5c31af7Sopenharmony_ci fragment "" 1269e5c31af7Sopenharmony_ci #version 320 es 1270e5c31af7Sopenharmony_ci precision mediump float; 1271e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1272e5c31af7Sopenharmony_ci in float geo_var; 1273e5c31af7Sopenharmony_ci void main() 1274e5c31af7Sopenharmony_ci { 1275e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(geo_var); 1276e5c31af7Sopenharmony_ci } 1277e5c31af7Sopenharmony_ci "" 1278e5c31af7Sopenharmony_ci end 1279e5c31af7Sopenharmony_ci 1280e5c31af7Sopenharmony_ci case struct_partial_usage 1281e5c31af7Sopenharmony_ci version 320 es 1282e5c31af7Sopenharmony_ci desc "uniforms struct used partially in different stages" 1283e5c31af7Sopenharmony_ci values 1284e5c31af7Sopenharmony_ci { 1285e5c31af7Sopenharmony_ci uniform float val.vtxValue = 1.0; 1286e5c31af7Sopenharmony_ci uniform float val.geoValue = 1.0; 1287e5c31af7Sopenharmony_ci uniform float val.frgValue = 1.0; 1288e5c31af7Sopenharmony_ci } 1289e5c31af7Sopenharmony_ci vertex "" 1290e5c31af7Sopenharmony_ci #version 320 es 1291e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1292e5c31af7Sopenharmony_ci struct S 1293e5c31af7Sopenharmony_ci { 1294e5c31af7Sopenharmony_ci mediump float vtxValue; 1295e5c31af7Sopenharmony_ci mediump float geoValue; 1296e5c31af7Sopenharmony_ci mediump float frgValue; 1297e5c31af7Sopenharmony_ci }; 1298e5c31af7Sopenharmony_ci uniform S val; 1299e5c31af7Sopenharmony_ci out mediump float vtx_var; 1300e5c31af7Sopenharmony_ci void main() 1301e5c31af7Sopenharmony_ci { 1302e5c31af7Sopenharmony_ci vtx_var = val.vtxValue; 1303e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1304e5c31af7Sopenharmony_ci } 1305e5c31af7Sopenharmony_ci "" 1306e5c31af7Sopenharmony_ci geometry "" 1307e5c31af7Sopenharmony_ci #version 320 es 1308e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 1309e5c31af7Sopenharmony_ci struct S 1310e5c31af7Sopenharmony_ci { 1311e5c31af7Sopenharmony_ci mediump float vtxValue; 1312e5c31af7Sopenharmony_ci mediump float geoValue; 1313e5c31af7Sopenharmony_ci mediump float frgValue; 1314e5c31af7Sopenharmony_ci }; 1315e5c31af7Sopenharmony_ci uniform S val; 1316e5c31af7Sopenharmony_ci in mediump float vtx_var[]; 1317e5c31af7Sopenharmony_ci out mediump float geo_var; 1318e5c31af7Sopenharmony_ci void main() 1319e5c31af7Sopenharmony_ci { 1320e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 1321e5c31af7Sopenharmony_ci { 1322e5c31af7Sopenharmony_ci geo_var = vtx_var[ndx] + val.geoValue; 1323e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 1324e5c31af7Sopenharmony_ci EmitVertex(); 1325e5c31af7Sopenharmony_ci } 1326e5c31af7Sopenharmony_ci } 1327e5c31af7Sopenharmony_ci "" 1328e5c31af7Sopenharmony_ci fragment "" 1329e5c31af7Sopenharmony_ci #version 320 es 1330e5c31af7Sopenharmony_ci precision mediump float; 1331e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1332e5c31af7Sopenharmony_ci struct S 1333e5c31af7Sopenharmony_ci { 1334e5c31af7Sopenharmony_ci mediump float vtxValue; 1335e5c31af7Sopenharmony_ci mediump float geoValue; 1336e5c31af7Sopenharmony_ci mediump float frgValue; 1337e5c31af7Sopenharmony_ci }; 1338e5c31af7Sopenharmony_ci uniform S val; 1339e5c31af7Sopenharmony_ci in float geo_var; 1340e5c31af7Sopenharmony_ci void main() 1341e5c31af7Sopenharmony_ci { 1342e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(geo_var + val.frgValue); 1343e5c31af7Sopenharmony_ci } 1344e5c31af7Sopenharmony_ci "" 1345e5c31af7Sopenharmony_ci end 1346e5c31af7Sopenharmony_ci end 1347e5c31af7Sopenharmony_ci 1348e5c31af7Sopenharmony_ci import "linkage_geometry_uniform_types.test" 1349e5c31af7Sopenharmony_ciend 1350