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