Add support for Tizen
[platform/upstream/glslang.git] / Test / spv.subgroupExtendedTypesBallotNeg.comp
1 #version 450\r
2 \r
3 #extension GL_KHR_shader_subgroup_ballot: enable\r
4 #extension GL_EXT_shader_explicit_arithmetic_types_int8: enable\r
5 #extension GL_EXT_shader_explicit_arithmetic_types_int16: enable\r
6 #extension GL_EXT_shader_explicit_arithmetic_types_int64: enable\r
7 #extension GL_EXT_shader_explicit_arithmetic_types_float16: enable\r
8 \r
9 layout (local_size_x = 8) in;\r
10 \r
11 layout(binding = 0) buffer Buffers\r
12 {\r
13     i8vec4 i8;\r
14     u8vec4 u8;\r
15     i16vec4 i16;\r
16     u16vec4 u16;\r
17     i64vec4 i64;\r
18     u64vec4 u64;\r
19     f16vec4 f16;\r
20 } data[4];\r
21 \r
22 void main()\r
23 {\r
24     uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;\r
25 \r
26     data[invocation].i8.x   = subgroupBroadcast(data[0].i8.x,    3);\r
27     data[invocation].i8.xy  = subgroupBroadcast(data[1].i8.xy,   3);\r
28     data[invocation].i8.xyz = subgroupBroadcast(data[2].i8.xyz,  3);\r
29     data[invocation].i8     = subgroupBroadcast(data[3].i8,      3);\r
30     data[invocation].i8.x   = subgroupBroadcastFirst(data[0].i8.x);\r
31     data[invocation].i8.xy  = subgroupBroadcastFirst(data[1].i8.xy);\r
32     data[invocation].i8.xyz = subgroupBroadcastFirst(data[2].i8.xyz);\r
33     data[invocation].i8     = subgroupBroadcastFirst(data[3].i8);\r
34 \r
35     data[invocation].u8.x   = subgroupBroadcast(data[0].u8.x,    3);\r
36     data[invocation].u8.xy  = subgroupBroadcast(data[1].u8.xy,   3);\r
37     data[invocation].u8.xyz = subgroupBroadcast(data[2].u8.xyz,  3);\r
38     data[invocation].u8     = subgroupBroadcast(data[3].u8,      3);\r
39     data[invocation].u8.x   = subgroupBroadcastFirst(data[0].u8.x);\r
40     data[invocation].u8.xy  = subgroupBroadcastFirst(data[1].u8.xy);\r
41     data[invocation].u8.xyz = subgroupBroadcastFirst(data[2].u8.xyz);\r
42     data[invocation].u8     = subgroupBroadcastFirst(data[3].u8);\r
43 \r
44     data[invocation].i16.x   = subgroupBroadcast(data[0].i16.x,    3);\r
45     data[invocation].i16.xy  = subgroupBroadcast(data[1].i16.xy,   3);\r
46     data[invocation].i16.xyz = subgroupBroadcast(data[2].i16.xyz,  3);\r
47     data[invocation].i16     = subgroupBroadcast(data[3].i16,      3);\r
48     data[invocation].i16.x   = subgroupBroadcastFirst(data[0].i16.x);\r
49     data[invocation].i16.xy  = subgroupBroadcastFirst(data[1].i16.xy);\r
50     data[invocation].i16.xyz = subgroupBroadcastFirst(data[2].i16.xyz);\r
51     data[invocation].i16     = subgroupBroadcastFirst(data[3].i16);\r
52 \r
53     data[invocation].u16.x   = subgroupBroadcast(data[0].u16.x,    3);\r
54     data[invocation].u16.xy  = subgroupBroadcast(data[1].u16.xy,   3);\r
55     data[invocation].u16.xyz = subgroupBroadcast(data[2].u16.xyz,  3);\r
56     data[invocation].u16     = subgroupBroadcast(data[3].u16,      3);\r
57     data[invocation].u16.x   = subgroupBroadcastFirst(data[0].u16.x);\r
58     data[invocation].u16.xy  = subgroupBroadcastFirst(data[1].u16.xy);\r
59     data[invocation].u16.xyz = subgroupBroadcastFirst(data[2].u16.xyz);\r
60     data[invocation].u16     = subgroupBroadcastFirst(data[3].u16);\r
61 \r
62     data[invocation].i64.x   = subgroupBroadcast(data[0].i64.x,    3);\r
63     data[invocation].i64.xy  = subgroupBroadcast(data[1].i64.xy,   3);\r
64     data[invocation].i64.xyz = subgroupBroadcast(data[2].i64.xyz,  3);\r
65     data[invocation].i64     = subgroupBroadcast(data[3].i64,      3);\r
66     data[invocation].i64.x   = subgroupBroadcastFirst(data[0].i64.x);\r
67     data[invocation].i64.xy  = subgroupBroadcastFirst(data[1].i64.xy);\r
68     data[invocation].i64.xyz = subgroupBroadcastFirst(data[2].i64.xyz);\r
69     data[invocation].i64     = subgroupBroadcastFirst(data[3].i64);\r
70 \r
71     data[invocation].u64.x   = subgroupBroadcast(data[0].u64.x,    3);\r
72     data[invocation].u64.xy  = subgroupBroadcast(data[1].u64.xy,   3);\r
73     data[invocation].u64.xyz = subgroupBroadcast(data[2].u64.xyz,  3);\r
74     data[invocation].u64     = subgroupBroadcast(data[3].u64,      3);\r
75     data[invocation].u64.x   = subgroupBroadcastFirst(data[0].u64.x);\r
76     data[invocation].u64.xy  = subgroupBroadcastFirst(data[1].u64.xy);\r
77     data[invocation].u64.xyz = subgroupBroadcastFirst(data[2].u64.xyz);\r
78     data[invocation].u64     = subgroupBroadcastFirst(data[3].u64);\r
79 \r
80     data[invocation].f16.x   = subgroupBroadcast(data[0].f16.x,    3);\r
81     data[invocation].f16.xy  = subgroupBroadcast(data[1].f16.xy,   3);\r
82     data[invocation].f16.xyz = subgroupBroadcast(data[2].f16.xyz,  3);\r
83     data[invocation].f16     = subgroupBroadcast(data[3].f16,      3);\r
84     data[invocation].f16.x   = subgroupBroadcastFirst(data[0].f16.x);\r
85     data[invocation].f16.xy  = subgroupBroadcastFirst(data[1].f16.xy);\r
86     data[invocation].f16.xyz = subgroupBroadcastFirst(data[2].f16.xyz);\r
87     data[invocation].f16     = subgroupBroadcastFirst(data[3].f16);\r
88 }\r