1 2 case mismatch_number_of_declarations 3 version 310 es 4 desc "Shader storage block mismatch: different number of declarations" 5 require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0 6 require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0 7 expect link_fail 8 vertex "" 9 #version 310 es 10 ${VERTEX_DECLARATIONS} 11 layout(binding=0) buffer BufferBlockName 12 { 13 mediump float variable1; 14 }; 15 16 out mediump float vtx_val; 17 void main() 18 { 19 vtx_val = variable1; 20 ${VERTEX_OUTPUT} 21 } 22 "" 23 fragment "" 24 #version 310 es 25 precision mediump float; 26 ${FRAGMENT_DECLARATIONS} 27 layout(binding=0) buffer BufferBlockName 28 { 29 mediump float variable1; 30 mediump float variable2; 31 }; 32 33 in mediump float vtx_val; 34 void main() 35 { 36 ${FRAG_COLOR} = vec4(vtx_val + variable1 + variable2); 37 } 38 "" 39 end 40 41 case mismatch_order 42 version 310 es 43 desc "Shader storage block mismatch: different number of declarations" 44 require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0 45 require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0 46 expect link_fail 47 vertex "" 48 #version 310 es 49 ${VERTEX_DECLARATIONS} 50 layout(binding=0) buffer BufferBlockName 51 { 52 mediump float variable1; 53 mediump float variable2; 54 }; 55 56 out mediump float vtx_val; 57 void main() 58 { 59 vtx_val = variable1 + variable2; 60 ${VERTEX_OUTPUT} 61 } 62 "" 63 fragment "" 64 #version 310 es 65 precision mediump float; 66 ${FRAGMENT_DECLARATIONS} 67 layout(binding=0) buffer BufferBlockName 68 { 69 mediump float variable2; 70 mediump float variable1; 71 }; 72 73 in mediump float vtx_val; 74 void main() 75 { 76 ${FRAG_COLOR} = vec4(vtx_val + variable1 + variable2); 77 } 78 "" 79 end 80 81 case mismatch_type 82 version 310 es 83 desc "Shader storage block mismatch: different number of declarations" 84 require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0 85 require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0 86 expect link_fail 87 vertex "" 88 #version 310 es 89 ${VERTEX_DECLARATIONS} 90 layout(binding=0) buffer BufferBlockName 91 { 92 mediump vec2 variable; 93 }; 94 95 out mediump float vtx_val; 96 void main() 97 { 98 vtx_val = variable.y; 99 ${VERTEX_OUTPUT} 100 } 101 "" 102 fragment "" 103 #version 310 es 104 precision mediump float; 105 ${FRAGMENT_DECLARATIONS} 106 layout(binding=0) buffer BufferBlockName 107 { 108 mediump float variable; 109 }; 110 111 in mediump float vtx_val; 112 void main() 113 { 114 ${FRAG_COLOR} = vec4(vtx_val + variable); 115 } 116 "" 117 end 118 119 case mismatch_member_name 120 version 310 es 121 desc "Shader storage block mismatch: different number of declarations" 122 require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0 123 require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0 124 expect link_fail 125 vertex "" 126 #version 310 es 127 ${VERTEX_DECLARATIONS} 128 layout(binding=0) buffer BufferBlockName 129 { 130 mediump float variable1; 131 }; 132 133 out mediump float vtx_val; 134 void main() 135 { 136 vtx_val = variable1; 137 ${VERTEX_OUTPUT} 138 } 139 "" 140 fragment "" 141 #version 310 es 142 precision mediump float; 143 ${FRAGMENT_DECLARATIONS} 144 layout(binding=0) buffer BufferBlockName 145 { 146 mediump float variable2; 147 }; 148 149 in mediump float vtx_val; 150 void main() 151 { 152 ${FRAG_COLOR} = vec4(vtx_val + variable2); 153 } 154 "" 155 end 156 157 case mismatch_member_unsized_sized_array 158 version 310 es 159 desc "Shader storage block mismatch: different number of declarations" 160 require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0 161 require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0 162 expect link_fail 163 vertex "" 164 #version 310 es 165 ${VERTEX_DECLARATIONS} 166 layout(binding=0) buffer BufferBlockName 167 { 168 mediump float variable[]; 169 }; 170 171 out mediump float vtx_val; 172 void main() 173 { 174 vtx_val = variable[0]; 175 ${VERTEX_OUTPUT} 176 } 177 "" 178 fragment "" 179 #version 310 es 180 precision mediump float; 181 ${FRAGMENT_DECLARATIONS} 182 layout(binding=0) buffer BufferBlockName 183 { 184 mediump float variable[1]; 185 }; 186 187 in mediump float vtx_val; 188 void main() 189 { 190 ${FRAG_COLOR} = vec4(vtx_val + variable[0]); 191 } 192 "" 193 end 194 195 case mismatch_member_array_size 196 version 310 es 197 desc "Shader storage block mismatch: different number of declarations" 198 require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0 199 require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0 200 expect link_fail 201 vertex "" 202 #version 310 es 203 ${VERTEX_DECLARATIONS} 204 layout(binding=0) buffer BufferBlockName 205 { 206 mediump float variable[1]; 207 }; 208 209 out mediump float vtx_val; 210 void main() 211 { 212 vtx_val = variable[0]; 213 ${VERTEX_OUTPUT} 214 } 215 "" 216 fragment "" 217 #version 310 es 218 precision mediump float; 219 ${FRAGMENT_DECLARATIONS} 220 layout(binding=0) buffer BufferBlockName 221 { 222 mediump float variable[2]; 223 }; 224 225 in mediump float vtx_val; 226 void main() 227 { 228 ${FRAG_COLOR} = vec4(vtx_val + variable[0]); 229 } 230 "" 231 end 232 233 case mismatch_with_and_without_instance_name 234 version 310 es 235 desc "Shader storage block mismatch: different number of declarations" 236 require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0 237 require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0 238 expect link_fail 239 vertex "" 240 #version 310 es 241 ${VERTEX_DECLARATIONS} 242 layout(binding=0) buffer BufferBlockName 243 { 244 mediump float variable; 245 } instanceName; 246 247 out mediump float vtx_val; 248 void main() 249 { 250 vtx_val = instanceName.variable; 251 ${VERTEX_OUTPUT} 252 } 253 "" 254 fragment "" 255 #version 310 es 256 precision mediump float; 257 ${FRAGMENT_DECLARATIONS} 258 layout(binding=0) buffer BufferBlockName 259 { 260 mediump float variable; 261 }; 262 263 in mediump float vtx_val; 264 void main() 265 { 266 ${FRAG_COLOR} = vec4(vtx_val + variable); 267 } 268 "" 269 end 270 271 case mismatch_block_array_size 272 version 310 es 273 desc "Shader storage block mismatch: different number of declarations" 274 require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0 275 require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0 276 expect link_fail 277 vertex "" 278 #version 310 es 279 ${VERTEX_DECLARATIONS} 280 layout(binding=0) buffer BufferBlockName 281 { 282 mediump float variable; 283 } instanceName[1]; 284 285 out mediump float vtx_val; 286 void main() 287 { 288 vtx_val = instanceName[0].variable; 289 ${VERTEX_OUTPUT} 290 } 291 "" 292 fragment "" 293 #version 310 es 294 precision mediump float; 295 ${FRAGMENT_DECLARATIONS} 296 layout(binding=0) buffer BufferBlockName 297 { 298 mediump float variable; 299 } instanceName[2]; 300 301 in mediump float vtx_val; 302 void main() 303 { 304 ${FRAG_COLOR} = vec4(vtx_val + instanceName[0].variable + instanceName[1].variable); 305 } 306 "" 307 end 308 309 case ambiguous_variable_name_1 310 version 310 es 311 desc "Unnamed shader storage block variable and global variable with identical names" 312 require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0 313 expect compile_or_link_fail 314 vertex "" 315 #version 310 es 316 ${VERTEX_DECLARATIONS} 317 float variable; 318 layout(binding=0) buffer BufferBlockName 319 { 320 mediump float variable; 321 }; 322 323 out mediump float vtx_val; 324 void main() 325 { 326 vtx_val = variable; 327 ${VERTEX_OUTPUT} 328 } 329 "" 330 fragment "" 331 #version 310 es 332 precision mediump float; 333 ${FRAGMENT_DECLARATIONS} 334 in mediump float vtx_val; 335 void main() 336 { 337 ${FRAG_COLOR} = vec4(vtx_val); 338 } 339 "" 340 end 341 342 case ambiguous_variable_name_2 343 version 310 es 344 desc "Two unnamed shader storage blocks with variables with identical names" 345 require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 1 346 expect compile_or_link_fail 347 vertex "" 348 #version 310 es 349 ${VERTEX_DECLARATIONS} 350 layout(binding=0) buffer BufferBlockNameA 351 { 352 mediump float variable; 353 }; 354 layout(binding=1) buffer BufferBlockNameB 355 { 356 mediump float variable; 357 }; 358 359 out mediump float vtx_val; 360 void main() 361 { 362 vtx_val = variable; 363 ${VERTEX_OUTPUT} 364 } 365 "" 366 fragment "" 367 #version 310 es 368 precision mediump float; 369 ${FRAGMENT_DECLARATIONS} 370 in mediump float vtx_val; 371 void main() 372 { 373 ${FRAG_COLOR} = vec4(vtx_val); 374 } 375 "" 376 end 377 378 case ambiguous_variable_name_3 379 version 310 es 380 desc "Two unnamed shader storage blocks in different stages with variables with identical names" 381 require limit "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" > 0 382 require limit "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" > 0 383 # language to make link error explicitly defined. ("Within an interface, ...") 384 require extension { "GL_OES_shader_io_blocks" | "GL_EXT_shader_io_blocks" } in { vertex, fragment } 385 expect link_fail 386 vertex "" 387 #version 310 es 388 ${VERTEX_DECLARATIONS} 389 layout(binding=0) buffer BufferBlockNameA 390 { 391 mediump float variable; 392 }; 393 394 out mediump float vtx_val; 395 void main() 396 { 397 vtx_val = variable; 398 ${VERTEX_OUTPUT} 399 } 400 "" 401 fragment "" 402 #version 310 es 403 precision mediump float; 404 ${FRAGMENT_DECLARATIONS} 405 layout(binding=1) buffer BufferBlockNameB 406 { 407 mediump float variable; 408 }; 409 410 in mediump float vtx_val; 411 void main() 412 { 413 ${FRAG_COLOR} = vec4(vtx_val + variable); 414 } 415 "" 416 end 417