GLSL: validation of early_fragment_tests, others, on an object.
[platform/upstream/glslang.git] / Test / 450.frag
1 #version 450 core\r
2 \r
3 in float in1;\r
4 in vec2 in2;\r
5 in vec3 in3;\r
6 in vec4 in4;\r
7 \r
8 void main()\r
9 {\r
10     vec2 v2 = dFdxFine(in2);\r
11     vec3 v3 = dFdyCoarse(in3);\r
12     vec4 v4 = fwidth(in4);\r
13     v4 = dFdyFine(in4);\r
14     v3 = dFdyFine(in3);\r
15     float f = dFdx(in1) + dFdxFine(in1) + dFdxCoarse(in1);\r
16     v4 = fwidthCoarse(in4) + fwidthFine(in4);\r
17 \r
18     float cull = gl_CullDistance[2];\r
19     float consts = gl_MaxCullDistances + gl_MaxCombinedClipAndCullDistances + gl_MaxSamples;\r
20 \r
21     if (gl_HelperInvocation)\r
22         ++v4;\r
23 \r
24     int sum = gl_MaxVertexImageUniforms +\r
25               gl_MaxFragmentImageUniforms +\r
26               gl_MaxComputeImageUniforms +\r
27               gl_MaxCombinedImageUniforms +\r
28               gl_MaxCombinedShaderOutputResources;\r
29 \r
30     bool b1, b3, b;\r
31     uint uin;\r
32     bvec2 b2 = mix(bvec2(b1), bvec2(b3), bvec2(b));\r
33     uint um = mix(uin, uin, b);\r
34     ivec3 im3 = mix(ivec3(uin), ivec3(uin), bvec3(b));\r
35 }\r
36 \r
37 uniform sampler2DMS s2dms;\r
38 uniform usampler2DMSArray us2dmsa;\r
39 layout(rgba32i) uniform iimage2DMS ii2dms;\r
40 layout(rgba32f) uniform image2DMSArray i2dmsa;\r
41 \r
42 void foo()\r
43 {\r
44     int s = textureSamples(s2dms);\r
45     s += textureSamples(us2dmsa);\r
46     s += imageSamples(ii2dms);\r
47     s += imageSamples(i2dmsa);\r
48     float f = imageAtomicExchange(i2dmsa, ivec3(in3), 2, 4.5);\r
49 }\r
50 \r
51 in float gl_CullDistance[6];\r
52 \r
53 float cull(int i)\r
54 {\r
55     return (i >= 6) ? gl_CullDistance[5] : gl_CullDistance[i];\r
56 }\r
57 \r
58 layout(location = 6) in bName1 {\r
59     float f;\r
60     layout(location = 7) float g;\r
61     mat4 m;\r
62 } bInst1;\r
63 layout(location = 12) in bName2 {\r
64     float f;\r
65     layout(location = 13) float g;  // ERROR, location on array\r
66 } bInst2[3];\r
67 \r
68 layout(early_fragment_tests) in float f; // ERROR, must be standalone\r