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 23e5c31af7Sopenharmony_ci case type_mismatch 24e5c31af7Sopenharmony_ci version 450 25e5c31af7Sopenharmony_ci desc "Tessellation output and geometry input type mismatch" 26e5c31af7Sopenharmony_ci expect link_fail 27e5c31af7Sopenharmony_ci values 28e5c31af7Sopenharmony_ci { 29e5c31af7Sopenharmony_ci input float in0 = 1.0; 30e5c31af7Sopenharmony_ci output float out0 = 1.0; 31e5c31af7Sopenharmony_ci } 32e5c31af7Sopenharmony_ci vertex "" 33e5c31af7Sopenharmony_ci #version 450 34e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 35e5c31af7Sopenharmony_ci out mediump float vtx_out; 36e5c31af7Sopenharmony_ci void main() 37e5c31af7Sopenharmony_ci { 38e5c31af7Sopenharmony_ci vtx_out = in0; 39e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 40e5c31af7Sopenharmony_ci } 41e5c31af7Sopenharmony_ci "" 42e5c31af7Sopenharmony_ci tessellation_control "" 43e5c31af7Sopenharmony_ci #version 450 44e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 45e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 46e5c31af7Sopenharmony_ci out mediump float tc_out[]; 47e5c31af7Sopenharmony_ci void main() 48e5c31af7Sopenharmony_ci { 49e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[gl_InvocationID]; 50e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 51e5c31af7Sopenharmony_ci } 52e5c31af7Sopenharmony_ci "" 53e5c31af7Sopenharmony_ci tessellation_evaluation "" 54e5c31af7Sopenharmony_ci #version 450 55e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 56e5c31af7Sopenharmony_ci in mediump float tc_out[]; 57e5c31af7Sopenharmony_ci out mediump float te_out; 58e5c31af7Sopenharmony_ci void main() 59e5c31af7Sopenharmony_ci { 60e5c31af7Sopenharmony_ci te_out = tc_out[2]; 61e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 62e5c31af7Sopenharmony_ci } 63e5c31af7Sopenharmony_ci "" 64e5c31af7Sopenharmony_ci geometry "" 65e5c31af7Sopenharmony_ci #version 450 66e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 67e5c31af7Sopenharmony_ci in mediump vec2 te_out[]; 68e5c31af7Sopenharmony_ci out mediump float geo_out; 69e5c31af7Sopenharmony_ci void main() 70e5c31af7Sopenharmony_ci { 71e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 72e5c31af7Sopenharmony_ci { 73e5c31af7Sopenharmony_ci geo_out = te_out[ndx].y; 74e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 75e5c31af7Sopenharmony_ci EmitVertex(); 76e5c31af7Sopenharmony_ci } 77e5c31af7Sopenharmony_ci } 78e5c31af7Sopenharmony_ci "" 79e5c31af7Sopenharmony_ci fragment "" 80e5c31af7Sopenharmony_ci #version 450 81e5c31af7Sopenharmony_ci precision mediump float; 82e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 83e5c31af7Sopenharmony_ci in mediump float geo_out; 84e5c31af7Sopenharmony_ci void main() 85e5c31af7Sopenharmony_ci { 86e5c31af7Sopenharmony_ci out0 = geo_out; 87e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 88e5c31af7Sopenharmony_ci } 89e5c31af7Sopenharmony_ci "" 90e5c31af7Sopenharmony_ci end 91e5c31af7Sopenharmony_ci 92e5c31af7Sopenharmony_ci case different_precision 93e5c31af7Sopenharmony_ci version 450 94e5c31af7Sopenharmony_ci desc "Tessellation output and geometry input precisions are different" 95e5c31af7Sopenharmony_ci values 96e5c31af7Sopenharmony_ci { 97e5c31af7Sopenharmony_ci input float in0 = 1.0; 98e5c31af7Sopenharmony_ci output float out0 = 1.0; 99e5c31af7Sopenharmony_ci } 100e5c31af7Sopenharmony_ci vertex "" 101e5c31af7Sopenharmony_ci #version 450 102e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 103e5c31af7Sopenharmony_ci out mediump float vtx_out; 104e5c31af7Sopenharmony_ci void main() 105e5c31af7Sopenharmony_ci { 106e5c31af7Sopenharmony_ci vtx_out = in0; 107e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 108e5c31af7Sopenharmony_ci } 109e5c31af7Sopenharmony_ci "" 110e5c31af7Sopenharmony_ci tessellation_control "" 111e5c31af7Sopenharmony_ci #version 450 112e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 113e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 114e5c31af7Sopenharmony_ci out mediump float tc_out[]; 115e5c31af7Sopenharmony_ci void main() 116e5c31af7Sopenharmony_ci { 117e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[gl_InvocationID]; 118e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 119e5c31af7Sopenharmony_ci } 120e5c31af7Sopenharmony_ci "" 121e5c31af7Sopenharmony_ci tessellation_evaluation "" 122e5c31af7Sopenharmony_ci #version 450 123e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 124e5c31af7Sopenharmony_ci in mediump float tc_out[]; 125e5c31af7Sopenharmony_ci out mediump float te_out; 126e5c31af7Sopenharmony_ci void main() 127e5c31af7Sopenharmony_ci { 128e5c31af7Sopenharmony_ci te_out = tc_out[2]; 129e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 130e5c31af7Sopenharmony_ci } 131e5c31af7Sopenharmony_ci "" 132e5c31af7Sopenharmony_ci geometry "" 133e5c31af7Sopenharmony_ci #version 450 134e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 135e5c31af7Sopenharmony_ci in highp float te_out[]; 136e5c31af7Sopenharmony_ci out mediump float geo_out; 137e5c31af7Sopenharmony_ci void main() 138e5c31af7Sopenharmony_ci { 139e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 140e5c31af7Sopenharmony_ci { 141e5c31af7Sopenharmony_ci geo_out = te_out[ndx]; 142e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 143e5c31af7Sopenharmony_ci EmitVertex(); 144e5c31af7Sopenharmony_ci } 145e5c31af7Sopenharmony_ci } 146e5c31af7Sopenharmony_ci "" 147e5c31af7Sopenharmony_ci fragment "" 148e5c31af7Sopenharmony_ci #version 450 149e5c31af7Sopenharmony_ci precision mediump float; 150e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 151e5c31af7Sopenharmony_ci in mediump float geo_out; 152e5c31af7Sopenharmony_ci void main() 153e5c31af7Sopenharmony_ci { 154e5c31af7Sopenharmony_ci out0 = geo_out; 155e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 156e5c31af7Sopenharmony_ci } 157e5c31af7Sopenharmony_ci "" 158e5c31af7Sopenharmony_ci end 159e5c31af7Sopenharmony_ci 160e5c31af7Sopenharmony_ci case superfluous_output_declaration 161e5c31af7Sopenharmony_ci version 450 162e5c31af7Sopenharmony_ci desc "Tessellation shader output is never used" 163e5c31af7Sopenharmony_ci values 164e5c31af7Sopenharmony_ci { 165e5c31af7Sopenharmony_ci input float in0 = 1.0; 166e5c31af7Sopenharmony_ci output float out0 = 1.0; 167e5c31af7Sopenharmony_ci } 168e5c31af7Sopenharmony_ci vertex "" 169e5c31af7Sopenharmony_ci #version 450 170e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 171e5c31af7Sopenharmony_ci out mediump float vtx_out; 172e5c31af7Sopenharmony_ci void main() 173e5c31af7Sopenharmony_ci { 174e5c31af7Sopenharmony_ci vtx_out = in0; 175e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 176e5c31af7Sopenharmony_ci } 177e5c31af7Sopenharmony_ci "" 178e5c31af7Sopenharmony_ci tessellation_control "" 179e5c31af7Sopenharmony_ci #version 450 180e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 181e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 182e5c31af7Sopenharmony_ci out mediump float tc_out[]; 183e5c31af7Sopenharmony_ci void main() 184e5c31af7Sopenharmony_ci { 185e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[gl_InvocationID]; 186e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 187e5c31af7Sopenharmony_ci } 188e5c31af7Sopenharmony_ci "" 189e5c31af7Sopenharmony_ci tessellation_evaluation "" 190e5c31af7Sopenharmony_ci #version 450 191e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 192e5c31af7Sopenharmony_ci in mediump float tc_out[]; 193e5c31af7Sopenharmony_ci out mediump float te_out; 194e5c31af7Sopenharmony_ci out mediump float te_out_nonexistent; 195e5c31af7Sopenharmony_ci void main() 196e5c31af7Sopenharmony_ci { 197e5c31af7Sopenharmony_ci te_out = tc_out[2]; 198e5c31af7Sopenharmony_ci te_out_nonexistent = tc_out[0]; 199e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 200e5c31af7Sopenharmony_ci } 201e5c31af7Sopenharmony_ci "" 202e5c31af7Sopenharmony_ci geometry "" 203e5c31af7Sopenharmony_ci #version 450 204e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 205e5c31af7Sopenharmony_ci in mediump float te_out[]; 206e5c31af7Sopenharmony_ci out mediump float geo_out; 207e5c31af7Sopenharmony_ci void main() 208e5c31af7Sopenharmony_ci { 209e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 210e5c31af7Sopenharmony_ci { 211e5c31af7Sopenharmony_ci geo_out = te_out[ndx]; 212e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 213e5c31af7Sopenharmony_ci EmitVertex(); 214e5c31af7Sopenharmony_ci } 215e5c31af7Sopenharmony_ci } 216e5c31af7Sopenharmony_ci "" 217e5c31af7Sopenharmony_ci fragment "" 218e5c31af7Sopenharmony_ci #version 450 219e5c31af7Sopenharmony_ci precision mediump float; 220e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 221e5c31af7Sopenharmony_ci in mediump float geo_out; 222e5c31af7Sopenharmony_ci void main() 223e5c31af7Sopenharmony_ci { 224e5c31af7Sopenharmony_ci out0 = geo_out; 225e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 226e5c31af7Sopenharmony_ci } 227e5c31af7Sopenharmony_ci "" 228e5c31af7Sopenharmony_ci end 229e5c31af7Sopenharmony_ci 230e5c31af7Sopenharmony_ci case vertex_geometry_same_varying_name_1 231e5c31af7Sopenharmony_ci version 450 232e5c31af7Sopenharmony_ci desc "Vertex output and geometry input share the same name" 233e5c31af7Sopenharmony_ci values 234e5c31af7Sopenharmony_ci { 235e5c31af7Sopenharmony_ci input float in0 = 1.0; 236e5c31af7Sopenharmony_ci output float out0 = 1.0; 237e5c31af7Sopenharmony_ci } 238e5c31af7Sopenharmony_ci vertex "" 239e5c31af7Sopenharmony_ci #version 450 240e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 241e5c31af7Sopenharmony_ci out mediump float sharedVaringName; 242e5c31af7Sopenharmony_ci void main() 243e5c31af7Sopenharmony_ci { 244e5c31af7Sopenharmony_ci sharedVaringName = in0; 245e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 246e5c31af7Sopenharmony_ci } 247e5c31af7Sopenharmony_ci "" 248e5c31af7Sopenharmony_ci tessellation_control "" 249e5c31af7Sopenharmony_ci #version 450 250e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 251e5c31af7Sopenharmony_ci in mediump float sharedVaringName[]; 252e5c31af7Sopenharmony_ci out mediump float tc_out[]; 253e5c31af7Sopenharmony_ci void main() 254e5c31af7Sopenharmony_ci { 255e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = sharedVaringName[gl_InvocationID]; 256e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 257e5c31af7Sopenharmony_ci } 258e5c31af7Sopenharmony_ci "" 259e5c31af7Sopenharmony_ci tessellation_evaluation "" 260e5c31af7Sopenharmony_ci #version 450 261e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 262e5c31af7Sopenharmony_ci in mediump float tc_out[]; 263e5c31af7Sopenharmony_ci out mediump float sharedVaringName; 264e5c31af7Sopenharmony_ci void main() 265e5c31af7Sopenharmony_ci { 266e5c31af7Sopenharmony_ci sharedVaringName = tc_out[2]; 267e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 268e5c31af7Sopenharmony_ci } 269e5c31af7Sopenharmony_ci "" 270e5c31af7Sopenharmony_ci geometry "" 271e5c31af7Sopenharmony_ci #version 450 272e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 273e5c31af7Sopenharmony_ci in mediump float sharedVaringName[]; 274e5c31af7Sopenharmony_ci out mediump float geo_out; 275e5c31af7Sopenharmony_ci void main() 276e5c31af7Sopenharmony_ci { 277e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 278e5c31af7Sopenharmony_ci { 279e5c31af7Sopenharmony_ci geo_out = sharedVaringName[ndx]; 280e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 281e5c31af7Sopenharmony_ci EmitVertex(); 282e5c31af7Sopenharmony_ci } 283e5c31af7Sopenharmony_ci } 284e5c31af7Sopenharmony_ci "" 285e5c31af7Sopenharmony_ci fragment "" 286e5c31af7Sopenharmony_ci #version 450 287e5c31af7Sopenharmony_ci precision mediump float; 288e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 289e5c31af7Sopenharmony_ci in mediump float geo_out; 290e5c31af7Sopenharmony_ci void main() 291e5c31af7Sopenharmony_ci { 292e5c31af7Sopenharmony_ci out0 = geo_out; 293e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 294e5c31af7Sopenharmony_ci } 295e5c31af7Sopenharmony_ci "" 296e5c31af7Sopenharmony_ci end 297e5c31af7Sopenharmony_ci 298e5c31af7Sopenharmony_ci case vertex_geometry_same_varying_name_2 299e5c31af7Sopenharmony_ci version 450 300e5c31af7Sopenharmony_ci desc "Vertex output and geometry input share the same name" 301e5c31af7Sopenharmony_ci values 302e5c31af7Sopenharmony_ci { 303e5c31af7Sopenharmony_ci input vec2 in0 = vec2(1.0, 1.0); 304e5c31af7Sopenharmony_ci output float out0 = 1.0; 305e5c31af7Sopenharmony_ci } 306e5c31af7Sopenharmony_ci vertex "" 307e5c31af7Sopenharmony_ci #version 450 308e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 309e5c31af7Sopenharmony_ci out mediump vec2 sharedVaringName; 310e5c31af7Sopenharmony_ci void main() 311e5c31af7Sopenharmony_ci { 312e5c31af7Sopenharmony_ci sharedVaringName = in0; 313e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 314e5c31af7Sopenharmony_ci } 315e5c31af7Sopenharmony_ci "" 316e5c31af7Sopenharmony_ci tessellation_control "" 317e5c31af7Sopenharmony_ci #version 450 318e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 319e5c31af7Sopenharmony_ci in mediump vec2 sharedVaringName[]; 320e5c31af7Sopenharmony_ci out mediump float tc_out[]; 321e5c31af7Sopenharmony_ci void main() 322e5c31af7Sopenharmony_ci { 323e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = 2.0 * sharedVaringName[gl_InvocationID].x - sharedVaringName[gl_InvocationID].y; 324e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 325e5c31af7Sopenharmony_ci } 326e5c31af7Sopenharmony_ci "" 327e5c31af7Sopenharmony_ci tessellation_evaluation "" 328e5c31af7Sopenharmony_ci #version 450 329e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 330e5c31af7Sopenharmony_ci in mediump float tc_out[]; 331e5c31af7Sopenharmony_ci out mediump float sharedVaringName; 332e5c31af7Sopenharmony_ci void main() 333e5c31af7Sopenharmony_ci { 334e5c31af7Sopenharmony_ci sharedVaringName = tc_out[2]; 335e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 336e5c31af7Sopenharmony_ci } 337e5c31af7Sopenharmony_ci "" 338e5c31af7Sopenharmony_ci geometry "" 339e5c31af7Sopenharmony_ci #version 450 340e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 341e5c31af7Sopenharmony_ci in mediump float sharedVaringName[]; 342e5c31af7Sopenharmony_ci out mediump float geo_out; 343e5c31af7Sopenharmony_ci void main() 344e5c31af7Sopenharmony_ci { 345e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 346e5c31af7Sopenharmony_ci { 347e5c31af7Sopenharmony_ci geo_out = sharedVaringName[ndx]; 348e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 349e5c31af7Sopenharmony_ci EmitVertex(); 350e5c31af7Sopenharmony_ci } 351e5c31af7Sopenharmony_ci } 352e5c31af7Sopenharmony_ci "" 353e5c31af7Sopenharmony_ci fragment "" 354e5c31af7Sopenharmony_ci #version 450 355e5c31af7Sopenharmony_ci precision mediump float; 356e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 357e5c31af7Sopenharmony_ci in mediump float geo_out; 358e5c31af7Sopenharmony_ci void main() 359e5c31af7Sopenharmony_ci { 360e5c31af7Sopenharmony_ci out0 = geo_out; 361e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 362e5c31af7Sopenharmony_ci } 363e5c31af7Sopenharmony_ci "" 364e5c31af7Sopenharmony_ci end 365e5c31af7Sopenharmony_ci 366e5c31af7Sopenharmony_ci case io_block 367e5c31af7Sopenharmony_ci version 450 368e5c31af7Sopenharmony_ci desc "Use of io block between tessellation and geometry shaders" 369e5c31af7Sopenharmony_ci values 370e5c31af7Sopenharmony_ci { 371e5c31af7Sopenharmony_ci input float in0 = 1.0; 372e5c31af7Sopenharmony_ci output float out0 = 1.0; 373e5c31af7Sopenharmony_ci } 374e5c31af7Sopenharmony_ci vertex "" 375e5c31af7Sopenharmony_ci #version 450 376e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 377e5c31af7Sopenharmony_ci out mediump float vtx_out; 378e5c31af7Sopenharmony_ci void main() 379e5c31af7Sopenharmony_ci { 380e5c31af7Sopenharmony_ci vtx_out = in0; 381e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 382e5c31af7Sopenharmony_ci } 383e5c31af7Sopenharmony_ci "" 384e5c31af7Sopenharmony_ci tessellation_control "" 385e5c31af7Sopenharmony_ci #version 450 386e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 387e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 388e5c31af7Sopenharmony_ci out mediump float tc_out[]; 389e5c31af7Sopenharmony_ci void main() 390e5c31af7Sopenharmony_ci { 391e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[gl_InvocationID]; 392e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 393e5c31af7Sopenharmony_ci } 394e5c31af7Sopenharmony_ci "" 395e5c31af7Sopenharmony_ci tessellation_evaluation "" 396e5c31af7Sopenharmony_ci #version 450 397e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 398e5c31af7Sopenharmony_ci in mediump float tc_out[]; 399e5c31af7Sopenharmony_ci out IOBlockName { mediump float val; } instanceName; 400e5c31af7Sopenharmony_ci void main() 401e5c31af7Sopenharmony_ci { 402e5c31af7Sopenharmony_ci instanceName.val = tc_out[2]; 403e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 404e5c31af7Sopenharmony_ci } 405e5c31af7Sopenharmony_ci "" 406e5c31af7Sopenharmony_ci geometry "" 407e5c31af7Sopenharmony_ci #version 450 408e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 409e5c31af7Sopenharmony_ci in IOBlockName { mediump float val; } instanceName[]; 410e5c31af7Sopenharmony_ci out mediump float geo_out; 411e5c31af7Sopenharmony_ci void main() 412e5c31af7Sopenharmony_ci { 413e5c31af7Sopenharmony_ci geo_out = instanceName[0].val; 414e5c31af7Sopenharmony_ci gl_Position = gl_in[0].gl_Position; 415e5c31af7Sopenharmony_ci EmitVertex(); 416e5c31af7Sopenharmony_ci 417e5c31af7Sopenharmony_ci geo_out = instanceName[1].val; 418e5c31af7Sopenharmony_ci gl_Position = gl_in[1].gl_Position; 419e5c31af7Sopenharmony_ci EmitVertex(); 420e5c31af7Sopenharmony_ci 421e5c31af7Sopenharmony_ci geo_out = instanceName[2].val; 422e5c31af7Sopenharmony_ci gl_Position = gl_in[2].gl_Position; 423e5c31af7Sopenharmony_ci EmitVertex(); 424e5c31af7Sopenharmony_ci } 425e5c31af7Sopenharmony_ci "" 426e5c31af7Sopenharmony_ci fragment "" 427e5c31af7Sopenharmony_ci #version 450 428e5c31af7Sopenharmony_ci precision mediump float; 429e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 430e5c31af7Sopenharmony_ci in mediump float geo_out; 431e5c31af7Sopenharmony_ci void main() 432e5c31af7Sopenharmony_ci { 433e5c31af7Sopenharmony_ci out0 = geo_out; 434e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 435e5c31af7Sopenharmony_ci } 436e5c31af7Sopenharmony_ci "" 437e5c31af7Sopenharmony_ci end 438e5c31af7Sopenharmony_ci 439e5c31af7Sopenharmony_ci case array_in_io_block 440e5c31af7Sopenharmony_ci version 450 441e5c31af7Sopenharmony_ci desc "Float array in a io block between tessellation and geometry shaders" 442e5c31af7Sopenharmony_ci values 443e5c31af7Sopenharmony_ci { 444e5c31af7Sopenharmony_ci input float in0 = 1.0; 445e5c31af7Sopenharmony_ci output float out0 = 1.0; 446e5c31af7Sopenharmony_ci } 447e5c31af7Sopenharmony_ci vertex "" 448e5c31af7Sopenharmony_ci #version 450 449e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 450e5c31af7Sopenharmony_ci out mediump float vtx_out; 451e5c31af7Sopenharmony_ci void main() 452e5c31af7Sopenharmony_ci { 453e5c31af7Sopenharmony_ci vtx_out = in0; 454e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 455e5c31af7Sopenharmony_ci } 456e5c31af7Sopenharmony_ci "" 457e5c31af7Sopenharmony_ci tessellation_control "" 458e5c31af7Sopenharmony_ci #version 450 459e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 460e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 461e5c31af7Sopenharmony_ci out mediump float tc_out[]; 462e5c31af7Sopenharmony_ci void main() 463e5c31af7Sopenharmony_ci { 464e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[gl_InvocationID]; 465e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 466e5c31af7Sopenharmony_ci } 467e5c31af7Sopenharmony_ci "" 468e5c31af7Sopenharmony_ci tessellation_evaluation "" 469e5c31af7Sopenharmony_ci #version 450 470e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 471e5c31af7Sopenharmony_ci in mediump float tc_out[]; 472e5c31af7Sopenharmony_ci out IOBlockName { mediump float val[2]; } instanceName; 473e5c31af7Sopenharmony_ci void main() 474e5c31af7Sopenharmony_ci { 475e5c31af7Sopenharmony_ci instanceName.val[0] = tc_out[2] + 1.0; 476e5c31af7Sopenharmony_ci instanceName.val[1] = -1.0; 477e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 478e5c31af7Sopenharmony_ci } 479e5c31af7Sopenharmony_ci "" 480e5c31af7Sopenharmony_ci geometry "" 481e5c31af7Sopenharmony_ci #version 450 482e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 483e5c31af7Sopenharmony_ci in IOBlockName { mediump float val[2]; } instanceName[]; 484e5c31af7Sopenharmony_ci out mediump float geo_out; 485e5c31af7Sopenharmony_ci void main() 486e5c31af7Sopenharmony_ci { 487e5c31af7Sopenharmony_ci geo_out = instanceName[0].val[0] + instanceName[0].val[1]; 488e5c31af7Sopenharmony_ci gl_Position = gl_in[0].gl_Position; 489e5c31af7Sopenharmony_ci EmitVertex(); 490e5c31af7Sopenharmony_ci 491e5c31af7Sopenharmony_ci geo_out = instanceName[1].val[0] + instanceName[1].val[1]; 492e5c31af7Sopenharmony_ci gl_Position = gl_in[1].gl_Position; 493e5c31af7Sopenharmony_ci EmitVertex(); 494e5c31af7Sopenharmony_ci 495e5c31af7Sopenharmony_ci geo_out = instanceName[2].val[0] + instanceName[2].val[1]; 496e5c31af7Sopenharmony_ci gl_Position = gl_in[2].gl_Position; 497e5c31af7Sopenharmony_ci EmitVertex(); 498e5c31af7Sopenharmony_ci } 499e5c31af7Sopenharmony_ci "" 500e5c31af7Sopenharmony_ci fragment "" 501e5c31af7Sopenharmony_ci #version 450 502e5c31af7Sopenharmony_ci precision mediump float; 503e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 504e5c31af7Sopenharmony_ci in mediump float geo_out; 505e5c31af7Sopenharmony_ci void main() 506e5c31af7Sopenharmony_ci { 507e5c31af7Sopenharmony_ci out0 = geo_out; 508e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 509e5c31af7Sopenharmony_ci } 510e5c31af7Sopenharmony_ci "" 511e5c31af7Sopenharmony_ci end 512e5c31af7Sopenharmony_ci end 513e5c31af7Sopenharmony_ci 514e5c31af7Sopenharmony_ci import "linkage_tessellation_geometry_varying_types.test" 515e5c31af7Sopenharmony_ciend 516e5c31af7Sopenharmony_ci 517e5c31af7Sopenharmony_cigroup uniform "Uniform linkage" 518e5c31af7Sopenharmony_ci group rules "Rules" 519e5c31af7Sopenharmony_ci case type_mismatch_1 520e5c31af7Sopenharmony_ci version 450 521e5c31af7Sopenharmony_ci desc "Uniform type mismatch" 522e5c31af7Sopenharmony_ci expect link_fail 523e5c31af7Sopenharmony_ci vertex "" 524e5c31af7Sopenharmony_ci #version 450 525e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 526e5c31af7Sopenharmony_ci void main() 527e5c31af7Sopenharmony_ci { 528e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 529e5c31af7Sopenharmony_ci } 530e5c31af7Sopenharmony_ci "" 531e5c31af7Sopenharmony_ci tessellation_control "" 532e5c31af7Sopenharmony_ci #version 450 533e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 534e5c31af7Sopenharmony_ci void main() 535e5c31af7Sopenharmony_ci { 536e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 537e5c31af7Sopenharmony_ci } 538e5c31af7Sopenharmony_ci "" 539e5c31af7Sopenharmony_ci tessellation_evaluation "" 540e5c31af7Sopenharmony_ci #version 450 541e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 542e5c31af7Sopenharmony_ci uniform mediump float u_value; 543e5c31af7Sopenharmony_ci out mediump float te_out; 544e5c31af7Sopenharmony_ci void main() 545e5c31af7Sopenharmony_ci { 546e5c31af7Sopenharmony_ci te_out = u_value; 547e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 548e5c31af7Sopenharmony_ci } 549e5c31af7Sopenharmony_ci "" 550e5c31af7Sopenharmony_ci geometry "" 551e5c31af7Sopenharmony_ci #version 450 552e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 553e5c31af7Sopenharmony_ci uniform mediump vec2 u_value; 554e5c31af7Sopenharmony_ci in mediump float te_out[]; 555e5c31af7Sopenharmony_ci out mediump float geo_out; 556e5c31af7Sopenharmony_ci void main() 557e5c31af7Sopenharmony_ci { 558e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 559e5c31af7Sopenharmony_ci { 560e5c31af7Sopenharmony_ci geo_out = te_out[ndx] + u_value.y; 561e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 562e5c31af7Sopenharmony_ci EmitVertex(); 563e5c31af7Sopenharmony_ci } 564e5c31af7Sopenharmony_ci } 565e5c31af7Sopenharmony_ci "" 566e5c31af7Sopenharmony_ci fragment "" 567e5c31af7Sopenharmony_ci #version 450 568e5c31af7Sopenharmony_ci precision mediump float; 569e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 570e5c31af7Sopenharmony_ci in mediump float geo_out; 571e5c31af7Sopenharmony_ci void main() 572e5c31af7Sopenharmony_ci { 573e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(geo_out); 574e5c31af7Sopenharmony_ci } 575e5c31af7Sopenharmony_ci "" 576e5c31af7Sopenharmony_ci end 577e5c31af7Sopenharmony_ci 578e5c31af7Sopenharmony_ci case struct_partial_usage 579e5c31af7Sopenharmony_ci version 450 580e5c31af7Sopenharmony_ci desc "Uniform precision mismatch" 581e5c31af7Sopenharmony_ci values 582e5c31af7Sopenharmony_ci { 583e5c31af7Sopenharmony_ci uniform float u_value.teVal = 1.0; 584e5c31af7Sopenharmony_ci uniform float u_value.geoVal = 2.0; 585e5c31af7Sopenharmony_ci output float out0 = 5.0; 586e5c31af7Sopenharmony_ci } 587e5c31af7Sopenharmony_ci vertex "" 588e5c31af7Sopenharmony_ci #version 450 589e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 590e5c31af7Sopenharmony_ci void main() 591e5c31af7Sopenharmony_ci { 592e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 593e5c31af7Sopenharmony_ci } 594e5c31af7Sopenharmony_ci "" 595e5c31af7Sopenharmony_ci tessellation_control "" 596e5c31af7Sopenharmony_ci #version 450 597e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 598e5c31af7Sopenharmony_ci void main() 599e5c31af7Sopenharmony_ci { 600e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 601e5c31af7Sopenharmony_ci } 602e5c31af7Sopenharmony_ci "" 603e5c31af7Sopenharmony_ci tessellation_evaluation "" 604e5c31af7Sopenharmony_ci #version 450 605e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 606e5c31af7Sopenharmony_ci struct S 607e5c31af7Sopenharmony_ci { 608e5c31af7Sopenharmony_ci mediump float teVal; 609e5c31af7Sopenharmony_ci mediump float geoVal; 610e5c31af7Sopenharmony_ci }; 611e5c31af7Sopenharmony_ci uniform S u_value; 612e5c31af7Sopenharmony_ci out mediump float te_out; 613e5c31af7Sopenharmony_ci void main() 614e5c31af7Sopenharmony_ci { 615e5c31af7Sopenharmony_ci te_out = u_value.teVal; 616e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 617e5c31af7Sopenharmony_ci } 618e5c31af7Sopenharmony_ci "" 619e5c31af7Sopenharmony_ci geometry "" 620e5c31af7Sopenharmony_ci #version 450 621e5c31af7Sopenharmony_ci ${GEOMETRY_DECLARATIONS} 622e5c31af7Sopenharmony_ci struct S 623e5c31af7Sopenharmony_ci { 624e5c31af7Sopenharmony_ci mediump float teVal; 625e5c31af7Sopenharmony_ci mediump float geoVal; 626e5c31af7Sopenharmony_ci }; 627e5c31af7Sopenharmony_ci uniform S u_value; 628e5c31af7Sopenharmony_ci in mediump float te_out[]; 629e5c31af7Sopenharmony_ci out mediump float geo_out; 630e5c31af7Sopenharmony_ci void main() 631e5c31af7Sopenharmony_ci { 632e5c31af7Sopenharmony_ci for (int ndx = 0; ndx < gl_in.length(); ++ndx) 633e5c31af7Sopenharmony_ci { 634e5c31af7Sopenharmony_ci geo_out = te_out[ndx] + 2.0 * u_value.geoVal; 635e5c31af7Sopenharmony_ci gl_Position = gl_in[ndx].gl_Position; 636e5c31af7Sopenharmony_ci EmitVertex(); 637e5c31af7Sopenharmony_ci } 638e5c31af7Sopenharmony_ci } 639e5c31af7Sopenharmony_ci "" 640e5c31af7Sopenharmony_ci fragment "" 641e5c31af7Sopenharmony_ci #version 450 642e5c31af7Sopenharmony_ci precision mediump float; 643e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 644e5c31af7Sopenharmony_ci in mediump float geo_out; 645e5c31af7Sopenharmony_ci void main() 646e5c31af7Sopenharmony_ci { 647e5c31af7Sopenharmony_ci out0 = geo_out; 648e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 649e5c31af7Sopenharmony_ci } 650e5c31af7Sopenharmony_ci "" 651e5c31af7Sopenharmony_ci end 652e5c31af7Sopenharmony_ci end 653e5c31af7Sopenharmony_ciend 654