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