1617a3babSopenharmony_ci#version 310 es 2617a3babSopenharmony_ci 3617a3babSopenharmony_ci#extension GL_OES_tessellation_shader : enable 4617a3babSopenharmony_ci 5617a3babSopenharmony_cilayout(vertices = 4) out; 6617a3babSopenharmony_ciout int outa[gl_out.length()]; 7617a3babSopenharmony_ci 8617a3babSopenharmony_cilayout(quads) in; // ERROR 9617a3babSopenharmony_cilayout(ccw) out; // ERROR 10617a3babSopenharmony_cilayout(fractional_even_spacing) in; // ERROR 11617a3babSopenharmony_ci 12617a3babSopenharmony_cipatch in vec4 patchIn; // ERROR 13617a3babSopenharmony_cipatch out vec4 patchOut; 14617a3babSopenharmony_ci 15617a3babSopenharmony_civoid main() 16617a3babSopenharmony_ci{ 17617a3babSopenharmony_ci barrier(); 18617a3babSopenharmony_ci 19617a3babSopenharmony_ci int a = gl_MaxTessControlInputComponents + 20617a3babSopenharmony_ci gl_MaxTessControlOutputComponents + 21617a3babSopenharmony_ci gl_MaxTessControlTextureImageUnits + 22617a3babSopenharmony_ci gl_MaxTessControlUniformComponents + 23617a3babSopenharmony_ci gl_MaxTessControlTotalOutputComponents; 24617a3babSopenharmony_ci 25617a3babSopenharmony_ci vec4 p = gl_in[1].gl_Position; 26617a3babSopenharmony_ci float ps = gl_in[1].gl_PointSize; // ERROR, need point_size extension 27617a3babSopenharmony_ci float cd = gl_in[1].gl_ClipDistance[2]; // ERROR, not in ES 28617a3babSopenharmony_ci 29617a3babSopenharmony_ci int pvi = gl_PatchVerticesIn; 30617a3babSopenharmony_ci int pid = gl_PrimitiveID; 31617a3babSopenharmony_ci int iid = gl_InvocationID; 32617a3babSopenharmony_ci 33617a3babSopenharmony_ci gl_out[gl_InvocationID].gl_Position = p; 34617a3babSopenharmony_ci gl_out[gl_InvocationID].gl_PointSize = ps; // ERROR, need point_size extension 35617a3babSopenharmony_ci gl_out[gl_InvocationID].gl_ClipDistance[1] = cd; // ERROR, not in ES 36617a3babSopenharmony_ci 37617a3babSopenharmony_ci gl_TessLevelOuter[3] = 3.2; 38617a3babSopenharmony_ci gl_TessLevelInner[1] = 1.3; 39617a3babSopenharmony_ci 40617a3babSopenharmony_ci if (a > 10) 41617a3babSopenharmony_ci barrier(); // ERROR 42617a3babSopenharmony_ci else 43617a3babSopenharmony_ci barrier(); // ERROR 44617a3babSopenharmony_ci 45617a3babSopenharmony_ci barrier(); 46617a3babSopenharmony_ci 47617a3babSopenharmony_ci do { 48617a3babSopenharmony_ci barrier(); // ERROR 49617a3babSopenharmony_ci } while (a > 10); 50617a3babSopenharmony_ci 51617a3babSopenharmony_ci switch (a) { 52617a3babSopenharmony_ci default: 53617a3babSopenharmony_ci barrier(); // ERROR 54617a3babSopenharmony_ci break; 55617a3babSopenharmony_ci } 56617a3babSopenharmony_ci a < 12 ? a : (barrier(), a); // ERROR 57617a3babSopenharmony_ci { 58617a3babSopenharmony_ci barrier(); 59617a3babSopenharmony_ci } 60617a3babSopenharmony_ci 61617a3babSopenharmony_ci return; 62617a3babSopenharmony_ci 63617a3babSopenharmony_ci barrier(); // ERROR 64617a3babSopenharmony_ci} 65617a3babSopenharmony_ci 66617a3babSopenharmony_cilayout(vertices = 4) in; // ERROR, not on in 67617a3babSopenharmony_cilayout(vertices = 5) out; // ERROR, changing # 68617a3babSopenharmony_ci 69617a3babSopenharmony_civoid foo() 70617a3babSopenharmony_ci{ 71617a3babSopenharmony_ci gl_out[4].gl_Position; // ERROR, out of range 72617a3babSopenharmony_ci 73617a3babSopenharmony_ci barrier(); // ERROR, not in main 74617a3babSopenharmony_ci} 75617a3babSopenharmony_ci 76617a3babSopenharmony_ciin vec2 ina; // ERROR, not array 77617a3babSopenharmony_ciin vec2 inb[]; 78617a3babSopenharmony_ciin vec2 inc[18]; // ERROR, wrong size 79617a3babSopenharmony_ciin vec2 ind[gl_MaxPatchVertices]; 80617a3babSopenharmony_cipatch out float implA[]; // ERROR, not sized 81617a3babSopenharmony_ci 82617a3babSopenharmony_ci#extension GL_ARB_separate_shader_objects : enable 83617a3babSopenharmony_ci 84617a3babSopenharmony_cilayout(location = 3) in vec4 ivla[]; 85617a3babSopenharmony_cilayout(location = 4) in vec4 ivlb[]; 86617a3babSopenharmony_cilayout(location = 4) in vec4 ivlc[]; // ERROR, overlapping 87617a3babSopenharmony_ci 88617a3babSopenharmony_cilayout(location = 3) out vec4 ovla[]; 89617a3babSopenharmony_cilayout(location = 4) out vec4 ovlb[]; 90617a3babSopenharmony_cilayout(location = 4) out vec4 ovlc[]; // ERROR, overlapping 91617a3babSopenharmony_ci 92617a3babSopenharmony_civoid foop() 93617a3babSopenharmony_ci{ 94617a3babSopenharmony_ci precise float d; // ERROR without gpu_shader5 95617a3babSopenharmony_ci d = fma(d, d, d); // ERROR without gpu_shader5 96617a3babSopenharmony_ci} 97617a3babSopenharmony_ci 98617a3babSopenharmony_cipatch out pinbn { 99617a3babSopenharmony_ci int a; 100617a3babSopenharmony_ci} pinbi; 101617a3babSopenharmony_ci 102617a3babSopenharmony_cicentroid out vec3 myColor2[]; 103617a3babSopenharmony_cicentroid in vec3 centr[]; 104617a3babSopenharmony_cisample out vec4 perSampleColor[]; // ERROR without sample extensions 105617a3babSopenharmony_ci 106617a3babSopenharmony_cilayout(vertices = 4) out float badlay[]; // ERROR, not on a variable 107617a3babSopenharmony_ciout float misSized[5]; // ERROR, size doesn't match 108617a3babSopenharmony_ciout float okaySize[4]; 109617a3babSopenharmony_ci 110617a3babSopenharmony_ci#extension GL_OES_tessellation_point_size : enable 111617a3babSopenharmony_ci 112617a3babSopenharmony_civoid pointSize2() 113617a3babSopenharmony_ci{ 114617a3babSopenharmony_ci float ps = gl_in[1].gl_PointSize; 115617a3babSopenharmony_ci gl_out[gl_InvocationID].gl_PointSize = ps; 116617a3babSopenharmony_ci} 117617a3babSopenharmony_ci 118617a3babSopenharmony_ci#extension GL_OES_gpu_shader5 : enable 119617a3babSopenharmony_ci 120617a3babSopenharmony_ciprecise vec3 pv3; 121617a3babSopenharmony_ci 122617a3babSopenharmony_civoid goodfoop() 123617a3babSopenharmony_ci{ 124617a3babSopenharmony_ci precise float d; 125617a3babSopenharmony_ci 126617a3babSopenharmony_ci pv3 *= pv3; 127617a3babSopenharmony_ci pv3 = fma(pv3, pv3, pv3); 128617a3babSopenharmony_ci d = fma(d, d, d); 129617a3babSopenharmony_ci} 130617a3babSopenharmony_ci 131617a3babSopenharmony_civoid bbextBad() 132617a3babSopenharmony_ci{ 133617a3babSopenharmony_ci gl_BoundingBoxEXT; // ERROR without GL_EXT_primitive_bounding_box 134617a3babSopenharmony_ci gl_BoundingBox; // ERROR, version < 320 135617a3babSopenharmony_ci} 136617a3babSopenharmony_ci 137617a3babSopenharmony_ci#extension GL_EXT_primitive_bounding_box : enable 138617a3babSopenharmony_ci 139617a3babSopenharmony_civoid bbext() 140617a3babSopenharmony_ci{ 141617a3babSopenharmony_ci gl_BoundingBoxEXT[0] = vec4(0.0); 142617a3babSopenharmony_ci gl_BoundingBoxEXT[1] = vec4(1.0); 143617a3babSopenharmony_ci gl_BoundingBoxEXT[2] = vec4(2.0); // ERROR, overflow 144617a3babSopenharmony_ci} 145617a3babSopenharmony_ci 146617a3babSopenharmony_civoid bbBad() 147617a3babSopenharmony_ci{ 148617a3babSopenharmony_ci gl_BoundingBoxOES; // ERROR without GL_OES_primitive_bounding_box 149617a3babSopenharmony_ci} 150617a3babSopenharmony_ci 151617a3babSopenharmony_ci#extension GL_OES_primitive_bounding_box : enable 152617a3babSopenharmony_ci 153617a3babSopenharmony_civoid bb() 154617a3babSopenharmony_ci{ 155617a3babSopenharmony_ci gl_BoundingBoxOES[0] = vec4(0.0); 156617a3babSopenharmony_ci gl_BoundingBoxOES[1] = vec4(1.0); 157617a3babSopenharmony_ci gl_BoundingBoxOES[2] = vec4(2.0); // ERROR, overflow 158617a3babSopenharmony_ci} 159617a3babSopenharmony_ci 160617a3babSopenharmony_ciout patch badpatchBName { // ERROR, array size required 161617a3babSopenharmony_ci float f; 162617a3babSopenharmony_ci} badpatchIName[]; 163617a3babSopenharmony_ci 164617a3babSopenharmony_ciout patch patchBName { 165617a3babSopenharmony_ci float f; 166617a3babSopenharmony_ci} patchIName[4]; 167617a3babSopenharmony_ci 168617a3babSopenharmony_civoid outputtingOutparam(out int a) 169617a3babSopenharmony_ci{ 170617a3babSopenharmony_ci a = 2; 171617a3babSopenharmony_ci} 172617a3babSopenharmony_ci 173617a3babSopenharmony_civoid outputting() 174617a3babSopenharmony_ci{ 175617a3babSopenharmony_ci outa[gl_InvocationID] = 2; 176617a3babSopenharmony_ci outa[1] = 2; // ERROR, not gl_InvocationID 177617a3babSopenharmony_ci gl_out[0].gl_Position = vec4(1.0); // ERROR, not gl_InvocationID 178617a3babSopenharmony_ci outa[1]; 179617a3babSopenharmony_ci gl_out[0]; 180617a3babSopenharmony_ci outputtingOutparam(outa[0]); // ERROR, not gl_InvocationID 181617a3babSopenharmony_ci outputtingOutparam(outa[gl_InvocationID]); 182617a3babSopenharmony_ci patchIName[1].f = 3.14; 183617a3babSopenharmony_ci outa[(gl_InvocationID)] = 2; 184617a3babSopenharmony_ci} 185