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 input_type_mismatch 24e5c31af7Sopenharmony_ci version 320 es 25e5c31af7Sopenharmony_ci desc "Tessellation control shader 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 320 es 34e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 35e5c31af7Sopenharmony_ci out mediump float tc_in; 36e5c31af7Sopenharmony_ci void main() 37e5c31af7Sopenharmony_ci { 38e5c31af7Sopenharmony_ci tc_in = in0; 39e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 40e5c31af7Sopenharmony_ci } 41e5c31af7Sopenharmony_ci "" 42e5c31af7Sopenharmony_ci tessellation_control "" 43e5c31af7Sopenharmony_ci #version 320 es 44e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 45e5c31af7Sopenharmony_ci in mediump vec2 tc_in[]; 46e5c31af7Sopenharmony_ci out mediump float tc_out[]; 47e5c31af7Sopenharmony_ci void main() 48e5c31af7Sopenharmony_ci { 49e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID].x; 50e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 51e5c31af7Sopenharmony_ci } 52e5c31af7Sopenharmony_ci "" 53e5c31af7Sopenharmony_ci tessellation_evaluation "" 54e5c31af7Sopenharmony_ci #version 320 es 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 fragment "" 65e5c31af7Sopenharmony_ci #version 320 es 66e5c31af7Sopenharmony_ci precision mediump float; 67e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 68e5c31af7Sopenharmony_ci in mediump float te_out; 69e5c31af7Sopenharmony_ci void main() 70e5c31af7Sopenharmony_ci { 71e5c31af7Sopenharmony_ci out0 = te_out; 72e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 73e5c31af7Sopenharmony_ci } 74e5c31af7Sopenharmony_ci "" 75e5c31af7Sopenharmony_ci end 76e5c31af7Sopenharmony_ci 77e5c31af7Sopenharmony_ci case output_type_mismatch 78e5c31af7Sopenharmony_ci version 320 es 79e5c31af7Sopenharmony_ci desc "Tessellation evaluation shader output type mismatch" 80e5c31af7Sopenharmony_ci expect link_fail 81e5c31af7Sopenharmony_ci values 82e5c31af7Sopenharmony_ci { 83e5c31af7Sopenharmony_ci input float in0 = 1.0; 84e5c31af7Sopenharmony_ci output float out0 = 1.0; 85e5c31af7Sopenharmony_ci } 86e5c31af7Sopenharmony_ci vertex "" 87e5c31af7Sopenharmony_ci #version 320 es 88e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 89e5c31af7Sopenharmony_ci out mediump float tc_in; 90e5c31af7Sopenharmony_ci void main() 91e5c31af7Sopenharmony_ci { 92e5c31af7Sopenharmony_ci tc_in = in0; 93e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 94e5c31af7Sopenharmony_ci } 95e5c31af7Sopenharmony_ci "" 96e5c31af7Sopenharmony_ci tessellation_control "" 97e5c31af7Sopenharmony_ci #version 320 es 98e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 99e5c31af7Sopenharmony_ci in mediump float tc_in[]; 100e5c31af7Sopenharmony_ci out mediump float tc_out[]; 101e5c31af7Sopenharmony_ci void main() 102e5c31af7Sopenharmony_ci { 103e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 104e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 105e5c31af7Sopenharmony_ci } 106e5c31af7Sopenharmony_ci "" 107e5c31af7Sopenharmony_ci tessellation_evaluation "" 108e5c31af7Sopenharmony_ci #version 320 es 109e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 110e5c31af7Sopenharmony_ci in mediump float tc_out[]; 111e5c31af7Sopenharmony_ci out mediump float te_out; 112e5c31af7Sopenharmony_ci void main() 113e5c31af7Sopenharmony_ci { 114e5c31af7Sopenharmony_ci te_out = tc_out[2]; 115e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 116e5c31af7Sopenharmony_ci } 117e5c31af7Sopenharmony_ci "" 118e5c31af7Sopenharmony_ci fragment "" 119e5c31af7Sopenharmony_ci #version 320 es 120e5c31af7Sopenharmony_ci precision mediump float; 121e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 122e5c31af7Sopenharmony_ci in mediump vec2 te_out; 123e5c31af7Sopenharmony_ci void main() 124e5c31af7Sopenharmony_ci { 125e5c31af7Sopenharmony_ci out0 = te_out.x + te_out.y; 126e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 127e5c31af7Sopenharmony_ci } 128e5c31af7Sopenharmony_ci "" 129e5c31af7Sopenharmony_ci end 130e5c31af7Sopenharmony_ci 131e5c31af7Sopenharmony_ci case internal_type_mismatch 132e5c31af7Sopenharmony_ci version 320 es 133e5c31af7Sopenharmony_ci desc "Tessellation control and evaluation shader varying type mismatch" 134e5c31af7Sopenharmony_ci expect link_fail 135e5c31af7Sopenharmony_ci values 136e5c31af7Sopenharmony_ci { 137e5c31af7Sopenharmony_ci input float in0 = 1.0; 138e5c31af7Sopenharmony_ci output float out0 = 1.0; 139e5c31af7Sopenharmony_ci } 140e5c31af7Sopenharmony_ci vertex "" 141e5c31af7Sopenharmony_ci #version 320 es 142e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 143e5c31af7Sopenharmony_ci out mediump float tc_in; 144e5c31af7Sopenharmony_ci void main() 145e5c31af7Sopenharmony_ci { 146e5c31af7Sopenharmony_ci tc_in = in0; 147e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 148e5c31af7Sopenharmony_ci } 149e5c31af7Sopenharmony_ci "" 150e5c31af7Sopenharmony_ci tessellation_control "" 151e5c31af7Sopenharmony_ci #version 320 es 152e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 153e5c31af7Sopenharmony_ci in mediump float tc_in[]; 154e5c31af7Sopenharmony_ci out mediump float tc_out[]; 155e5c31af7Sopenharmony_ci void main() 156e5c31af7Sopenharmony_ci { 157e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 158e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 159e5c31af7Sopenharmony_ci } 160e5c31af7Sopenharmony_ci "" 161e5c31af7Sopenharmony_ci tessellation_evaluation "" 162e5c31af7Sopenharmony_ci #version 320 es 163e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 164e5c31af7Sopenharmony_ci in mediump vec2 tc_out[]; 165e5c31af7Sopenharmony_ci out mediump float te_out; 166e5c31af7Sopenharmony_ci void main() 167e5c31af7Sopenharmony_ci { 168e5c31af7Sopenharmony_ci te_out = tc_out[2].x + tc_out[0].y; 169e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 170e5c31af7Sopenharmony_ci } 171e5c31af7Sopenharmony_ci "" 172e5c31af7Sopenharmony_ci fragment "" 173e5c31af7Sopenharmony_ci #version 320 es 174e5c31af7Sopenharmony_ci precision mediump float; 175e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 176e5c31af7Sopenharmony_ci in mediump float te_out; 177e5c31af7Sopenharmony_ci void main() 178e5c31af7Sopenharmony_ci { 179e5c31af7Sopenharmony_ci out0 = te_out; 180e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 181e5c31af7Sopenharmony_ci } 182e5c31af7Sopenharmony_ci "" 183e5c31af7Sopenharmony_ci end 184e5c31af7Sopenharmony_ci 185e5c31af7Sopenharmony_ci case input_different_precision 186e5c31af7Sopenharmony_ci version 320 es 187e5c31af7Sopenharmony_ci desc "Tessellation control shader input precisions different" 188e5c31af7Sopenharmony_ci values 189e5c31af7Sopenharmony_ci { 190e5c31af7Sopenharmony_ci input float in0 = 1.0; 191e5c31af7Sopenharmony_ci output float out0 = 1.0; 192e5c31af7Sopenharmony_ci } 193e5c31af7Sopenharmony_ci vertex "" 194e5c31af7Sopenharmony_ci #version 320 es 195e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 196e5c31af7Sopenharmony_ci out highp float tc_in; 197e5c31af7Sopenharmony_ci void main() 198e5c31af7Sopenharmony_ci { 199e5c31af7Sopenharmony_ci tc_in = in0; 200e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 201e5c31af7Sopenharmony_ci } 202e5c31af7Sopenharmony_ci "" 203e5c31af7Sopenharmony_ci tessellation_control "" 204e5c31af7Sopenharmony_ci #version 320 es 205e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 206e5c31af7Sopenharmony_ci in lowp float tc_in[]; 207e5c31af7Sopenharmony_ci out mediump float tc_out[]; 208e5c31af7Sopenharmony_ci void main() 209e5c31af7Sopenharmony_ci { 210e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 211e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 212e5c31af7Sopenharmony_ci } 213e5c31af7Sopenharmony_ci "" 214e5c31af7Sopenharmony_ci tessellation_evaluation "" 215e5c31af7Sopenharmony_ci #version 320 es 216e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 217e5c31af7Sopenharmony_ci in mediump float tc_out[]; 218e5c31af7Sopenharmony_ci out mediump float te_out; 219e5c31af7Sopenharmony_ci void main() 220e5c31af7Sopenharmony_ci { 221e5c31af7Sopenharmony_ci te_out = tc_out[2]; 222e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 223e5c31af7Sopenharmony_ci } 224e5c31af7Sopenharmony_ci "" 225e5c31af7Sopenharmony_ci fragment "" 226e5c31af7Sopenharmony_ci #version 320 es 227e5c31af7Sopenharmony_ci precision mediump float; 228e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 229e5c31af7Sopenharmony_ci in mediump float te_out; 230e5c31af7Sopenharmony_ci void main() 231e5c31af7Sopenharmony_ci { 232e5c31af7Sopenharmony_ci out0 = te_out; 233e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 234e5c31af7Sopenharmony_ci } 235e5c31af7Sopenharmony_ci "" 236e5c31af7Sopenharmony_ci end 237e5c31af7Sopenharmony_ci 238e5c31af7Sopenharmony_ci case output_different_precision 239e5c31af7Sopenharmony_ci version 320 es 240e5c31af7Sopenharmony_ci desc "Tessellation evaluation shader output precisions different" 241e5c31af7Sopenharmony_ci values 242e5c31af7Sopenharmony_ci { 243e5c31af7Sopenharmony_ci input float in0 = 1.0; 244e5c31af7Sopenharmony_ci output float out0 = 1.0; 245e5c31af7Sopenharmony_ci } 246e5c31af7Sopenharmony_ci vertex "" 247e5c31af7Sopenharmony_ci #version 320 es 248e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 249e5c31af7Sopenharmony_ci out mediump float tc_in; 250e5c31af7Sopenharmony_ci void main() 251e5c31af7Sopenharmony_ci { 252e5c31af7Sopenharmony_ci tc_in = in0; 253e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 254e5c31af7Sopenharmony_ci } 255e5c31af7Sopenharmony_ci "" 256e5c31af7Sopenharmony_ci tessellation_control "" 257e5c31af7Sopenharmony_ci #version 320 es 258e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 259e5c31af7Sopenharmony_ci in mediump float tc_in[]; 260e5c31af7Sopenharmony_ci out mediump float tc_out[]; 261e5c31af7Sopenharmony_ci void main() 262e5c31af7Sopenharmony_ci { 263e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 264e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 265e5c31af7Sopenharmony_ci } 266e5c31af7Sopenharmony_ci "" 267e5c31af7Sopenharmony_ci tessellation_evaluation "" 268e5c31af7Sopenharmony_ci #version 320 es 269e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 270e5c31af7Sopenharmony_ci in mediump float tc_out[]; 271e5c31af7Sopenharmony_ci out highp float te_out; 272e5c31af7Sopenharmony_ci void main() 273e5c31af7Sopenharmony_ci { 274e5c31af7Sopenharmony_ci te_out = tc_out[2]; 275e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 276e5c31af7Sopenharmony_ci } 277e5c31af7Sopenharmony_ci "" 278e5c31af7Sopenharmony_ci fragment "" 279e5c31af7Sopenharmony_ci #version 320 es 280e5c31af7Sopenharmony_ci precision mediump float; 281e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 282e5c31af7Sopenharmony_ci in lowp float te_out; 283e5c31af7Sopenharmony_ci void main() 284e5c31af7Sopenharmony_ci { 285e5c31af7Sopenharmony_ci out0 = te_out; 286e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 287e5c31af7Sopenharmony_ci } 288e5c31af7Sopenharmony_ci "" 289e5c31af7Sopenharmony_ci end 290e5c31af7Sopenharmony_ci 291e5c31af7Sopenharmony_ci case internal_different_precision 292e5c31af7Sopenharmony_ci version 320 es 293e5c31af7Sopenharmony_ci desc "Tessellation control and evaluation shader varying precisions different" 294e5c31af7Sopenharmony_ci values 295e5c31af7Sopenharmony_ci { 296e5c31af7Sopenharmony_ci input float in0 = 1.0; 297e5c31af7Sopenharmony_ci output float out0 = 1.0; 298e5c31af7Sopenharmony_ci } 299e5c31af7Sopenharmony_ci vertex "" 300e5c31af7Sopenharmony_ci #version 320 es 301e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 302e5c31af7Sopenharmony_ci out mediump float tc_in; 303e5c31af7Sopenharmony_ci void main() 304e5c31af7Sopenharmony_ci { 305e5c31af7Sopenharmony_ci tc_in = in0; 306e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 307e5c31af7Sopenharmony_ci } 308e5c31af7Sopenharmony_ci "" 309e5c31af7Sopenharmony_ci tessellation_control "" 310e5c31af7Sopenharmony_ci #version 320 es 311e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 312e5c31af7Sopenharmony_ci in mediump float tc_in[]; 313e5c31af7Sopenharmony_ci out highp float tc_out[]; 314e5c31af7Sopenharmony_ci void main() 315e5c31af7Sopenharmony_ci { 316e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 317e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 318e5c31af7Sopenharmony_ci } 319e5c31af7Sopenharmony_ci "" 320e5c31af7Sopenharmony_ci tessellation_evaluation "" 321e5c31af7Sopenharmony_ci #version 320 es 322e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 323e5c31af7Sopenharmony_ci in lowp float tc_out[]; 324e5c31af7Sopenharmony_ci out mediump float te_out; 325e5c31af7Sopenharmony_ci void main() 326e5c31af7Sopenharmony_ci { 327e5c31af7Sopenharmony_ci te_out = tc_out[2]; 328e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 329e5c31af7Sopenharmony_ci } 330e5c31af7Sopenharmony_ci "" 331e5c31af7Sopenharmony_ci fragment "" 332e5c31af7Sopenharmony_ci #version 320 es 333e5c31af7Sopenharmony_ci precision mediump float; 334e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 335e5c31af7Sopenharmony_ci in mediump float te_out; 336e5c31af7Sopenharmony_ci void main() 337e5c31af7Sopenharmony_ci { 338e5c31af7Sopenharmony_ci out0 = te_out; 339e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 340e5c31af7Sopenharmony_ci } 341e5c31af7Sopenharmony_ci "" 342e5c31af7Sopenharmony_ci end 343e5c31af7Sopenharmony_ci 344e5c31af7Sopenharmony_ci case input_no_declaration 345e5c31af7Sopenharmony_ci version 320 es 346e5c31af7Sopenharmony_ci desc "Tessellation control shader input with no matching output" 347e5c31af7Sopenharmony_ci expect link_fail 348e5c31af7Sopenharmony_ci values 349e5c31af7Sopenharmony_ci { 350e5c31af7Sopenharmony_ci input float in0 = 1.0; 351e5c31af7Sopenharmony_ci output float out0 = 1.0; 352e5c31af7Sopenharmony_ci } 353e5c31af7Sopenharmony_ci vertex "" 354e5c31af7Sopenharmony_ci #version 320 es 355e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 356e5c31af7Sopenharmony_ci void main() 357e5c31af7Sopenharmony_ci { 358e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 359e5c31af7Sopenharmony_ci } 360e5c31af7Sopenharmony_ci "" 361e5c31af7Sopenharmony_ci tessellation_control "" 362e5c31af7Sopenharmony_ci #version 320 es 363e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 364e5c31af7Sopenharmony_ci in mediump float tc_in[]; 365e5c31af7Sopenharmony_ci out mediump float tc_out[]; 366e5c31af7Sopenharmony_ci void main() 367e5c31af7Sopenharmony_ci { 368e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 369e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 370e5c31af7Sopenharmony_ci } 371e5c31af7Sopenharmony_ci "" 372e5c31af7Sopenharmony_ci tessellation_evaluation "" 373e5c31af7Sopenharmony_ci #version 320 es 374e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 375e5c31af7Sopenharmony_ci in mediump float tc_out[]; 376e5c31af7Sopenharmony_ci out mediump float te_out; 377e5c31af7Sopenharmony_ci void main() 378e5c31af7Sopenharmony_ci { 379e5c31af7Sopenharmony_ci te_out = tc_out[2]; 380e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 381e5c31af7Sopenharmony_ci } 382e5c31af7Sopenharmony_ci "" 383e5c31af7Sopenharmony_ci fragment "" 384e5c31af7Sopenharmony_ci #version 320 es 385e5c31af7Sopenharmony_ci precision mediump float; 386e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 387e5c31af7Sopenharmony_ci in mediump float te_out; 388e5c31af7Sopenharmony_ci void main() 389e5c31af7Sopenharmony_ci { 390e5c31af7Sopenharmony_ci out0 = te_out; 391e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 392e5c31af7Sopenharmony_ci } 393e5c31af7Sopenharmony_ci "" 394e5c31af7Sopenharmony_ci end 395e5c31af7Sopenharmony_ci 396e5c31af7Sopenharmony_ci case output_no_declaration 397e5c31af7Sopenharmony_ci version 320 es 398e5c31af7Sopenharmony_ci desc "Tessellation evaluation shader without output for an fragment shader input" 399e5c31af7Sopenharmony_ci expect link_fail 400e5c31af7Sopenharmony_ci values 401e5c31af7Sopenharmony_ci { 402e5c31af7Sopenharmony_ci output float out0 = 1.0; 403e5c31af7Sopenharmony_ci } 404e5c31af7Sopenharmony_ci vertex "" 405e5c31af7Sopenharmony_ci #version 320 es 406e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 407e5c31af7Sopenharmony_ci void main() 408e5c31af7Sopenharmony_ci { 409e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 410e5c31af7Sopenharmony_ci } 411e5c31af7Sopenharmony_ci "" 412e5c31af7Sopenharmony_ci tessellation_control "" 413e5c31af7Sopenharmony_ci #version 320 es 414e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 415e5c31af7Sopenharmony_ci void main() 416e5c31af7Sopenharmony_ci { 417e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 418e5c31af7Sopenharmony_ci } 419e5c31af7Sopenharmony_ci "" 420e5c31af7Sopenharmony_ci tessellation_evaluation "" 421e5c31af7Sopenharmony_ci #version 320 es 422e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 423e5c31af7Sopenharmony_ci void main() 424e5c31af7Sopenharmony_ci { 425e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 426e5c31af7Sopenharmony_ci } 427e5c31af7Sopenharmony_ci "" 428e5c31af7Sopenharmony_ci fragment "" 429e5c31af7Sopenharmony_ci #version 320 es 430e5c31af7Sopenharmony_ci precision mediump float; 431e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 432e5c31af7Sopenharmony_ci in mediump float te_out; 433e5c31af7Sopenharmony_ci void main() 434e5c31af7Sopenharmony_ci { 435e5c31af7Sopenharmony_ci out0 = te_out; 436e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 437e5c31af7Sopenharmony_ci } 438e5c31af7Sopenharmony_ci "" 439e5c31af7Sopenharmony_ci end 440e5c31af7Sopenharmony_ci 441e5c31af7Sopenharmony_ci case internal_no_declaration 442e5c31af7Sopenharmony_ci version 320 es 443e5c31af7Sopenharmony_ci desc "Tessellation evaluation shader input without matching output" 444e5c31af7Sopenharmony_ci expect link_fail 445e5c31af7Sopenharmony_ci values 446e5c31af7Sopenharmony_ci { 447e5c31af7Sopenharmony_ci output float out0 = 1.0; 448e5c31af7Sopenharmony_ci } 449e5c31af7Sopenharmony_ci vertex "" 450e5c31af7Sopenharmony_ci #version 320 es 451e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 452e5c31af7Sopenharmony_ci void main() 453e5c31af7Sopenharmony_ci { 454e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 455e5c31af7Sopenharmony_ci } 456e5c31af7Sopenharmony_ci "" 457e5c31af7Sopenharmony_ci tessellation_control "" 458e5c31af7Sopenharmony_ci #version 320 es 459e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 460e5c31af7Sopenharmony_ci void main() 461e5c31af7Sopenharmony_ci { 462e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 463e5c31af7Sopenharmony_ci } 464e5c31af7Sopenharmony_ci "" 465e5c31af7Sopenharmony_ci tessellation_evaluation "" 466e5c31af7Sopenharmony_ci #version 320 es 467e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 468e5c31af7Sopenharmony_ci in mediump float tc_out[]; 469e5c31af7Sopenharmony_ci out mediump float te_out; 470e5c31af7Sopenharmony_ci void main() 471e5c31af7Sopenharmony_ci { 472e5c31af7Sopenharmony_ci te_out = tc_out[2]; 473e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 474e5c31af7Sopenharmony_ci } 475e5c31af7Sopenharmony_ci "" 476e5c31af7Sopenharmony_ci fragment "" 477e5c31af7Sopenharmony_ci #version 320 es 478e5c31af7Sopenharmony_ci precision mediump float; 479e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 480e5c31af7Sopenharmony_ci in mediump float te_out; 481e5c31af7Sopenharmony_ci void main() 482e5c31af7Sopenharmony_ci { 483e5c31af7Sopenharmony_ci out0 = te_out; 484e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 485e5c31af7Sopenharmony_ci } 486e5c31af7Sopenharmony_ci "" 487e5c31af7Sopenharmony_ci end 488e5c31af7Sopenharmony_ci 489e5c31af7Sopenharmony_ci case input_superfluous_declaration 490e5c31af7Sopenharmony_ci version 320 es 491e5c31af7Sopenharmony_ci desc "Tessellation control has no input for an output" 492e5c31af7Sopenharmony_ci values 493e5c31af7Sopenharmony_ci { 494e5c31af7Sopenharmony_ci input float in0 = 1.0; 495e5c31af7Sopenharmony_ci output float out0 = 1.0; 496e5c31af7Sopenharmony_ci } 497e5c31af7Sopenharmony_ci vertex "" 498e5c31af7Sopenharmony_ci #version 320 es 499e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 500e5c31af7Sopenharmony_ci out mediump float tc_in; 501e5c31af7Sopenharmony_ci out mediump float tc_in_unused; 502e5c31af7Sopenharmony_ci void main() 503e5c31af7Sopenharmony_ci { 504e5c31af7Sopenharmony_ci tc_in = in0; 505e5c31af7Sopenharmony_ci tc_in_unused = in0 + 1.0; 506e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 507e5c31af7Sopenharmony_ci } 508e5c31af7Sopenharmony_ci "" 509e5c31af7Sopenharmony_ci tessellation_control "" 510e5c31af7Sopenharmony_ci #version 320 es 511e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 512e5c31af7Sopenharmony_ci in mediump float tc_in[]; 513e5c31af7Sopenharmony_ci out mediump float tc_out[]; 514e5c31af7Sopenharmony_ci void main() 515e5c31af7Sopenharmony_ci { 516e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 517e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 518e5c31af7Sopenharmony_ci } 519e5c31af7Sopenharmony_ci "" 520e5c31af7Sopenharmony_ci tessellation_evaluation "" 521e5c31af7Sopenharmony_ci #version 320 es 522e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 523e5c31af7Sopenharmony_ci in mediump float tc_out[]; 524e5c31af7Sopenharmony_ci out mediump float te_out; 525e5c31af7Sopenharmony_ci void main() 526e5c31af7Sopenharmony_ci { 527e5c31af7Sopenharmony_ci te_out = tc_out[2]; 528e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 529e5c31af7Sopenharmony_ci } 530e5c31af7Sopenharmony_ci "" 531e5c31af7Sopenharmony_ci fragment "" 532e5c31af7Sopenharmony_ci #version 320 es 533e5c31af7Sopenharmony_ci precision mediump float; 534e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 535e5c31af7Sopenharmony_ci in mediump float te_out; 536e5c31af7Sopenharmony_ci void main() 537e5c31af7Sopenharmony_ci { 538e5c31af7Sopenharmony_ci out0 = te_out; 539e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 540e5c31af7Sopenharmony_ci } 541e5c31af7Sopenharmony_ci "" 542e5c31af7Sopenharmony_ci end 543e5c31af7Sopenharmony_ci 544e5c31af7Sopenharmony_ci case output_superfluous_declaration 545e5c31af7Sopenharmony_ci version 320 es 546e5c31af7Sopenharmony_ci desc "Tessellation has an output without a matching input" 547e5c31af7Sopenharmony_ci values 548e5c31af7Sopenharmony_ci { 549e5c31af7Sopenharmony_ci input float in0 = 1.0; 550e5c31af7Sopenharmony_ci output float out0 = 1.0; 551e5c31af7Sopenharmony_ci } 552e5c31af7Sopenharmony_ci vertex "" 553e5c31af7Sopenharmony_ci #version 320 es 554e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 555e5c31af7Sopenharmony_ci out mediump float tc_in; 556e5c31af7Sopenharmony_ci void main() 557e5c31af7Sopenharmony_ci { 558e5c31af7Sopenharmony_ci tc_in = in0; 559e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 560e5c31af7Sopenharmony_ci } 561e5c31af7Sopenharmony_ci "" 562e5c31af7Sopenharmony_ci tessellation_control "" 563e5c31af7Sopenharmony_ci #version 320 es 564e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 565e5c31af7Sopenharmony_ci in mediump float tc_in[]; 566e5c31af7Sopenharmony_ci out mediump float tc_out[]; 567e5c31af7Sopenharmony_ci void main() 568e5c31af7Sopenharmony_ci { 569e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 570e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 571e5c31af7Sopenharmony_ci } 572e5c31af7Sopenharmony_ci "" 573e5c31af7Sopenharmony_ci tessellation_evaluation "" 574e5c31af7Sopenharmony_ci #version 320 es 575e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 576e5c31af7Sopenharmony_ci in mediump float tc_out[]; 577e5c31af7Sopenharmony_ci out mediump float te_out; 578e5c31af7Sopenharmony_ci out mediump float te_out_unused; 579e5c31af7Sopenharmony_ci void main() 580e5c31af7Sopenharmony_ci { 581e5c31af7Sopenharmony_ci te_out = tc_out[2]; 582e5c31af7Sopenharmony_ci te_out_unused = tc_out[0]; 583e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 584e5c31af7Sopenharmony_ci } 585e5c31af7Sopenharmony_ci "" 586e5c31af7Sopenharmony_ci fragment "" 587e5c31af7Sopenharmony_ci #version 320 es 588e5c31af7Sopenharmony_ci precision mediump float; 589e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 590e5c31af7Sopenharmony_ci in mediump float te_out; 591e5c31af7Sopenharmony_ci void main() 592e5c31af7Sopenharmony_ci { 593e5c31af7Sopenharmony_ci out0 = te_out; 594e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 595e5c31af7Sopenharmony_ci } 596e5c31af7Sopenharmony_ci "" 597e5c31af7Sopenharmony_ci end 598e5c31af7Sopenharmony_ci 599e5c31af7Sopenharmony_ci case internal_superfluous_declaration 600e5c31af7Sopenharmony_ci version 320 es 601e5c31af7Sopenharmony_ci desc "Tessellation control has an output without a matching input" 602e5c31af7Sopenharmony_ci values 603e5c31af7Sopenharmony_ci { 604e5c31af7Sopenharmony_ci input float in0 = 1.0; 605e5c31af7Sopenharmony_ci output float out0 = 1.0; 606e5c31af7Sopenharmony_ci } 607e5c31af7Sopenharmony_ci vertex "" 608e5c31af7Sopenharmony_ci #version 320 es 609e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 610e5c31af7Sopenharmony_ci out mediump float tc_in; 611e5c31af7Sopenharmony_ci void main() 612e5c31af7Sopenharmony_ci { 613e5c31af7Sopenharmony_ci tc_in = in0; 614e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 615e5c31af7Sopenharmony_ci } 616e5c31af7Sopenharmony_ci "" 617e5c31af7Sopenharmony_ci tessellation_control "" 618e5c31af7Sopenharmony_ci #version 320 es 619e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 620e5c31af7Sopenharmony_ci in mediump float tc_in[]; 621e5c31af7Sopenharmony_ci out mediump float tc_out[]; 622e5c31af7Sopenharmony_ci out mediump float tc_out_unused[]; 623e5c31af7Sopenharmony_ci void main() 624e5c31af7Sopenharmony_ci { 625e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 626e5c31af7Sopenharmony_ci tc_out_unused[gl_InvocationID] = tc_in[gl_InvocationID] + 1.0; 627e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 628e5c31af7Sopenharmony_ci } 629e5c31af7Sopenharmony_ci "" 630e5c31af7Sopenharmony_ci tessellation_evaluation "" 631e5c31af7Sopenharmony_ci #version 320 es 632e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 633e5c31af7Sopenharmony_ci in mediump float tc_out[]; 634e5c31af7Sopenharmony_ci out mediump float te_out; 635e5c31af7Sopenharmony_ci void main() 636e5c31af7Sopenharmony_ci { 637e5c31af7Sopenharmony_ci te_out = tc_out[2]; 638e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 639e5c31af7Sopenharmony_ci } 640e5c31af7Sopenharmony_ci "" 641e5c31af7Sopenharmony_ci fragment "" 642e5c31af7Sopenharmony_ci #version 320 es 643e5c31af7Sopenharmony_ci precision mediump float; 644e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 645e5c31af7Sopenharmony_ci in mediump float te_out; 646e5c31af7Sopenharmony_ci void main() 647e5c31af7Sopenharmony_ci { 648e5c31af7Sopenharmony_ci out0 = te_out; 649e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 650e5c31af7Sopenharmony_ci } 651e5c31af7Sopenharmony_ci "" 652e5c31af7Sopenharmony_ci end 653e5c31af7Sopenharmony_ci 654e5c31af7Sopenharmony_ci case vertex_fragment_same_varying_name_1 655e5c31af7Sopenharmony_ci version 320 es 656e5c31af7Sopenharmony_ci desc "Tessellation control has an output without a matching input" 657e5c31af7Sopenharmony_ci values 658e5c31af7Sopenharmony_ci { 659e5c31af7Sopenharmony_ci input float in0 = 1.0; 660e5c31af7Sopenharmony_ci output float out0 = 2.0; 661e5c31af7Sopenharmony_ci } 662e5c31af7Sopenharmony_ci vertex "" 663e5c31af7Sopenharmony_ci #version 320 es 664e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 665e5c31af7Sopenharmony_ci out mediump float sharedVaringName; 666e5c31af7Sopenharmony_ci void main() 667e5c31af7Sopenharmony_ci { 668e5c31af7Sopenharmony_ci sharedVaringName = in0; 669e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 670e5c31af7Sopenharmony_ci } 671e5c31af7Sopenharmony_ci "" 672e5c31af7Sopenharmony_ci tessellation_control "" 673e5c31af7Sopenharmony_ci #version 320 es 674e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 675e5c31af7Sopenharmony_ci in mediump float sharedVaringName[]; 676e5c31af7Sopenharmony_ci out mediump float tc_out[]; 677e5c31af7Sopenharmony_ci void main() 678e5c31af7Sopenharmony_ci { 679e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = sharedVaringName[gl_InvocationID]; 680e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 681e5c31af7Sopenharmony_ci } 682e5c31af7Sopenharmony_ci "" 683e5c31af7Sopenharmony_ci tessellation_evaluation "" 684e5c31af7Sopenharmony_ci #version 320 es 685e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 686e5c31af7Sopenharmony_ci in mediump float tc_out[]; 687e5c31af7Sopenharmony_ci out mediump float sharedVaringName; 688e5c31af7Sopenharmony_ci void main() 689e5c31af7Sopenharmony_ci { 690e5c31af7Sopenharmony_ci sharedVaringName = 2.0 * tc_out[2]; 691e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 692e5c31af7Sopenharmony_ci } 693e5c31af7Sopenharmony_ci "" 694e5c31af7Sopenharmony_ci fragment "" 695e5c31af7Sopenharmony_ci #version 320 es 696e5c31af7Sopenharmony_ci precision mediump float; 697e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 698e5c31af7Sopenharmony_ci in mediump float sharedVaringName; 699e5c31af7Sopenharmony_ci void main() 700e5c31af7Sopenharmony_ci { 701e5c31af7Sopenharmony_ci out0 = sharedVaringName; 702e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 703e5c31af7Sopenharmony_ci } 704e5c31af7Sopenharmony_ci "" 705e5c31af7Sopenharmony_ci end 706e5c31af7Sopenharmony_ci 707e5c31af7Sopenharmony_ci case vertex_fragment_same_varying_name_2 708e5c31af7Sopenharmony_ci version 320 es 709e5c31af7Sopenharmony_ci desc "Tessellation control has an output without a matching input" 710e5c31af7Sopenharmony_ci values 711e5c31af7Sopenharmony_ci { 712e5c31af7Sopenharmony_ci input vec2 in0 = vec2(1.0, 3.0); 713e5c31af7Sopenharmony_ci output float out0 = 4.0; 714e5c31af7Sopenharmony_ci } 715e5c31af7Sopenharmony_ci vertex "" 716e5c31af7Sopenharmony_ci #version 320 es 717e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 718e5c31af7Sopenharmony_ci out mediump vec2 sharedVaringName; 719e5c31af7Sopenharmony_ci void main() 720e5c31af7Sopenharmony_ci { 721e5c31af7Sopenharmony_ci sharedVaringName = in0; 722e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 723e5c31af7Sopenharmony_ci } 724e5c31af7Sopenharmony_ci "" 725e5c31af7Sopenharmony_ci tessellation_control "" 726e5c31af7Sopenharmony_ci #version 320 es 727e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 728e5c31af7Sopenharmony_ci in mediump vec2 sharedVaringName[]; 729e5c31af7Sopenharmony_ci out mediump float tc_out[]; 730e5c31af7Sopenharmony_ci void main() 731e5c31af7Sopenharmony_ci { 732e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = sharedVaringName[gl_InvocationID].x + sharedVaringName[gl_InvocationID].y; 733e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 734e5c31af7Sopenharmony_ci } 735e5c31af7Sopenharmony_ci "" 736e5c31af7Sopenharmony_ci tessellation_evaluation "" 737e5c31af7Sopenharmony_ci #version 320 es 738e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 739e5c31af7Sopenharmony_ci in mediump float tc_out[]; 740e5c31af7Sopenharmony_ci out mediump float sharedVaringName; 741e5c31af7Sopenharmony_ci void main() 742e5c31af7Sopenharmony_ci { 743e5c31af7Sopenharmony_ci sharedVaringName = tc_out[2]; 744e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 745e5c31af7Sopenharmony_ci } 746e5c31af7Sopenharmony_ci "" 747e5c31af7Sopenharmony_ci fragment "" 748e5c31af7Sopenharmony_ci #version 320 es 749e5c31af7Sopenharmony_ci precision mediump float; 750e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 751e5c31af7Sopenharmony_ci in mediump float sharedVaringName; 752e5c31af7Sopenharmony_ci void main() 753e5c31af7Sopenharmony_ci { 754e5c31af7Sopenharmony_ci out0 = sharedVaringName; 755e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 756e5c31af7Sopenharmony_ci } 757e5c31af7Sopenharmony_ci "" 758e5c31af7Sopenharmony_ci end 759e5c31af7Sopenharmony_ci 760e5c31af7Sopenharmony_ci case invalid_vertex_index 761e5c31af7Sopenharmony_ci version 320 es 762e5c31af7Sopenharmony_ci desc "Tessellation control output not indexed with gl_InvocationID" 763e5c31af7Sopenharmony_ci expect compile_or_link_fail 764e5c31af7Sopenharmony_ci vertex "" 765e5c31af7Sopenharmony_ci #version 320 es 766e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 767e5c31af7Sopenharmony_ci void main() 768e5c31af7Sopenharmony_ci { 769e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 770e5c31af7Sopenharmony_ci } 771e5c31af7Sopenharmony_ci "" 772e5c31af7Sopenharmony_ci tessellation_control "" 773e5c31af7Sopenharmony_ci #version 320 es 774e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 775e5c31af7Sopenharmony_ci out mediump float tc_out[]; 776e5c31af7Sopenharmony_ci void main() 777e5c31af7Sopenharmony_ci { 778e5c31af7Sopenharmony_ci tc_out[2 - gl_InvocationID] = float(gl_InvocationID); 779e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 780e5c31af7Sopenharmony_ci } 781e5c31af7Sopenharmony_ci "" 782e5c31af7Sopenharmony_ci tessellation_evaluation "" 783e5c31af7Sopenharmony_ci #version 320 es 784e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 785e5c31af7Sopenharmony_ci in mediump float tc_out[]; 786e5c31af7Sopenharmony_ci out mediump float te_out; 787e5c31af7Sopenharmony_ci void main() 788e5c31af7Sopenharmony_ci { 789e5c31af7Sopenharmony_ci te_out = tc_out[2]; 790e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 791e5c31af7Sopenharmony_ci } 792e5c31af7Sopenharmony_ci "" 793e5c31af7Sopenharmony_ci fragment "" 794e5c31af7Sopenharmony_ci #version 320 es 795e5c31af7Sopenharmony_ci precision mediump float; 796e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 797e5c31af7Sopenharmony_ci in mediump float te_out; 798e5c31af7Sopenharmony_ci void main() 799e5c31af7Sopenharmony_ci { 800e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out); 801e5c31af7Sopenharmony_ci } 802e5c31af7Sopenharmony_ci "" 803e5c31af7Sopenharmony_ci end 804e5c31af7Sopenharmony_ci 805e5c31af7Sopenharmony_ci case input_non_array 806e5c31af7Sopenharmony_ci version 320 es 807e5c31af7Sopenharmony_ci desc "Tessellation control input in not an array" 808e5c31af7Sopenharmony_ci expect compile_or_link_fail 809e5c31af7Sopenharmony_ci values 810e5c31af7Sopenharmony_ci { 811e5c31af7Sopenharmony_ci input float in0 = 1.0; 812e5c31af7Sopenharmony_ci output float out0 = 1.0; 813e5c31af7Sopenharmony_ci } 814e5c31af7Sopenharmony_ci vertex "" 815e5c31af7Sopenharmony_ci #version 320 es 816e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 817e5c31af7Sopenharmony_ci out mediump float tc_in; 818e5c31af7Sopenharmony_ci void main() 819e5c31af7Sopenharmony_ci { 820e5c31af7Sopenharmony_ci tc_in = in0; 821e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 822e5c31af7Sopenharmony_ci } 823e5c31af7Sopenharmony_ci "" 824e5c31af7Sopenharmony_ci tessellation_control "" 825e5c31af7Sopenharmony_ci #version 320 es 826e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 827e5c31af7Sopenharmony_ci in mediump float tc_in; 828e5c31af7Sopenharmony_ci out mediump float tc_out[]; 829e5c31af7Sopenharmony_ci void main() 830e5c31af7Sopenharmony_ci { 831e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in; 832e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 833e5c31af7Sopenharmony_ci } 834e5c31af7Sopenharmony_ci "" 835e5c31af7Sopenharmony_ci tessellation_evaluation "" 836e5c31af7Sopenharmony_ci #version 320 es 837e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 838e5c31af7Sopenharmony_ci in mediump float tc_out[]; 839e5c31af7Sopenharmony_ci out mediump float te_out; 840e5c31af7Sopenharmony_ci void main() 841e5c31af7Sopenharmony_ci { 842e5c31af7Sopenharmony_ci te_out = tc_out[2]; 843e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 844e5c31af7Sopenharmony_ci } 845e5c31af7Sopenharmony_ci "" 846e5c31af7Sopenharmony_ci fragment "" 847e5c31af7Sopenharmony_ci #version 320 es 848e5c31af7Sopenharmony_ci precision mediump float; 849e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 850e5c31af7Sopenharmony_ci in mediump float te_out; 851e5c31af7Sopenharmony_ci void main() 852e5c31af7Sopenharmony_ci { 853e5c31af7Sopenharmony_ci out0 = te_out; 854e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 855e5c31af7Sopenharmony_ci } 856e5c31af7Sopenharmony_ci "" 857e5c31af7Sopenharmony_ci end 858e5c31af7Sopenharmony_ci 859e5c31af7Sopenharmony_ci case input_array_size_mismatch 860e5c31af7Sopenharmony_ci version 320 es 861e5c31af7Sopenharmony_ci desc "Tessellation control input array size is not gl_MaxPatchVertices" 862e5c31af7Sopenharmony_ci expect compile_or_link_fail 863e5c31af7Sopenharmony_ci values 864e5c31af7Sopenharmony_ci { 865e5c31af7Sopenharmony_ci input float in0 = 1.0; 866e5c31af7Sopenharmony_ci output float out0 = 1.0; 867e5c31af7Sopenharmony_ci } 868e5c31af7Sopenharmony_ci vertex "" 869e5c31af7Sopenharmony_ci #version 320 es 870e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 871e5c31af7Sopenharmony_ci out mediump float tc_in; 872e5c31af7Sopenharmony_ci void main() 873e5c31af7Sopenharmony_ci { 874e5c31af7Sopenharmony_ci tc_in = in0; 875e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 876e5c31af7Sopenharmony_ci } 877e5c31af7Sopenharmony_ci "" 878e5c31af7Sopenharmony_ci tessellation_control "" 879e5c31af7Sopenharmony_ci #version 320 es 880e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 881e5c31af7Sopenharmony_ci in mediump float tc_in[2]; // not gl_MaxPatchVertices 882e5c31af7Sopenharmony_ci out mediump float tc_out[]; 883e5c31af7Sopenharmony_ci void main() 884e5c31af7Sopenharmony_ci { 885e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 886e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 887e5c31af7Sopenharmony_ci } 888e5c31af7Sopenharmony_ci "" 889e5c31af7Sopenharmony_ci tessellation_evaluation "" 890e5c31af7Sopenharmony_ci #version 320 es 891e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 892e5c31af7Sopenharmony_ci in mediump float tc_out[]; 893e5c31af7Sopenharmony_ci out mediump float te_out; 894e5c31af7Sopenharmony_ci void main() 895e5c31af7Sopenharmony_ci { 896e5c31af7Sopenharmony_ci te_out = tc_out[2]; 897e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 898e5c31af7Sopenharmony_ci } 899e5c31af7Sopenharmony_ci "" 900e5c31af7Sopenharmony_ci fragment "" 901e5c31af7Sopenharmony_ci #version 320 es 902e5c31af7Sopenharmony_ci precision mediump float; 903e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 904e5c31af7Sopenharmony_ci in mediump float te_out; 905e5c31af7Sopenharmony_ci void main() 906e5c31af7Sopenharmony_ci { 907e5c31af7Sopenharmony_ci out0 = te_out; 908e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 909e5c31af7Sopenharmony_ci } 910e5c31af7Sopenharmony_ci "" 911e5c31af7Sopenharmony_ci end 912e5c31af7Sopenharmony_ci 913e5c31af7Sopenharmony_ci case internal_array_size_mismatch 914e5c31af7Sopenharmony_ci version 320 es 915e5c31af7Sopenharmony_ci desc "Tessellation control output array size is not consistent with layout qualifier" 916e5c31af7Sopenharmony_ci expect compile_or_link_fail 917e5c31af7Sopenharmony_ci values 918e5c31af7Sopenharmony_ci { 919e5c31af7Sopenharmony_ci input float in0 = 1.0; 920e5c31af7Sopenharmony_ci output float out0 = 1.0; 921e5c31af7Sopenharmony_ci } 922e5c31af7Sopenharmony_ci vertex "" 923e5c31af7Sopenharmony_ci #version 320 es 924e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 925e5c31af7Sopenharmony_ci out mediump float tc_in; 926e5c31af7Sopenharmony_ci void main() 927e5c31af7Sopenharmony_ci { 928e5c31af7Sopenharmony_ci tc_in = in0; 929e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 930e5c31af7Sopenharmony_ci } 931e5c31af7Sopenharmony_ci "" 932e5c31af7Sopenharmony_ci tessellation_control "" 933e5c31af7Sopenharmony_ci #version 320 es 934e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 935e5c31af7Sopenharmony_ci in mediump float tc_in[]; 936e5c31af7Sopenharmony_ci out mediump float tc_out[2]; // does not match output layout qualifier 937e5c31af7Sopenharmony_ci void main() 938e5c31af7Sopenharmony_ci { 939e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 940e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 941e5c31af7Sopenharmony_ci } 942e5c31af7Sopenharmony_ci "" 943e5c31af7Sopenharmony_ci tessellation_evaluation "" 944e5c31af7Sopenharmony_ci #version 320 es 945e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 946e5c31af7Sopenharmony_ci in mediump float tc_out[2]; 947e5c31af7Sopenharmony_ci out mediump float te_out; 948e5c31af7Sopenharmony_ci void main() 949e5c31af7Sopenharmony_ci { 950e5c31af7Sopenharmony_ci te_out = tc_out[1]; 951e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 952e5c31af7Sopenharmony_ci } 953e5c31af7Sopenharmony_ci "" 954e5c31af7Sopenharmony_ci fragment "" 955e5c31af7Sopenharmony_ci #version 320 es 956e5c31af7Sopenharmony_ci precision mediump float; 957e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 958e5c31af7Sopenharmony_ci in mediump float te_out; 959e5c31af7Sopenharmony_ci void main() 960e5c31af7Sopenharmony_ci { 961e5c31af7Sopenharmony_ci out0 = te_out; 962e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 963e5c31af7Sopenharmony_ci } 964e5c31af7Sopenharmony_ci "" 965e5c31af7Sopenharmony_ci end 966e5c31af7Sopenharmony_ci 967e5c31af7Sopenharmony_ci case per_patch_qualifier_mismatch_1 968e5c31af7Sopenharmony_ci version 320 es 969e5c31af7Sopenharmony_ci desc "Tessellation control output is per-patch qualified, evaluation input is not" 970e5c31af7Sopenharmony_ci expect compile_or_link_fail 971e5c31af7Sopenharmony_ci values 972e5c31af7Sopenharmony_ci { 973e5c31af7Sopenharmony_ci input float in0 = 1.0; 974e5c31af7Sopenharmony_ci output float out0 = 1.0; 975e5c31af7Sopenharmony_ci } 976e5c31af7Sopenharmony_ci vertex "" 977e5c31af7Sopenharmony_ci #version 320 es 978e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 979e5c31af7Sopenharmony_ci out mediump float tc_in; 980e5c31af7Sopenharmony_ci void main() 981e5c31af7Sopenharmony_ci { 982e5c31af7Sopenharmony_ci tc_in = in0; 983e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 984e5c31af7Sopenharmony_ci } 985e5c31af7Sopenharmony_ci "" 986e5c31af7Sopenharmony_ci tessellation_control "" 987e5c31af7Sopenharmony_ci #version 320 es 988e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 989e5c31af7Sopenharmony_ci in mediump float tc_in[]; 990e5c31af7Sopenharmony_ci patch out mediump float tc_out[gl_MaxPatchVertices]; 991e5c31af7Sopenharmony_ci void main() 992e5c31af7Sopenharmony_ci { 993e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 994e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 995e5c31af7Sopenharmony_ci } 996e5c31af7Sopenharmony_ci "" 997e5c31af7Sopenharmony_ci tessellation_evaluation "" 998e5c31af7Sopenharmony_ci #version 320 es 999e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1000e5c31af7Sopenharmony_ci in mediump float tc_out[gl_MaxPatchVertices]; 1001e5c31af7Sopenharmony_ci out mediump float te_out; 1002e5c31af7Sopenharmony_ci void main() 1003e5c31af7Sopenharmony_ci { 1004e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1005e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1006e5c31af7Sopenharmony_ci } 1007e5c31af7Sopenharmony_ci "" 1008e5c31af7Sopenharmony_ci fragment "" 1009e5c31af7Sopenharmony_ci #version 320 es 1010e5c31af7Sopenharmony_ci precision mediump float; 1011e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1012e5c31af7Sopenharmony_ci in mediump float te_out; 1013e5c31af7Sopenharmony_ci void main() 1014e5c31af7Sopenharmony_ci { 1015e5c31af7Sopenharmony_ci out0 = te_out; 1016e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1017e5c31af7Sopenharmony_ci } 1018e5c31af7Sopenharmony_ci "" 1019e5c31af7Sopenharmony_ci end 1020e5c31af7Sopenharmony_ci 1021e5c31af7Sopenharmony_ci case per_patch_qualifier_mismatch_2 1022e5c31af7Sopenharmony_ci version 320 es 1023e5c31af7Sopenharmony_ci desc "Tessellation control output is not per-patch qualified, evaluation input is" 1024e5c31af7Sopenharmony_ci expect compile_or_link_fail 1025e5c31af7Sopenharmony_ci values 1026e5c31af7Sopenharmony_ci { 1027e5c31af7Sopenharmony_ci input float in0 = 1.0; 1028e5c31af7Sopenharmony_ci output float out0 = 1.0; 1029e5c31af7Sopenharmony_ci } 1030e5c31af7Sopenharmony_ci vertex "" 1031e5c31af7Sopenharmony_ci #version 320 es 1032e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1033e5c31af7Sopenharmony_ci out mediump float tc_in; 1034e5c31af7Sopenharmony_ci void main() 1035e5c31af7Sopenharmony_ci { 1036e5c31af7Sopenharmony_ci tc_in = in0; 1037e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1038e5c31af7Sopenharmony_ci } 1039e5c31af7Sopenharmony_ci "" 1040e5c31af7Sopenharmony_ci tessellation_control "" 1041e5c31af7Sopenharmony_ci #version 320 es 1042e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1043e5c31af7Sopenharmony_ci in mediump float tc_in[]; 1044e5c31af7Sopenharmony_ci out mediump float tc_out[gl_MaxPatchVertices]; 1045e5c31af7Sopenharmony_ci void main() 1046e5c31af7Sopenharmony_ci { 1047e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 1048e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1049e5c31af7Sopenharmony_ci } 1050e5c31af7Sopenharmony_ci "" 1051e5c31af7Sopenharmony_ci tessellation_evaluation "" 1052e5c31af7Sopenharmony_ci #version 320 es 1053e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1054e5c31af7Sopenharmony_ci patch in mediump float tc_out[gl_MaxPatchVertices]; 1055e5c31af7Sopenharmony_ci out mediump float te_out; 1056e5c31af7Sopenharmony_ci void main() 1057e5c31af7Sopenharmony_ci { 1058e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1059e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1060e5c31af7Sopenharmony_ci } 1061e5c31af7Sopenharmony_ci "" 1062e5c31af7Sopenharmony_ci fragment "" 1063e5c31af7Sopenharmony_ci #version 320 es 1064e5c31af7Sopenharmony_ci precision mediump float; 1065e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1066e5c31af7Sopenharmony_ci in mediump float te_out; 1067e5c31af7Sopenharmony_ci void main() 1068e5c31af7Sopenharmony_ci { 1069e5c31af7Sopenharmony_ci out0 = te_out; 1070e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1071e5c31af7Sopenharmony_ci } 1072e5c31af7Sopenharmony_ci "" 1073e5c31af7Sopenharmony_ci end 1074e5c31af7Sopenharmony_ci 1075e5c31af7Sopenharmony_ci case input_block 1076e5c31af7Sopenharmony_ci version 320 es 1077e5c31af7Sopenharmony_ci desc "Tessellation control shader input block" 1078e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 1079e5c31af7Sopenharmony_ci vertex "" 1080e5c31af7Sopenharmony_ci #version 320 es 1081e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1082e5c31af7Sopenharmony_ci out IOBlockName 1083e5c31af7Sopenharmony_ci { 1084e5c31af7Sopenharmony_ci mediump float var; 1085e5c31af7Sopenharmony_ci } outputInstanceName; 1086e5c31af7Sopenharmony_ci void main() 1087e5c31af7Sopenharmony_ci { 1088e5c31af7Sopenharmony_ci outputInstanceName.var = 1.0; 1089e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1090e5c31af7Sopenharmony_ci } 1091e5c31af7Sopenharmony_ci "" 1092e5c31af7Sopenharmony_ci tessellation_control "" 1093e5c31af7Sopenharmony_ci #version 320 es 1094e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1095e5c31af7Sopenharmony_ci in IOBlockName 1096e5c31af7Sopenharmony_ci { 1097e5c31af7Sopenharmony_ci mediump float var; 1098e5c31af7Sopenharmony_ci } inputInstanceName[]; 1099e5c31af7Sopenharmony_ci out mediump float tc_out[]; 1100e5c31af7Sopenharmony_ci void main() 1101e5c31af7Sopenharmony_ci { 1102e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = inputInstanceName[gl_InvocationID].var; 1103e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1104e5c31af7Sopenharmony_ci } 1105e5c31af7Sopenharmony_ci "" 1106e5c31af7Sopenharmony_ci tessellation_evaluation "" 1107e5c31af7Sopenharmony_ci #version 320 es 1108e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1109e5c31af7Sopenharmony_ci in mediump float tc_out[]; 1110e5c31af7Sopenharmony_ci out mediump float te_out; 1111e5c31af7Sopenharmony_ci void main() 1112e5c31af7Sopenharmony_ci { 1113e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1114e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1115e5c31af7Sopenharmony_ci } 1116e5c31af7Sopenharmony_ci "" 1117e5c31af7Sopenharmony_ci fragment "" 1118e5c31af7Sopenharmony_ci #version 320 es 1119e5c31af7Sopenharmony_ci precision mediump float; 1120e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1121e5c31af7Sopenharmony_ci in mediump float te_out; 1122e5c31af7Sopenharmony_ci void main() 1123e5c31af7Sopenharmony_ci { 1124e5c31af7Sopenharmony_ci out0 = te_out; 1125e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1126e5c31af7Sopenharmony_ci } 1127e5c31af7Sopenharmony_ci "" 1128e5c31af7Sopenharmony_ci end 1129e5c31af7Sopenharmony_ci 1130e5c31af7Sopenharmony_ci case input_block_non_array 1131e5c31af7Sopenharmony_ci version 320 es 1132e5c31af7Sopenharmony_ci desc "Tessellation control shader input block with explicit array" 1133e5c31af7Sopenharmony_ci expect compile_or_link_fail 1134e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 1135e5c31af7Sopenharmony_ci vertex "" 1136e5c31af7Sopenharmony_ci #version 320 es 1137e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1138e5c31af7Sopenharmony_ci out IOBlockName 1139e5c31af7Sopenharmony_ci { 1140e5c31af7Sopenharmony_ci mediump float var; 1141e5c31af7Sopenharmony_ci } outputInstanceName; 1142e5c31af7Sopenharmony_ci void main() 1143e5c31af7Sopenharmony_ci { 1144e5c31af7Sopenharmony_ci outputInstanceName.var = 1.0; 1145e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1146e5c31af7Sopenharmony_ci } 1147e5c31af7Sopenharmony_ci "" 1148e5c31af7Sopenharmony_ci tessellation_control "" 1149e5c31af7Sopenharmony_ci #version 320 es 1150e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1151e5c31af7Sopenharmony_ci in IOBlockName 1152e5c31af7Sopenharmony_ci { 1153e5c31af7Sopenharmony_ci mediump float var; 1154e5c31af7Sopenharmony_ci } inputInstanceName; 1155e5c31af7Sopenharmony_ci out mediump float tc_out[]; 1156e5c31af7Sopenharmony_ci void main() 1157e5c31af7Sopenharmony_ci { 1158e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = inputInstanceName.var; 1159e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1160e5c31af7Sopenharmony_ci } 1161e5c31af7Sopenharmony_ci "" 1162e5c31af7Sopenharmony_ci tessellation_evaluation "" 1163e5c31af7Sopenharmony_ci #version 320 es 1164e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1165e5c31af7Sopenharmony_ci in mediump float tc_out[]; 1166e5c31af7Sopenharmony_ci out mediump float te_out; 1167e5c31af7Sopenharmony_ci void main() 1168e5c31af7Sopenharmony_ci { 1169e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1170e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1171e5c31af7Sopenharmony_ci } 1172e5c31af7Sopenharmony_ci "" 1173e5c31af7Sopenharmony_ci fragment "" 1174e5c31af7Sopenharmony_ci #version 320 es 1175e5c31af7Sopenharmony_ci precision mediump float; 1176e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1177e5c31af7Sopenharmony_ci in mediump float geo_out; 1178e5c31af7Sopenharmony_ci void main() 1179e5c31af7Sopenharmony_ci { 1180e5c31af7Sopenharmony_ci out0 = geo_out; 1181e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1182e5c31af7Sopenharmony_ci } 1183e5c31af7Sopenharmony_ci "" 1184e5c31af7Sopenharmony_ci end 1185e5c31af7Sopenharmony_ci 1186e5c31af7Sopenharmony_ci case input_block_array_size_mismatch 1187e5c31af7Sopenharmony_ci version 320 es 1188e5c31af7Sopenharmony_ci desc "Tessellation control shader input block array, size not gl_MaxPatchVertices" 1189e5c31af7Sopenharmony_ci expect compile_or_link_fail 1190e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 1191e5c31af7Sopenharmony_ci vertex "" 1192e5c31af7Sopenharmony_ci #version 320 es 1193e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1194e5c31af7Sopenharmony_ci out IOBlockName 1195e5c31af7Sopenharmony_ci { 1196e5c31af7Sopenharmony_ci mediump float var; 1197e5c31af7Sopenharmony_ci } outputInstanceName; 1198e5c31af7Sopenharmony_ci void main() 1199e5c31af7Sopenharmony_ci { 1200e5c31af7Sopenharmony_ci outputInstanceName.var = 1.0; 1201e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1202e5c31af7Sopenharmony_ci } 1203e5c31af7Sopenharmony_ci "" 1204e5c31af7Sopenharmony_ci tessellation_control "" 1205e5c31af7Sopenharmony_ci #version 320 es 1206e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1207e5c31af7Sopenharmony_ci in IOBlockName 1208e5c31af7Sopenharmony_ci { 1209e5c31af7Sopenharmony_ci mediump float var; 1210e5c31af7Sopenharmony_ci } inputInstanceName[4]; // not gl_MaxPatchVertices 1211e5c31af7Sopenharmony_ci out mediump float tc_out[]; 1212e5c31af7Sopenharmony_ci void main() 1213e5c31af7Sopenharmony_ci { 1214e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = inputInstanceName[gl_InvocationID + 1].var; 1215e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1216e5c31af7Sopenharmony_ci } 1217e5c31af7Sopenharmony_ci "" 1218e5c31af7Sopenharmony_ci tessellation_evaluation "" 1219e5c31af7Sopenharmony_ci #version 320 es 1220e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1221e5c31af7Sopenharmony_ci in mediump float tc_out[]; 1222e5c31af7Sopenharmony_ci out mediump float te_out; 1223e5c31af7Sopenharmony_ci void main() 1224e5c31af7Sopenharmony_ci { 1225e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1226e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1227e5c31af7Sopenharmony_ci } 1228e5c31af7Sopenharmony_ci "" 1229e5c31af7Sopenharmony_ci fragment "" 1230e5c31af7Sopenharmony_ci #version 320 es 1231e5c31af7Sopenharmony_ci precision mediump float; 1232e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1233e5c31af7Sopenharmony_ci in mediump float geo_out; 1234e5c31af7Sopenharmony_ci void main() 1235e5c31af7Sopenharmony_ci { 1236e5c31af7Sopenharmony_ci out0 = geo_out; 1237e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1238e5c31af7Sopenharmony_ci } 1239e5c31af7Sopenharmony_ci "" 1240e5c31af7Sopenharmony_ci end 1241e5c31af7Sopenharmony_ci 1242e5c31af7Sopenharmony_ci case output_block 1243e5c31af7Sopenharmony_ci version 320 es 1244e5c31af7Sopenharmony_ci desc "Tessellation shader output block" 1245e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 1246e5c31af7Sopenharmony_ci vertex "" 1247e5c31af7Sopenharmony_ci #version 320 es 1248e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1249e5c31af7Sopenharmony_ci void main() 1250e5c31af7Sopenharmony_ci { 1251e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1252e5c31af7Sopenharmony_ci } 1253e5c31af7Sopenharmony_ci "" 1254e5c31af7Sopenharmony_ci tessellation_control "" 1255e5c31af7Sopenharmony_ci #version 320 es 1256e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1257e5c31af7Sopenharmony_ci void main() 1258e5c31af7Sopenharmony_ci { 1259e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1260e5c31af7Sopenharmony_ci } 1261e5c31af7Sopenharmony_ci "" 1262e5c31af7Sopenharmony_ci tessellation_evaluation "" 1263e5c31af7Sopenharmony_ci #version 320 es 1264e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1265e5c31af7Sopenharmony_ci out IOBlockName 1266e5c31af7Sopenharmony_ci { 1267e5c31af7Sopenharmony_ci mediump float var; 1268e5c31af7Sopenharmony_ci } outputInstanceName; 1269e5c31af7Sopenharmony_ci void main() 1270e5c31af7Sopenharmony_ci { 1271e5c31af7Sopenharmony_ci outputInstanceName.var = 1.0; 1272e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1273e5c31af7Sopenharmony_ci } 1274e5c31af7Sopenharmony_ci "" 1275e5c31af7Sopenharmony_ci fragment "" 1276e5c31af7Sopenharmony_ci #version 320 es 1277e5c31af7Sopenharmony_ci precision mediump float; 1278e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1279e5c31af7Sopenharmony_ci in IOBlockName 1280e5c31af7Sopenharmony_ci { 1281e5c31af7Sopenharmony_ci mediump float var; 1282e5c31af7Sopenharmony_ci } inputInstanceName; 1283e5c31af7Sopenharmony_ci void main() 1284e5c31af7Sopenharmony_ci { 1285e5c31af7Sopenharmony_ci out0 = inputInstanceName.var; 1286e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1287e5c31af7Sopenharmony_ci } 1288e5c31af7Sopenharmony_ci "" 1289e5c31af7Sopenharmony_ci end 1290e5c31af7Sopenharmony_ci 1291e5c31af7Sopenharmony_ci case output_block_array 1292e5c31af7Sopenharmony_ci version 320 es 1293e5c31af7Sopenharmony_ci desc "Tessellation shader output block array" 1294e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 1295e5c31af7Sopenharmony_ci vertex "" 1296e5c31af7Sopenharmony_ci #version 320 es 1297e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1298e5c31af7Sopenharmony_ci void main() 1299e5c31af7Sopenharmony_ci { 1300e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1301e5c31af7Sopenharmony_ci } 1302e5c31af7Sopenharmony_ci "" 1303e5c31af7Sopenharmony_ci tessellation_control "" 1304e5c31af7Sopenharmony_ci #version 320 es 1305e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1306e5c31af7Sopenharmony_ci void main() 1307e5c31af7Sopenharmony_ci { 1308e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1309e5c31af7Sopenharmony_ci } 1310e5c31af7Sopenharmony_ci "" 1311e5c31af7Sopenharmony_ci tessellation_evaluation "" 1312e5c31af7Sopenharmony_ci #version 320 es 1313e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1314e5c31af7Sopenharmony_ci out IOBlockName 1315e5c31af7Sopenharmony_ci { 1316e5c31af7Sopenharmony_ci mediump float var; 1317e5c31af7Sopenharmony_ci } outputInstanceName[2]; 1318e5c31af7Sopenharmony_ci void main() 1319e5c31af7Sopenharmony_ci { 1320e5c31af7Sopenharmony_ci outputInstanceName[0].var = 2.0; 1321e5c31af7Sopenharmony_ci outputInstanceName[1].var = 1.0; 1322e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1323e5c31af7Sopenharmony_ci } 1324e5c31af7Sopenharmony_ci "" 1325e5c31af7Sopenharmony_ci fragment "" 1326e5c31af7Sopenharmony_ci #version 320 es 1327e5c31af7Sopenharmony_ci precision mediump float; 1328e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1329e5c31af7Sopenharmony_ci in IOBlockName 1330e5c31af7Sopenharmony_ci { 1331e5c31af7Sopenharmony_ci mediump float var; 1332e5c31af7Sopenharmony_ci } inputInstanceName[2]; 1333e5c31af7Sopenharmony_ci void main() 1334e5c31af7Sopenharmony_ci { 1335e5c31af7Sopenharmony_ci out0 = inputInstanceName[0].var - inputInstanceName[1].var; 1336e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1337e5c31af7Sopenharmony_ci } 1338e5c31af7Sopenharmony_ci "" 1339e5c31af7Sopenharmony_ci end 1340e5c31af7Sopenharmony_ci 1341e5c31af7Sopenharmony_ci case unspecified_vertex_count 1342e5c31af7Sopenharmony_ci version 320 es 1343e5c31af7Sopenharmony_ci desc "Tessellation shader unspecified vertex count" 1344e5c31af7Sopenharmony_ci expect compile_or_link_fail 1345e5c31af7Sopenharmony_ci vertex "" 1346e5c31af7Sopenharmony_ci #version 320 es 1347e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1348e5c31af7Sopenharmony_ci void main() 1349e5c31af7Sopenharmony_ci { 1350e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1351e5c31af7Sopenharmony_ci } 1352e5c31af7Sopenharmony_ci "" 1353e5c31af7Sopenharmony_ci tessellation_control "" 1354e5c31af7Sopenharmony_ci #version 320 es 1355e5c31af7Sopenharmony_ci void main() 1356e5c31af7Sopenharmony_ci { 1357e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1358e5c31af7Sopenharmony_ci } 1359e5c31af7Sopenharmony_ci "" 1360e5c31af7Sopenharmony_ci tessellation_evaluation "" 1361e5c31af7Sopenharmony_ci #version 320 es 1362e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1363e5c31af7Sopenharmony_ci void main() 1364e5c31af7Sopenharmony_ci { 1365e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1366e5c31af7Sopenharmony_ci } 1367e5c31af7Sopenharmony_ci "" 1368e5c31af7Sopenharmony_ci fragment "" 1369e5c31af7Sopenharmony_ci #version 320 es 1370e5c31af7Sopenharmony_ci precision mediump float; 1371e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1372e5c31af7Sopenharmony_ci void main() 1373e5c31af7Sopenharmony_ci { 1374e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1375e5c31af7Sopenharmony_ci } 1376e5c31af7Sopenharmony_ci "" 1377e5c31af7Sopenharmony_ci end 1378e5c31af7Sopenharmony_ci 1379e5c31af7Sopenharmony_ci case unspecified_primitive_mode 1380e5c31af7Sopenharmony_ci version 320 es 1381e5c31af7Sopenharmony_ci desc "Tessellation shader unspecified vertex count" 1382e5c31af7Sopenharmony_ci expect compile_or_link_fail 1383e5c31af7Sopenharmony_ci vertex "" 1384e5c31af7Sopenharmony_ci #version 320 es 1385e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1386e5c31af7Sopenharmony_ci void main() 1387e5c31af7Sopenharmony_ci { 1388e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1389e5c31af7Sopenharmony_ci } 1390e5c31af7Sopenharmony_ci "" 1391e5c31af7Sopenharmony_ci tessellation_control "" 1392e5c31af7Sopenharmony_ci #version 320 es 1393e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1394e5c31af7Sopenharmony_ci void main() 1395e5c31af7Sopenharmony_ci { 1396e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1397e5c31af7Sopenharmony_ci } 1398e5c31af7Sopenharmony_ci "" 1399e5c31af7Sopenharmony_ci tessellation_evaluation "" 1400e5c31af7Sopenharmony_ci #version 320 es 1401e5c31af7Sopenharmony_ci void main() 1402e5c31af7Sopenharmony_ci { 1403e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1404e5c31af7Sopenharmony_ci } 1405e5c31af7Sopenharmony_ci "" 1406e5c31af7Sopenharmony_ci fragment "" 1407e5c31af7Sopenharmony_ci #version 320 es 1408e5c31af7Sopenharmony_ci precision mediump float; 1409e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1410e5c31af7Sopenharmony_ci void main() 1411e5c31af7Sopenharmony_ci { 1412e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1413e5c31af7Sopenharmony_ci } 1414e5c31af7Sopenharmony_ci "" 1415e5c31af7Sopenharmony_ci end 1416e5c31af7Sopenharmony_ci end 1417e5c31af7Sopenharmony_ci 1418e5c31af7Sopenharmony_ci group qualifiers "Varying qualifiers" 1419e5c31af7Sopenharmony_ci case smooth 1420e5c31af7Sopenharmony_ci version 320 es 1421e5c31af7Sopenharmony_ci desc "Smooth varying" 1422e5c31af7Sopenharmony_ci values 1423e5c31af7Sopenharmony_ci { 1424e5c31af7Sopenharmony_ci input float in0 = 1.0; 1425e5c31af7Sopenharmony_ci output float out0 = 1.0; 1426e5c31af7Sopenharmony_ci } 1427e5c31af7Sopenharmony_ci vertex "" 1428e5c31af7Sopenharmony_ci #version 320 es 1429e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1430e5c31af7Sopenharmony_ci smooth out mediump float tc_in; 1431e5c31af7Sopenharmony_ci void main() 1432e5c31af7Sopenharmony_ci { 1433e5c31af7Sopenharmony_ci tc_in = in0; 1434e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1435e5c31af7Sopenharmony_ci } 1436e5c31af7Sopenharmony_ci "" 1437e5c31af7Sopenharmony_ci tessellation_control "" 1438e5c31af7Sopenharmony_ci #version 320 es 1439e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1440e5c31af7Sopenharmony_ci smooth in mediump float tc_in[]; 1441e5c31af7Sopenharmony_ci smooth out mediump float tc_out[]; 1442e5c31af7Sopenharmony_ci void main() 1443e5c31af7Sopenharmony_ci { 1444e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 1445e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1446e5c31af7Sopenharmony_ci } 1447e5c31af7Sopenharmony_ci "" 1448e5c31af7Sopenharmony_ci tessellation_evaluation "" 1449e5c31af7Sopenharmony_ci #version 320 es 1450e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1451e5c31af7Sopenharmony_ci smooth in mediump float tc_out[]; 1452e5c31af7Sopenharmony_ci smooth out mediump float te_out; 1453e5c31af7Sopenharmony_ci void main() 1454e5c31af7Sopenharmony_ci { 1455e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1456e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1457e5c31af7Sopenharmony_ci } 1458e5c31af7Sopenharmony_ci "" 1459e5c31af7Sopenharmony_ci fragment "" 1460e5c31af7Sopenharmony_ci #version 320 es 1461e5c31af7Sopenharmony_ci precision mediump float; 1462e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1463e5c31af7Sopenharmony_ci smooth in mediump float te_out; 1464e5c31af7Sopenharmony_ci void main() 1465e5c31af7Sopenharmony_ci { 1466e5c31af7Sopenharmony_ci out0 = te_out; 1467e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1468e5c31af7Sopenharmony_ci } 1469e5c31af7Sopenharmony_ci "" 1470e5c31af7Sopenharmony_ci end 1471e5c31af7Sopenharmony_ci 1472e5c31af7Sopenharmony_ci case flat 1473e5c31af7Sopenharmony_ci version 320 es 1474e5c31af7Sopenharmony_ci desc "Flat varying" 1475e5c31af7Sopenharmony_ci values 1476e5c31af7Sopenharmony_ci { 1477e5c31af7Sopenharmony_ci input float in0 = 1.0; 1478e5c31af7Sopenharmony_ci output float out0 = 1.0; 1479e5c31af7Sopenharmony_ci } 1480e5c31af7Sopenharmony_ci vertex "" 1481e5c31af7Sopenharmony_ci #version 320 es 1482e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1483e5c31af7Sopenharmony_ci flat out mediump float tc_in; 1484e5c31af7Sopenharmony_ci void main() 1485e5c31af7Sopenharmony_ci { 1486e5c31af7Sopenharmony_ci tc_in = in0; 1487e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1488e5c31af7Sopenharmony_ci } 1489e5c31af7Sopenharmony_ci "" 1490e5c31af7Sopenharmony_ci tessellation_control "" 1491e5c31af7Sopenharmony_ci #version 320 es 1492e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1493e5c31af7Sopenharmony_ci flat in mediump float tc_in[]; 1494e5c31af7Sopenharmony_ci flat out mediump float tc_out[]; 1495e5c31af7Sopenharmony_ci void main() 1496e5c31af7Sopenharmony_ci { 1497e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 1498e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1499e5c31af7Sopenharmony_ci } 1500e5c31af7Sopenharmony_ci "" 1501e5c31af7Sopenharmony_ci tessellation_evaluation "" 1502e5c31af7Sopenharmony_ci #version 320 es 1503e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1504e5c31af7Sopenharmony_ci flat in mediump float tc_out[]; 1505e5c31af7Sopenharmony_ci flat out mediump float te_out; 1506e5c31af7Sopenharmony_ci void main() 1507e5c31af7Sopenharmony_ci { 1508e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1509e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1510e5c31af7Sopenharmony_ci } 1511e5c31af7Sopenharmony_ci "" 1512e5c31af7Sopenharmony_ci fragment "" 1513e5c31af7Sopenharmony_ci #version 320 es 1514e5c31af7Sopenharmony_ci precision mediump float; 1515e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1516e5c31af7Sopenharmony_ci flat in mediump float te_out; 1517e5c31af7Sopenharmony_ci void main() 1518e5c31af7Sopenharmony_ci { 1519e5c31af7Sopenharmony_ci out0 = te_out; 1520e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1521e5c31af7Sopenharmony_ci } 1522e5c31af7Sopenharmony_ci "" 1523e5c31af7Sopenharmony_ci end 1524e5c31af7Sopenharmony_ci 1525e5c31af7Sopenharmony_ci case centroid 1526e5c31af7Sopenharmony_ci version 320 es 1527e5c31af7Sopenharmony_ci desc "Centroid varying" 1528e5c31af7Sopenharmony_ci values 1529e5c31af7Sopenharmony_ci { 1530e5c31af7Sopenharmony_ci input float in0 = 1.0; 1531e5c31af7Sopenharmony_ci output float out0 = 1.0; 1532e5c31af7Sopenharmony_ci } 1533e5c31af7Sopenharmony_ci vertex "" 1534e5c31af7Sopenharmony_ci #version 320 es 1535e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1536e5c31af7Sopenharmony_ci centroid out mediump float tc_in; 1537e5c31af7Sopenharmony_ci void main() 1538e5c31af7Sopenharmony_ci { 1539e5c31af7Sopenharmony_ci tc_in = in0; 1540e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1541e5c31af7Sopenharmony_ci } 1542e5c31af7Sopenharmony_ci "" 1543e5c31af7Sopenharmony_ci tessellation_control "" 1544e5c31af7Sopenharmony_ci #version 320 es 1545e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1546e5c31af7Sopenharmony_ci centroid in mediump float tc_in[]; 1547e5c31af7Sopenharmony_ci centroid out mediump float tc_out[]; 1548e5c31af7Sopenharmony_ci void main() 1549e5c31af7Sopenharmony_ci { 1550e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 1551e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1552e5c31af7Sopenharmony_ci } 1553e5c31af7Sopenharmony_ci "" 1554e5c31af7Sopenharmony_ci tessellation_evaluation "" 1555e5c31af7Sopenharmony_ci #version 320 es 1556e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1557e5c31af7Sopenharmony_ci centroid in mediump float tc_out[]; 1558e5c31af7Sopenharmony_ci centroid out mediump float te_out; 1559e5c31af7Sopenharmony_ci void main() 1560e5c31af7Sopenharmony_ci { 1561e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1562e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1563e5c31af7Sopenharmony_ci } 1564e5c31af7Sopenharmony_ci "" 1565e5c31af7Sopenharmony_ci fragment "" 1566e5c31af7Sopenharmony_ci #version 320 es 1567e5c31af7Sopenharmony_ci precision mediump float; 1568e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1569e5c31af7Sopenharmony_ci centroid in mediump float te_out; 1570e5c31af7Sopenharmony_ci void main() 1571e5c31af7Sopenharmony_ci { 1572e5c31af7Sopenharmony_ci out0 = te_out; 1573e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1574e5c31af7Sopenharmony_ci } 1575e5c31af7Sopenharmony_ci "" 1576e5c31af7Sopenharmony_ci end 1577e5c31af7Sopenharmony_ci 1578e5c31af7Sopenharmony_ci case sample 1579e5c31af7Sopenharmony_ci version 320 es 1580e5c31af7Sopenharmony_ci desc "Sample varying" 1581e5c31af7Sopenharmony_ci values 1582e5c31af7Sopenharmony_ci { 1583e5c31af7Sopenharmony_ci input float in0 = 1.0; 1584e5c31af7Sopenharmony_ci output float out0 = 1.0; 1585e5c31af7Sopenharmony_ci } 1586e5c31af7Sopenharmony_ci vertex "" 1587e5c31af7Sopenharmony_ci #version 320 es 1588e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1589e5c31af7Sopenharmony_ci sample out mediump float tc_in; 1590e5c31af7Sopenharmony_ci void main() 1591e5c31af7Sopenharmony_ci { 1592e5c31af7Sopenharmony_ci tc_in = in0; 1593e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1594e5c31af7Sopenharmony_ci } 1595e5c31af7Sopenharmony_ci "" 1596e5c31af7Sopenharmony_ci tessellation_control "" 1597e5c31af7Sopenharmony_ci #version 320 es 1598e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1599e5c31af7Sopenharmony_ci sample in mediump float tc_in[]; 1600e5c31af7Sopenharmony_ci sample out mediump float tc_out[]; 1601e5c31af7Sopenharmony_ci void main() 1602e5c31af7Sopenharmony_ci { 1603e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 1604e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1605e5c31af7Sopenharmony_ci } 1606e5c31af7Sopenharmony_ci "" 1607e5c31af7Sopenharmony_ci tessellation_evaluation "" 1608e5c31af7Sopenharmony_ci #version 320 es 1609e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1610e5c31af7Sopenharmony_ci sample in mediump float tc_out[]; 1611e5c31af7Sopenharmony_ci sample out mediump float te_out; 1612e5c31af7Sopenharmony_ci void main() 1613e5c31af7Sopenharmony_ci { 1614e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1615e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1616e5c31af7Sopenharmony_ci } 1617e5c31af7Sopenharmony_ci "" 1618e5c31af7Sopenharmony_ci fragment "" 1619e5c31af7Sopenharmony_ci #version 320 es 1620e5c31af7Sopenharmony_ci precision mediump float; 1621e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1622e5c31af7Sopenharmony_ci sample in mediump float te_out; 1623e5c31af7Sopenharmony_ci void main() 1624e5c31af7Sopenharmony_ci { 1625e5c31af7Sopenharmony_ci out0 = te_out; 1626e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1627e5c31af7Sopenharmony_ci } 1628e5c31af7Sopenharmony_ci "" 1629e5c31af7Sopenharmony_ci end 1630e5c31af7Sopenharmony_ci 1631e5c31af7Sopenharmony_ci case patch 1632e5c31af7Sopenharmony_ci version 320 es 1633e5c31af7Sopenharmony_ci desc "Pre-patch varying" 1634e5c31af7Sopenharmony_ci values 1635e5c31af7Sopenharmony_ci { 1636e5c31af7Sopenharmony_ci input float in0 = 1.0; 1637e5c31af7Sopenharmony_ci output float out0 = 1.0; 1638e5c31af7Sopenharmony_ci } 1639e5c31af7Sopenharmony_ci vertex "" 1640e5c31af7Sopenharmony_ci #version 320 es 1641e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1642e5c31af7Sopenharmony_ci out mediump float tc_in; 1643e5c31af7Sopenharmony_ci void main() 1644e5c31af7Sopenharmony_ci { 1645e5c31af7Sopenharmony_ci tc_in = in0; 1646e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1647e5c31af7Sopenharmony_ci } 1648e5c31af7Sopenharmony_ci "" 1649e5c31af7Sopenharmony_ci tessellation_control "" 1650e5c31af7Sopenharmony_ci #version 320 es 1651e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1652e5c31af7Sopenharmony_ci in mediump float tc_in[]; 1653e5c31af7Sopenharmony_ci patch out mediump float tc_out; 1654e5c31af7Sopenharmony_ci void main() 1655e5c31af7Sopenharmony_ci { 1656e5c31af7Sopenharmony_ci tc_out = tc_in[gl_InvocationID]; 1657e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1658e5c31af7Sopenharmony_ci } 1659e5c31af7Sopenharmony_ci "" 1660e5c31af7Sopenharmony_ci tessellation_evaluation "" 1661e5c31af7Sopenharmony_ci #version 320 es 1662e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1663e5c31af7Sopenharmony_ci patch in mediump float tc_out; 1664e5c31af7Sopenharmony_ci out mediump float te_out; 1665e5c31af7Sopenharmony_ci void main() 1666e5c31af7Sopenharmony_ci { 1667e5c31af7Sopenharmony_ci te_out = tc_out; 1668e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1669e5c31af7Sopenharmony_ci } 1670e5c31af7Sopenharmony_ci "" 1671e5c31af7Sopenharmony_ci fragment "" 1672e5c31af7Sopenharmony_ci #version 320 es 1673e5c31af7Sopenharmony_ci precision mediump float; 1674e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1675e5c31af7Sopenharmony_ci in mediump float te_out; 1676e5c31af7Sopenharmony_ci void main() 1677e5c31af7Sopenharmony_ci { 1678e5c31af7Sopenharmony_ci out0 = te_out; 1679e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1680e5c31af7Sopenharmony_ci } 1681e5c31af7Sopenharmony_ci "" 1682e5c31af7Sopenharmony_ci end 1683e5c31af7Sopenharmony_ci end 1684e5c31af7Sopenharmony_ci 1685e5c31af7Sopenharmony_ci import "linkage_tessellation_varying_types.test" 1686e5c31af7Sopenharmony_ciend 1687e5c31af7Sopenharmony_ci 1688e5c31af7Sopenharmony_cigroup uniform "Uniform" 1689e5c31af7Sopenharmony_ci group rules "Rules" 1690e5c31af7Sopenharmony_ci case type_mismatch_1 1691e5c31af7Sopenharmony_ci version 320 es 1692e5c31af7Sopenharmony_ci desc "uniform type mismatch between vertex and tessellation control shaders" 1693e5c31af7Sopenharmony_ci expect link_fail 1694e5c31af7Sopenharmony_ci vertex "" 1695e5c31af7Sopenharmony_ci #version 320 es 1696e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1697e5c31af7Sopenharmony_ci uniform mediump float val; 1698e5c31af7Sopenharmony_ci out mediump float vtx_out; 1699e5c31af7Sopenharmony_ci void main() 1700e5c31af7Sopenharmony_ci { 1701e5c31af7Sopenharmony_ci vtx_out = val; 1702e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1703e5c31af7Sopenharmony_ci } 1704e5c31af7Sopenharmony_ci "" 1705e5c31af7Sopenharmony_ci tessellation_control "" 1706e5c31af7Sopenharmony_ci #version 320 es 1707e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1708e5c31af7Sopenharmony_ci uniform mediump vec2 val; 1709e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 1710e5c31af7Sopenharmony_ci out mediump float tc_out[]; 1711e5c31af7Sopenharmony_ci void main() 1712e5c31af7Sopenharmony_ci { 1713e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[0] + val.x + val.y; 1714e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1715e5c31af7Sopenharmony_ci } 1716e5c31af7Sopenharmony_ci "" 1717e5c31af7Sopenharmony_ci tessellation_evaluation "" 1718e5c31af7Sopenharmony_ci #version 320 es 1719e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1720e5c31af7Sopenharmony_ci in mediump float tc_out[]; 1721e5c31af7Sopenharmony_ci out mediump float te_out; 1722e5c31af7Sopenharmony_ci void main() 1723e5c31af7Sopenharmony_ci { 1724e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1725e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1726e5c31af7Sopenharmony_ci } 1727e5c31af7Sopenharmony_ci "" 1728e5c31af7Sopenharmony_ci fragment "" 1729e5c31af7Sopenharmony_ci #version 320 es 1730e5c31af7Sopenharmony_ci precision mediump float; 1731e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1732e5c31af7Sopenharmony_ci in mediump float te_out; 1733e5c31af7Sopenharmony_ci void main() 1734e5c31af7Sopenharmony_ci { 1735e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out); 1736e5c31af7Sopenharmony_ci } 1737e5c31af7Sopenharmony_ci "" 1738e5c31af7Sopenharmony_ci end 1739e5c31af7Sopenharmony_ci 1740e5c31af7Sopenharmony_ci case type_mismatch_2 1741e5c31af7Sopenharmony_ci version 320 es 1742e5c31af7Sopenharmony_ci desc "uniform type mismatch between fragment and tessellation eval shaders" 1743e5c31af7Sopenharmony_ci expect link_fail 1744e5c31af7Sopenharmony_ci vertex "" 1745e5c31af7Sopenharmony_ci #version 320 es 1746e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1747e5c31af7Sopenharmony_ci out mediump float vtx_out; 1748e5c31af7Sopenharmony_ci void main() 1749e5c31af7Sopenharmony_ci { 1750e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1751e5c31af7Sopenharmony_ci } 1752e5c31af7Sopenharmony_ci "" 1753e5c31af7Sopenharmony_ci tessellation_control "" 1754e5c31af7Sopenharmony_ci #version 320 es 1755e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1756e5c31af7Sopenharmony_ci void main() 1757e5c31af7Sopenharmony_ci { 1758e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1759e5c31af7Sopenharmony_ci } 1760e5c31af7Sopenharmony_ci "" 1761e5c31af7Sopenharmony_ci tessellation_evaluation "" 1762e5c31af7Sopenharmony_ci #version 320 es 1763e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1764e5c31af7Sopenharmony_ci uniform mediump vec3 val; 1765e5c31af7Sopenharmony_ci out mediump float te_out; 1766e5c31af7Sopenharmony_ci void main() 1767e5c31af7Sopenharmony_ci { 1768e5c31af7Sopenharmony_ci te_out = val.x + val.y + val.z; 1769e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1770e5c31af7Sopenharmony_ci } 1771e5c31af7Sopenharmony_ci "" 1772e5c31af7Sopenharmony_ci fragment "" 1773e5c31af7Sopenharmony_ci #version 320 es 1774e5c31af7Sopenharmony_ci precision mediump float; 1775e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1776e5c31af7Sopenharmony_ci uniform mediump vec4 val; 1777e5c31af7Sopenharmony_ci in mediump float te_out; 1778e5c31af7Sopenharmony_ci void main() 1779e5c31af7Sopenharmony_ci { 1780e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out) + val; 1781e5c31af7Sopenharmony_ci } 1782e5c31af7Sopenharmony_ci "" 1783e5c31af7Sopenharmony_ci end 1784e5c31af7Sopenharmony_ci 1785e5c31af7Sopenharmony_ci case type_mismatch_3 1786e5c31af7Sopenharmony_ci version 320 es 1787e5c31af7Sopenharmony_ci desc "uniform type mismatch between tessellation control and eval shaders" 1788e5c31af7Sopenharmony_ci expect link_fail 1789e5c31af7Sopenharmony_ci vertex "" 1790e5c31af7Sopenharmony_ci #version 320 es 1791e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1792e5c31af7Sopenharmony_ci out mediump float vtx_out; 1793e5c31af7Sopenharmony_ci void main() 1794e5c31af7Sopenharmony_ci { 1795e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1796e5c31af7Sopenharmony_ci } 1797e5c31af7Sopenharmony_ci "" 1798e5c31af7Sopenharmony_ci tessellation_control "" 1799e5c31af7Sopenharmony_ci #version 320 es 1800e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1801e5c31af7Sopenharmony_ci uniform mediump vec4 val; 1802e5c31af7Sopenharmony_ci out mediump vec4 tc_out[]; 1803e5c31af7Sopenharmony_ci void main() 1804e5c31af7Sopenharmony_ci { 1805e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = val; 1806e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1807e5c31af7Sopenharmony_ci } 1808e5c31af7Sopenharmony_ci "" 1809e5c31af7Sopenharmony_ci tessellation_evaluation "" 1810e5c31af7Sopenharmony_ci #version 320 es 1811e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1812e5c31af7Sopenharmony_ci uniform mediump vec3 val; 1813e5c31af7Sopenharmony_ci in mediump vec4 tc_out[]; 1814e5c31af7Sopenharmony_ci out mediump float te_out; 1815e5c31af7Sopenharmony_ci void main() 1816e5c31af7Sopenharmony_ci { 1817e5c31af7Sopenharmony_ci te_out = tc_out[0].w * val.z; 1818e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1819e5c31af7Sopenharmony_ci } 1820e5c31af7Sopenharmony_ci "" 1821e5c31af7Sopenharmony_ci fragment "" 1822e5c31af7Sopenharmony_ci #version 320 es 1823e5c31af7Sopenharmony_ci precision mediump float; 1824e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1825e5c31af7Sopenharmony_ci in mediump float te_out; 1826e5c31af7Sopenharmony_ci void main() 1827e5c31af7Sopenharmony_ci { 1828e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out); 1829e5c31af7Sopenharmony_ci } 1830e5c31af7Sopenharmony_ci "" 1831e5c31af7Sopenharmony_ci end 1832e5c31af7Sopenharmony_ci 1833e5c31af7Sopenharmony_ci case type_mismatch_4 1834e5c31af7Sopenharmony_ci version 320 es 1835e5c31af7Sopenharmony_ci desc "uniform type mismatch between vertex and tessellation control shaders" 1836e5c31af7Sopenharmony_ci expect link_fail 1837e5c31af7Sopenharmony_ci require limit "GL_MAX_VERTEX_ATOMIC_COUNTERS" > 0 1838e5c31af7Sopenharmony_ci vertex "" 1839e5c31af7Sopenharmony_ci #version 320 es 1840e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1841e5c31af7Sopenharmony_ci layout(binding=0) uniform atomic_uint u_var; 1842e5c31af7Sopenharmony_ci out mediump float vtx_out; 1843e5c31af7Sopenharmony_ci void main() 1844e5c31af7Sopenharmony_ci { 1845e5c31af7Sopenharmony_ci uint result = atomicCounterIncrement(u_var); 1846e5c31af7Sopenharmony_ci vtx_out = float(result); 1847e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1848e5c31af7Sopenharmony_ci } 1849e5c31af7Sopenharmony_ci "" 1850e5c31af7Sopenharmony_ci tessellation_control "" 1851e5c31af7Sopenharmony_ci #version 320 es 1852e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1853e5c31af7Sopenharmony_ci uniform mediump float u_var; 1854e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 1855e5c31af7Sopenharmony_ci out mediump float tc_out[]; 1856e5c31af7Sopenharmony_ci void main() 1857e5c31af7Sopenharmony_ci { 1858e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[0] + u_var; 1859e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1860e5c31af7Sopenharmony_ci } 1861e5c31af7Sopenharmony_ci "" 1862e5c31af7Sopenharmony_ci tessellation_evaluation "" 1863e5c31af7Sopenharmony_ci #version 320 es 1864e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1865e5c31af7Sopenharmony_ci in mediump float tc_out[]; 1866e5c31af7Sopenharmony_ci out mediump float te_out; 1867e5c31af7Sopenharmony_ci void main() 1868e5c31af7Sopenharmony_ci { 1869e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1870e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1871e5c31af7Sopenharmony_ci } 1872e5c31af7Sopenharmony_ci "" 1873e5c31af7Sopenharmony_ci fragment "" 1874e5c31af7Sopenharmony_ci #version 320 es 1875e5c31af7Sopenharmony_ci precision mediump float; 1876e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1877e5c31af7Sopenharmony_ci in mediump float te_out; 1878e5c31af7Sopenharmony_ci void main() 1879e5c31af7Sopenharmony_ci { 1880e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out); 1881e5c31af7Sopenharmony_ci } 1882e5c31af7Sopenharmony_ci "" 1883e5c31af7Sopenharmony_ci end 1884e5c31af7Sopenharmony_ci 1885e5c31af7Sopenharmony_ci case type_mismatch_5 1886e5c31af7Sopenharmony_ci version 320 es 1887e5c31af7Sopenharmony_ci desc "uniform type mismatch between vertex and tessellation control shaders" 1888e5c31af7Sopenharmony_ci expect link_fail 1889e5c31af7Sopenharmony_ci require limit "GL_MAX_VERTEX_IMAGE_UNIFORMS" > 0 1890e5c31af7Sopenharmony_ci vertex "" 1891e5c31af7Sopenharmony_ci #version 320 es 1892e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1893e5c31af7Sopenharmony_ci layout(binding=0) layout(rgba8i) uniform readonly highp iimage2D u_var; 1894e5c31af7Sopenharmony_ci out mediump float vtx_out; 1895e5c31af7Sopenharmony_ci void main() 1896e5c31af7Sopenharmony_ci { 1897e5c31af7Sopenharmony_ci int result = imageSize(u_var).x; 1898e5c31af7Sopenharmony_ci vtx_out = float(result); 1899e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1900e5c31af7Sopenharmony_ci } 1901e5c31af7Sopenharmony_ci "" 1902e5c31af7Sopenharmony_ci tessellation_control "" 1903e5c31af7Sopenharmony_ci #version 320 es 1904e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1905e5c31af7Sopenharmony_ci uniform mediump float u_var; 1906e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 1907e5c31af7Sopenharmony_ci out mediump float tc_out[]; 1908e5c31af7Sopenharmony_ci void main() 1909e5c31af7Sopenharmony_ci { 1910e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[0] + u_var; 1911e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1912e5c31af7Sopenharmony_ci } 1913e5c31af7Sopenharmony_ci "" 1914e5c31af7Sopenharmony_ci tessellation_evaluation "" 1915e5c31af7Sopenharmony_ci #version 320 es 1916e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1917e5c31af7Sopenharmony_ci in mediump float tc_out[]; 1918e5c31af7Sopenharmony_ci out mediump float te_out; 1919e5c31af7Sopenharmony_ci void main() 1920e5c31af7Sopenharmony_ci { 1921e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1922e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1923e5c31af7Sopenharmony_ci } 1924e5c31af7Sopenharmony_ci "" 1925e5c31af7Sopenharmony_ci fragment "" 1926e5c31af7Sopenharmony_ci #version 320 es 1927e5c31af7Sopenharmony_ci precision mediump float; 1928e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1929e5c31af7Sopenharmony_ci in mediump float te_out; 1930e5c31af7Sopenharmony_ci void main() 1931e5c31af7Sopenharmony_ci { 1932e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out); 1933e5c31af7Sopenharmony_ci } 1934e5c31af7Sopenharmony_ci "" 1935e5c31af7Sopenharmony_ci end 1936e5c31af7Sopenharmony_ci 1937e5c31af7Sopenharmony_ci case precision_mismatch_1 1938e5c31af7Sopenharmony_ci version 320 es 1939e5c31af7Sopenharmony_ci desc "uniform precision mismatch between tessellation control and eval shaders" 1940e5c31af7Sopenharmony_ci expect link_fail 1941e5c31af7Sopenharmony_ci vertex "" 1942e5c31af7Sopenharmony_ci #version 320 es 1943e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1944e5c31af7Sopenharmony_ci out mediump float vtx_out; 1945e5c31af7Sopenharmony_ci void main() 1946e5c31af7Sopenharmony_ci { 1947e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1948e5c31af7Sopenharmony_ci } 1949e5c31af7Sopenharmony_ci "" 1950e5c31af7Sopenharmony_ci tessellation_control "" 1951e5c31af7Sopenharmony_ci #version 320 es 1952e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1953e5c31af7Sopenharmony_ci uniform mediump vec4 val; 1954e5c31af7Sopenharmony_ci out mediump vec4 tc_out[]; 1955e5c31af7Sopenharmony_ci void main() 1956e5c31af7Sopenharmony_ci { 1957e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = val; 1958e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1959e5c31af7Sopenharmony_ci } 1960e5c31af7Sopenharmony_ci "" 1961e5c31af7Sopenharmony_ci tessellation_evaluation "" 1962e5c31af7Sopenharmony_ci #version 320 es 1963e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1964e5c31af7Sopenharmony_ci uniform highp vec4 val; 1965e5c31af7Sopenharmony_ci in mediump vec4 tc_out[]; 1966e5c31af7Sopenharmony_ci out mediump float te_out; 1967e5c31af7Sopenharmony_ci void main() 1968e5c31af7Sopenharmony_ci { 1969e5c31af7Sopenharmony_ci te_out = tc_out[0].w * val.z; 1970e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1971e5c31af7Sopenharmony_ci } 1972e5c31af7Sopenharmony_ci "" 1973e5c31af7Sopenharmony_ci fragment "" 1974e5c31af7Sopenharmony_ci #version 320 es 1975e5c31af7Sopenharmony_ci precision mediump float; 1976e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1977e5c31af7Sopenharmony_ci in mediump float te_out; 1978e5c31af7Sopenharmony_ci void main() 1979e5c31af7Sopenharmony_ci { 1980e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out); 1981e5c31af7Sopenharmony_ci } 1982e5c31af7Sopenharmony_ci "" 1983e5c31af7Sopenharmony_ci end 1984e5c31af7Sopenharmony_ci 1985e5c31af7Sopenharmony_ci case precision_mismatch_2 1986e5c31af7Sopenharmony_ci version 320 es 1987e5c31af7Sopenharmony_ci desc "uniform precision mismatch between vertex and tessellation control shaders" 1988e5c31af7Sopenharmony_ci expect link_fail 1989e5c31af7Sopenharmony_ci vertex "" 1990e5c31af7Sopenharmony_ci #version 320 es 1991e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1992e5c31af7Sopenharmony_ci uniform highp float val; 1993e5c31af7Sopenharmony_ci out mediump float vtx_out; 1994e5c31af7Sopenharmony_ci void main() 1995e5c31af7Sopenharmony_ci { 1996e5c31af7Sopenharmony_ci vtx_out = val; 1997e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1998e5c31af7Sopenharmony_ci } 1999e5c31af7Sopenharmony_ci "" 2000e5c31af7Sopenharmony_ci tessellation_control "" 2001e5c31af7Sopenharmony_ci #version 320 es 2002e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 2003e5c31af7Sopenharmony_ci uniform mediump float val; 2004e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 2005e5c31af7Sopenharmony_ci out mediump float tc_out[]; 2006e5c31af7Sopenharmony_ci void main() 2007e5c31af7Sopenharmony_ci { 2008e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[0] + val; 2009e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2010e5c31af7Sopenharmony_ci } 2011e5c31af7Sopenharmony_ci "" 2012e5c31af7Sopenharmony_ci tessellation_evaluation "" 2013e5c31af7Sopenharmony_ci #version 320 es 2014e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 2015e5c31af7Sopenharmony_ci in mediump float tc_out[]; 2016e5c31af7Sopenharmony_ci out mediump float te_out; 2017e5c31af7Sopenharmony_ci void main() 2018e5c31af7Sopenharmony_ci { 2019e5c31af7Sopenharmony_ci te_out = tc_out[2]; 2020e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2021e5c31af7Sopenharmony_ci } 2022e5c31af7Sopenharmony_ci "" 2023e5c31af7Sopenharmony_ci fragment "" 2024e5c31af7Sopenharmony_ci #version 320 es 2025e5c31af7Sopenharmony_ci precision mediump float; 2026e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2027e5c31af7Sopenharmony_ci in mediump float te_out; 2028e5c31af7Sopenharmony_ci void main() 2029e5c31af7Sopenharmony_ci { 2030e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out); 2031e5c31af7Sopenharmony_ci } 2032e5c31af7Sopenharmony_ci "" 2033e5c31af7Sopenharmony_ci end 2034e5c31af7Sopenharmony_ci 2035e5c31af7Sopenharmony_ci case struct_partial_usage 2036e5c31af7Sopenharmony_ci version 320 es 2037e5c31af7Sopenharmony_ci desc "uniform is partially used in different shader stages" 2038e5c31af7Sopenharmony_ci values 2039e5c31af7Sopenharmony_ci { 2040e5c31af7Sopenharmony_ci uniform float val.vtxVal = 1.5; 2041e5c31af7Sopenharmony_ci uniform float val.tcVal = 2.5; 2042e5c31af7Sopenharmony_ci uniform float val.teVal = 6.0; 2043e5c31af7Sopenharmony_ci uniform float val.fragVal = 11.0; 2044e5c31af7Sopenharmony_ci output float out0 = 68.5; 2045e5c31af7Sopenharmony_ci } 2046e5c31af7Sopenharmony_ci vertex "" 2047e5c31af7Sopenharmony_ci #version 320 es 2048e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2049e5c31af7Sopenharmony_ci struct S 2050e5c31af7Sopenharmony_ci { 2051e5c31af7Sopenharmony_ci mediump float vtxVal; 2052e5c31af7Sopenharmony_ci mediump float tcVal; 2053e5c31af7Sopenharmony_ci mediump float teVal; 2054e5c31af7Sopenharmony_ci mediump float fragVal; 2055e5c31af7Sopenharmony_ci }; 2056e5c31af7Sopenharmony_ci uniform S val; 2057e5c31af7Sopenharmony_ci out mediump float vtx_out; 2058e5c31af7Sopenharmony_ci void main() 2059e5c31af7Sopenharmony_ci { 2060e5c31af7Sopenharmony_ci vtx_out = val.vtxVal; 2061e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2062e5c31af7Sopenharmony_ci } 2063e5c31af7Sopenharmony_ci "" 2064e5c31af7Sopenharmony_ci tessellation_control "" 2065e5c31af7Sopenharmony_ci #version 320 es 2066e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 2067e5c31af7Sopenharmony_ci struct S 2068e5c31af7Sopenharmony_ci { 2069e5c31af7Sopenharmony_ci mediump float vtxVal; 2070e5c31af7Sopenharmony_ci mediump float tcVal; 2071e5c31af7Sopenharmony_ci mediump float teVal; 2072e5c31af7Sopenharmony_ci mediump float fragVal; 2073e5c31af7Sopenharmony_ci }; 2074e5c31af7Sopenharmony_ci uniform S val; 2075e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 2076e5c31af7Sopenharmony_ci out mediump float tc_out[]; 2077e5c31af7Sopenharmony_ci void main() 2078e5c31af7Sopenharmony_ci { 2079e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[0] + 2.0 * val.tcVal; 2080e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2081e5c31af7Sopenharmony_ci } 2082e5c31af7Sopenharmony_ci "" 2083e5c31af7Sopenharmony_ci tessellation_evaluation "" 2084e5c31af7Sopenharmony_ci #version 320 es 2085e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 2086e5c31af7Sopenharmony_ci struct S 2087e5c31af7Sopenharmony_ci { 2088e5c31af7Sopenharmony_ci mediump float vtxVal; 2089e5c31af7Sopenharmony_ci mediump float tcVal; 2090e5c31af7Sopenharmony_ci mediump float teVal; 2091e5c31af7Sopenharmony_ci mediump float fragVal; 2092e5c31af7Sopenharmony_ci }; 2093e5c31af7Sopenharmony_ci uniform S val; 2094e5c31af7Sopenharmony_ci in mediump float tc_out[]; 2095e5c31af7Sopenharmony_ci out mediump float te_out; 2096e5c31af7Sopenharmony_ci void main() 2097e5c31af7Sopenharmony_ci { 2098e5c31af7Sopenharmony_ci te_out = tc_out[2] + 3.0 * val.teVal; 2099e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2100e5c31af7Sopenharmony_ci } 2101e5c31af7Sopenharmony_ci "" 2102e5c31af7Sopenharmony_ci fragment "" 2103e5c31af7Sopenharmony_ci #version 320 es 2104e5c31af7Sopenharmony_ci precision mediump float; 2105e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2106e5c31af7Sopenharmony_ci struct S 2107e5c31af7Sopenharmony_ci { 2108e5c31af7Sopenharmony_ci mediump float vtxVal; 2109e5c31af7Sopenharmony_ci mediump float tcVal; 2110e5c31af7Sopenharmony_ci mediump float teVal; 2111e5c31af7Sopenharmony_ci mediump float fragVal; 2112e5c31af7Sopenharmony_ci }; 2113e5c31af7Sopenharmony_ci uniform S val; 2114e5c31af7Sopenharmony_ci in mediump float te_out; 2115e5c31af7Sopenharmony_ci void main() 2116e5c31af7Sopenharmony_ci { 2117e5c31af7Sopenharmony_ci out0 = te_out + 4.0 * val.fragVal; 2118e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT}; 2119e5c31af7Sopenharmony_ci } 2120e5c31af7Sopenharmony_ci "" 2121e5c31af7Sopenharmony_ci end 2122e5c31af7Sopenharmony_ci end 2123e5c31af7Sopenharmony_ci 2124e5c31af7Sopenharmony_ci import "linkage_tessellation_uniform_types.test" 2125e5c31af7Sopenharmony_ciend 2126