1617a3babSopenharmony_ci#version 450 core
2617a3babSopenharmony_ci
3617a3babSopenharmony_ciin float in1;
4617a3babSopenharmony_ciin vec2 in2;
5617a3babSopenharmony_ciin vec3 in3;
6617a3babSopenharmony_ciin vec4 in4;
7617a3babSopenharmony_ci
8617a3babSopenharmony_civoid main()
9617a3babSopenharmony_ci{
10617a3babSopenharmony_ci    vec2 v2 = dFdxFine(in2);
11617a3babSopenharmony_ci    vec3 v3 = dFdyCoarse(in3);
12617a3babSopenharmony_ci    vec4 v4 = fwidth(in4);
13617a3babSopenharmony_ci    v4 = dFdyFine(in4);
14617a3babSopenharmony_ci    v3 = dFdyFine(in3);
15617a3babSopenharmony_ci    float f = dFdx(in1) + dFdxFine(in1) + dFdxCoarse(in1);
16617a3babSopenharmony_ci    v4 = fwidthCoarse(in4) + fwidthFine(in4);
17617a3babSopenharmony_ci
18617a3babSopenharmony_ci    float cull = gl_CullDistance[2];
19617a3babSopenharmony_ci    float consts = gl_MaxCullDistances + gl_MaxCombinedClipAndCullDistances + gl_MaxSamples;
20617a3babSopenharmony_ci
21617a3babSopenharmony_ci    if (gl_HelperInvocation)
22617a3babSopenharmony_ci        ++v4;
23617a3babSopenharmony_ci
24617a3babSopenharmony_ci    int sum = gl_MaxVertexImageUniforms +
25617a3babSopenharmony_ci              gl_MaxFragmentImageUniforms +
26617a3babSopenharmony_ci              gl_MaxComputeImageUniforms +
27617a3babSopenharmony_ci              gl_MaxCombinedImageUniforms +
28617a3babSopenharmony_ci              gl_MaxCombinedShaderOutputResources;
29617a3babSopenharmony_ci
30617a3babSopenharmony_ci    bool b1, b3, b;
31617a3babSopenharmony_ci    uint uin;
32617a3babSopenharmony_ci    bvec2 b2 = mix(bvec2(b1), bvec2(b3), bvec2(b));
33617a3babSopenharmony_ci    uint um = mix(uin, uin, b);
34617a3babSopenharmony_ci    ivec3 im3 = mix(ivec3(uin), ivec3(uin), bvec3(b));
35617a3babSopenharmony_ci}
36617a3babSopenharmony_ci
37617a3babSopenharmony_ciuniform sampler2DMS s2dms;
38617a3babSopenharmony_ciuniform usampler2DMSArray us2dmsa;
39617a3babSopenharmony_cilayout(rgba32i) uniform iimage2DMS ii2dms;
40617a3babSopenharmony_cilayout(rgba32f) uniform image2DMSArray i2dmsa;
41617a3babSopenharmony_ci
42617a3babSopenharmony_civoid foo()
43617a3babSopenharmony_ci{
44617a3babSopenharmony_ci    int s = textureSamples(s2dms);
45617a3babSopenharmony_ci    s += textureSamples(us2dmsa);
46617a3babSopenharmony_ci    s += imageSamples(ii2dms);
47617a3babSopenharmony_ci    s += imageSamples(i2dmsa);
48617a3babSopenharmony_ci    float f = imageAtomicExchange(i2dmsa, ivec3(in3), 2, 4.5);
49617a3babSopenharmony_ci}
50617a3babSopenharmony_ci
51617a3babSopenharmony_ci#extension GL_ARB_sparse_texture2: enable
52617a3babSopenharmony_ci
53617a3babSopenharmony_ciuniform sampler2D               s2D;
54617a3babSopenharmony_ciuniform isampler2DArray         is2DArray;
55617a3babSopenharmony_ciuniform sampler2DRectShadow     s2DRectShadow;
56617a3babSopenharmony_ci
57617a3babSopenharmony_ciin flat ivec2 offsets[4];
58617a3babSopenharmony_ciin vec2 c2;
59617a3babSopenharmony_ciin vec3 c3;
60617a3babSopenharmony_ci
61617a3babSopenharmony_civoid testOffsets()
62617a3babSopenharmony_ci{
63617a3babSopenharmony_ci    vec4  texel  = vec4(0.0);
64617a3babSopenharmony_ci    ivec4 itexel = ivec4(0);
65617a3babSopenharmony_ci    const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0));
66617a3babSopenharmony_ci    sparseTextureGatherOffsetsARB(s2D, c2, constOffsets, texel);
67617a3babSopenharmony_ci    sparseTextureGatherOffsetsARB(is2DArray, c3, constOffsets, itexel, 2);
68617a3babSopenharmony_ci    sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, constOffsets, texel);
69617a3babSopenharmony_ci
70617a3babSopenharmony_ci    sparseTextureGatherOffsetsARB(s2D, c2, offsets, texel); // Error : Non constant offsets
71617a3babSopenharmony_ci    sparseTextureGatherOffsetsARB(is2DArray, c3, offsets, itexel, 2); // Error : Non constant offsets
72617a3babSopenharmony_ci    sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, offsets, texel); // Error : Non constant offsets
73617a3babSopenharmony_ci
74617a3babSopenharmony_ci}
75617a3babSopenharmony_ci
76617a3babSopenharmony_ciin float gl_CullDistance[6];
77617a3babSopenharmony_ci
78617a3babSopenharmony_cifloat cull(int i)
79617a3babSopenharmony_ci{
80617a3babSopenharmony_ci    return (i >= 6) ? gl_CullDistance[5] : gl_CullDistance[i];
81617a3babSopenharmony_ci}
82617a3babSopenharmony_ci
83617a3babSopenharmony_cilayout(location = 6) in bName1 {
84617a3babSopenharmony_ci    float f;
85617a3babSopenharmony_ci    layout(location = 7) float g;
86617a3babSopenharmony_ci    mat4 m;
87617a3babSopenharmony_ci} bInst1;
88617a3babSopenharmony_cilayout(location = 12) in bName2 {
89617a3babSopenharmony_ci    float f;
90617a3babSopenharmony_ci    layout(location = 13) float g;  // ERROR, location on array
91617a3babSopenharmony_ci} bInst2[3];
92617a3babSopenharmony_ci
93617a3babSopenharmony_cilayout(early_fragment_tests) in float f; // ERROR, must be standalone
94