1case duplicate_location 2 expect compile_or_link_fail 3 version 310 es 4 values { output float out0 = 0.0; } 5 6 both "" 7 #version 310 es 8 precision highp float; 9 layout(location = 0) uniform float uni0; 10 layout(location = 0) uniform float uni1; 11 ${DECLARATIONS} 12 13 void main() 14 { 15 out0 = uni0 + uni1; 16 ${OUTPUT} 17 } 18 "" 19end 20 21case duplicate_location_unused 22 expect compile_or_link_fail 23 version 310 es 24 values { output float out0 = 0.0; } 25 26 both "" 27 #version 310 es 28 precision highp float; 29 layout(location = 0) uniform float uni0; 30 layout(location = 0) uniform float uni1; 31 ${DECLARATIONS} 32 33 void main() 34 { 35 out0 = 0.0; 36 ${OUTPUT} 37 } 38 "" 39end 40 41case duplicate_location_split 42 expect compile_or_link_fail 43 version 310 es 44 values{ output float out0 = 0.0; } 45 46 vertex "" 47 #version 310 es 48 precision highp float; 49 layout(location = 0) uniform float uni0; 50 51 in highp vec4 dEQP_Position; 52 53 void main() 54 { 55 gl_Position = dEQP_Position; 56 } 57 "" 58 59 fragment "" 60 #version 310 es 61 precision highp float; 62 layout(location = 0) uniform float uni1; 63 64 layout(location = 0) out mediump vec4 dEQP_FragColor; 65 66 void main() 67 { 68 dEQP_FragColor = vec4(1); 69 } 70 "" 71end 72 73case array_overlap 74 expect compile_or_link_fail 75 version 310 es 76 values { output float out0 = 0.0; } 77 78 both "" 79 #version 310 es 80 precision highp float; 81 layout(location = 0) uniform float uni0[8]; 82 layout(location = 5) uniform float uni1; 83 ${DECLARATIONS} 84 85 void main() 86 { 87 out0 = uni0[0] + uni1; 88 ${OUTPUT} 89 } 90 "" 91end 92 93case array_overlap_unused 94 expect compile_or_link_fail 95 version 310 es 96 values { output float out0 = 0.0; } 97 98 both "" 99 #version 310 es 100 precision highp float; 101 layout(location = 0) uniform float uni0[8]; 102 layout(location = 5) uniform float uni1; 103 ${DECLARATIONS} 104 105 void main() 106 { 107 out0 = 0.0; 108 ${OUTPUT} 109 } 110 "" 111end 112 113case array_overlap_split 114 expect compile_or_link_fail 115 version 310 es 116 values{ output float out0 = 0.0; } 117 118 vertex "" 119 #version 310 es 120 precision highp float; 121 layout(location = 0) uniform float uni0[8]; 122 123 in highp vec4 dEQP_Position; 124 125 void main() 126 { 127 gl_Position = dEQP_Position; 128 } 129 "" 130 131 fragment "" 132 #version 310 es 133 precision highp float; 134 layout(location = 7) uniform float uni1[4]; 135 136 layout(location = 0) out mediump vec4 dEQP_FragColor; 137 138 void main() 139 { 140 dEQP_FragColor = vec4(1); 141 } 142 "" 143end 144 145case struct_overlap 146 expect compile_or_link_fail 147 version 310 es 148 values { output float out0 = 0.0; } 149 150 both "" 151 #version 310 es 152 precision highp float; 153 154 struct S 155 { 156 vec4 a; 157 int b; 158 mat4 c; 159 }; 160 161 layout(location = 0) uniform S uni0; 162 layout(location = 2) uniform float uni1; 163 ${DECLARATIONS} 164 165 void main() 166 { 167 out0 = uni0.a.x + uni1; 168 ${OUTPUT} 169 } 170 "" 171end 172 173case struct_overlap_unused 174 expect compile_or_link_fail 175 version 310 es 176 values { output float out0 = 0.0; } 177 178 both "" 179 #version 310 es 180 precision highp float; 181 182 struct S 183 { 184 vec4 a; 185 int b; 186 mat4 c; 187 }; 188 189 layout(location = 0) uniform S uni0; 190 layout(location = 2) uniform float uni1; 191 ${DECLARATIONS} 192 193 void main() 194 { 195 out0 = 0.0; 196 ${OUTPUT} 197 } 198 "" 199end 200 201case struct_overlap_split 202 expect compile_or_link_fail 203 version 310 es 204 values{ output float out0 = 0.0; } 205 206 vertex "" 207 #version 310 es 208 precision highp float; 209 210 struct S 211 { 212 vec4 a; 213 int b; 214 uint c; 215 vec2 d; 216 }; 217 218 layout(location = 7) uniform S uni0; 219 layout(location = 12) uniform float uni2; 220 221 in highp vec4 dEQP_Position; 222 223 void main() 224 { 225 gl_Position = dEQP_Position; 226 } 227 "" 228 229 fragment "" 230 #version 310 es 231 precision highp float; 232 layout(location = 9) uniform float uni1[4]; 233 234 layout(location = 0) out mediump vec4 dEQP_FragColor; 235 236 void main() 237 { 238 dEQP_FragColor = vec4(1); 239 } 240 "" 241end 242 243case complex_overlap 244 expect compile_or_link_fail 245 version 310 es 246 values { output float out0 = 0.0; } 247 248 both "" 249 #version 310 es 250 precision highp float; 251 252 struct S // size 2 253 { 254 vec3 a; 255 float b; 256 }; 257 258 struct T // size 5 259 { 260 S s[2]; 261 mat2 a; 262 }; 263 264 struct U // size 6 265 { 266 S s; 267 float a[4]; 268 }; 269 270 layout(location = 0) uniform S uni0; // good 271 layout(location = 1) uniform T uni1; // bad 272 layout(location = 6) uniform T uni2; // good 273 layout(location = 11) uniform U uni3[3]; // good 274 layout(location = 20) uniform S uni4; // bad 275 layout(location = 28) uniform int uni5; // bad 276 ${DECLARATIONS} 277 278 void main() 279 { 280 out0 = 0.0; 281 ${OUTPUT} 282 } 283 "" 284end 285 286case atomic 287 # \todo [2014-02-14 otto] invalid layout qualifier is generally a compiler error but spec does not yet say that this should be an error. Verify & fix once final 3.1 spec is out 288 expect compile_fail 289 version 310 es 290 values { output float out0 = 0.0; } 291 292 both "" 293 #version 310 es 294 precision highp float; 295 layout(location = 3, binding = 0, offset = 0) uniform atomic_uint uni0; 296 ${DECLARATIONS} 297 298 void main() 299 { 300 out0 = 0.0; 301 ${OUTPUT} 302 } 303 "" 304end 305