1# ------------------------------------------------- 2# drawElements Quality Program OpenGL ES 3.2 Module 3# ------------------------------------------------- 4# 5# Copyright 2016 The Android Open Source Project 6# 7# Licensed under the Apache License, Version 2.0 (the "License"); 8# you may not use this file except in compliance with the License. 9# You may obtain a copy of the License at 10# 11# http://www.apache.org/licenses/LICENSE-2.0 12# 13# Unless required by applicable law or agreed to in writing, software 14# distributed under the License is distributed on an "AS IS" BASIS, 15# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16# See the License for the specific language governing permissions and 17# limitations under the License. 18 19 20case mismatch_number_of_declarations 21 version 320 es 22 desc "Shader io block mismatch: different number of declarations" 23 expect link_fail 24 vertex "" 25 #version 320 es 26 ${VERTEX_DECLARATIONS} 27 out IOBlockName 28 { 29 mediump float variable1; 30 }; 31 32 void main() 33 { 34 variable1 = float(gl_VertexID); 35 ${VERTEX_OUTPUT} 36 } 37 "" 38 fragment "" 39 #version 320 es 40 precision mediump float; 41 ${FRAGMENT_DECLARATIONS} 42 in IOBlockName 43 { 44 mediump float variable1; 45 mediump float variable2; 46 }; 47 48 void main() 49 { 50 ${FRAG_COLOR} = vec4(variable1 + variable2); 51 } 52 "" 53end 54 55case mismatch_order 56 version 320 es 57 desc "Shader io block mismatch: different member declaration order" 58 expect link_fail 59 vertex "" 60 #version 320 es 61 ${VERTEX_DECLARATIONS} 62 out IOBlockName 63 { 64 mediump float variable1; 65 mediump float variable2; 66 }; 67 68 void main() 69 { 70 variable1 = float(gl_VertexID); 71 ${VERTEX_OUTPUT} 72 } 73 "" 74 fragment "" 75 #version 320 es 76 precision mediump float; 77 ${FRAGMENT_DECLARATIONS} 78 in IOBlockName 79 { 80 mediump float variable2; 81 mediump float variable1; 82 }; 83 84 void main() 85 { 86 ${FRAG_COLOR} = vec4(variable1 + variable2); 87 } 88 "" 89end 90 91case mismatch_type 92 version 320 es 93 desc "Shader io block mismatch: different member type" 94 expect link_fail 95 vertex "" 96 #version 320 es 97 ${VERTEX_DECLARATIONS} 98 out IOBlockName 99 { 100 mediump vec2 variable; 101 }; 102 103 void main() 104 { 105 variable.x = float(gl_VertexID); 106 variable.y = float(gl_InstanceID); 107 ${VERTEX_OUTPUT} 108 } 109 "" 110 fragment "" 111 #version 320 es 112 precision mediump float; 113 ${FRAGMENT_DECLARATIONS} 114 in IOBlockName 115 { 116 mediump float variable; 117 }; 118 119 void main() 120 { 121 ${FRAG_COLOR} = vec4(variable); 122 } 123 "" 124end 125 126case mismatch_member_name 127 version 320 es 128 desc "Shader io block mismatch: different member name" 129 expect link_fail 130 vertex "" 131 #version 320 es 132 ${VERTEX_DECLARATIONS} 133 out IOBlockName 134 { 135 mediump float variable1; 136 }; 137 138 void main() 139 { 140 variable1 = float(gl_VertexID); 141 ${VERTEX_OUTPUT} 142 } 143 "" 144 fragment "" 145 #version 320 es 146 precision mediump float; 147 ${FRAGMENT_DECLARATIONS} 148 in IOBlockName 149 { 150 mediump float variable2; 151 }; 152 153 void main() 154 { 155 ${FRAG_COLOR} = vec4(variable2); 156 } 157 "" 158end 159 160case mismatch_member_array_size 161 version 320 es 162 desc "Shader io block mismatch: different member array size" 163 expect link_fail 164 vertex "" 165 #version 320 es 166 ${VERTEX_DECLARATIONS} 167 out IOBlockName 168 { 169 mediump float variable[1]; 170 }; 171 172 void main() 173 { 174 variable[0] = float(gl_VertexID); 175 ${VERTEX_OUTPUT} 176 } 177 "" 178 fragment "" 179 #version 320 es 180 precision mediump float; 181 ${FRAGMENT_DECLARATIONS} 182 in IOBlockName 183 { 184 mediump float variable[2]; 185 }; 186 187 void main() 188 { 189 ${FRAG_COLOR} = vec4(variable[0] + variable[1]); 190 } 191 "" 192end 193 194case with_and_without_instance_name 195 version 320 es 196 desc "Shader io block: with and without instance name" 197 values 198 { 199 input float in0 = 1.0; 200 output float out0 = 1.0; 201 } 202 vertex "" 203 #version 320 es 204 ${VERTEX_DECLARATIONS} 205 out IOBlockName 206 { 207 mediump float variable; 208 } instanceName; 209 210 void main() 211 { 212 instanceName.variable = in0; 213 ${VERTEX_OUTPUT} 214 } 215 "" 216 fragment "" 217 #version 320 es 218 precision mediump float; 219 ${FRAGMENT_DECLARATIONS} 220 in IOBlockName 221 { 222 mediump float variable; 223 }; 224 225 void main() 226 { 227 out0 = variable; 228 ${FRAGMENT_OUTPUT} 229 } 230 "" 231end 232 233case mismatch_block_array_size 234 version 320 es 235 desc "Shader io block mismatch: different array size" 236 expect link_fail 237 vertex "" 238 #version 320 es 239 ${VERTEX_DECLARATIONS} 240 out IOBlockName 241 { 242 mediump float variable; 243 } instanceName[1]; 244 245 void main() 246 { 247 instanceName[0].variable = float(gl_VertexID); 248 ${VERTEX_OUTPUT} 249 } 250 "" 251 fragment "" 252 #version 320 es 253 precision mediump float; 254 ${FRAGMENT_DECLARATIONS} 255 in IOBlockName 256 { 257 mediump float variable; 258 } instanceName[2]; 259 260 void main() 261 { 262 ${FRAG_COLOR} = vec4(instanceName[0].variable + instanceName[1].variable); 263 } 264 "" 265end 266 267case missing_output_block 268 version 320 es 269 desc "Shader io block mismatch: missing output block" 270 expect link_fail 271 vertex "" 272 #version 320 es 273 ${VERTEX_DECLARATIONS} 274 void main() 275 { 276 ${VERTEX_OUTPUT} 277 } 278 "" 279 fragment "" 280 #version 320 es 281 precision mediump float; 282 ${FRAGMENT_DECLARATIONS} 283 in IOBlockName 284 { 285 mediump float variable; 286 }; 287 288 void main() 289 { 290 ${FRAG_COLOR} = vec4(variable); 291 } 292 "" 293end 294 295case ambiguous_variable_name_1 296 version 320 es 297 desc "Unnamed io block variable and global variable with identical names" 298 expect compile_or_link_fail 299 vertex "" 300 #version 320 es 301 ${VERTEX_DECLARATIONS} 302 float variable; 303 out IOBlockName 304 { 305 mediump float variable; 306 }; 307 308 void main() 309 { 310 variable = float(gl_VertexID); 311 ${VERTEX_OUTPUT} 312 } 313 "" 314 fragment "" 315 #version 320 es 316 precision mediump float; 317 ${FRAGMENT_DECLARATIONS} 318 in IOBlockName 319 { 320 mediump float variable; 321 }; 322 323 void main() 324 { 325 ${FRAG_COLOR} = vec4(variable); 326 } 327 "" 328end 329 330case ambiguous_variable_name_2 331 version 320 es 332 desc "Two unnamed io blocks with variables with identical names" 333 expect compile_or_link_fail 334 vertex "" 335 #version 320 es 336 ${VERTEX_DECLARATIONS} 337 out IOBlockNameA 338 { 339 mediump float variable; 340 }; 341 out IOBlockNameB 342 { 343 mediump float variable; 344 }; 345 346 void main() 347 { 348 variable = float(gl_VertexID); 349 ${VERTEX_OUTPUT} 350 } 351 "" 352 fragment "" 353 #version 320 es 354 precision mediump float; 355 ${FRAGMENT_DECLARATIONS} 356 in IOBlockNameA 357 { 358 mediump float variable; 359 }; 360 in IOBlockNameB 361 { 362 mediump float variable; 363 }; 364 365 void main() 366 { 367 ${FRAG_COLOR} = vec4(variable); 368 } 369 "" 370end 371