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