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