1#version 320 es 2 3layout(vertices = 4) out; 4out int outa[gl_out.length()]; 5 6layout(quads) in; // ERROR 7layout(ccw) out; // ERROR 8layout(fractional_even_spacing) in; // ERROR 9 10patch in vec4 patchIn; // ERROR 11patch out vec4 patchOut; 12 13void main() 14{ 15 barrier(); 16 17 int a = gl_MaxTessControlInputComponents + 18 gl_MaxTessControlOutputComponents + 19 gl_MaxTessControlTextureImageUnits + 20 gl_MaxTessControlUniformComponents + 21 gl_MaxTessControlTotalOutputComponents; 22 23 vec4 p = gl_in[1].gl_Position; 24 float ps = gl_in[1].gl_PointSize; // ERROR, need point_size extension 25 float cd = gl_in[1].gl_ClipDistance[2]; // ERROR, not in ES 26 27 int pvi = gl_PatchVerticesIn; 28 int pid = gl_PrimitiveID; 29 int iid = gl_InvocationID; 30 31 gl_out[gl_InvocationID].gl_Position = p; 32 gl_out[gl_InvocationID].gl_PointSize = ps; // ERROR, need point_size extension 33 gl_out[gl_InvocationID].gl_ClipDistance[1] = cd; // ERROR, not in ES 34 35 gl_TessLevelOuter[3] = 3.2; 36 gl_TessLevelInner[1] = 1.3; 37 38 if (a > 10) 39 barrier(); // ERROR 40 else 41 barrier(); // ERROR 42 43 barrier(); 44 45 do { 46 barrier(); // ERROR 47 } while (a > 10); 48 49 switch (a) { 50 default: 51 barrier(); // ERROR 52 break; 53 } 54 a < 12 ? a : (barrier(), a); // ERROR 55 { 56 barrier(); 57 } 58 59 return; 60 61 barrier(); // ERROR 62} 63 64layout(vertices = 4) in; // ERROR, not on in 65layout(vertices = 5) out; // ERROR, changing # 66 67void foo() 68{ 69 gl_out[4].gl_Position; // ERROR, out of range 70 71 barrier(); // ERROR, not in main 72} 73 74in vec2 ina; // ERROR, not array 75in vec2 inb[]; 76in vec2 inc[18]; // ERROR, wrong size 77in vec2 ind[gl_MaxPatchVertices]; 78patch out float implA[]; // ERROR, not sized 79 80#extension GL_ARB_separate_shader_objects : enable 81 82layout(location = 3) in vec4 ivla[]; 83layout(location = 4) in vec4 ivlb[]; 84layout(location = 4) in vec4 ivlc[]; // ERROR, overlapping 85 86layout(location = 3) out vec4 ovla[]; 87layout(location = 4) out vec4 ovlb[]; 88layout(location = 4) out vec4 ovlc[]; // ERROR, overlapping 89 90patch out pinbn { 91 int a; 92} pinbi; 93 94centroid out vec3 myColor2[]; 95centroid in vec3 centr[]; 96sample out vec4 perSampleColor[]; 97 98layout(vertices = 4) out float badlay[]; // ERROR, not on a variable 99out float misSized[5]; // ERROR, size doesn't match 100out float okaySize[4]; 101 102void pointSize2() 103{ 104 float ps = gl_in[1].gl_PointSize; // ERROR, need point_size extension 105 gl_out[gl_InvocationID].gl_PointSize = ps; // ERROR, need point_size extension 106} 107 108precise vec3 pv3; 109 110void goodfoop() 111{ 112 precise float d; 113 114 pv3 *= pv3; 115 pv3 = fma(pv3, pv3, pv3); 116 d = fma(d, d, d); 117} 118 119void bb() 120{ 121 gl_BoundingBoxOES[0] = vec4(0.0); 122 gl_BoundingBoxOES[1] = vec4(1.0); 123 gl_BoundingBoxOES[2] = vec4(2.0); // ERROR, overflow 124} 125 126out patch badpatchBName { // ERROR, array size required 127 float f; 128} badpatchIName[]; 129 130out patch patchBName { 131 float f; 132} patchIName[4]; 133 134void outputtingOutparam(out int a) 135{ 136 a = 2; 137} 138 139void outputting() 140{ 141 outa[gl_InvocationID] = 2; 142 outa[1] = 2; // ERROR, not gl_InvocationID 143 gl_out[0].gl_Position = vec4(1.0); // ERROR, not gl_InvocationID 144 outa[1]; 145 gl_out[0]; 146 outputtingOutparam(outa[0]); // ERROR, not gl_InvocationID 147 outputtingOutparam(outa[gl_InvocationID]); 148 patchIName[1].f = 3.14; 149 outa[(gl_InvocationID)] = 2; 150} 151