layout(location = 54) out float cf;\r
layout(location = 53) out float cg; // ERROR, collision at 31\r
\r
+layout(location = 10) in vec4 alias1;\r
+layout(location = 10) in vec4 alias2; // okay for vertex input on desktop\r
+\r
float gl_ClipDistance[17]; // ERROR, size too big
\ No newline at end of file
ERROR: 0:30: '' : cannot use layout qualifiers on a function parameter \r
ERROR: 0:31: '' : cannot use auxiliary or interpolation qualifiers on a function parameter \r
ERROR: 0:42: 'location' : repeated use of location 53\r
-ERROR: 0:44: 'gl_ClipDistance array size' : must be less than gl_MaxClipDistances (8)\r
+ERROR: 0:47: 'gl_ClipDistance array size' : must be less than gl_MaxClipDistances (8)\r
ERROR: 13 compilation errors. No code generated.\r
\r
\r
0:? 'cs' (layout(location=10 ) smooth out 2-element array of structure{m,f})\r
0:? 'cf' (layout(location=54 ) smooth out float)\r
0:? 'cg' (layout(location=53 ) smooth out float)\r
+0:? 'alias1' (layout(location=10 ) in 4-component vector of float)\r
+0:? 'alias2' (layout(location=10 ) in 4-component vector of float)\r
0:? 'gl_VertexID' (gl_VertexId int)\r
0:? 'gl_InstanceID' (gl_InstanceId int)\r
\r
- ...
+ exactly one main
+ ES 3.0: fragment outputs all have locations, if more than one
- - ES 3.0: location aliasing/overlap (except desktop vertex shader inputs)
- - Non ES: binding overlap
- + location overlap
+ + location aliasing/overlap (except desktop vertex shader inputs)
+ - Non ES: binding overlap for atomic counters
+ Non ES: geometry shader input array sizes and input layout qualifier declaration
+ Non ES: read or write to both gl_ClipVertex and gl_ClipDistance
+ Non ES: write to only one of gl_FragColor, gl_FragData, or user-declared
// source have to figure out how to create revision.h just to get a build\r
// going. However, if it is not updated, it can be a version behind.\r
\r
-#define GLSLANG_REVISION "24396"\r
-#define GLSLANG_DATE "2013/12/06 14:45:15"\r
+#define GLSLANG_REVISION "24397"\r
+#define GLSLANG_DATE "2013/12/06 16:57:42"\r
// an array of size N, all elements of the array from binding through binding + N \96 1 must be within this
// range."
//
- // TODO: 4.2 binding limits: binding error checking against limits, arrays
- //
if (type.getBasicType() != EbtSampler && type.getBasicType() != EbtBlock)
error(loc, "requires block, or sampler/image, or atomic-counter type", "binding", "");
// TODO: 4.2 functionality: atomic counter: include in test above
\r
TRange range = { qualifier.layoutSlotLocation, qualifier.layoutSlotLocation + size - 1 };\r
\r
- // check for collisions\r
- for (size_t r = 0; r < usedLocations[set].size(); ++r) {\r
- if (range.last >= usedLocations[set][r].start &&\r
- range.start <= usedLocations[set][r].last) {\r
- // there is a collision; pick one\r
- return std::max(range.start, usedLocations[set][r].start);\r
+ // check for collisions, except for vertex inputs on desktop\r
+ if (! (profile != EEsProfile && language == EShLangVertex && qualifier.isPipeInput())) {\r
+ for (size_t r = 0; r < usedLocations[set].size(); ++r) {\r
+ if (range.last >= usedLocations[set][r].start &&\r
+ range.start <= usedLocations[set][r].last) {\r
+ // there is a collision; pick one\r
+ return std::max(range.start, usedLocations[set][r].start);\r
+ }\r
}\r
}\r
\r