mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-08 19:40:06 +00:00
e442a03897
Prior to this change, OES_primitive_bounding_box and EXT_primitive_bounding_box were both recognised as extensions, but only the name gl_BoundingBoxOES could be used. However the EXT version uses the name gl_BoundingBoxEXT instead. In addition, since GLES 3.2, the extension has been included in the core standard and the name gl_BoundingBox may be used instead. This change aims to make both extensions and the 3.2 core version all work.
185 lines
4.4 KiB
GLSL
185 lines
4.4 KiB
GLSL
#version 310 es
|
|
|
|
#extension GL_OES_tessellation_shader : enable
|
|
|
|
layout(vertices = 4) out;
|
|
out int outa[gl_out.length()];
|
|
|
|
layout(quads) in; // ERROR
|
|
layout(ccw) out; // ERROR
|
|
layout(fractional_even_spacing) in; // ERROR
|
|
|
|
patch in vec4 patchIn; // ERROR
|
|
patch out vec4 patchOut;
|
|
|
|
void main()
|
|
{
|
|
barrier();
|
|
|
|
int a = gl_MaxTessControlInputComponents +
|
|
gl_MaxTessControlOutputComponents +
|
|
gl_MaxTessControlTextureImageUnits +
|
|
gl_MaxTessControlUniformComponents +
|
|
gl_MaxTessControlTotalOutputComponents;
|
|
|
|
vec4 p = gl_in[1].gl_Position;
|
|
float ps = gl_in[1].gl_PointSize; // ERROR, need point_size extension
|
|
float cd = gl_in[1].gl_ClipDistance[2]; // ERROR, not in ES
|
|
|
|
int pvi = gl_PatchVerticesIn;
|
|
int pid = gl_PrimitiveID;
|
|
int iid = gl_InvocationID;
|
|
|
|
gl_out[gl_InvocationID].gl_Position = p;
|
|
gl_out[gl_InvocationID].gl_PointSize = ps; // ERROR, need point_size extension
|
|
gl_out[gl_InvocationID].gl_ClipDistance[1] = cd; // ERROR, not in ES
|
|
|
|
gl_TessLevelOuter[3] = 3.2;
|
|
gl_TessLevelInner[1] = 1.3;
|
|
|
|
if (a > 10)
|
|
barrier(); // ERROR
|
|
else
|
|
barrier(); // ERROR
|
|
|
|
barrier();
|
|
|
|
do {
|
|
barrier(); // ERROR
|
|
} while (a > 10);
|
|
|
|
switch (a) {
|
|
default:
|
|
barrier(); // ERROR
|
|
break;
|
|
}
|
|
a < 12 ? a : (barrier(), a); // ERROR
|
|
{
|
|
barrier();
|
|
}
|
|
|
|
return;
|
|
|
|
barrier(); // ERROR
|
|
}
|
|
|
|
layout(vertices = 4) in; // ERROR, not on in
|
|
layout(vertices = 5) out; // ERROR, changing #
|
|
|
|
void foo()
|
|
{
|
|
gl_out[4].gl_Position; // ERROR, out of range
|
|
|
|
barrier(); // ERROR, not in main
|
|
}
|
|
|
|
in vec2 ina; // ERROR, not array
|
|
in vec2 inb[];
|
|
in vec2 inc[18]; // ERROR, wrong size
|
|
in vec2 ind[gl_MaxPatchVertices];
|
|
patch out float implA[]; // ERROR, not sized
|
|
|
|
#extension GL_ARB_separate_shader_objects : enable
|
|
|
|
layout(location = 3) in vec4 ivla[];
|
|
layout(location = 4) in vec4 ivlb[];
|
|
layout(location = 4) in vec4 ivlc[]; // ERROR, overlapping
|
|
|
|
layout(location = 3) out vec4 ovla[];
|
|
layout(location = 4) out vec4 ovlb[];
|
|
layout(location = 4) out vec4 ovlc[]; // ERROR, overlapping
|
|
|
|
void foop()
|
|
{
|
|
precise float d; // ERROR without gpu_shader5
|
|
d = fma(d, d, d); // ERROR without gpu_shader5
|
|
}
|
|
|
|
patch out pinbn {
|
|
int a;
|
|
} pinbi;
|
|
|
|
centroid out vec3 myColor2[];
|
|
centroid in vec3 centr[];
|
|
sample out vec4 perSampleColor[]; // ERROR without sample extensions
|
|
|
|
layout(vertices = 4) out float badlay[]; // ERROR, not on a variable
|
|
out float misSized[5]; // ERROR, size doesn't match
|
|
out float okaySize[4];
|
|
|
|
#extension GL_OES_tessellation_point_size : enable
|
|
|
|
void pointSize2()
|
|
{
|
|
float ps = gl_in[1].gl_PointSize;
|
|
gl_out[gl_InvocationID].gl_PointSize = ps;
|
|
}
|
|
|
|
#extension GL_OES_gpu_shader5 : enable
|
|
|
|
precise vec3 pv3;
|
|
|
|
void goodfoop()
|
|
{
|
|
precise float d;
|
|
|
|
pv3 *= pv3;
|
|
pv3 = fma(pv3, pv3, pv3);
|
|
d = fma(d, d, d);
|
|
}
|
|
|
|
void bbextBad()
|
|
{
|
|
gl_BoundingBoxEXT; // ERROR without GL_EXT_primitive_bounding_box
|
|
gl_BoundingBox; // ERROR, version < 320
|
|
}
|
|
|
|
#extension GL_EXT_primitive_bounding_box : enable
|
|
|
|
void bbext()
|
|
{
|
|
gl_BoundingBoxEXT[0] = vec4(0.0);
|
|
gl_BoundingBoxEXT[1] = vec4(1.0);
|
|
gl_BoundingBoxEXT[2] = vec4(2.0); // ERROR, overflow
|
|
}
|
|
|
|
void bbBad()
|
|
{
|
|
gl_BoundingBoxOES; // ERROR without GL_OES_primitive_bounding_box
|
|
}
|
|
|
|
#extension GL_OES_primitive_bounding_box : enable
|
|
|
|
void bb()
|
|
{
|
|
gl_BoundingBoxOES[0] = vec4(0.0);
|
|
gl_BoundingBoxOES[1] = vec4(1.0);
|
|
gl_BoundingBoxOES[2] = vec4(2.0); // ERROR, overflow
|
|
}
|
|
|
|
out patch badpatchBName { // ERROR, array size required
|
|
float f;
|
|
} badpatchIName[];
|
|
|
|
out patch patchBName {
|
|
float f;
|
|
} patchIName[4];
|
|
|
|
void outputtingOutparam(out int a)
|
|
{
|
|
a = 2;
|
|
}
|
|
|
|
void outputting()
|
|
{
|
|
outa[gl_InvocationID] = 2;
|
|
outa[1] = 2; // ERROR, not gl_InvocationID
|
|
gl_out[0].gl_Position = vec4(1.0); // ERROR, not gl_InvocationID
|
|
outa[1];
|
|
gl_out[0];
|
|
outputtingOutparam(outa[0]); // ERROR, not gl_InvocationID
|
|
outputtingOutparam(outa[gl_InvocationID]);
|
|
patchIName[1].f = 3.14;
|
|
outa[(gl_InvocationID)] = 2;
|
|
}
|