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