Setup dependent external sources
[platform/upstream/VK-GL-CTS.git] / external / glslang / src / Test / spv.image.frag
1 #version 450
2
3 layout(rgba32f, binding = 0)    uniform image1D         i1D;
4 layout(rgba32f, binding = 1)    uniform image2D         i2D;
5 layout(rgba32f, binding = 2)    uniform image3D         i3D;
6 layout(rgba32f, binding = 3)    uniform imageCube       iCube;
7 layout(rgba32f, binding = 4)    uniform imageCubeArray  iCubeArray;
8 layout(rgba32f, binding = 5)    uniform image2DRect     i2DRect;
9 layout(rgba32f, binding = 6)    uniform image1DArray    i1DArray;
10 layout(rg16, binding = 7)       uniform image2DArray    i2DArray;
11 layout(rgba32f, binding = 8)    uniform imageBuffer     iBuffer;
12 layout(rgba32f, binding = 9)    uniform image2DMS       i2DMS;
13 layout(rgba32f, binding = 10)   uniform image2DMSArray  i2DMSArray;
14
15 layout(r32i,    binding = 11)   uniform iimage1D        ii1D;
16 layout(r32ui,   binding = 12)   uniform uimage2D        ui2D;
17
18 flat in int     ic1D;
19 flat in ivec2   ic2D;
20 flat in ivec3   ic3D;
21 flat in ivec4   ic4D;
22
23 writeonly layout(binding = 1)   uniform image2D         wo2D;
24
25 flat in uint value;
26
27 out vec4 fragData;
28
29 void main()
30 {
31     ivec3 iv = ivec3(0);
32     iv.x    += imageSize(i1D);
33     iv.xy   += imageSize(i2D);
34     iv.xyz  += imageSize(i3D);
35     iv.xy   += imageSize(iCube);
36     iv.xyz  += imageSize(iCubeArray);
37     iv.xy   += imageSize(i2DRect);
38     iv.xy   += imageSize(i1DArray);
39     iv.xyz  += imageSize(i2DArray);
40     iv.x    += imageSize(iBuffer);
41     iv.xy   += imageSize(i2DMS);
42     iv.xyz  += imageSize(i2DMSArray);
43
44     iv.x    += imageSamples(i2DMS);
45     iv.x    += imageSamples(i2DMSArray);
46
47     vec4 v = vec4(0.0);
48     v += imageLoad(i1D, ic1D);
49     imageStore(i1D, ic1D, v);
50     v += imageLoad(i2D, ic2D);
51     imageStore(i2D, ic2D, v);
52     v += imageLoad(i3D, ic3D);
53     imageStore(i3D, ic3D, v);
54     v += imageLoad(iCube, ic3D);
55     imageStore(iCube, ic3D, v);
56     v += imageLoad(iCubeArray, ic3D);
57     imageStore(iCubeArray, ic3D, v);
58     v += imageLoad(i2DRect, ic2D);
59     imageStore(i2DRect, ic2D, v);
60     v += imageLoad(i1DArray, ic2D);
61     imageStore(i1DArray, ic2D, v);
62     v += imageLoad(i2DArray, ic3D);
63     imageStore(i2DArray, ic3D, v);
64     v += imageLoad(iBuffer, ic1D);
65     imageStore(iBuffer, ic1D, v);
66     v += imageLoad(i2DMS, ic2D, 1);
67     imageStore(i2DMS, ic2D, 2, v);
68     v += imageLoad(i2DMSArray, ic3D, 3);
69     imageStore(i2DMSArray, ic3D, 4, v);
70
71     uint ui = 0;
72     iv.x    += imageAtomicAdd(ii1D, ic1D, 10);
73     ui      += imageAtomicAdd(ui2D, ic2D, value);
74     iv.x    += imageAtomicMin(ii1D, ic1D, 11);
75     ui      += imageAtomicMin(ui2D, ic2D, value);
76     iv.x    += imageAtomicMax(ii1D, ic1D, 12);
77     ui      += imageAtomicMax(ui2D, ic2D, value);
78     iv.x    += imageAtomicAnd(ii1D, ic1D, 13);
79     ui      += imageAtomicAnd(ui2D, ic2D, value);
80     iv.x    += imageAtomicOr(ii1D, ic1D, 14);
81     ui      += imageAtomicOr(ui2D, ic2D, value);
82     iv.x    += imageAtomicXor(ii1D, ic1D, 15);
83     ui      += imageAtomicXor(ui2D, ic2D, value);
84     iv.x    += imageAtomicExchange(ii1D, ic1D, 16);
85     ui      += imageAtomicExchange(ui2D, ic2D, value);
86     iv.x    += imageAtomicCompSwap(ii1D, ic1D, 18, 17);
87     ui      += imageAtomicCompSwap(ui2D, ic2D, 19u, value);
88
89     imageStore(wo2D, ic2D, v);
90
91     fragData = ui != iv.y ? v : vec4(0.0); 
92 }
93