1e5c31af7Sopenharmony_ci 2e5c31af7Sopenharmony_cigroup varying "Varying linkage" 3e5c31af7Sopenharmony_ci group rules "Rules" 4e5c31af7Sopenharmony_ci 5e5c31af7Sopenharmony_ci case input_type_mismatch 6e5c31af7Sopenharmony_ci version 310 es 7e5c31af7Sopenharmony_ci desc "Tessellation control shader input type mismatch" 8e5c31af7Sopenharmony_ci expect link_fail 9e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 10e5c31af7Sopenharmony_ci values 11e5c31af7Sopenharmony_ci { 12e5c31af7Sopenharmony_ci input float in0 = 1.0; 13e5c31af7Sopenharmony_ci output float out0 = 1.0; 14e5c31af7Sopenharmony_ci } 15e5c31af7Sopenharmony_ci vertex "" 16e5c31af7Sopenharmony_ci #version 310 es 17e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 18e5c31af7Sopenharmony_ci out mediump float tc_in; 19e5c31af7Sopenharmony_ci void main() 20e5c31af7Sopenharmony_ci { 21e5c31af7Sopenharmony_ci tc_in = in0; 22e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 23e5c31af7Sopenharmony_ci } 24e5c31af7Sopenharmony_ci "" 25e5c31af7Sopenharmony_ci tessellation_control "" 26e5c31af7Sopenharmony_ci #version 310 es 27e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 28e5c31af7Sopenharmony_ci in mediump vec2 tc_in[]; 29e5c31af7Sopenharmony_ci out mediump float tc_out[]; 30e5c31af7Sopenharmony_ci void main() 31e5c31af7Sopenharmony_ci { 32e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID].x; 33e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 34e5c31af7Sopenharmony_ci } 35e5c31af7Sopenharmony_ci "" 36e5c31af7Sopenharmony_ci tessellation_evaluation "" 37e5c31af7Sopenharmony_ci #version 310 es 38e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 39e5c31af7Sopenharmony_ci in mediump float tc_out[]; 40e5c31af7Sopenharmony_ci out mediump float te_out; 41e5c31af7Sopenharmony_ci void main() 42e5c31af7Sopenharmony_ci { 43e5c31af7Sopenharmony_ci te_out = tc_out[2]; 44e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 45e5c31af7Sopenharmony_ci } 46e5c31af7Sopenharmony_ci "" 47e5c31af7Sopenharmony_ci fragment "" 48e5c31af7Sopenharmony_ci #version 310 es 49e5c31af7Sopenharmony_ci precision mediump float; 50e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 51e5c31af7Sopenharmony_ci in mediump float te_out; 52e5c31af7Sopenharmony_ci void main() 53e5c31af7Sopenharmony_ci { 54e5c31af7Sopenharmony_ci out0 = te_out; 55e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 56e5c31af7Sopenharmony_ci } 57e5c31af7Sopenharmony_ci "" 58e5c31af7Sopenharmony_ci end 59e5c31af7Sopenharmony_ci 60e5c31af7Sopenharmony_ci case output_type_mismatch 61e5c31af7Sopenharmony_ci version 310 es 62e5c31af7Sopenharmony_ci desc "Tessellation evaluation shader output type mismatch" 63e5c31af7Sopenharmony_ci expect link_fail 64e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 65e5c31af7Sopenharmony_ci values 66e5c31af7Sopenharmony_ci { 67e5c31af7Sopenharmony_ci input float in0 = 1.0; 68e5c31af7Sopenharmony_ci output float out0 = 1.0; 69e5c31af7Sopenharmony_ci } 70e5c31af7Sopenharmony_ci vertex "" 71e5c31af7Sopenharmony_ci #version 310 es 72e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 73e5c31af7Sopenharmony_ci out mediump float tc_in; 74e5c31af7Sopenharmony_ci void main() 75e5c31af7Sopenharmony_ci { 76e5c31af7Sopenharmony_ci tc_in = in0; 77e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 78e5c31af7Sopenharmony_ci } 79e5c31af7Sopenharmony_ci "" 80e5c31af7Sopenharmony_ci tessellation_control "" 81e5c31af7Sopenharmony_ci #version 310 es 82e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 83e5c31af7Sopenharmony_ci in mediump float tc_in[]; 84e5c31af7Sopenharmony_ci out mediump float tc_out[]; 85e5c31af7Sopenharmony_ci void main() 86e5c31af7Sopenharmony_ci { 87e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 88e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 89e5c31af7Sopenharmony_ci } 90e5c31af7Sopenharmony_ci "" 91e5c31af7Sopenharmony_ci tessellation_evaluation "" 92e5c31af7Sopenharmony_ci #version 310 es 93e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 94e5c31af7Sopenharmony_ci in mediump float tc_out[]; 95e5c31af7Sopenharmony_ci out mediump float te_out; 96e5c31af7Sopenharmony_ci void main() 97e5c31af7Sopenharmony_ci { 98e5c31af7Sopenharmony_ci te_out = tc_out[2]; 99e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 100e5c31af7Sopenharmony_ci } 101e5c31af7Sopenharmony_ci "" 102e5c31af7Sopenharmony_ci fragment "" 103e5c31af7Sopenharmony_ci #version 310 es 104e5c31af7Sopenharmony_ci precision mediump float; 105e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 106e5c31af7Sopenharmony_ci in mediump vec2 te_out; 107e5c31af7Sopenharmony_ci void main() 108e5c31af7Sopenharmony_ci { 109e5c31af7Sopenharmony_ci out0 = te_out.x + te_out.y; 110e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 111e5c31af7Sopenharmony_ci } 112e5c31af7Sopenharmony_ci "" 113e5c31af7Sopenharmony_ci end 114e5c31af7Sopenharmony_ci 115e5c31af7Sopenharmony_ci case internal_type_mismatch 116e5c31af7Sopenharmony_ci version 310 es 117e5c31af7Sopenharmony_ci desc "Tessellation control and evaluation shader varying type mismatch" 118e5c31af7Sopenharmony_ci expect link_fail 119e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 120e5c31af7Sopenharmony_ci values 121e5c31af7Sopenharmony_ci { 122e5c31af7Sopenharmony_ci input float in0 = 1.0; 123e5c31af7Sopenharmony_ci output float out0 = 1.0; 124e5c31af7Sopenharmony_ci } 125e5c31af7Sopenharmony_ci vertex "" 126e5c31af7Sopenharmony_ci #version 310 es 127e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 128e5c31af7Sopenharmony_ci out mediump float tc_in; 129e5c31af7Sopenharmony_ci void main() 130e5c31af7Sopenharmony_ci { 131e5c31af7Sopenharmony_ci tc_in = in0; 132e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 133e5c31af7Sopenharmony_ci } 134e5c31af7Sopenharmony_ci "" 135e5c31af7Sopenharmony_ci tessellation_control "" 136e5c31af7Sopenharmony_ci #version 310 es 137e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 138e5c31af7Sopenharmony_ci in mediump float tc_in[]; 139e5c31af7Sopenharmony_ci out mediump float tc_out[]; 140e5c31af7Sopenharmony_ci void main() 141e5c31af7Sopenharmony_ci { 142e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 143e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 144e5c31af7Sopenharmony_ci } 145e5c31af7Sopenharmony_ci "" 146e5c31af7Sopenharmony_ci tessellation_evaluation "" 147e5c31af7Sopenharmony_ci #version 310 es 148e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 149e5c31af7Sopenharmony_ci in mediump vec2 tc_out[]; 150e5c31af7Sopenharmony_ci out mediump float te_out; 151e5c31af7Sopenharmony_ci void main() 152e5c31af7Sopenharmony_ci { 153e5c31af7Sopenharmony_ci te_out = tc_out[2].x + tc_out[0].y; 154e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 155e5c31af7Sopenharmony_ci } 156e5c31af7Sopenharmony_ci "" 157e5c31af7Sopenharmony_ci fragment "" 158e5c31af7Sopenharmony_ci #version 310 es 159e5c31af7Sopenharmony_ci precision mediump float; 160e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 161e5c31af7Sopenharmony_ci in mediump float te_out; 162e5c31af7Sopenharmony_ci void main() 163e5c31af7Sopenharmony_ci { 164e5c31af7Sopenharmony_ci out0 = te_out; 165e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 166e5c31af7Sopenharmony_ci } 167e5c31af7Sopenharmony_ci "" 168e5c31af7Sopenharmony_ci end 169e5c31af7Sopenharmony_ci 170e5c31af7Sopenharmony_ci case input_different_precision 171e5c31af7Sopenharmony_ci version 310 es 172e5c31af7Sopenharmony_ci desc "Tessellation control shader input precisions different" 173e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 174e5c31af7Sopenharmony_ci values 175e5c31af7Sopenharmony_ci { 176e5c31af7Sopenharmony_ci input float in0 = 1.0; 177e5c31af7Sopenharmony_ci output float out0 = 1.0; 178e5c31af7Sopenharmony_ci } 179e5c31af7Sopenharmony_ci vertex "" 180e5c31af7Sopenharmony_ci #version 310 es 181e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 182e5c31af7Sopenharmony_ci out highp float tc_in; 183e5c31af7Sopenharmony_ci void main() 184e5c31af7Sopenharmony_ci { 185e5c31af7Sopenharmony_ci tc_in = in0; 186e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 187e5c31af7Sopenharmony_ci } 188e5c31af7Sopenharmony_ci "" 189e5c31af7Sopenharmony_ci tessellation_control "" 190e5c31af7Sopenharmony_ci #version 310 es 191e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 192e5c31af7Sopenharmony_ci in lowp float tc_in[]; 193e5c31af7Sopenharmony_ci out mediump float tc_out[]; 194e5c31af7Sopenharmony_ci void main() 195e5c31af7Sopenharmony_ci { 196e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 197e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 198e5c31af7Sopenharmony_ci } 199e5c31af7Sopenharmony_ci "" 200e5c31af7Sopenharmony_ci tessellation_evaluation "" 201e5c31af7Sopenharmony_ci #version 310 es 202e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 203e5c31af7Sopenharmony_ci in mediump float tc_out[]; 204e5c31af7Sopenharmony_ci out mediump float te_out; 205e5c31af7Sopenharmony_ci void main() 206e5c31af7Sopenharmony_ci { 207e5c31af7Sopenharmony_ci te_out = tc_out[2]; 208e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 209e5c31af7Sopenharmony_ci } 210e5c31af7Sopenharmony_ci "" 211e5c31af7Sopenharmony_ci fragment "" 212e5c31af7Sopenharmony_ci #version 310 es 213e5c31af7Sopenharmony_ci precision mediump float; 214e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 215e5c31af7Sopenharmony_ci in mediump float te_out; 216e5c31af7Sopenharmony_ci void main() 217e5c31af7Sopenharmony_ci { 218e5c31af7Sopenharmony_ci out0 = te_out; 219e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 220e5c31af7Sopenharmony_ci } 221e5c31af7Sopenharmony_ci "" 222e5c31af7Sopenharmony_ci end 223e5c31af7Sopenharmony_ci 224e5c31af7Sopenharmony_ci case output_different_precision 225e5c31af7Sopenharmony_ci version 310 es 226e5c31af7Sopenharmony_ci desc "Tessellation evaluation shader output precisions different" 227e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 228e5c31af7Sopenharmony_ci values 229e5c31af7Sopenharmony_ci { 230e5c31af7Sopenharmony_ci input float in0 = 1.0; 231e5c31af7Sopenharmony_ci output float out0 = 1.0; 232e5c31af7Sopenharmony_ci } 233e5c31af7Sopenharmony_ci vertex "" 234e5c31af7Sopenharmony_ci #version 310 es 235e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 236e5c31af7Sopenharmony_ci out mediump float tc_in; 237e5c31af7Sopenharmony_ci void main() 238e5c31af7Sopenharmony_ci { 239e5c31af7Sopenharmony_ci tc_in = in0; 240e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 241e5c31af7Sopenharmony_ci } 242e5c31af7Sopenharmony_ci "" 243e5c31af7Sopenharmony_ci tessellation_control "" 244e5c31af7Sopenharmony_ci #version 310 es 245e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 246e5c31af7Sopenharmony_ci in mediump float tc_in[]; 247e5c31af7Sopenharmony_ci out mediump float tc_out[]; 248e5c31af7Sopenharmony_ci void main() 249e5c31af7Sopenharmony_ci { 250e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 251e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 252e5c31af7Sopenharmony_ci } 253e5c31af7Sopenharmony_ci "" 254e5c31af7Sopenharmony_ci tessellation_evaluation "" 255e5c31af7Sopenharmony_ci #version 310 es 256e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 257e5c31af7Sopenharmony_ci in mediump float tc_out[]; 258e5c31af7Sopenharmony_ci out highp float te_out; 259e5c31af7Sopenharmony_ci void main() 260e5c31af7Sopenharmony_ci { 261e5c31af7Sopenharmony_ci te_out = tc_out[2]; 262e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 263e5c31af7Sopenharmony_ci } 264e5c31af7Sopenharmony_ci "" 265e5c31af7Sopenharmony_ci fragment "" 266e5c31af7Sopenharmony_ci #version 310 es 267e5c31af7Sopenharmony_ci precision mediump float; 268e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 269e5c31af7Sopenharmony_ci in lowp float te_out; 270e5c31af7Sopenharmony_ci void main() 271e5c31af7Sopenharmony_ci { 272e5c31af7Sopenharmony_ci out0 = te_out; 273e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 274e5c31af7Sopenharmony_ci } 275e5c31af7Sopenharmony_ci "" 276e5c31af7Sopenharmony_ci end 277e5c31af7Sopenharmony_ci 278e5c31af7Sopenharmony_ci case internal_different_precision 279e5c31af7Sopenharmony_ci version 310 es 280e5c31af7Sopenharmony_ci desc "Tessellation control and evaluation shader varying precisions different" 281e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 282e5c31af7Sopenharmony_ci values 283e5c31af7Sopenharmony_ci { 284e5c31af7Sopenharmony_ci input float in0 = 1.0; 285e5c31af7Sopenharmony_ci output float out0 = 1.0; 286e5c31af7Sopenharmony_ci } 287e5c31af7Sopenharmony_ci vertex "" 288e5c31af7Sopenharmony_ci #version 310 es 289e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 290e5c31af7Sopenharmony_ci out mediump float tc_in; 291e5c31af7Sopenharmony_ci void main() 292e5c31af7Sopenharmony_ci { 293e5c31af7Sopenharmony_ci tc_in = in0; 294e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 295e5c31af7Sopenharmony_ci } 296e5c31af7Sopenharmony_ci "" 297e5c31af7Sopenharmony_ci tessellation_control "" 298e5c31af7Sopenharmony_ci #version 310 es 299e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 300e5c31af7Sopenharmony_ci in mediump float tc_in[]; 301e5c31af7Sopenharmony_ci out highp float tc_out[]; 302e5c31af7Sopenharmony_ci void main() 303e5c31af7Sopenharmony_ci { 304e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 305e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 306e5c31af7Sopenharmony_ci } 307e5c31af7Sopenharmony_ci "" 308e5c31af7Sopenharmony_ci tessellation_evaluation "" 309e5c31af7Sopenharmony_ci #version 310 es 310e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 311e5c31af7Sopenharmony_ci in lowp float tc_out[]; 312e5c31af7Sopenharmony_ci out mediump float te_out; 313e5c31af7Sopenharmony_ci void main() 314e5c31af7Sopenharmony_ci { 315e5c31af7Sopenharmony_ci te_out = tc_out[2]; 316e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 317e5c31af7Sopenharmony_ci } 318e5c31af7Sopenharmony_ci "" 319e5c31af7Sopenharmony_ci fragment "" 320e5c31af7Sopenharmony_ci #version 310 es 321e5c31af7Sopenharmony_ci precision mediump float; 322e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 323e5c31af7Sopenharmony_ci in mediump float te_out; 324e5c31af7Sopenharmony_ci void main() 325e5c31af7Sopenharmony_ci { 326e5c31af7Sopenharmony_ci out0 = te_out; 327e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 328e5c31af7Sopenharmony_ci } 329e5c31af7Sopenharmony_ci "" 330e5c31af7Sopenharmony_ci end 331e5c31af7Sopenharmony_ci 332e5c31af7Sopenharmony_ci case input_no_declaration 333e5c31af7Sopenharmony_ci version 310 es 334e5c31af7Sopenharmony_ci desc "Tessellation control shader input with no matching output" 335e5c31af7Sopenharmony_ci expect link_fail 336e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 337e5c31af7Sopenharmony_ci values 338e5c31af7Sopenharmony_ci { 339e5c31af7Sopenharmony_ci input float in0 = 1.0; 340e5c31af7Sopenharmony_ci output float out0 = 1.0; 341e5c31af7Sopenharmony_ci } 342e5c31af7Sopenharmony_ci vertex "" 343e5c31af7Sopenharmony_ci #version 310 es 344e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 345e5c31af7Sopenharmony_ci void main() 346e5c31af7Sopenharmony_ci { 347e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 348e5c31af7Sopenharmony_ci } 349e5c31af7Sopenharmony_ci "" 350e5c31af7Sopenharmony_ci tessellation_control "" 351e5c31af7Sopenharmony_ci #version 310 es 352e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 353e5c31af7Sopenharmony_ci in mediump float tc_in[]; 354e5c31af7Sopenharmony_ci out mediump float tc_out[]; 355e5c31af7Sopenharmony_ci void main() 356e5c31af7Sopenharmony_ci { 357e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 358e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 359e5c31af7Sopenharmony_ci } 360e5c31af7Sopenharmony_ci "" 361e5c31af7Sopenharmony_ci tessellation_evaluation "" 362e5c31af7Sopenharmony_ci #version 310 es 363e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 364e5c31af7Sopenharmony_ci in mediump float tc_out[]; 365e5c31af7Sopenharmony_ci out mediump float te_out; 366e5c31af7Sopenharmony_ci void main() 367e5c31af7Sopenharmony_ci { 368e5c31af7Sopenharmony_ci te_out = tc_out[2]; 369e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 370e5c31af7Sopenharmony_ci } 371e5c31af7Sopenharmony_ci "" 372e5c31af7Sopenharmony_ci fragment "" 373e5c31af7Sopenharmony_ci #version 310 es 374e5c31af7Sopenharmony_ci precision mediump float; 375e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 376e5c31af7Sopenharmony_ci in mediump float te_out; 377e5c31af7Sopenharmony_ci void main() 378e5c31af7Sopenharmony_ci { 379e5c31af7Sopenharmony_ci out0 = te_out; 380e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 381e5c31af7Sopenharmony_ci } 382e5c31af7Sopenharmony_ci "" 383e5c31af7Sopenharmony_ci end 384e5c31af7Sopenharmony_ci 385e5c31af7Sopenharmony_ci case output_no_declaration 386e5c31af7Sopenharmony_ci version 310 es 387e5c31af7Sopenharmony_ci desc "Tessellation evaluation shader without output for an fragment shader input" 388e5c31af7Sopenharmony_ci expect link_fail 389e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 390e5c31af7Sopenharmony_ci values 391e5c31af7Sopenharmony_ci { 392e5c31af7Sopenharmony_ci output float out0 = 1.0; 393e5c31af7Sopenharmony_ci } 394e5c31af7Sopenharmony_ci vertex "" 395e5c31af7Sopenharmony_ci #version 310 es 396e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 397e5c31af7Sopenharmony_ci void main() 398e5c31af7Sopenharmony_ci { 399e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 400e5c31af7Sopenharmony_ci } 401e5c31af7Sopenharmony_ci "" 402e5c31af7Sopenharmony_ci tessellation_control "" 403e5c31af7Sopenharmony_ci #version 310 es 404e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 405e5c31af7Sopenharmony_ci void main() 406e5c31af7Sopenharmony_ci { 407e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 408e5c31af7Sopenharmony_ci } 409e5c31af7Sopenharmony_ci "" 410e5c31af7Sopenharmony_ci tessellation_evaluation "" 411e5c31af7Sopenharmony_ci #version 310 es 412e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 413e5c31af7Sopenharmony_ci void main() 414e5c31af7Sopenharmony_ci { 415e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 416e5c31af7Sopenharmony_ci } 417e5c31af7Sopenharmony_ci "" 418e5c31af7Sopenharmony_ci fragment "" 419e5c31af7Sopenharmony_ci #version 310 es 420e5c31af7Sopenharmony_ci precision mediump float; 421e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 422e5c31af7Sopenharmony_ci in mediump float te_out; 423e5c31af7Sopenharmony_ci void main() 424e5c31af7Sopenharmony_ci { 425e5c31af7Sopenharmony_ci out0 = te_out; 426e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 427e5c31af7Sopenharmony_ci } 428e5c31af7Sopenharmony_ci "" 429e5c31af7Sopenharmony_ci end 430e5c31af7Sopenharmony_ci 431e5c31af7Sopenharmony_ci case internal_no_declaration 432e5c31af7Sopenharmony_ci version 310 es 433e5c31af7Sopenharmony_ci desc "Tessellation evaluation shader input without matching output" 434e5c31af7Sopenharmony_ci expect link_fail 435e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 436e5c31af7Sopenharmony_ci values 437e5c31af7Sopenharmony_ci { 438e5c31af7Sopenharmony_ci output float out0 = 1.0; 439e5c31af7Sopenharmony_ci } 440e5c31af7Sopenharmony_ci vertex "" 441e5c31af7Sopenharmony_ci #version 310 es 442e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 443e5c31af7Sopenharmony_ci void main() 444e5c31af7Sopenharmony_ci { 445e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 446e5c31af7Sopenharmony_ci } 447e5c31af7Sopenharmony_ci "" 448e5c31af7Sopenharmony_ci tessellation_control "" 449e5c31af7Sopenharmony_ci #version 310 es 450e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 451e5c31af7Sopenharmony_ci void main() 452e5c31af7Sopenharmony_ci { 453e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 454e5c31af7Sopenharmony_ci } 455e5c31af7Sopenharmony_ci "" 456e5c31af7Sopenharmony_ci tessellation_evaluation "" 457e5c31af7Sopenharmony_ci #version 310 es 458e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 459e5c31af7Sopenharmony_ci in mediump float tc_out[]; 460e5c31af7Sopenharmony_ci out mediump float te_out; 461e5c31af7Sopenharmony_ci void main() 462e5c31af7Sopenharmony_ci { 463e5c31af7Sopenharmony_ci te_out = tc_out[2]; 464e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 465e5c31af7Sopenharmony_ci } 466e5c31af7Sopenharmony_ci "" 467e5c31af7Sopenharmony_ci fragment "" 468e5c31af7Sopenharmony_ci #version 310 es 469e5c31af7Sopenharmony_ci precision mediump float; 470e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 471e5c31af7Sopenharmony_ci in mediump float te_out; 472e5c31af7Sopenharmony_ci void main() 473e5c31af7Sopenharmony_ci { 474e5c31af7Sopenharmony_ci out0 = te_out; 475e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 476e5c31af7Sopenharmony_ci } 477e5c31af7Sopenharmony_ci "" 478e5c31af7Sopenharmony_ci end 479e5c31af7Sopenharmony_ci 480e5c31af7Sopenharmony_ci case input_superfluous_declaration 481e5c31af7Sopenharmony_ci version 310 es 482e5c31af7Sopenharmony_ci desc "Tessellation control has no input for an output" 483e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 484e5c31af7Sopenharmony_ci values 485e5c31af7Sopenharmony_ci { 486e5c31af7Sopenharmony_ci input float in0 = 1.0; 487e5c31af7Sopenharmony_ci output float out0 = 1.0; 488e5c31af7Sopenharmony_ci } 489e5c31af7Sopenharmony_ci vertex "" 490e5c31af7Sopenharmony_ci #version 310 es 491e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 492e5c31af7Sopenharmony_ci out mediump float tc_in; 493e5c31af7Sopenharmony_ci out mediump float tc_in_unused; 494e5c31af7Sopenharmony_ci void main() 495e5c31af7Sopenharmony_ci { 496e5c31af7Sopenharmony_ci tc_in = in0; 497e5c31af7Sopenharmony_ci tc_in_unused = in0 + 1.0; 498e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 499e5c31af7Sopenharmony_ci } 500e5c31af7Sopenharmony_ci "" 501e5c31af7Sopenharmony_ci tessellation_control "" 502e5c31af7Sopenharmony_ci #version 310 es 503e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 504e5c31af7Sopenharmony_ci in mediump float tc_in[]; 505e5c31af7Sopenharmony_ci out mediump float tc_out[]; 506e5c31af7Sopenharmony_ci void main() 507e5c31af7Sopenharmony_ci { 508e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 509e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 510e5c31af7Sopenharmony_ci } 511e5c31af7Sopenharmony_ci "" 512e5c31af7Sopenharmony_ci tessellation_evaluation "" 513e5c31af7Sopenharmony_ci #version 310 es 514e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 515e5c31af7Sopenharmony_ci in mediump float tc_out[]; 516e5c31af7Sopenharmony_ci out mediump float te_out; 517e5c31af7Sopenharmony_ci void main() 518e5c31af7Sopenharmony_ci { 519e5c31af7Sopenharmony_ci te_out = tc_out[2]; 520e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 521e5c31af7Sopenharmony_ci } 522e5c31af7Sopenharmony_ci "" 523e5c31af7Sopenharmony_ci fragment "" 524e5c31af7Sopenharmony_ci #version 310 es 525e5c31af7Sopenharmony_ci precision mediump float; 526e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 527e5c31af7Sopenharmony_ci in mediump float te_out; 528e5c31af7Sopenharmony_ci void main() 529e5c31af7Sopenharmony_ci { 530e5c31af7Sopenharmony_ci out0 = te_out; 531e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 532e5c31af7Sopenharmony_ci } 533e5c31af7Sopenharmony_ci "" 534e5c31af7Sopenharmony_ci end 535e5c31af7Sopenharmony_ci 536e5c31af7Sopenharmony_ci case output_superfluous_declaration 537e5c31af7Sopenharmony_ci version 310 es 538e5c31af7Sopenharmony_ci desc "Tessellation has an output without a matching input" 539e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 540e5c31af7Sopenharmony_ci values 541e5c31af7Sopenharmony_ci { 542e5c31af7Sopenharmony_ci input float in0 = 1.0; 543e5c31af7Sopenharmony_ci output float out0 = 1.0; 544e5c31af7Sopenharmony_ci } 545e5c31af7Sopenharmony_ci vertex "" 546e5c31af7Sopenharmony_ci #version 310 es 547e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 548e5c31af7Sopenharmony_ci out mediump float tc_in; 549e5c31af7Sopenharmony_ci void main() 550e5c31af7Sopenharmony_ci { 551e5c31af7Sopenharmony_ci tc_in = in0; 552e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 553e5c31af7Sopenharmony_ci } 554e5c31af7Sopenharmony_ci "" 555e5c31af7Sopenharmony_ci tessellation_control "" 556e5c31af7Sopenharmony_ci #version 310 es 557e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 558e5c31af7Sopenharmony_ci in mediump float tc_in[]; 559e5c31af7Sopenharmony_ci out mediump float tc_out[]; 560e5c31af7Sopenharmony_ci void main() 561e5c31af7Sopenharmony_ci { 562e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 563e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 564e5c31af7Sopenharmony_ci } 565e5c31af7Sopenharmony_ci "" 566e5c31af7Sopenharmony_ci tessellation_evaluation "" 567e5c31af7Sopenharmony_ci #version 310 es 568e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 569e5c31af7Sopenharmony_ci in mediump float tc_out[]; 570e5c31af7Sopenharmony_ci out mediump float te_out; 571e5c31af7Sopenharmony_ci out mediump float te_out_unused; 572e5c31af7Sopenharmony_ci void main() 573e5c31af7Sopenharmony_ci { 574e5c31af7Sopenharmony_ci te_out = tc_out[2]; 575e5c31af7Sopenharmony_ci te_out_unused = tc_out[0]; 576e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 577e5c31af7Sopenharmony_ci } 578e5c31af7Sopenharmony_ci "" 579e5c31af7Sopenharmony_ci fragment "" 580e5c31af7Sopenharmony_ci #version 310 es 581e5c31af7Sopenharmony_ci precision mediump float; 582e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 583e5c31af7Sopenharmony_ci in mediump float te_out; 584e5c31af7Sopenharmony_ci void main() 585e5c31af7Sopenharmony_ci { 586e5c31af7Sopenharmony_ci out0 = te_out; 587e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 588e5c31af7Sopenharmony_ci } 589e5c31af7Sopenharmony_ci "" 590e5c31af7Sopenharmony_ci end 591e5c31af7Sopenharmony_ci 592e5c31af7Sopenharmony_ci case internal_superfluous_declaration 593e5c31af7Sopenharmony_ci version 310 es 594e5c31af7Sopenharmony_ci desc "Tessellation control has an output without a matching input" 595e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 596e5c31af7Sopenharmony_ci values 597e5c31af7Sopenharmony_ci { 598e5c31af7Sopenharmony_ci input float in0 = 1.0; 599e5c31af7Sopenharmony_ci output float out0 = 1.0; 600e5c31af7Sopenharmony_ci } 601e5c31af7Sopenharmony_ci vertex "" 602e5c31af7Sopenharmony_ci #version 310 es 603e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 604e5c31af7Sopenharmony_ci out mediump float tc_in; 605e5c31af7Sopenharmony_ci void main() 606e5c31af7Sopenharmony_ci { 607e5c31af7Sopenharmony_ci tc_in = in0; 608e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 609e5c31af7Sopenharmony_ci } 610e5c31af7Sopenharmony_ci "" 611e5c31af7Sopenharmony_ci tessellation_control "" 612e5c31af7Sopenharmony_ci #version 310 es 613e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 614e5c31af7Sopenharmony_ci in mediump float tc_in[]; 615e5c31af7Sopenharmony_ci out mediump float tc_out[]; 616e5c31af7Sopenharmony_ci out mediump float tc_out_unused[]; 617e5c31af7Sopenharmony_ci void main() 618e5c31af7Sopenharmony_ci { 619e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 620e5c31af7Sopenharmony_ci tc_out_unused[gl_InvocationID] = tc_in[gl_InvocationID] + 1.0; 621e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 622e5c31af7Sopenharmony_ci } 623e5c31af7Sopenharmony_ci "" 624e5c31af7Sopenharmony_ci tessellation_evaluation "" 625e5c31af7Sopenharmony_ci #version 310 es 626e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 627e5c31af7Sopenharmony_ci in mediump float tc_out[]; 628e5c31af7Sopenharmony_ci out mediump float te_out; 629e5c31af7Sopenharmony_ci void main() 630e5c31af7Sopenharmony_ci { 631e5c31af7Sopenharmony_ci te_out = tc_out[2]; 632e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 633e5c31af7Sopenharmony_ci } 634e5c31af7Sopenharmony_ci "" 635e5c31af7Sopenharmony_ci fragment "" 636e5c31af7Sopenharmony_ci #version 310 es 637e5c31af7Sopenharmony_ci precision mediump float; 638e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 639e5c31af7Sopenharmony_ci in mediump float te_out; 640e5c31af7Sopenharmony_ci void main() 641e5c31af7Sopenharmony_ci { 642e5c31af7Sopenharmony_ci out0 = te_out; 643e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 644e5c31af7Sopenharmony_ci } 645e5c31af7Sopenharmony_ci "" 646e5c31af7Sopenharmony_ci end 647e5c31af7Sopenharmony_ci 648e5c31af7Sopenharmony_ci case vertex_fragment_same_varying_name_1 649e5c31af7Sopenharmony_ci version 310 es 650e5c31af7Sopenharmony_ci desc "Tessellation control has an output without a matching input" 651e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 652e5c31af7Sopenharmony_ci values 653e5c31af7Sopenharmony_ci { 654e5c31af7Sopenharmony_ci input float in0 = 1.0; 655e5c31af7Sopenharmony_ci output float out0 = 2.0; 656e5c31af7Sopenharmony_ci } 657e5c31af7Sopenharmony_ci vertex "" 658e5c31af7Sopenharmony_ci #version 310 es 659e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 660e5c31af7Sopenharmony_ci out mediump float sharedVaringName; 661e5c31af7Sopenharmony_ci void main() 662e5c31af7Sopenharmony_ci { 663e5c31af7Sopenharmony_ci sharedVaringName = in0; 664e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 665e5c31af7Sopenharmony_ci } 666e5c31af7Sopenharmony_ci "" 667e5c31af7Sopenharmony_ci tessellation_control "" 668e5c31af7Sopenharmony_ci #version 310 es 669e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 670e5c31af7Sopenharmony_ci in mediump float sharedVaringName[]; 671e5c31af7Sopenharmony_ci out mediump float tc_out[]; 672e5c31af7Sopenharmony_ci void main() 673e5c31af7Sopenharmony_ci { 674e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = sharedVaringName[gl_InvocationID]; 675e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 676e5c31af7Sopenharmony_ci } 677e5c31af7Sopenharmony_ci "" 678e5c31af7Sopenharmony_ci tessellation_evaluation "" 679e5c31af7Sopenharmony_ci #version 310 es 680e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 681e5c31af7Sopenharmony_ci in mediump float tc_out[]; 682e5c31af7Sopenharmony_ci out mediump float sharedVaringName; 683e5c31af7Sopenharmony_ci void main() 684e5c31af7Sopenharmony_ci { 685e5c31af7Sopenharmony_ci sharedVaringName = 2.0 * tc_out[2]; 686e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 687e5c31af7Sopenharmony_ci } 688e5c31af7Sopenharmony_ci "" 689e5c31af7Sopenharmony_ci fragment "" 690e5c31af7Sopenharmony_ci #version 310 es 691e5c31af7Sopenharmony_ci precision mediump float; 692e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 693e5c31af7Sopenharmony_ci in mediump float sharedVaringName; 694e5c31af7Sopenharmony_ci void main() 695e5c31af7Sopenharmony_ci { 696e5c31af7Sopenharmony_ci out0 = sharedVaringName; 697e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 698e5c31af7Sopenharmony_ci } 699e5c31af7Sopenharmony_ci "" 700e5c31af7Sopenharmony_ci end 701e5c31af7Sopenharmony_ci 702e5c31af7Sopenharmony_ci case vertex_fragment_same_varying_name_2 703e5c31af7Sopenharmony_ci version 310 es 704e5c31af7Sopenharmony_ci desc "Tessellation control has an output without a matching input" 705e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 706e5c31af7Sopenharmony_ci values 707e5c31af7Sopenharmony_ci { 708e5c31af7Sopenharmony_ci input vec2 in0 = vec2(1.0, 3.0); 709e5c31af7Sopenharmony_ci output float out0 = 4.0; 710e5c31af7Sopenharmony_ci } 711e5c31af7Sopenharmony_ci vertex "" 712e5c31af7Sopenharmony_ci #version 310 es 713e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 714e5c31af7Sopenharmony_ci out mediump vec2 sharedVaringName; 715e5c31af7Sopenharmony_ci void main() 716e5c31af7Sopenharmony_ci { 717e5c31af7Sopenharmony_ci sharedVaringName = in0; 718e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 719e5c31af7Sopenharmony_ci } 720e5c31af7Sopenharmony_ci "" 721e5c31af7Sopenharmony_ci tessellation_control "" 722e5c31af7Sopenharmony_ci #version 310 es 723e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 724e5c31af7Sopenharmony_ci in mediump vec2 sharedVaringName[]; 725e5c31af7Sopenharmony_ci out mediump float tc_out[]; 726e5c31af7Sopenharmony_ci void main() 727e5c31af7Sopenharmony_ci { 728e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = sharedVaringName[gl_InvocationID].x + sharedVaringName[gl_InvocationID].y; 729e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 730e5c31af7Sopenharmony_ci } 731e5c31af7Sopenharmony_ci "" 732e5c31af7Sopenharmony_ci tessellation_evaluation "" 733e5c31af7Sopenharmony_ci #version 310 es 734e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 735e5c31af7Sopenharmony_ci in mediump float tc_out[]; 736e5c31af7Sopenharmony_ci out mediump float sharedVaringName; 737e5c31af7Sopenharmony_ci void main() 738e5c31af7Sopenharmony_ci { 739e5c31af7Sopenharmony_ci sharedVaringName = tc_out[2]; 740e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 741e5c31af7Sopenharmony_ci } 742e5c31af7Sopenharmony_ci "" 743e5c31af7Sopenharmony_ci fragment "" 744e5c31af7Sopenharmony_ci #version 310 es 745e5c31af7Sopenharmony_ci precision mediump float; 746e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 747e5c31af7Sopenharmony_ci in mediump float sharedVaringName; 748e5c31af7Sopenharmony_ci void main() 749e5c31af7Sopenharmony_ci { 750e5c31af7Sopenharmony_ci out0 = sharedVaringName; 751e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 752e5c31af7Sopenharmony_ci } 753e5c31af7Sopenharmony_ci "" 754e5c31af7Sopenharmony_ci end 755e5c31af7Sopenharmony_ci 756e5c31af7Sopenharmony_ci case invalid_vertex_index 757e5c31af7Sopenharmony_ci version 310 es 758e5c31af7Sopenharmony_ci desc "Tessellation control output not indexed with gl_InvocationID" 759e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 760e5c31af7Sopenharmony_ci expect compile_or_link_fail 761e5c31af7Sopenharmony_ci vertex "" 762e5c31af7Sopenharmony_ci #version 310 es 763e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 764e5c31af7Sopenharmony_ci void main() 765e5c31af7Sopenharmony_ci { 766e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 767e5c31af7Sopenharmony_ci } 768e5c31af7Sopenharmony_ci "" 769e5c31af7Sopenharmony_ci tessellation_control "" 770e5c31af7Sopenharmony_ci #version 310 es 771e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 772e5c31af7Sopenharmony_ci out mediump float tc_out[]; 773e5c31af7Sopenharmony_ci void main() 774e5c31af7Sopenharmony_ci { 775e5c31af7Sopenharmony_ci tc_out[2 - gl_InvocationID] = float(gl_InvocationID); 776e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 777e5c31af7Sopenharmony_ci } 778e5c31af7Sopenharmony_ci "" 779e5c31af7Sopenharmony_ci tessellation_evaluation "" 780e5c31af7Sopenharmony_ci #version 310 es 781e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 782e5c31af7Sopenharmony_ci in mediump float tc_out[]; 783e5c31af7Sopenharmony_ci out mediump float te_out; 784e5c31af7Sopenharmony_ci void main() 785e5c31af7Sopenharmony_ci { 786e5c31af7Sopenharmony_ci te_out = tc_out[2]; 787e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 788e5c31af7Sopenharmony_ci } 789e5c31af7Sopenharmony_ci "" 790e5c31af7Sopenharmony_ci fragment "" 791e5c31af7Sopenharmony_ci #version 310 es 792e5c31af7Sopenharmony_ci precision mediump float; 793e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 794e5c31af7Sopenharmony_ci in mediump float te_out; 795e5c31af7Sopenharmony_ci void main() 796e5c31af7Sopenharmony_ci { 797e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out); 798e5c31af7Sopenharmony_ci } 799e5c31af7Sopenharmony_ci "" 800e5c31af7Sopenharmony_ci end 801e5c31af7Sopenharmony_ci 802e5c31af7Sopenharmony_ci case input_non_array 803e5c31af7Sopenharmony_ci version 310 es 804e5c31af7Sopenharmony_ci desc "Tessellation control input in not an array" 805e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 806e5c31af7Sopenharmony_ci expect compile_or_link_fail 807e5c31af7Sopenharmony_ci values 808e5c31af7Sopenharmony_ci { 809e5c31af7Sopenharmony_ci input float in0 = 1.0; 810e5c31af7Sopenharmony_ci output float out0 = 1.0; 811e5c31af7Sopenharmony_ci } 812e5c31af7Sopenharmony_ci vertex "" 813e5c31af7Sopenharmony_ci #version 310 es 814e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 815e5c31af7Sopenharmony_ci out mediump float tc_in; 816e5c31af7Sopenharmony_ci void main() 817e5c31af7Sopenharmony_ci { 818e5c31af7Sopenharmony_ci tc_in = in0; 819e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 820e5c31af7Sopenharmony_ci } 821e5c31af7Sopenharmony_ci "" 822e5c31af7Sopenharmony_ci tessellation_control "" 823e5c31af7Sopenharmony_ci #version 310 es 824e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 825e5c31af7Sopenharmony_ci in mediump float tc_in; 826e5c31af7Sopenharmony_ci out mediump float tc_out[]; 827e5c31af7Sopenharmony_ci void main() 828e5c31af7Sopenharmony_ci { 829e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in; 830e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 831e5c31af7Sopenharmony_ci } 832e5c31af7Sopenharmony_ci "" 833e5c31af7Sopenharmony_ci tessellation_evaluation "" 834e5c31af7Sopenharmony_ci #version 310 es 835e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 836e5c31af7Sopenharmony_ci in mediump float tc_out[]; 837e5c31af7Sopenharmony_ci out mediump float te_out; 838e5c31af7Sopenharmony_ci void main() 839e5c31af7Sopenharmony_ci { 840e5c31af7Sopenharmony_ci te_out = tc_out[2]; 841e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 842e5c31af7Sopenharmony_ci } 843e5c31af7Sopenharmony_ci "" 844e5c31af7Sopenharmony_ci fragment "" 845e5c31af7Sopenharmony_ci #version 310 es 846e5c31af7Sopenharmony_ci precision mediump float; 847e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 848e5c31af7Sopenharmony_ci in mediump float te_out; 849e5c31af7Sopenharmony_ci void main() 850e5c31af7Sopenharmony_ci { 851e5c31af7Sopenharmony_ci out0 = te_out; 852e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 853e5c31af7Sopenharmony_ci } 854e5c31af7Sopenharmony_ci "" 855e5c31af7Sopenharmony_ci end 856e5c31af7Sopenharmony_ci 857e5c31af7Sopenharmony_ci case output_non_array 858e5c31af7Sopenharmony_ci version 310 es 859e5c31af7Sopenharmony_ci desc "Tessellation control output out not an array" 860e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 861e5c31af7Sopenharmony_ci expect compile_or_link_fail 862e5c31af7Sopenharmony_ci values 863e5c31af7Sopenharmony_ci { 864e5c31af7Sopenharmony_ci input float in0 = 1.0; 865e5c31af7Sopenharmony_ci output float out0 = 1.0; 866e5c31af7Sopenharmony_ci } 867e5c31af7Sopenharmony_ci vertex "" 868e5c31af7Sopenharmony_ci #version 310 es 869e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 870e5c31af7Sopenharmony_ci out mediump float tc_in; 871e5c31af7Sopenharmony_ci void main() 872e5c31af7Sopenharmony_ci { 873e5c31af7Sopenharmony_ci tc_in = in0; 874e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 875e5c31af7Sopenharmony_ci } 876e5c31af7Sopenharmony_ci "" 877e5c31af7Sopenharmony_ci tessellation_control "" 878e5c31af7Sopenharmony_ci #version 310 es 879e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 880e5c31af7Sopenharmony_ci in mediump float tc_in[]; 881e5c31af7Sopenharmony_ci out mediump float tc_out; // not an array 882e5c31af7Sopenharmony_ci void main() 883e5c31af7Sopenharmony_ci { 884e5c31af7Sopenharmony_ci tc_out = tc_in[gl_InvocationID]; 885e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 886e5c31af7Sopenharmony_ci } 887e5c31af7Sopenharmony_ci "" 888e5c31af7Sopenharmony_ci tessellation_evaluation "" 889e5c31af7Sopenharmony_ci #version 310 es 890e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 891e5c31af7Sopenharmony_ci in mediump float tc_out[]; 892e5c31af7Sopenharmony_ci out mediump float te_out; 893e5c31af7Sopenharmony_ci void main() 894e5c31af7Sopenharmony_ci { 895e5c31af7Sopenharmony_ci te_out = tc_out[2]; 896e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 897e5c31af7Sopenharmony_ci } 898e5c31af7Sopenharmony_ci "" 899e5c31af7Sopenharmony_ci fragment "" 900e5c31af7Sopenharmony_ci #version 310 es 901e5c31af7Sopenharmony_ci precision mediump float; 902e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 903e5c31af7Sopenharmony_ci in mediump float te_out; 904e5c31af7Sopenharmony_ci void main() 905e5c31af7Sopenharmony_ci { 906e5c31af7Sopenharmony_ci out0 = te_out; 907e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 908e5c31af7Sopenharmony_ci } 909e5c31af7Sopenharmony_ci "" 910e5c31af7Sopenharmony_ci end 911e5c31af7Sopenharmony_ci 912e5c31af7Sopenharmony_ci case input_array_size_mismatch 913e5c31af7Sopenharmony_ci version 310 es 914e5c31af7Sopenharmony_ci desc "Tessellation control input array size is not gl_MaxPatchVertices" 915e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 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 310 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 310 es 934e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 935e5c31af7Sopenharmony_ci in mediump float tc_in[2]; // not gl_MaxPatchVertices 936e5c31af7Sopenharmony_ci out mediump float tc_out[]; 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 310 es 945e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 946e5c31af7Sopenharmony_ci in mediump float tc_out[]; 947e5c31af7Sopenharmony_ci out mediump float te_out; 948e5c31af7Sopenharmony_ci void main() 949e5c31af7Sopenharmony_ci { 950e5c31af7Sopenharmony_ci te_out = tc_out[2]; 951e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 952e5c31af7Sopenharmony_ci } 953e5c31af7Sopenharmony_ci "" 954e5c31af7Sopenharmony_ci fragment "" 955e5c31af7Sopenharmony_ci #version 310 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 internal_array_size_mismatch 968e5c31af7Sopenharmony_ci version 310 es 969e5c31af7Sopenharmony_ci desc "Tessellation control output array size is not consistent with layout qualifier" 970e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 971e5c31af7Sopenharmony_ci expect compile_or_link_fail 972e5c31af7Sopenharmony_ci values 973e5c31af7Sopenharmony_ci { 974e5c31af7Sopenharmony_ci input float in0 = 1.0; 975e5c31af7Sopenharmony_ci output float out0 = 1.0; 976e5c31af7Sopenharmony_ci } 977e5c31af7Sopenharmony_ci vertex "" 978e5c31af7Sopenharmony_ci #version 310 es 979e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 980e5c31af7Sopenharmony_ci out mediump float tc_in; 981e5c31af7Sopenharmony_ci void main() 982e5c31af7Sopenharmony_ci { 983e5c31af7Sopenharmony_ci tc_in = in0; 984e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 985e5c31af7Sopenharmony_ci } 986e5c31af7Sopenharmony_ci "" 987e5c31af7Sopenharmony_ci tessellation_control "" 988e5c31af7Sopenharmony_ci #version 310 es 989e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 990e5c31af7Sopenharmony_ci in mediump float tc_in[]; 991e5c31af7Sopenharmony_ci out mediump float tc_out[2]; // does not match output layout qualifier 992e5c31af7Sopenharmony_ci void main() 993e5c31af7Sopenharmony_ci { 994e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 995e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 996e5c31af7Sopenharmony_ci } 997e5c31af7Sopenharmony_ci "" 998e5c31af7Sopenharmony_ci tessellation_evaluation "" 999e5c31af7Sopenharmony_ci #version 310 es 1000e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1001e5c31af7Sopenharmony_ci in mediump float tc_out[2]; 1002e5c31af7Sopenharmony_ci out mediump float te_out; 1003e5c31af7Sopenharmony_ci void main() 1004e5c31af7Sopenharmony_ci { 1005e5c31af7Sopenharmony_ci te_out = tc_out[1]; 1006e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1007e5c31af7Sopenharmony_ci } 1008e5c31af7Sopenharmony_ci "" 1009e5c31af7Sopenharmony_ci fragment "" 1010e5c31af7Sopenharmony_ci #version 310 es 1011e5c31af7Sopenharmony_ci precision mediump float; 1012e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1013e5c31af7Sopenharmony_ci in mediump float te_out; 1014e5c31af7Sopenharmony_ci void main() 1015e5c31af7Sopenharmony_ci { 1016e5c31af7Sopenharmony_ci out0 = te_out; 1017e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1018e5c31af7Sopenharmony_ci } 1019e5c31af7Sopenharmony_ci "" 1020e5c31af7Sopenharmony_ci end 1021e5c31af7Sopenharmony_ci 1022e5c31af7Sopenharmony_ci case invalid_patch_in_usage 1023e5c31af7Sopenharmony_ci version 310 es 1024e5c31af7Sopenharmony_ci desc "Invalid use of the patch_in qualifier in a non-tessellation shader" 1025e5c31af7Sopenharmony_ci expect compile_or_link_fail 1026e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1027e5c31af7Sopenharmony_ci values 1028e5c31af7Sopenharmony_ci { 1029e5c31af7Sopenharmony_ci input float in0 = 1.0; 1030e5c31af7Sopenharmony_ci output float out0 = 1.0; 1031e5c31af7Sopenharmony_ci } 1032e5c31af7Sopenharmony_ci vertex "" 1033e5c31af7Sopenharmony_ci #version 310 es 1034e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1035e5c31af7Sopenharmony_ci out mediump float frag_in; 1036e5c31af7Sopenharmony_ci out mediump float var; 1037e5c31af7Sopenharmony_ci void main() 1038e5c31af7Sopenharmony_ci { 1039e5c31af7Sopenharmony_ci frag_in = in0; 1040e5c31af7Sopenharmony_ci var = 2.0; 1041e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1042e5c31af7Sopenharmony_ci } 1043e5c31af7Sopenharmony_ci "" 1044e5c31af7Sopenharmony_ci fragment "" 1045e5c31af7Sopenharmony_ci #version 310 es 1046e5c31af7Sopenharmony_ci precision mediump float; 1047e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1048e5c31af7Sopenharmony_ci patch in mediump float var; // invalid use of patch_in 1049e5c31af7Sopenharmony_ci in mediump float frag_in; 1050e5c31af7Sopenharmony_ci void main() 1051e5c31af7Sopenharmony_ci { 1052e5c31af7Sopenharmony_ci out0 = frag_in * var; 1053e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1054e5c31af7Sopenharmony_ci } 1055e5c31af7Sopenharmony_ci "" 1056e5c31af7Sopenharmony_ci end 1057e5c31af7Sopenharmony_ci 1058e5c31af7Sopenharmony_ci case invalid_patch_out_usage 1059e5c31af7Sopenharmony_ci version 310 es 1060e5c31af7Sopenharmony_ci desc "Invalid use of the patch_out qualifier in a non-tessellation shader" 1061e5c31af7Sopenharmony_ci expect compile_or_link_fail 1062e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1063e5c31af7Sopenharmony_ci values 1064e5c31af7Sopenharmony_ci { 1065e5c31af7Sopenharmony_ci input float in0 = 1.0; 1066e5c31af7Sopenharmony_ci output float out0 = 1.0; 1067e5c31af7Sopenharmony_ci } 1068e5c31af7Sopenharmony_ci vertex "" 1069e5c31af7Sopenharmony_ci #version 310 es 1070e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1071e5c31af7Sopenharmony_ci out mediump float frag_in; 1072e5c31af7Sopenharmony_ci patch out mediump float var; 1073e5c31af7Sopenharmony_ci void main() 1074e5c31af7Sopenharmony_ci { 1075e5c31af7Sopenharmony_ci frag_in = in0; 1076e5c31af7Sopenharmony_ci var = 2.0; 1077e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1078e5c31af7Sopenharmony_ci } 1079e5c31af7Sopenharmony_ci "" 1080e5c31af7Sopenharmony_ci fragment "" 1081e5c31af7Sopenharmony_ci #version 310 es 1082e5c31af7Sopenharmony_ci precision mediump float; 1083e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1084e5c31af7Sopenharmony_ci in mediump float var; // invalid use of patch_out 1085e5c31af7Sopenharmony_ci in mediump float frag_in; 1086e5c31af7Sopenharmony_ci void main() 1087e5c31af7Sopenharmony_ci { 1088e5c31af7Sopenharmony_ci out0 = frag_in * var; 1089e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1090e5c31af7Sopenharmony_ci } 1091e5c31af7Sopenharmony_ci "" 1092e5c31af7Sopenharmony_ci end 1093e5c31af7Sopenharmony_ci 1094e5c31af7Sopenharmony_ci case invalid_per_patch_qualifier_usage 1095e5c31af7Sopenharmony_ci version 310 es 1096e5c31af7Sopenharmony_ci desc "Invalid use of per-patch qualifier on input variable in tessellation control shader" 1097e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1098e5c31af7Sopenharmony_ci expect compile_or_link_fail 1099e5c31af7Sopenharmony_ci values 1100e5c31af7Sopenharmony_ci { 1101e5c31af7Sopenharmony_ci input float in0 = 1.0; 1102e5c31af7Sopenharmony_ci output float out0 = 1.0; 1103e5c31af7Sopenharmony_ci } 1104e5c31af7Sopenharmony_ci vertex "" 1105e5c31af7Sopenharmony_ci #version 310 es 1106e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1107e5c31af7Sopenharmony_ci out mediump float tc_in; 1108e5c31af7Sopenharmony_ci void main() 1109e5c31af7Sopenharmony_ci { 1110e5c31af7Sopenharmony_ci tc_in = in0; 1111e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1112e5c31af7Sopenharmony_ci } 1113e5c31af7Sopenharmony_ci "" 1114e5c31af7Sopenharmony_ci tessellation_control "" 1115e5c31af7Sopenharmony_ci #version 310 es 1116e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1117e5c31af7Sopenharmony_ci patch in mediump float tc_in; // patch in not allowed in TCS 1118e5c31af7Sopenharmony_ci patch out mediump float tc_out; 1119e5c31af7Sopenharmony_ci void main() 1120e5c31af7Sopenharmony_ci { 1121e5c31af7Sopenharmony_ci tc_out = tc_in; 1122e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1123e5c31af7Sopenharmony_ci } 1124e5c31af7Sopenharmony_ci "" 1125e5c31af7Sopenharmony_ci tessellation_evaluation "" 1126e5c31af7Sopenharmony_ci #version 310 es 1127e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1128e5c31af7Sopenharmony_ci patch in mediump float tc_out; 1129e5c31af7Sopenharmony_ci out mediump float te_out; 1130e5c31af7Sopenharmony_ci void main() 1131e5c31af7Sopenharmony_ci { 1132e5c31af7Sopenharmony_ci te_out = tc_out; 1133e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1134e5c31af7Sopenharmony_ci } 1135e5c31af7Sopenharmony_ci "" 1136e5c31af7Sopenharmony_ci fragment "" 1137e5c31af7Sopenharmony_ci #version 310 es 1138e5c31af7Sopenharmony_ci precision mediump float; 1139e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1140e5c31af7Sopenharmony_ci in mediump float te_out; 1141e5c31af7Sopenharmony_ci void main() 1142e5c31af7Sopenharmony_ci { 1143e5c31af7Sopenharmony_ci out0 = te_out; 1144e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1145e5c31af7Sopenharmony_ci } 1146e5c31af7Sopenharmony_ci "" 1147e5c31af7Sopenharmony_ci end 1148e5c31af7Sopenharmony_ci 1149e5c31af7Sopenharmony_ci case per_patch_qualifier_mismatch_1 1150e5c31af7Sopenharmony_ci version 310 es 1151e5c31af7Sopenharmony_ci desc "Tessellation control output is per-patch qualified, evaluation input is not" 1152e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1153e5c31af7Sopenharmony_ci expect compile_or_link_fail 1154e5c31af7Sopenharmony_ci values 1155e5c31af7Sopenharmony_ci { 1156e5c31af7Sopenharmony_ci input float in0 = 1.0; 1157e5c31af7Sopenharmony_ci output float out0 = 1.0; 1158e5c31af7Sopenharmony_ci } 1159e5c31af7Sopenharmony_ci vertex "" 1160e5c31af7Sopenharmony_ci #version 310 es 1161e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1162e5c31af7Sopenharmony_ci out mediump float tc_in; 1163e5c31af7Sopenharmony_ci void main() 1164e5c31af7Sopenharmony_ci { 1165e5c31af7Sopenharmony_ci tc_in = in0; 1166e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1167e5c31af7Sopenharmony_ci } 1168e5c31af7Sopenharmony_ci "" 1169e5c31af7Sopenharmony_ci tessellation_control "" 1170e5c31af7Sopenharmony_ci #version 310 es 1171e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1172e5c31af7Sopenharmony_ci in mediump float tc_in[]; 1173e5c31af7Sopenharmony_ci patch out mediump float tc_out[gl_MaxPatchVertices]; 1174e5c31af7Sopenharmony_ci void main() 1175e5c31af7Sopenharmony_ci { 1176e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 1177e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1178e5c31af7Sopenharmony_ci } 1179e5c31af7Sopenharmony_ci "" 1180e5c31af7Sopenharmony_ci tessellation_evaluation "" 1181e5c31af7Sopenharmony_ci #version 310 es 1182e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1183e5c31af7Sopenharmony_ci in mediump float tc_out[gl_MaxPatchVertices]; 1184e5c31af7Sopenharmony_ci out mediump float te_out; 1185e5c31af7Sopenharmony_ci void main() 1186e5c31af7Sopenharmony_ci { 1187e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1188e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1189e5c31af7Sopenharmony_ci } 1190e5c31af7Sopenharmony_ci "" 1191e5c31af7Sopenharmony_ci fragment "" 1192e5c31af7Sopenharmony_ci #version 310 es 1193e5c31af7Sopenharmony_ci precision mediump float; 1194e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1195e5c31af7Sopenharmony_ci in mediump float te_out; 1196e5c31af7Sopenharmony_ci void main() 1197e5c31af7Sopenharmony_ci { 1198e5c31af7Sopenharmony_ci out0 = te_out; 1199e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1200e5c31af7Sopenharmony_ci } 1201e5c31af7Sopenharmony_ci "" 1202e5c31af7Sopenharmony_ci end 1203e5c31af7Sopenharmony_ci 1204e5c31af7Sopenharmony_ci case per_patch_qualifier_mismatch_2 1205e5c31af7Sopenharmony_ci version 310 es 1206e5c31af7Sopenharmony_ci desc "Tessellation control output is not per-patch qualified, evaluation input is" 1207e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1208e5c31af7Sopenharmony_ci expect compile_or_link_fail 1209e5c31af7Sopenharmony_ci values 1210e5c31af7Sopenharmony_ci { 1211e5c31af7Sopenharmony_ci input float in0 = 1.0; 1212e5c31af7Sopenharmony_ci output float out0 = 1.0; 1213e5c31af7Sopenharmony_ci } 1214e5c31af7Sopenharmony_ci vertex "" 1215e5c31af7Sopenharmony_ci #version 310 es 1216e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1217e5c31af7Sopenharmony_ci out mediump float tc_in; 1218e5c31af7Sopenharmony_ci void main() 1219e5c31af7Sopenharmony_ci { 1220e5c31af7Sopenharmony_ci tc_in = in0; 1221e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1222e5c31af7Sopenharmony_ci } 1223e5c31af7Sopenharmony_ci "" 1224e5c31af7Sopenharmony_ci tessellation_control "" 1225e5c31af7Sopenharmony_ci #version 310 es 1226e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1227e5c31af7Sopenharmony_ci in mediump float tc_in[]; 1228e5c31af7Sopenharmony_ci out mediump float tc_out[gl_MaxPatchVertices]; 1229e5c31af7Sopenharmony_ci void main() 1230e5c31af7Sopenharmony_ci { 1231e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 1232e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1233e5c31af7Sopenharmony_ci } 1234e5c31af7Sopenharmony_ci "" 1235e5c31af7Sopenharmony_ci tessellation_evaluation "" 1236e5c31af7Sopenharmony_ci #version 310 es 1237e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1238e5c31af7Sopenharmony_ci patch in mediump float tc_out[gl_MaxPatchVertices]; 1239e5c31af7Sopenharmony_ci out mediump float te_out; 1240e5c31af7Sopenharmony_ci void main() 1241e5c31af7Sopenharmony_ci { 1242e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1243e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1244e5c31af7Sopenharmony_ci } 1245e5c31af7Sopenharmony_ci "" 1246e5c31af7Sopenharmony_ci fragment "" 1247e5c31af7Sopenharmony_ci #version 310 es 1248e5c31af7Sopenharmony_ci precision mediump float; 1249e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1250e5c31af7Sopenharmony_ci in mediump float te_out; 1251e5c31af7Sopenharmony_ci void main() 1252e5c31af7Sopenharmony_ci { 1253e5c31af7Sopenharmony_ci out0 = te_out; 1254e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1255e5c31af7Sopenharmony_ci } 1256e5c31af7Sopenharmony_ci "" 1257e5c31af7Sopenharmony_ci end 1258e5c31af7Sopenharmony_ci 1259e5c31af7Sopenharmony_ci case input_block 1260e5c31af7Sopenharmony_ci version 310 es 1261e5c31af7Sopenharmony_ci desc "Tessellation control shader input block" 1262e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1263e5c31af7Sopenharmony_ci require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } 1264e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 1265e5c31af7Sopenharmony_ci vertex "" 1266e5c31af7Sopenharmony_ci #version 310 es 1267e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1268e5c31af7Sopenharmony_ci out IOBlockName 1269e5c31af7Sopenharmony_ci { 1270e5c31af7Sopenharmony_ci mediump float var; 1271e5c31af7Sopenharmony_ci } outputInstanceName; 1272e5c31af7Sopenharmony_ci void main() 1273e5c31af7Sopenharmony_ci { 1274e5c31af7Sopenharmony_ci outputInstanceName.var = 1.0; 1275e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1276e5c31af7Sopenharmony_ci } 1277e5c31af7Sopenharmony_ci "" 1278e5c31af7Sopenharmony_ci tessellation_control "" 1279e5c31af7Sopenharmony_ci #version 310 es 1280e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1281e5c31af7Sopenharmony_ci in IOBlockName 1282e5c31af7Sopenharmony_ci { 1283e5c31af7Sopenharmony_ci mediump float var; 1284e5c31af7Sopenharmony_ci } inputInstanceName[]; 1285e5c31af7Sopenharmony_ci out mediump float tc_out[]; 1286e5c31af7Sopenharmony_ci void main() 1287e5c31af7Sopenharmony_ci { 1288e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = inputInstanceName[gl_InvocationID].var; 1289e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1290e5c31af7Sopenharmony_ci } 1291e5c31af7Sopenharmony_ci "" 1292e5c31af7Sopenharmony_ci tessellation_evaluation "" 1293e5c31af7Sopenharmony_ci #version 310 es 1294e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1295e5c31af7Sopenharmony_ci in mediump float tc_out[]; 1296e5c31af7Sopenharmony_ci out mediump float te_out; 1297e5c31af7Sopenharmony_ci void main() 1298e5c31af7Sopenharmony_ci { 1299e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1300e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1301e5c31af7Sopenharmony_ci } 1302e5c31af7Sopenharmony_ci "" 1303e5c31af7Sopenharmony_ci fragment "" 1304e5c31af7Sopenharmony_ci #version 310 es 1305e5c31af7Sopenharmony_ci precision mediump float; 1306e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1307e5c31af7Sopenharmony_ci in mediump float te_out; 1308e5c31af7Sopenharmony_ci void main() 1309e5c31af7Sopenharmony_ci { 1310e5c31af7Sopenharmony_ci out0 = te_out; 1311e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1312e5c31af7Sopenharmony_ci } 1313e5c31af7Sopenharmony_ci "" 1314e5c31af7Sopenharmony_ci end 1315e5c31af7Sopenharmony_ci 1316e5c31af7Sopenharmony_ci case input_block_non_array 1317e5c31af7Sopenharmony_ci version 310 es 1318e5c31af7Sopenharmony_ci desc "Tessellation control shader input block without explicit array" 1319e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1320e5c31af7Sopenharmony_ci require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } 1321e5c31af7Sopenharmony_ci expect compile_or_link_fail 1322e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 1323e5c31af7Sopenharmony_ci vertex "" 1324e5c31af7Sopenharmony_ci #version 310 es 1325e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1326e5c31af7Sopenharmony_ci out IOBlockName 1327e5c31af7Sopenharmony_ci { 1328e5c31af7Sopenharmony_ci mediump float var; 1329e5c31af7Sopenharmony_ci } outputInstanceName; 1330e5c31af7Sopenharmony_ci void main() 1331e5c31af7Sopenharmony_ci { 1332e5c31af7Sopenharmony_ci outputInstanceName.var = 1.0; 1333e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1334e5c31af7Sopenharmony_ci } 1335e5c31af7Sopenharmony_ci "" 1336e5c31af7Sopenharmony_ci tessellation_control "" 1337e5c31af7Sopenharmony_ci #version 310 es 1338e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1339e5c31af7Sopenharmony_ci in IOBlockName 1340e5c31af7Sopenharmony_ci { 1341e5c31af7Sopenharmony_ci mediump float var; 1342e5c31af7Sopenharmony_ci } inputInstanceName; 1343e5c31af7Sopenharmony_ci out mediump float tc_out[]; 1344e5c31af7Sopenharmony_ci void main() 1345e5c31af7Sopenharmony_ci { 1346e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = inputInstanceName.var; 1347e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1348e5c31af7Sopenharmony_ci } 1349e5c31af7Sopenharmony_ci "" 1350e5c31af7Sopenharmony_ci tessellation_evaluation "" 1351e5c31af7Sopenharmony_ci #version 310 es 1352e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1353e5c31af7Sopenharmony_ci in mediump float tc_out[]; 1354e5c31af7Sopenharmony_ci out mediump float te_out; 1355e5c31af7Sopenharmony_ci void main() 1356e5c31af7Sopenharmony_ci { 1357e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1358e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1359e5c31af7Sopenharmony_ci } 1360e5c31af7Sopenharmony_ci "" 1361e5c31af7Sopenharmony_ci fragment "" 1362e5c31af7Sopenharmony_ci #version 310 es 1363e5c31af7Sopenharmony_ci precision mediump float; 1364e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1365e5c31af7Sopenharmony_ci in mediump float geo_out; 1366e5c31af7Sopenharmony_ci void main() 1367e5c31af7Sopenharmony_ci { 1368e5c31af7Sopenharmony_ci out0 = geo_out; 1369e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1370e5c31af7Sopenharmony_ci } 1371e5c31af7Sopenharmony_ci "" 1372e5c31af7Sopenharmony_ci end 1373e5c31af7Sopenharmony_ci 1374e5c31af7Sopenharmony_ci case output_block_non_array 1375e5c31af7Sopenharmony_ci version 310 es 1376e5c31af7Sopenharmony_ci desc "Tessellation control shader output block without explicit array" 1377e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1378e5c31af7Sopenharmony_ci require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } 1379e5c31af7Sopenharmony_ci expect compile_or_link_fail 1380e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 1381e5c31af7Sopenharmony_ci vertex "" 1382e5c31af7Sopenharmony_ci #version 310 es 1383e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1384e5c31af7Sopenharmony_ci out mediump float tc_in; 1385e5c31af7Sopenharmony_ci void main() 1386e5c31af7Sopenharmony_ci { 1387e5c31af7Sopenharmony_ci tc_in = 1.0; 1388e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1389e5c31af7Sopenharmony_ci } 1390e5c31af7Sopenharmony_ci "" 1391e5c31af7Sopenharmony_ci tessellation_control "" 1392e5c31af7Sopenharmony_ci #version 310 es 1393e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1394e5c31af7Sopenharmony_ci in mediump float tc_in[]; 1395e5c31af7Sopenharmony_ci out IOBlockName 1396e5c31af7Sopenharmony_ci { 1397e5c31af7Sopenharmony_ci mediump float var; 1398e5c31af7Sopenharmony_ci } outputInstanceName; // not an array 1399e5c31af7Sopenharmony_ci void main() 1400e5c31af7Sopenharmony_ci { 1401e5c31af7Sopenharmony_ci outputInstanceName.var = tc_in[gl_InvocationID]; 1402e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1403e5c31af7Sopenharmony_ci } 1404e5c31af7Sopenharmony_ci "" 1405e5c31af7Sopenharmony_ci tessellation_evaluation "" 1406e5c31af7Sopenharmony_ci #version 310 es 1407e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1408e5c31af7Sopenharmony_ci in IOBlockName 1409e5c31af7Sopenharmony_ci { 1410e5c31af7Sopenharmony_ci mediump float var; 1411e5c31af7Sopenharmony_ci } outputInstanceName[]; 1412e5c31af7Sopenharmony_ci out mediump float te_out; 1413e5c31af7Sopenharmony_ci void main() 1414e5c31af7Sopenharmony_ci { 1415e5c31af7Sopenharmony_ci te_out = outputInstanceName[2].var; 1416e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1417e5c31af7Sopenharmony_ci } 1418e5c31af7Sopenharmony_ci "" 1419e5c31af7Sopenharmony_ci fragment "" 1420e5c31af7Sopenharmony_ci #version 310 es 1421e5c31af7Sopenharmony_ci precision mediump float; 1422e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1423e5c31af7Sopenharmony_ci 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 input_block_array_size_mismatch 1433e5c31af7Sopenharmony_ci version 310 es 1434e5c31af7Sopenharmony_ci desc "Tessellation control shader input block array, size not gl_MaxPatchVertices" 1435e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1436e5c31af7Sopenharmony_ci require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex } 1437e5c31af7Sopenharmony_ci expect compile_or_link_fail 1438e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 1439e5c31af7Sopenharmony_ci vertex "" 1440e5c31af7Sopenharmony_ci #version 310 es 1441e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1442e5c31af7Sopenharmony_ci out IOBlockName 1443e5c31af7Sopenharmony_ci { 1444e5c31af7Sopenharmony_ci mediump float var; 1445e5c31af7Sopenharmony_ci } outputInstanceName; 1446e5c31af7Sopenharmony_ci void main() 1447e5c31af7Sopenharmony_ci { 1448e5c31af7Sopenharmony_ci outputInstanceName.var = 1.0; 1449e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1450e5c31af7Sopenharmony_ci } 1451e5c31af7Sopenharmony_ci "" 1452e5c31af7Sopenharmony_ci tessellation_control "" 1453e5c31af7Sopenharmony_ci #version 310 es 1454e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1455e5c31af7Sopenharmony_ci in IOBlockName 1456e5c31af7Sopenharmony_ci { 1457e5c31af7Sopenharmony_ci mediump float var; 1458e5c31af7Sopenharmony_ci } inputInstanceName[4]; // not gl_MaxPatchVertices 1459e5c31af7Sopenharmony_ci out mediump float tc_out[]; 1460e5c31af7Sopenharmony_ci void main() 1461e5c31af7Sopenharmony_ci { 1462e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = inputInstanceName[gl_InvocationID + 1].var; 1463e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1464e5c31af7Sopenharmony_ci } 1465e5c31af7Sopenharmony_ci "" 1466e5c31af7Sopenharmony_ci tessellation_evaluation "" 1467e5c31af7Sopenharmony_ci #version 310 es 1468e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1469e5c31af7Sopenharmony_ci in mediump float tc_out[]; 1470e5c31af7Sopenharmony_ci out mediump float te_out; 1471e5c31af7Sopenharmony_ci void main() 1472e5c31af7Sopenharmony_ci { 1473e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1474e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1475e5c31af7Sopenharmony_ci } 1476e5c31af7Sopenharmony_ci "" 1477e5c31af7Sopenharmony_ci fragment "" 1478e5c31af7Sopenharmony_ci #version 310 es 1479e5c31af7Sopenharmony_ci precision mediump float; 1480e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1481e5c31af7Sopenharmony_ci in mediump float geo_out; 1482e5c31af7Sopenharmony_ci void main() 1483e5c31af7Sopenharmony_ci { 1484e5c31af7Sopenharmony_ci out0 = geo_out; 1485e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1486e5c31af7Sopenharmony_ci } 1487e5c31af7Sopenharmony_ci "" 1488e5c31af7Sopenharmony_ci end 1489e5c31af7Sopenharmony_ci 1490e5c31af7Sopenharmony_ci case output_block 1491e5c31af7Sopenharmony_ci version 310 es 1492e5c31af7Sopenharmony_ci desc "Tessellation shader output block" 1493e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1494e5c31af7Sopenharmony_ci require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } 1495e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 1496e5c31af7Sopenharmony_ci vertex "" 1497e5c31af7Sopenharmony_ci #version 310 es 1498e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1499e5c31af7Sopenharmony_ci void main() 1500e5c31af7Sopenharmony_ci { 1501e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1502e5c31af7Sopenharmony_ci } 1503e5c31af7Sopenharmony_ci "" 1504e5c31af7Sopenharmony_ci tessellation_control "" 1505e5c31af7Sopenharmony_ci #version 310 es 1506e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1507e5c31af7Sopenharmony_ci void main() 1508e5c31af7Sopenharmony_ci { 1509e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1510e5c31af7Sopenharmony_ci } 1511e5c31af7Sopenharmony_ci "" 1512e5c31af7Sopenharmony_ci tessellation_evaluation "" 1513e5c31af7Sopenharmony_ci #version 310 es 1514e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1515e5c31af7Sopenharmony_ci out IOBlockName 1516e5c31af7Sopenharmony_ci { 1517e5c31af7Sopenharmony_ci mediump float var; 1518e5c31af7Sopenharmony_ci } outputInstanceName; 1519e5c31af7Sopenharmony_ci void main() 1520e5c31af7Sopenharmony_ci { 1521e5c31af7Sopenharmony_ci outputInstanceName.var = 1.0; 1522e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1523e5c31af7Sopenharmony_ci } 1524e5c31af7Sopenharmony_ci "" 1525e5c31af7Sopenharmony_ci fragment "" 1526e5c31af7Sopenharmony_ci #version 310 es 1527e5c31af7Sopenharmony_ci precision mediump float; 1528e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1529e5c31af7Sopenharmony_ci in IOBlockName 1530e5c31af7Sopenharmony_ci { 1531e5c31af7Sopenharmony_ci mediump float var; 1532e5c31af7Sopenharmony_ci } inputInstanceName; 1533e5c31af7Sopenharmony_ci void main() 1534e5c31af7Sopenharmony_ci { 1535e5c31af7Sopenharmony_ci out0 = inputInstanceName.var; 1536e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1537e5c31af7Sopenharmony_ci } 1538e5c31af7Sopenharmony_ci "" 1539e5c31af7Sopenharmony_ci end 1540e5c31af7Sopenharmony_ci 1541e5c31af7Sopenharmony_ci case output_block_array 1542e5c31af7Sopenharmony_ci version 310 es 1543e5c31af7Sopenharmony_ci desc "Tessellation shader output block array" 1544e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1545e5c31af7Sopenharmony_ci require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { fragment } 1546e5c31af7Sopenharmony_ci values { output float out0 = 1.0; } 1547e5c31af7Sopenharmony_ci vertex "" 1548e5c31af7Sopenharmony_ci #version 310 es 1549e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1550e5c31af7Sopenharmony_ci void main() 1551e5c31af7Sopenharmony_ci { 1552e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1553e5c31af7Sopenharmony_ci } 1554e5c31af7Sopenharmony_ci "" 1555e5c31af7Sopenharmony_ci tessellation_control "" 1556e5c31af7Sopenharmony_ci #version 310 es 1557e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1558e5c31af7Sopenharmony_ci void main() 1559e5c31af7Sopenharmony_ci { 1560e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1561e5c31af7Sopenharmony_ci } 1562e5c31af7Sopenharmony_ci "" 1563e5c31af7Sopenharmony_ci tessellation_evaluation "" 1564e5c31af7Sopenharmony_ci #version 310 es 1565e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1566e5c31af7Sopenharmony_ci out IOBlockName 1567e5c31af7Sopenharmony_ci { 1568e5c31af7Sopenharmony_ci mediump float var; 1569e5c31af7Sopenharmony_ci } outputInstanceName[2]; 1570e5c31af7Sopenharmony_ci void main() 1571e5c31af7Sopenharmony_ci { 1572e5c31af7Sopenharmony_ci outputInstanceName[0].var = 2.0; 1573e5c31af7Sopenharmony_ci outputInstanceName[1].var = 1.0; 1574e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1575e5c31af7Sopenharmony_ci } 1576e5c31af7Sopenharmony_ci "" 1577e5c31af7Sopenharmony_ci fragment "" 1578e5c31af7Sopenharmony_ci #version 310 es 1579e5c31af7Sopenharmony_ci precision mediump float; 1580e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1581e5c31af7Sopenharmony_ci in IOBlockName 1582e5c31af7Sopenharmony_ci { 1583e5c31af7Sopenharmony_ci mediump float var; 1584e5c31af7Sopenharmony_ci } inputInstanceName[2]; 1585e5c31af7Sopenharmony_ci void main() 1586e5c31af7Sopenharmony_ci { 1587e5c31af7Sopenharmony_ci out0 = inputInstanceName[0].var - inputInstanceName[1].var; 1588e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1589e5c31af7Sopenharmony_ci } 1590e5c31af7Sopenharmony_ci "" 1591e5c31af7Sopenharmony_ci end 1592e5c31af7Sopenharmony_ci 1593e5c31af7Sopenharmony_ci case unspecified_vertex_count 1594e5c31af7Sopenharmony_ci version 310 es 1595e5c31af7Sopenharmony_ci desc "Tessellation shader unspecified vertex count" 1596e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1597e5c31af7Sopenharmony_ci expect compile_or_link_fail 1598e5c31af7Sopenharmony_ci vertex "" 1599e5c31af7Sopenharmony_ci #version 310 es 1600e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1601e5c31af7Sopenharmony_ci void main() 1602e5c31af7Sopenharmony_ci { 1603e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1604e5c31af7Sopenharmony_ci } 1605e5c31af7Sopenharmony_ci "" 1606e5c31af7Sopenharmony_ci tessellation_control "" 1607e5c31af7Sopenharmony_ci #version 310 es 1608e5c31af7Sopenharmony_ci void main() 1609e5c31af7Sopenharmony_ci { 1610e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1611e5c31af7Sopenharmony_ci } 1612e5c31af7Sopenharmony_ci "" 1613e5c31af7Sopenharmony_ci tessellation_evaluation "" 1614e5c31af7Sopenharmony_ci #version 310 es 1615e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1616e5c31af7Sopenharmony_ci void main() 1617e5c31af7Sopenharmony_ci { 1618e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1619e5c31af7Sopenharmony_ci } 1620e5c31af7Sopenharmony_ci "" 1621e5c31af7Sopenharmony_ci fragment "" 1622e5c31af7Sopenharmony_ci #version 310 es 1623e5c31af7Sopenharmony_ci precision mediump float; 1624e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1625e5c31af7Sopenharmony_ci void main() 1626e5c31af7Sopenharmony_ci { 1627e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1628e5c31af7Sopenharmony_ci } 1629e5c31af7Sopenharmony_ci "" 1630e5c31af7Sopenharmony_ci end 1631e5c31af7Sopenharmony_ci 1632e5c31af7Sopenharmony_ci case unspecified_primitive_mode 1633e5c31af7Sopenharmony_ci version 310 es 1634e5c31af7Sopenharmony_ci desc "Tessellation shader unspecified vertex count" 1635e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1636e5c31af7Sopenharmony_ci expect compile_or_link_fail 1637e5c31af7Sopenharmony_ci vertex "" 1638e5c31af7Sopenharmony_ci #version 310 es 1639e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1640e5c31af7Sopenharmony_ci void main() 1641e5c31af7Sopenharmony_ci { 1642e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1643e5c31af7Sopenharmony_ci } 1644e5c31af7Sopenharmony_ci "" 1645e5c31af7Sopenharmony_ci tessellation_control "" 1646e5c31af7Sopenharmony_ci #version 310 es 1647e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1648e5c31af7Sopenharmony_ci void main() 1649e5c31af7Sopenharmony_ci { 1650e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1651e5c31af7Sopenharmony_ci } 1652e5c31af7Sopenharmony_ci "" 1653e5c31af7Sopenharmony_ci tessellation_evaluation "" 1654e5c31af7Sopenharmony_ci #version 310 es 1655e5c31af7Sopenharmony_ci void main() 1656e5c31af7Sopenharmony_ci { 1657e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1658e5c31af7Sopenharmony_ci } 1659e5c31af7Sopenharmony_ci "" 1660e5c31af7Sopenharmony_ci fragment "" 1661e5c31af7Sopenharmony_ci #version 310 es 1662e5c31af7Sopenharmony_ci precision mediump float; 1663e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1664e5c31af7Sopenharmony_ci void main() 1665e5c31af7Sopenharmony_ci { 1666e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1667e5c31af7Sopenharmony_ci } 1668e5c31af7Sopenharmony_ci "" 1669e5c31af7Sopenharmony_ci end 1670e5c31af7Sopenharmony_ci end 1671e5c31af7Sopenharmony_ci 1672e5c31af7Sopenharmony_ci group qualifiers "Varying qualifiers" 1673e5c31af7Sopenharmony_ci case smooth 1674e5c31af7Sopenharmony_ci version 310 es 1675e5c31af7Sopenharmony_ci desc "Smooth varying" 1676e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1677e5c31af7Sopenharmony_ci values 1678e5c31af7Sopenharmony_ci { 1679e5c31af7Sopenharmony_ci input float in0 = 1.0; 1680e5c31af7Sopenharmony_ci output float out0 = 1.0; 1681e5c31af7Sopenharmony_ci } 1682e5c31af7Sopenharmony_ci vertex "" 1683e5c31af7Sopenharmony_ci #version 310 es 1684e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1685e5c31af7Sopenharmony_ci smooth out mediump float tc_in; 1686e5c31af7Sopenharmony_ci void main() 1687e5c31af7Sopenharmony_ci { 1688e5c31af7Sopenharmony_ci tc_in = in0; 1689e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1690e5c31af7Sopenharmony_ci } 1691e5c31af7Sopenharmony_ci "" 1692e5c31af7Sopenharmony_ci tessellation_control "" 1693e5c31af7Sopenharmony_ci #version 310 es 1694e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1695e5c31af7Sopenharmony_ci smooth in mediump float tc_in[]; 1696e5c31af7Sopenharmony_ci smooth out mediump float tc_out[]; 1697e5c31af7Sopenharmony_ci void main() 1698e5c31af7Sopenharmony_ci { 1699e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 1700e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1701e5c31af7Sopenharmony_ci } 1702e5c31af7Sopenharmony_ci "" 1703e5c31af7Sopenharmony_ci tessellation_evaluation "" 1704e5c31af7Sopenharmony_ci #version 310 es 1705e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1706e5c31af7Sopenharmony_ci smooth in mediump float tc_out[]; 1707e5c31af7Sopenharmony_ci smooth out mediump float te_out; 1708e5c31af7Sopenharmony_ci void main() 1709e5c31af7Sopenharmony_ci { 1710e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1711e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1712e5c31af7Sopenharmony_ci } 1713e5c31af7Sopenharmony_ci "" 1714e5c31af7Sopenharmony_ci fragment "" 1715e5c31af7Sopenharmony_ci #version 310 es 1716e5c31af7Sopenharmony_ci precision mediump float; 1717e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1718e5c31af7Sopenharmony_ci smooth in mediump float te_out; 1719e5c31af7Sopenharmony_ci void main() 1720e5c31af7Sopenharmony_ci { 1721e5c31af7Sopenharmony_ci out0 = te_out; 1722e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1723e5c31af7Sopenharmony_ci } 1724e5c31af7Sopenharmony_ci "" 1725e5c31af7Sopenharmony_ci end 1726e5c31af7Sopenharmony_ci 1727e5c31af7Sopenharmony_ci case flat 1728e5c31af7Sopenharmony_ci version 310 es 1729e5c31af7Sopenharmony_ci desc "Flat varying" 1730e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1731e5c31af7Sopenharmony_ci values 1732e5c31af7Sopenharmony_ci { 1733e5c31af7Sopenharmony_ci input float in0 = 1.0; 1734e5c31af7Sopenharmony_ci output float out0 = 1.0; 1735e5c31af7Sopenharmony_ci } 1736e5c31af7Sopenharmony_ci vertex "" 1737e5c31af7Sopenharmony_ci #version 310 es 1738e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1739e5c31af7Sopenharmony_ci flat out mediump float tc_in; 1740e5c31af7Sopenharmony_ci void main() 1741e5c31af7Sopenharmony_ci { 1742e5c31af7Sopenharmony_ci tc_in = in0; 1743e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1744e5c31af7Sopenharmony_ci } 1745e5c31af7Sopenharmony_ci "" 1746e5c31af7Sopenharmony_ci tessellation_control "" 1747e5c31af7Sopenharmony_ci #version 310 es 1748e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1749e5c31af7Sopenharmony_ci flat in mediump float tc_in[]; 1750e5c31af7Sopenharmony_ci flat out mediump float tc_out[]; 1751e5c31af7Sopenharmony_ci void main() 1752e5c31af7Sopenharmony_ci { 1753e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 1754e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1755e5c31af7Sopenharmony_ci } 1756e5c31af7Sopenharmony_ci "" 1757e5c31af7Sopenharmony_ci tessellation_evaluation "" 1758e5c31af7Sopenharmony_ci #version 310 es 1759e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1760e5c31af7Sopenharmony_ci flat in mediump float tc_out[]; 1761e5c31af7Sopenharmony_ci flat out mediump float te_out; 1762e5c31af7Sopenharmony_ci void main() 1763e5c31af7Sopenharmony_ci { 1764e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1765e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1766e5c31af7Sopenharmony_ci } 1767e5c31af7Sopenharmony_ci "" 1768e5c31af7Sopenharmony_ci fragment "" 1769e5c31af7Sopenharmony_ci #version 310 es 1770e5c31af7Sopenharmony_ci precision mediump float; 1771e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1772e5c31af7Sopenharmony_ci flat in mediump float te_out; 1773e5c31af7Sopenharmony_ci void main() 1774e5c31af7Sopenharmony_ci { 1775e5c31af7Sopenharmony_ci out0 = te_out; 1776e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1777e5c31af7Sopenharmony_ci } 1778e5c31af7Sopenharmony_ci "" 1779e5c31af7Sopenharmony_ci end 1780e5c31af7Sopenharmony_ci 1781e5c31af7Sopenharmony_ci case centroid 1782e5c31af7Sopenharmony_ci version 310 es 1783e5c31af7Sopenharmony_ci desc "Centroid varying" 1784e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1785e5c31af7Sopenharmony_ci values 1786e5c31af7Sopenharmony_ci { 1787e5c31af7Sopenharmony_ci input float in0 = 1.0; 1788e5c31af7Sopenharmony_ci output float out0 = 1.0; 1789e5c31af7Sopenharmony_ci } 1790e5c31af7Sopenharmony_ci vertex "" 1791e5c31af7Sopenharmony_ci #version 310 es 1792e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1793e5c31af7Sopenharmony_ci centroid out mediump float tc_in; 1794e5c31af7Sopenharmony_ci void main() 1795e5c31af7Sopenharmony_ci { 1796e5c31af7Sopenharmony_ci tc_in = in0; 1797e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1798e5c31af7Sopenharmony_ci } 1799e5c31af7Sopenharmony_ci "" 1800e5c31af7Sopenharmony_ci tessellation_control "" 1801e5c31af7Sopenharmony_ci #version 310 es 1802e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1803e5c31af7Sopenharmony_ci centroid in mediump float tc_in[]; 1804e5c31af7Sopenharmony_ci centroid out mediump float tc_out[]; 1805e5c31af7Sopenharmony_ci void main() 1806e5c31af7Sopenharmony_ci { 1807e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 1808e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1809e5c31af7Sopenharmony_ci } 1810e5c31af7Sopenharmony_ci "" 1811e5c31af7Sopenharmony_ci tessellation_evaluation "" 1812e5c31af7Sopenharmony_ci #version 310 es 1813e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1814e5c31af7Sopenharmony_ci centroid in mediump float tc_out[]; 1815e5c31af7Sopenharmony_ci centroid out mediump float te_out; 1816e5c31af7Sopenharmony_ci void main() 1817e5c31af7Sopenharmony_ci { 1818e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1819e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1820e5c31af7Sopenharmony_ci } 1821e5c31af7Sopenharmony_ci "" 1822e5c31af7Sopenharmony_ci fragment "" 1823e5c31af7Sopenharmony_ci #version 310 es 1824e5c31af7Sopenharmony_ci precision mediump float; 1825e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1826e5c31af7Sopenharmony_ci centroid in mediump float te_out; 1827e5c31af7Sopenharmony_ci void main() 1828e5c31af7Sopenharmony_ci { 1829e5c31af7Sopenharmony_ci out0 = te_out; 1830e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1831e5c31af7Sopenharmony_ci } 1832e5c31af7Sopenharmony_ci "" 1833e5c31af7Sopenharmony_ci end 1834e5c31af7Sopenharmony_ci 1835e5c31af7Sopenharmony_ci case sample 1836e5c31af7Sopenharmony_ci version 310 es 1837e5c31af7Sopenharmony_ci desc "Sample varying" 1838e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1839e5c31af7Sopenharmony_ci require extension { "GL_OES_shader_multisample_interpolation" } 1840e5c31af7Sopenharmony_ci values 1841e5c31af7Sopenharmony_ci { 1842e5c31af7Sopenharmony_ci input float in0 = 1.0; 1843e5c31af7Sopenharmony_ci output float out0 = 1.0; 1844e5c31af7Sopenharmony_ci } 1845e5c31af7Sopenharmony_ci vertex "" 1846e5c31af7Sopenharmony_ci #version 310 es 1847e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1848e5c31af7Sopenharmony_ci sample out mediump float tc_in; 1849e5c31af7Sopenharmony_ci void main() 1850e5c31af7Sopenharmony_ci { 1851e5c31af7Sopenharmony_ci tc_in = in0; 1852e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1853e5c31af7Sopenharmony_ci } 1854e5c31af7Sopenharmony_ci "" 1855e5c31af7Sopenharmony_ci tessellation_control "" 1856e5c31af7Sopenharmony_ci #version 310 es 1857e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1858e5c31af7Sopenharmony_ci sample in mediump float tc_in[]; 1859e5c31af7Sopenharmony_ci sample out mediump float tc_out[]; 1860e5c31af7Sopenharmony_ci void main() 1861e5c31af7Sopenharmony_ci { 1862e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 1863e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1864e5c31af7Sopenharmony_ci } 1865e5c31af7Sopenharmony_ci "" 1866e5c31af7Sopenharmony_ci tessellation_evaluation "" 1867e5c31af7Sopenharmony_ci #version 310 es 1868e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1869e5c31af7Sopenharmony_ci sample in mediump float tc_out[]; 1870e5c31af7Sopenharmony_ci sample out mediump float te_out; 1871e5c31af7Sopenharmony_ci void main() 1872e5c31af7Sopenharmony_ci { 1873e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1874e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1875e5c31af7Sopenharmony_ci } 1876e5c31af7Sopenharmony_ci "" 1877e5c31af7Sopenharmony_ci fragment "" 1878e5c31af7Sopenharmony_ci #version 310 es 1879e5c31af7Sopenharmony_ci precision mediump float; 1880e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1881e5c31af7Sopenharmony_ci sample in mediump float te_out; 1882e5c31af7Sopenharmony_ci void main() 1883e5c31af7Sopenharmony_ci { 1884e5c31af7Sopenharmony_ci out0 = te_out; 1885e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1886e5c31af7Sopenharmony_ci } 1887e5c31af7Sopenharmony_ci "" 1888e5c31af7Sopenharmony_ci end 1889e5c31af7Sopenharmony_ci 1890e5c31af7Sopenharmony_ci case patch 1891e5c31af7Sopenharmony_ci version 310 es 1892e5c31af7Sopenharmony_ci desc "Pre-patch varying" 1893e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1894e5c31af7Sopenharmony_ci values 1895e5c31af7Sopenharmony_ci { 1896e5c31af7Sopenharmony_ci input float in0 = 1.0; 1897e5c31af7Sopenharmony_ci output float out0 = 1.0; 1898e5c31af7Sopenharmony_ci } 1899e5c31af7Sopenharmony_ci vertex "" 1900e5c31af7Sopenharmony_ci #version 310 es 1901e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1902e5c31af7Sopenharmony_ci out mediump float tc_in; 1903e5c31af7Sopenharmony_ci void main() 1904e5c31af7Sopenharmony_ci { 1905e5c31af7Sopenharmony_ci tc_in = in0; 1906e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1907e5c31af7Sopenharmony_ci } 1908e5c31af7Sopenharmony_ci "" 1909e5c31af7Sopenharmony_ci tessellation_control "" 1910e5c31af7Sopenharmony_ci #version 310 es 1911e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1912e5c31af7Sopenharmony_ci in mediump float tc_in[]; 1913e5c31af7Sopenharmony_ci patch out mediump float tc_out; 1914e5c31af7Sopenharmony_ci void main() 1915e5c31af7Sopenharmony_ci { 1916e5c31af7Sopenharmony_ci tc_out = tc_in[gl_InvocationID]; 1917e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1918e5c31af7Sopenharmony_ci } 1919e5c31af7Sopenharmony_ci "" 1920e5c31af7Sopenharmony_ci tessellation_evaluation "" 1921e5c31af7Sopenharmony_ci #version 310 es 1922e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1923e5c31af7Sopenharmony_ci patch in mediump float tc_out; 1924e5c31af7Sopenharmony_ci out mediump float te_out; 1925e5c31af7Sopenharmony_ci void main() 1926e5c31af7Sopenharmony_ci { 1927e5c31af7Sopenharmony_ci te_out = tc_out; 1928e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1929e5c31af7Sopenharmony_ci } 1930e5c31af7Sopenharmony_ci "" 1931e5c31af7Sopenharmony_ci fragment "" 1932e5c31af7Sopenharmony_ci #version 310 es 1933e5c31af7Sopenharmony_ci precision mediump float; 1934e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1935e5c31af7Sopenharmony_ci in mediump float te_out; 1936e5c31af7Sopenharmony_ci void main() 1937e5c31af7Sopenharmony_ci { 1938e5c31af7Sopenharmony_ci out0 = te_out; 1939e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 1940e5c31af7Sopenharmony_ci } 1941e5c31af7Sopenharmony_ci "" 1942e5c31af7Sopenharmony_ci end 1943e5c31af7Sopenharmony_ci end 1944e5c31af7Sopenharmony_ci 1945e5c31af7Sopenharmony_ci import "linkage_tessellation_varying_types.test" 1946e5c31af7Sopenharmony_ciend 1947e5c31af7Sopenharmony_ci 1948e5c31af7Sopenharmony_cigroup uniform "Uniform" 1949e5c31af7Sopenharmony_ci group rules "Rules" 1950e5c31af7Sopenharmony_ci case type_mismatch_1 1951e5c31af7Sopenharmony_ci version 310 es 1952e5c31af7Sopenharmony_ci desc "uniform type mismatch between vertex and tessellation control shaders" 1953e5c31af7Sopenharmony_ci expect link_fail 1954e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 1955e5c31af7Sopenharmony_ci vertex "" 1956e5c31af7Sopenharmony_ci #version 310 es 1957e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 1958e5c31af7Sopenharmony_ci uniform mediump float val; 1959e5c31af7Sopenharmony_ci out mediump float vtx_out; 1960e5c31af7Sopenharmony_ci void main() 1961e5c31af7Sopenharmony_ci { 1962e5c31af7Sopenharmony_ci vtx_out = val; 1963e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 1964e5c31af7Sopenharmony_ci } 1965e5c31af7Sopenharmony_ci "" 1966e5c31af7Sopenharmony_ci tessellation_control "" 1967e5c31af7Sopenharmony_ci #version 310 es 1968e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 1969e5c31af7Sopenharmony_ci uniform mediump vec2 val; 1970e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 1971e5c31af7Sopenharmony_ci out mediump float tc_out[]; 1972e5c31af7Sopenharmony_ci void main() 1973e5c31af7Sopenharmony_ci { 1974e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[0] + val.x + val.y; 1975e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 1976e5c31af7Sopenharmony_ci } 1977e5c31af7Sopenharmony_ci "" 1978e5c31af7Sopenharmony_ci tessellation_evaluation "" 1979e5c31af7Sopenharmony_ci #version 310 es 1980e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 1981e5c31af7Sopenharmony_ci in mediump float tc_out[]; 1982e5c31af7Sopenharmony_ci out mediump float te_out; 1983e5c31af7Sopenharmony_ci void main() 1984e5c31af7Sopenharmony_ci { 1985e5c31af7Sopenharmony_ci te_out = tc_out[2]; 1986e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 1987e5c31af7Sopenharmony_ci } 1988e5c31af7Sopenharmony_ci "" 1989e5c31af7Sopenharmony_ci fragment "" 1990e5c31af7Sopenharmony_ci #version 310 es 1991e5c31af7Sopenharmony_ci precision mediump float; 1992e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 1993e5c31af7Sopenharmony_ci in mediump float te_out; 1994e5c31af7Sopenharmony_ci void main() 1995e5c31af7Sopenharmony_ci { 1996e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out); 1997e5c31af7Sopenharmony_ci } 1998e5c31af7Sopenharmony_ci "" 1999e5c31af7Sopenharmony_ci end 2000e5c31af7Sopenharmony_ci 2001e5c31af7Sopenharmony_ci case type_mismatch_2 2002e5c31af7Sopenharmony_ci version 310 es 2003e5c31af7Sopenharmony_ci desc "uniform type mismatch between fragment and tessellation eval shaders" 2004e5c31af7Sopenharmony_ci expect link_fail 2005e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 2006e5c31af7Sopenharmony_ci vertex "" 2007e5c31af7Sopenharmony_ci #version 310 es 2008e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2009e5c31af7Sopenharmony_ci out mediump float vtx_out; 2010e5c31af7Sopenharmony_ci void main() 2011e5c31af7Sopenharmony_ci { 2012e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2013e5c31af7Sopenharmony_ci } 2014e5c31af7Sopenharmony_ci "" 2015e5c31af7Sopenharmony_ci tessellation_control "" 2016e5c31af7Sopenharmony_ci #version 310 es 2017e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 2018e5c31af7Sopenharmony_ci void main() 2019e5c31af7Sopenharmony_ci { 2020e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2021e5c31af7Sopenharmony_ci } 2022e5c31af7Sopenharmony_ci "" 2023e5c31af7Sopenharmony_ci tessellation_evaluation "" 2024e5c31af7Sopenharmony_ci #version 310 es 2025e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 2026e5c31af7Sopenharmony_ci uniform mediump vec3 val; 2027e5c31af7Sopenharmony_ci out mediump float te_out; 2028e5c31af7Sopenharmony_ci void main() 2029e5c31af7Sopenharmony_ci { 2030e5c31af7Sopenharmony_ci te_out = val.x + val.y + val.z; 2031e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2032e5c31af7Sopenharmony_ci } 2033e5c31af7Sopenharmony_ci "" 2034e5c31af7Sopenharmony_ci fragment "" 2035e5c31af7Sopenharmony_ci #version 310 es 2036e5c31af7Sopenharmony_ci precision mediump float; 2037e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2038e5c31af7Sopenharmony_ci uniform mediump vec4 val; 2039e5c31af7Sopenharmony_ci in mediump float te_out; 2040e5c31af7Sopenharmony_ci void main() 2041e5c31af7Sopenharmony_ci { 2042e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out) + val; 2043e5c31af7Sopenharmony_ci } 2044e5c31af7Sopenharmony_ci "" 2045e5c31af7Sopenharmony_ci end 2046e5c31af7Sopenharmony_ci 2047e5c31af7Sopenharmony_ci case type_mismatch_3 2048e5c31af7Sopenharmony_ci version 310 es 2049e5c31af7Sopenharmony_ci desc "uniform type mismatch between tessellation control and eval shaders" 2050e5c31af7Sopenharmony_ci expect link_fail 2051e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 2052e5c31af7Sopenharmony_ci vertex "" 2053e5c31af7Sopenharmony_ci #version 310 es 2054e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2055e5c31af7Sopenharmony_ci out mediump float vtx_out; 2056e5c31af7Sopenharmony_ci void main() 2057e5c31af7Sopenharmony_ci { 2058e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2059e5c31af7Sopenharmony_ci } 2060e5c31af7Sopenharmony_ci "" 2061e5c31af7Sopenharmony_ci tessellation_control "" 2062e5c31af7Sopenharmony_ci #version 310 es 2063e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 2064e5c31af7Sopenharmony_ci uniform mediump vec4 val; 2065e5c31af7Sopenharmony_ci out mediump vec4 tc_out[]; 2066e5c31af7Sopenharmony_ci void main() 2067e5c31af7Sopenharmony_ci { 2068e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = val; 2069e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2070e5c31af7Sopenharmony_ci } 2071e5c31af7Sopenharmony_ci "" 2072e5c31af7Sopenharmony_ci tessellation_evaluation "" 2073e5c31af7Sopenharmony_ci #version 310 es 2074e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 2075e5c31af7Sopenharmony_ci uniform mediump vec3 val; 2076e5c31af7Sopenharmony_ci in mediump vec4 tc_out[]; 2077e5c31af7Sopenharmony_ci out mediump float te_out; 2078e5c31af7Sopenharmony_ci void main() 2079e5c31af7Sopenharmony_ci { 2080e5c31af7Sopenharmony_ci te_out = tc_out[0].w * val.z; 2081e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2082e5c31af7Sopenharmony_ci } 2083e5c31af7Sopenharmony_ci "" 2084e5c31af7Sopenharmony_ci fragment "" 2085e5c31af7Sopenharmony_ci #version 310 es 2086e5c31af7Sopenharmony_ci precision mediump float; 2087e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2088e5c31af7Sopenharmony_ci in mediump float te_out; 2089e5c31af7Sopenharmony_ci void main() 2090e5c31af7Sopenharmony_ci { 2091e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out); 2092e5c31af7Sopenharmony_ci } 2093e5c31af7Sopenharmony_ci "" 2094e5c31af7Sopenharmony_ci end 2095e5c31af7Sopenharmony_ci 2096e5c31af7Sopenharmony_ci case type_mismatch_4 2097e5c31af7Sopenharmony_ci version 310 es 2098e5c31af7Sopenharmony_ci desc "uniform type mismatch between vertex and tessellation control shaders" 2099e5c31af7Sopenharmony_ci expect link_fail 2100e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 2101e5c31af7Sopenharmony_ci require limit "GL_MAX_VERTEX_ATOMIC_COUNTERS" > 0 2102e5c31af7Sopenharmony_ci vertex "" 2103e5c31af7Sopenharmony_ci #version 310 es 2104e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2105e5c31af7Sopenharmony_ci layout(binding=0) uniform atomic_uint u_var; 2106e5c31af7Sopenharmony_ci out mediump float vtx_out; 2107e5c31af7Sopenharmony_ci void main() 2108e5c31af7Sopenharmony_ci { 2109e5c31af7Sopenharmony_ci uint result = atomicCounterIncrement(u_var); 2110e5c31af7Sopenharmony_ci vtx_out = float(result); 2111e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2112e5c31af7Sopenharmony_ci } 2113e5c31af7Sopenharmony_ci "" 2114e5c31af7Sopenharmony_ci tessellation_control "" 2115e5c31af7Sopenharmony_ci #version 310 es 2116e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 2117e5c31af7Sopenharmony_ci uniform mediump float u_var; 2118e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 2119e5c31af7Sopenharmony_ci out mediump float tc_out[]; 2120e5c31af7Sopenharmony_ci void main() 2121e5c31af7Sopenharmony_ci { 2122e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[0] + u_var; 2123e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2124e5c31af7Sopenharmony_ci } 2125e5c31af7Sopenharmony_ci "" 2126e5c31af7Sopenharmony_ci tessellation_evaluation "" 2127e5c31af7Sopenharmony_ci #version 310 es 2128e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 2129e5c31af7Sopenharmony_ci in mediump float tc_out[]; 2130e5c31af7Sopenharmony_ci out mediump float te_out; 2131e5c31af7Sopenharmony_ci void main() 2132e5c31af7Sopenharmony_ci { 2133e5c31af7Sopenharmony_ci te_out = tc_out[2]; 2134e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2135e5c31af7Sopenharmony_ci } 2136e5c31af7Sopenharmony_ci "" 2137e5c31af7Sopenharmony_ci fragment "" 2138e5c31af7Sopenharmony_ci #version 310 es 2139e5c31af7Sopenharmony_ci precision mediump float; 2140e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2141e5c31af7Sopenharmony_ci in mediump float te_out; 2142e5c31af7Sopenharmony_ci void main() 2143e5c31af7Sopenharmony_ci { 2144e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out); 2145e5c31af7Sopenharmony_ci } 2146e5c31af7Sopenharmony_ci "" 2147e5c31af7Sopenharmony_ci end 2148e5c31af7Sopenharmony_ci 2149e5c31af7Sopenharmony_ci case type_mismatch_5 2150e5c31af7Sopenharmony_ci version 310 es 2151e5c31af7Sopenharmony_ci desc "uniform type mismatch between vertex and tessellation control shaders" 2152e5c31af7Sopenharmony_ci expect link_fail 2153e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 2154e5c31af7Sopenharmony_ci require limit "GL_MAX_VERTEX_IMAGE_UNIFORMS" > 0 2155e5c31af7Sopenharmony_ci vertex "" 2156e5c31af7Sopenharmony_ci #version 310 es 2157e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2158e5c31af7Sopenharmony_ci layout(binding=0) layout(rgba8i) uniform readonly highp iimage2D u_var; 2159e5c31af7Sopenharmony_ci out mediump float vtx_out; 2160e5c31af7Sopenharmony_ci void main() 2161e5c31af7Sopenharmony_ci { 2162e5c31af7Sopenharmony_ci int result = imageSize(u_var).x; 2163e5c31af7Sopenharmony_ci vtx_out = float(result); 2164e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2165e5c31af7Sopenharmony_ci } 2166e5c31af7Sopenharmony_ci "" 2167e5c31af7Sopenharmony_ci tessellation_control "" 2168e5c31af7Sopenharmony_ci #version 310 es 2169e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 2170e5c31af7Sopenharmony_ci uniform mediump float u_var; 2171e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 2172e5c31af7Sopenharmony_ci out mediump float tc_out[]; 2173e5c31af7Sopenharmony_ci void main() 2174e5c31af7Sopenharmony_ci { 2175e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[0] + u_var; 2176e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2177e5c31af7Sopenharmony_ci } 2178e5c31af7Sopenharmony_ci "" 2179e5c31af7Sopenharmony_ci tessellation_evaluation "" 2180e5c31af7Sopenharmony_ci #version 310 es 2181e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 2182e5c31af7Sopenharmony_ci in mediump float tc_out[]; 2183e5c31af7Sopenharmony_ci out mediump float te_out; 2184e5c31af7Sopenharmony_ci void main() 2185e5c31af7Sopenharmony_ci { 2186e5c31af7Sopenharmony_ci te_out = tc_out[2]; 2187e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2188e5c31af7Sopenharmony_ci } 2189e5c31af7Sopenharmony_ci "" 2190e5c31af7Sopenharmony_ci fragment "" 2191e5c31af7Sopenharmony_ci #version 310 es 2192e5c31af7Sopenharmony_ci precision mediump float; 2193e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2194e5c31af7Sopenharmony_ci in mediump float te_out; 2195e5c31af7Sopenharmony_ci void main() 2196e5c31af7Sopenharmony_ci { 2197e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out); 2198e5c31af7Sopenharmony_ci } 2199e5c31af7Sopenharmony_ci "" 2200e5c31af7Sopenharmony_ci end 2201e5c31af7Sopenharmony_ci 2202e5c31af7Sopenharmony_ci case precision_mismatch_1 2203e5c31af7Sopenharmony_ci version 310 es 2204e5c31af7Sopenharmony_ci desc "uniform precision mismatch between tessellation control and eval shaders" 2205e5c31af7Sopenharmony_ci expect link_fail 2206e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 2207e5c31af7Sopenharmony_ci vertex "" 2208e5c31af7Sopenharmony_ci #version 310 es 2209e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2210e5c31af7Sopenharmony_ci out mediump float vtx_out; 2211e5c31af7Sopenharmony_ci void main() 2212e5c31af7Sopenharmony_ci { 2213e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2214e5c31af7Sopenharmony_ci } 2215e5c31af7Sopenharmony_ci "" 2216e5c31af7Sopenharmony_ci tessellation_control "" 2217e5c31af7Sopenharmony_ci #version 310 es 2218e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 2219e5c31af7Sopenharmony_ci uniform mediump vec4 val; 2220e5c31af7Sopenharmony_ci out mediump vec4 tc_out[]; 2221e5c31af7Sopenharmony_ci void main() 2222e5c31af7Sopenharmony_ci { 2223e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = val; 2224e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2225e5c31af7Sopenharmony_ci } 2226e5c31af7Sopenharmony_ci "" 2227e5c31af7Sopenharmony_ci tessellation_evaluation "" 2228e5c31af7Sopenharmony_ci #version 310 es 2229e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 2230e5c31af7Sopenharmony_ci uniform highp vec4 val; 2231e5c31af7Sopenharmony_ci in mediump vec4 tc_out[]; 2232e5c31af7Sopenharmony_ci out mediump float te_out; 2233e5c31af7Sopenharmony_ci void main() 2234e5c31af7Sopenharmony_ci { 2235e5c31af7Sopenharmony_ci te_out = tc_out[0].w * val.z; 2236e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2237e5c31af7Sopenharmony_ci } 2238e5c31af7Sopenharmony_ci "" 2239e5c31af7Sopenharmony_ci fragment "" 2240e5c31af7Sopenharmony_ci #version 310 es 2241e5c31af7Sopenharmony_ci precision mediump float; 2242e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2243e5c31af7Sopenharmony_ci in mediump float te_out; 2244e5c31af7Sopenharmony_ci void main() 2245e5c31af7Sopenharmony_ci { 2246e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out); 2247e5c31af7Sopenharmony_ci } 2248e5c31af7Sopenharmony_ci "" 2249e5c31af7Sopenharmony_ci end 2250e5c31af7Sopenharmony_ci 2251e5c31af7Sopenharmony_ci case precision_mismatch_2 2252e5c31af7Sopenharmony_ci version 310 es 2253e5c31af7Sopenharmony_ci desc "uniform precision mismatch between vertex and tessellation control shaders" 2254e5c31af7Sopenharmony_ci expect link_fail 2255e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 2256e5c31af7Sopenharmony_ci vertex "" 2257e5c31af7Sopenharmony_ci #version 310 es 2258e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2259e5c31af7Sopenharmony_ci uniform highp float val; 2260e5c31af7Sopenharmony_ci out mediump float vtx_out; 2261e5c31af7Sopenharmony_ci void main() 2262e5c31af7Sopenharmony_ci { 2263e5c31af7Sopenharmony_ci vtx_out = val; 2264e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2265e5c31af7Sopenharmony_ci } 2266e5c31af7Sopenharmony_ci "" 2267e5c31af7Sopenharmony_ci tessellation_control "" 2268e5c31af7Sopenharmony_ci #version 310 es 2269e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 2270e5c31af7Sopenharmony_ci uniform mediump float val; 2271e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 2272e5c31af7Sopenharmony_ci out mediump float tc_out[]; 2273e5c31af7Sopenharmony_ci void main() 2274e5c31af7Sopenharmony_ci { 2275e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[0] + val; 2276e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2277e5c31af7Sopenharmony_ci } 2278e5c31af7Sopenharmony_ci "" 2279e5c31af7Sopenharmony_ci tessellation_evaluation "" 2280e5c31af7Sopenharmony_ci #version 310 es 2281e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 2282e5c31af7Sopenharmony_ci in mediump float tc_out[]; 2283e5c31af7Sopenharmony_ci out mediump float te_out; 2284e5c31af7Sopenharmony_ci void main() 2285e5c31af7Sopenharmony_ci { 2286e5c31af7Sopenharmony_ci te_out = tc_out[2]; 2287e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2288e5c31af7Sopenharmony_ci } 2289e5c31af7Sopenharmony_ci "" 2290e5c31af7Sopenharmony_ci fragment "" 2291e5c31af7Sopenharmony_ci #version 310 es 2292e5c31af7Sopenharmony_ci precision mediump float; 2293e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2294e5c31af7Sopenharmony_ci in mediump float te_out; 2295e5c31af7Sopenharmony_ci void main() 2296e5c31af7Sopenharmony_ci { 2297e5c31af7Sopenharmony_ci ${FRAG_COLOR} = vec4(te_out); 2298e5c31af7Sopenharmony_ci } 2299e5c31af7Sopenharmony_ci "" 2300e5c31af7Sopenharmony_ci end 2301e5c31af7Sopenharmony_ci 2302e5c31af7Sopenharmony_ci case struct_partial_usage 2303e5c31af7Sopenharmony_ci version 310 es 2304e5c31af7Sopenharmony_ci desc "uniform is partially used in different shader stages" 2305e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 2306e5c31af7Sopenharmony_ci values 2307e5c31af7Sopenharmony_ci { 2308e5c31af7Sopenharmony_ci uniform float val.vtxVal = 1.5; 2309e5c31af7Sopenharmony_ci uniform float val.tcVal = 2.5; 2310e5c31af7Sopenharmony_ci uniform float val.teVal = 6.0; 2311e5c31af7Sopenharmony_ci uniform float val.fragVal = 11.0; 2312e5c31af7Sopenharmony_ci output float out0 = 68.5; 2313e5c31af7Sopenharmony_ci } 2314e5c31af7Sopenharmony_ci vertex "" 2315e5c31af7Sopenharmony_ci #version 310 es 2316e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2317e5c31af7Sopenharmony_ci struct S 2318e5c31af7Sopenharmony_ci { 2319e5c31af7Sopenharmony_ci mediump float vtxVal; 2320e5c31af7Sopenharmony_ci mediump float tcVal; 2321e5c31af7Sopenharmony_ci mediump float teVal; 2322e5c31af7Sopenharmony_ci mediump float fragVal; 2323e5c31af7Sopenharmony_ci }; 2324e5c31af7Sopenharmony_ci uniform S val; 2325e5c31af7Sopenharmony_ci out mediump float vtx_out; 2326e5c31af7Sopenharmony_ci void main() 2327e5c31af7Sopenharmony_ci { 2328e5c31af7Sopenharmony_ci vtx_out = val.vtxVal; 2329e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2330e5c31af7Sopenharmony_ci } 2331e5c31af7Sopenharmony_ci "" 2332e5c31af7Sopenharmony_ci tessellation_control "" 2333e5c31af7Sopenharmony_ci #version 310 es 2334e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 2335e5c31af7Sopenharmony_ci struct S 2336e5c31af7Sopenharmony_ci { 2337e5c31af7Sopenharmony_ci mediump float vtxVal; 2338e5c31af7Sopenharmony_ci mediump float tcVal; 2339e5c31af7Sopenharmony_ci mediump float teVal; 2340e5c31af7Sopenharmony_ci mediump float fragVal; 2341e5c31af7Sopenharmony_ci }; 2342e5c31af7Sopenharmony_ci uniform S val; 2343e5c31af7Sopenharmony_ci in mediump float vtx_out[]; 2344e5c31af7Sopenharmony_ci out mediump float tc_out[]; 2345e5c31af7Sopenharmony_ci void main() 2346e5c31af7Sopenharmony_ci { 2347e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = vtx_out[0] + 2.0 * val.tcVal; 2348e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2349e5c31af7Sopenharmony_ci } 2350e5c31af7Sopenharmony_ci "" 2351e5c31af7Sopenharmony_ci tessellation_evaluation "" 2352e5c31af7Sopenharmony_ci #version 310 es 2353e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 2354e5c31af7Sopenharmony_ci struct S 2355e5c31af7Sopenharmony_ci { 2356e5c31af7Sopenharmony_ci mediump float vtxVal; 2357e5c31af7Sopenharmony_ci mediump float tcVal; 2358e5c31af7Sopenharmony_ci mediump float teVal; 2359e5c31af7Sopenharmony_ci mediump float fragVal; 2360e5c31af7Sopenharmony_ci }; 2361e5c31af7Sopenharmony_ci uniform S val; 2362e5c31af7Sopenharmony_ci in mediump float tc_out[]; 2363e5c31af7Sopenharmony_ci out mediump float te_out; 2364e5c31af7Sopenharmony_ci void main() 2365e5c31af7Sopenharmony_ci { 2366e5c31af7Sopenharmony_ci te_out = tc_out[2] + 3.0 * val.teVal; 2367e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2368e5c31af7Sopenharmony_ci } 2369e5c31af7Sopenharmony_ci "" 2370e5c31af7Sopenharmony_ci fragment "" 2371e5c31af7Sopenharmony_ci #version 310 es 2372e5c31af7Sopenharmony_ci precision mediump float; 2373e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2374e5c31af7Sopenharmony_ci struct S 2375e5c31af7Sopenharmony_ci { 2376e5c31af7Sopenharmony_ci mediump float vtxVal; 2377e5c31af7Sopenharmony_ci mediump float tcVal; 2378e5c31af7Sopenharmony_ci mediump float teVal; 2379e5c31af7Sopenharmony_ci mediump float fragVal; 2380e5c31af7Sopenharmony_ci }; 2381e5c31af7Sopenharmony_ci uniform S val; 2382e5c31af7Sopenharmony_ci in mediump float te_out; 2383e5c31af7Sopenharmony_ci void main() 2384e5c31af7Sopenharmony_ci { 2385e5c31af7Sopenharmony_ci out0 = te_out + 4.0 * val.fragVal; 2386e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT}; 2387e5c31af7Sopenharmony_ci } 2388e5c31af7Sopenharmony_ci "" 2389e5c31af7Sopenharmony_ci end 2390e5c31af7Sopenharmony_ci end 2391e5c31af7Sopenharmony_ci 2392e5c31af7Sopenharmony_ci import "linkage_tessellation_uniform_types.test" 2393e5c31af7Sopenharmony_ciend 2394e5c31af7Sopenharmony_ci 2395e5c31af7Sopenharmony_cigroup layout_declarations "Layout linkage" 2396e5c31af7Sopenharmony_ci group rules "Rules" 2397e5c31af7Sopenharmony_ci 2398e5c31af7Sopenharmony_ci case primitive_mode_mismatch 2399e5c31af7Sopenharmony_ci version 310 es 2400e5c31af7Sopenharmony_ci desc "Tessellation evaluation shader primitive mode mismatch" 2401e5c31af7Sopenharmony_ci expect compile_or_link_fail 2402e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 2403e5c31af7Sopenharmony_ci values 2404e5c31af7Sopenharmony_ci { 2405e5c31af7Sopenharmony_ci input float in0 = 1.0; 2406e5c31af7Sopenharmony_ci output float out0 = 1.0; 2407e5c31af7Sopenharmony_ci } 2408e5c31af7Sopenharmony_ci vertex "" 2409e5c31af7Sopenharmony_ci #version 310 es 2410e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2411e5c31af7Sopenharmony_ci out mediump float tc_in; 2412e5c31af7Sopenharmony_ci void main() 2413e5c31af7Sopenharmony_ci { 2414e5c31af7Sopenharmony_ci tc_in = in0; 2415e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2416e5c31af7Sopenharmony_ci } 2417e5c31af7Sopenharmony_ci "" 2418e5c31af7Sopenharmony_ci tessellation_control "" 2419e5c31af7Sopenharmony_ci #version 310 es 2420e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 2421e5c31af7Sopenharmony_ci in mediump float tc_in[]; 2422e5c31af7Sopenharmony_ci out mediump float tc_out[]; 2423e5c31af7Sopenharmony_ci void main() 2424e5c31af7Sopenharmony_ci { 2425e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 2426e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2427e5c31af7Sopenharmony_ci } 2428e5c31af7Sopenharmony_ci "" 2429e5c31af7Sopenharmony_ci tessellation_evaluation "" 2430e5c31af7Sopenharmony_ci #version 310 es 2431e5c31af7Sopenharmony_ci layout (triangles) in; 2432e5c31af7Sopenharmony_ci layout (isolines) in; 2433e5c31af7Sopenharmony_ci in mediump float tc_out[]; 2434e5c31af7Sopenharmony_ci out mediump float te_out; 2435e5c31af7Sopenharmony_ci void main() 2436e5c31af7Sopenharmony_ci { 2437e5c31af7Sopenharmony_ci te_out = tc_out[2]; 2438e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2439e5c31af7Sopenharmony_ci } 2440e5c31af7Sopenharmony_ci "" 2441e5c31af7Sopenharmony_ci fragment "" 2442e5c31af7Sopenharmony_ci #version 310 es 2443e5c31af7Sopenharmony_ci precision mediump float; 2444e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2445e5c31af7Sopenharmony_ci in mediump float te_out; 2446e5c31af7Sopenharmony_ci void main() 2447e5c31af7Sopenharmony_ci { 2448e5c31af7Sopenharmony_ci out0 = te_out; 2449e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2450e5c31af7Sopenharmony_ci } 2451e5c31af7Sopenharmony_ci "" 2452e5c31af7Sopenharmony_ci end 2453e5c31af7Sopenharmony_ci 2454e5c31af7Sopenharmony_ci case spacing_mode_mismatch 2455e5c31af7Sopenharmony_ci version 310 es 2456e5c31af7Sopenharmony_ci desc "Tessellation evaluation shader spacing mode mismatch" 2457e5c31af7Sopenharmony_ci expect compile_or_link_fail 2458e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 2459e5c31af7Sopenharmony_ci values 2460e5c31af7Sopenharmony_ci { 2461e5c31af7Sopenharmony_ci input float in0 = 1.0; 2462e5c31af7Sopenharmony_ci output float out0 = 1.0; 2463e5c31af7Sopenharmony_ci } 2464e5c31af7Sopenharmony_ci vertex "" 2465e5c31af7Sopenharmony_ci #version 310 es 2466e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2467e5c31af7Sopenharmony_ci out mediump float tc_in; 2468e5c31af7Sopenharmony_ci void main() 2469e5c31af7Sopenharmony_ci { 2470e5c31af7Sopenharmony_ci tc_in = in0; 2471e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2472e5c31af7Sopenharmony_ci } 2473e5c31af7Sopenharmony_ci "" 2474e5c31af7Sopenharmony_ci tessellation_control "" 2475e5c31af7Sopenharmony_ci #version 310 es 2476e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 2477e5c31af7Sopenharmony_ci in mediump float tc_in[]; 2478e5c31af7Sopenharmony_ci out mediump float tc_out[]; 2479e5c31af7Sopenharmony_ci void main() 2480e5c31af7Sopenharmony_ci { 2481e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 2482e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2483e5c31af7Sopenharmony_ci } 2484e5c31af7Sopenharmony_ci "" 2485e5c31af7Sopenharmony_ci tessellation_evaluation "" 2486e5c31af7Sopenharmony_ci #version 310 es 2487e5c31af7Sopenharmony_ci layout (triangles, equal_spacing) in; 2488e5c31af7Sopenharmony_ci layout (triangles, fractional_odd_spacing) in; 2489e5c31af7Sopenharmony_ci in mediump float tc_out[]; 2490e5c31af7Sopenharmony_ci out mediump float te_out; 2491e5c31af7Sopenharmony_ci void main() 2492e5c31af7Sopenharmony_ci { 2493e5c31af7Sopenharmony_ci te_out = tc_out[2]; 2494e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2495e5c31af7Sopenharmony_ci } 2496e5c31af7Sopenharmony_ci "" 2497e5c31af7Sopenharmony_ci fragment "" 2498e5c31af7Sopenharmony_ci #version 310 es 2499e5c31af7Sopenharmony_ci precision mediump float; 2500e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2501e5c31af7Sopenharmony_ci in mediump float te_out; 2502e5c31af7Sopenharmony_ci void main() 2503e5c31af7Sopenharmony_ci { 2504e5c31af7Sopenharmony_ci out0 = te_out; 2505e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2506e5c31af7Sopenharmony_ci } 2507e5c31af7Sopenharmony_ci "" 2508e5c31af7Sopenharmony_ci end 2509e5c31af7Sopenharmony_ci 2510e5c31af7Sopenharmony_ci case vertex_order_mismatch 2511e5c31af7Sopenharmony_ci version 310 es 2512e5c31af7Sopenharmony_ci desc "Tessellation evaluation shader vertex order mismatch" 2513e5c31af7Sopenharmony_ci expect compile_or_link_fail 2514e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 2515e5c31af7Sopenharmony_ci values 2516e5c31af7Sopenharmony_ci { 2517e5c31af7Sopenharmony_ci input float in0 = 1.0; 2518e5c31af7Sopenharmony_ci output float out0 = 1.0; 2519e5c31af7Sopenharmony_ci } 2520e5c31af7Sopenharmony_ci vertex "" 2521e5c31af7Sopenharmony_ci #version 310 es 2522e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2523e5c31af7Sopenharmony_ci out mediump float tc_in; 2524e5c31af7Sopenharmony_ci void main() 2525e5c31af7Sopenharmony_ci { 2526e5c31af7Sopenharmony_ci tc_in = in0; 2527e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2528e5c31af7Sopenharmony_ci } 2529e5c31af7Sopenharmony_ci "" 2530e5c31af7Sopenharmony_ci tessellation_control "" 2531e5c31af7Sopenharmony_ci #version 310 es 2532e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 2533e5c31af7Sopenharmony_ci in mediump float tc_in[]; 2534e5c31af7Sopenharmony_ci out mediump float tc_out[]; 2535e5c31af7Sopenharmony_ci void main() 2536e5c31af7Sopenharmony_ci { 2537e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 2538e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2539e5c31af7Sopenharmony_ci } 2540e5c31af7Sopenharmony_ci "" 2541e5c31af7Sopenharmony_ci tessellation_evaluation "" 2542e5c31af7Sopenharmony_ci #version 310 es 2543e5c31af7Sopenharmony_ci layout (triangles, cw) in; 2544e5c31af7Sopenharmony_ci layout (triangles, ccw) in; 2545e5c31af7Sopenharmony_ci in mediump float tc_out[]; 2546e5c31af7Sopenharmony_ci out mediump float te_out; 2547e5c31af7Sopenharmony_ci void main() 2548e5c31af7Sopenharmony_ci { 2549e5c31af7Sopenharmony_ci te_out = tc_out[2]; 2550e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2551e5c31af7Sopenharmony_ci } 2552e5c31af7Sopenharmony_ci "" 2553e5c31af7Sopenharmony_ci fragment "" 2554e5c31af7Sopenharmony_ci #version 310 es 2555e5c31af7Sopenharmony_ci precision mediump float; 2556e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2557e5c31af7Sopenharmony_ci in mediump float te_out; 2558e5c31af7Sopenharmony_ci void main() 2559e5c31af7Sopenharmony_ci { 2560e5c31af7Sopenharmony_ci out0 = te_out; 2561e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2562e5c31af7Sopenharmony_ci } 2563e5c31af7Sopenharmony_ci "" 2564e5c31af7Sopenharmony_ci end 2565e5c31af7Sopenharmony_ci 2566e5c31af7Sopenharmony_ci case vertex_count_mismatch 2567e5c31af7Sopenharmony_ci version 310 es 2568e5c31af7Sopenharmony_ci desc "Tessellation control shader vertex count mismatch" 2569e5c31af7Sopenharmony_ci expect compile_or_link_fail 2570e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 2571e5c31af7Sopenharmony_ci values 2572e5c31af7Sopenharmony_ci { 2573e5c31af7Sopenharmony_ci input float in0 = 1.0; 2574e5c31af7Sopenharmony_ci output float out0 = 1.0; 2575e5c31af7Sopenharmony_ci } 2576e5c31af7Sopenharmony_ci vertex "" 2577e5c31af7Sopenharmony_ci #version 310 es 2578e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2579e5c31af7Sopenharmony_ci out mediump float tc_in; 2580e5c31af7Sopenharmony_ci void main() 2581e5c31af7Sopenharmony_ci { 2582e5c31af7Sopenharmony_ci tc_in = in0; 2583e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2584e5c31af7Sopenharmony_ci } 2585e5c31af7Sopenharmony_ci "" 2586e5c31af7Sopenharmony_ci tessellation_control "" 2587e5c31af7Sopenharmony_ci #version 310 es 2588e5c31af7Sopenharmony_ci layout (vertices=3) out; 2589e5c31af7Sopenharmony_ci layout (vertices=4) out; 2590e5c31af7Sopenharmony_ci in mediump float tc_in[]; 2591e5c31af7Sopenharmony_ci out mediump float tc_out[]; 2592e5c31af7Sopenharmony_ci void main() 2593e5c31af7Sopenharmony_ci { 2594e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 2595e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2596e5c31af7Sopenharmony_ci } 2597e5c31af7Sopenharmony_ci "" 2598e5c31af7Sopenharmony_ci tessellation_evaluation "" 2599e5c31af7Sopenharmony_ci #version 310 es 2600e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 2601e5c31af7Sopenharmony_ci in mediump float tc_out[]; 2602e5c31af7Sopenharmony_ci out mediump float te_out; 2603e5c31af7Sopenharmony_ci void main() 2604e5c31af7Sopenharmony_ci { 2605e5c31af7Sopenharmony_ci te_out = tc_out[2]; 2606e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2607e5c31af7Sopenharmony_ci } 2608e5c31af7Sopenharmony_ci "" 2609e5c31af7Sopenharmony_ci fragment "" 2610e5c31af7Sopenharmony_ci #version 310 es 2611e5c31af7Sopenharmony_ci precision mediump float; 2612e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2613e5c31af7Sopenharmony_ci in mediump float te_out; 2614e5c31af7Sopenharmony_ci void main() 2615e5c31af7Sopenharmony_ci { 2616e5c31af7Sopenharmony_ci out0 = te_out; 2617e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2618e5c31af7Sopenharmony_ci } 2619e5c31af7Sopenharmony_ci "" 2620e5c31af7Sopenharmony_ci end 2621e5c31af7Sopenharmony_ci end 2622e5c31af7Sopenharmony_ciend 2623e5c31af7Sopenharmony_ci 2624e5c31af7Sopenharmony_cigroup barriers "Barriers" 2625e5c31af7Sopenharmony_ci group rules "Rules" 2626e5c31af7Sopenharmony_ci 2627e5c31af7Sopenharmony_ci case invalid_barrier_usage_within_control_flow 2628e5c31af7Sopenharmony_ci version 310 es 2629e5c31af7Sopenharmony_ci desc "Tessellation control shader invalid barrier usage within control flow statement" 2630e5c31af7Sopenharmony_ci expect compile_or_link_fail 2631e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 2632e5c31af7Sopenharmony_ci values 2633e5c31af7Sopenharmony_ci { 2634e5c31af7Sopenharmony_ci input float in0 = 1.0; 2635e5c31af7Sopenharmony_ci output float out0 = 1.0; 2636e5c31af7Sopenharmony_ci } 2637e5c31af7Sopenharmony_ci vertex "" 2638e5c31af7Sopenharmony_ci #version 310 es 2639e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2640e5c31af7Sopenharmony_ci out mediump float tc_in; 2641e5c31af7Sopenharmony_ci void main() 2642e5c31af7Sopenharmony_ci { 2643e5c31af7Sopenharmony_ci tc_in = in0; 2644e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2645e5c31af7Sopenharmony_ci } 2646e5c31af7Sopenharmony_ci "" 2647e5c31af7Sopenharmony_ci tessellation_control "" 2648e5c31af7Sopenharmony_ci #version 310 es 2649e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 2650e5c31af7Sopenharmony_ci in mediump float tc_in[]; 2651e5c31af7Sopenharmony_ci out mediump float tc_out[]; 2652e5c31af7Sopenharmony_ci 2653e5c31af7Sopenharmony_ci void main() 2654e5c31af7Sopenharmony_ci { 2655e5c31af7Sopenharmony_ci if (gl_InvocationID == 0) 2656e5c31af7Sopenharmony_ci barrier(); // error: within control flow 2657e5c31af7Sopenharmony_ci 2658e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 2659e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2660e5c31af7Sopenharmony_ci } 2661e5c31af7Sopenharmony_ci "" 2662e5c31af7Sopenharmony_ci tessellation_evaluation "" 2663e5c31af7Sopenharmony_ci #version 310 es 2664e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 2665e5c31af7Sopenharmony_ci in mediump float tc_out[]; 2666e5c31af7Sopenharmony_ci out mediump float te_out; 2667e5c31af7Sopenharmony_ci void main() 2668e5c31af7Sopenharmony_ci { 2669e5c31af7Sopenharmony_ci te_out = tc_out[2]; 2670e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2671e5c31af7Sopenharmony_ci } 2672e5c31af7Sopenharmony_ci "" 2673e5c31af7Sopenharmony_ci fragment "" 2674e5c31af7Sopenharmony_ci #version 310 es 2675e5c31af7Sopenharmony_ci precision mediump float; 2676e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2677e5c31af7Sopenharmony_ci in mediump float te_out; 2678e5c31af7Sopenharmony_ci void main() 2679e5c31af7Sopenharmony_ci { 2680e5c31af7Sopenharmony_ci out0 = te_out; 2681e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2682e5c31af7Sopenharmony_ci } 2683e5c31af7Sopenharmony_ci "" 2684e5c31af7Sopenharmony_ci end 2685e5c31af7Sopenharmony_ci 2686e5c31af7Sopenharmony_ci case invalid_barrier_usage_after_return 2687e5c31af7Sopenharmony_ci version 310 es 2688e5c31af7Sopenharmony_ci desc "Tessellation control shader invalid barrier usage after main() returns" 2689e5c31af7Sopenharmony_ci expect compile_or_link_fail 2690e5c31af7Sopenharmony_ci require extension { "GL_OES_tessellation_shader" | "GL_EXT_tessellation_shader" } in { tessellation_control, tessellation_evaluation } 2691e5c31af7Sopenharmony_ci values 2692e5c31af7Sopenharmony_ci { 2693e5c31af7Sopenharmony_ci input float in0 = 1.0; 2694e5c31af7Sopenharmony_ci output float out0 = 1.0; 2695e5c31af7Sopenharmony_ci } 2696e5c31af7Sopenharmony_ci vertex "" 2697e5c31af7Sopenharmony_ci #version 310 es 2698e5c31af7Sopenharmony_ci ${VERTEX_DECLARATIONS} 2699e5c31af7Sopenharmony_ci out mediump float tc_in; 2700e5c31af7Sopenharmony_ci void main() 2701e5c31af7Sopenharmony_ci { 2702e5c31af7Sopenharmony_ci tc_in = in0; 2703e5c31af7Sopenharmony_ci ${VERTEX_OUTPUT} 2704e5c31af7Sopenharmony_ci } 2705e5c31af7Sopenharmony_ci "" 2706e5c31af7Sopenharmony_ci tessellation_control "" 2707e5c31af7Sopenharmony_ci #version 310 es 2708e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_DECLARATIONS} 2709e5c31af7Sopenharmony_ci in mediump float tc_in[]; 2710e5c31af7Sopenharmony_ci out mediump float tc_out[]; 2711e5c31af7Sopenharmony_ci 2712e5c31af7Sopenharmony_ci void main() 2713e5c31af7Sopenharmony_ci { 2714e5c31af7Sopenharmony_ci tc_out[gl_InvocationID] = tc_in[gl_InvocationID]; 2715e5c31af7Sopenharmony_ci ${TESSELLATION_CONTROL_OUTPUT} 2716e5c31af7Sopenharmony_ci 2717e5c31af7Sopenharmony_ci return; 2718e5c31af7Sopenharmony_ci barrier(); // error: barrier() after return 2719e5c31af7Sopenharmony_ci } 2720e5c31af7Sopenharmony_ci "" 2721e5c31af7Sopenharmony_ci tessellation_evaluation "" 2722e5c31af7Sopenharmony_ci #version 310 es 2723e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_DECLARATIONS} 2724e5c31af7Sopenharmony_ci in mediump float tc_out[]; 2725e5c31af7Sopenharmony_ci out mediump float te_out; 2726e5c31af7Sopenharmony_ci void main() 2727e5c31af7Sopenharmony_ci { 2728e5c31af7Sopenharmony_ci te_out = tc_out[2]; 2729e5c31af7Sopenharmony_ci ${TESSELLATION_EVALUATION_OUTPUT} 2730e5c31af7Sopenharmony_ci } 2731e5c31af7Sopenharmony_ci "" 2732e5c31af7Sopenharmony_ci fragment "" 2733e5c31af7Sopenharmony_ci #version 310 es 2734e5c31af7Sopenharmony_ci precision mediump float; 2735e5c31af7Sopenharmony_ci ${FRAGMENT_DECLARATIONS} 2736e5c31af7Sopenharmony_ci in mediump float te_out; 2737e5c31af7Sopenharmony_ci void main() 2738e5c31af7Sopenharmony_ci { 2739e5c31af7Sopenharmony_ci out0 = te_out; 2740e5c31af7Sopenharmony_ci ${FRAGMENT_OUTPUT} 2741e5c31af7Sopenharmony_ci } 2742e5c31af7Sopenharmony_ci "" 2743e5c31af7Sopenharmony_ci end 2744e5c31af7Sopenharmony_ci end 2745e5c31af7Sopenharmony_ciend 2746