1cb93a386Sopenharmony_ci#version 450
2cb93a386Sopenharmony_ci#extension GL_KHR_shader_subgroup_basic : require
3cb93a386Sopenharmony_ci#extension GL_KHR_shader_subgroup_shuffle : require
4cb93a386Sopenharmony_ci#extension GL_KHR_shader_subgroup_shuffle_relative : require
5cb93a386Sopenharmony_ci#extension GL_KHR_shader_subgroup_quad : require
6cb93a386Sopenharmony_cilayout(local_size_x = 1) in;
7cb93a386Sopenharmony_ci
8cb93a386Sopenharmony_cilayout(std430, binding = 0) buffer SSBO
9cb93a386Sopenharmony_ci{
10cb93a386Sopenharmony_ci	float FragColor;
11cb93a386Sopenharmony_ci};
12cb93a386Sopenharmony_ci
13cb93a386Sopenharmony_ci// Reduced test for functionality exposed on iOS.
14cb93a386Sopenharmony_ci
15cb93a386Sopenharmony_civoid main()
16cb93a386Sopenharmony_ci{
17cb93a386Sopenharmony_ci	// basic
18cb93a386Sopenharmony_ci	FragColor = float(gl_NumSubgroups);
19cb93a386Sopenharmony_ci	FragColor = float(gl_SubgroupID);
20cb93a386Sopenharmony_ci	FragColor = float(gl_SubgroupSize);
21cb93a386Sopenharmony_ci	FragColor = float(gl_SubgroupInvocationID);
22cb93a386Sopenharmony_ci	subgroupBarrier();
23cb93a386Sopenharmony_ci	subgroupMemoryBarrier();
24cb93a386Sopenharmony_ci	subgroupMemoryBarrierBuffer();
25cb93a386Sopenharmony_ci	subgroupMemoryBarrierShared();
26cb93a386Sopenharmony_ci	subgroupMemoryBarrierImage();
27cb93a386Sopenharmony_ci
28cb93a386Sopenharmony_ci	// shuffle
29cb93a386Sopenharmony_ci	uint shuffled = subgroupShuffle(10u, 8u);
30cb93a386Sopenharmony_ci	bool shuffled_bool = subgroupShuffle(true, 9u);
31cb93a386Sopenharmony_ci	uint shuffled_xor = subgroupShuffleXor(30u, 8u);
32cb93a386Sopenharmony_ci	bool shuffled_xor_bool = subgroupShuffleXor(false, 9u);
33cb93a386Sopenharmony_ci
34cb93a386Sopenharmony_ci	// shuffle relative 
35cb93a386Sopenharmony_ci	uint shuffled_up = subgroupShuffleUp(20u, 4u);
36cb93a386Sopenharmony_ci	bool shuffled_up_bool = subgroupShuffleUp(true, 4u);
37cb93a386Sopenharmony_ci	uint shuffled_down = subgroupShuffleDown(20u, 4u);
38cb93a386Sopenharmony_ci	bool shuffled_down_bool = subgroupShuffleDown(false, 4u);
39cb93a386Sopenharmony_ci
40cb93a386Sopenharmony_ci	// quad
41cb93a386Sopenharmony_ci	vec4 swap_horiz = subgroupQuadSwapHorizontal(vec4(20.0));
42cb93a386Sopenharmony_ci	bvec4 swap_horiz_bool = subgroupQuadSwapHorizontal(bvec4(true));
43cb93a386Sopenharmony_ci	vec4 swap_vertical = subgroupQuadSwapVertical(vec4(20.0));
44cb93a386Sopenharmony_ci	bvec4 swap_vertical_bool = subgroupQuadSwapVertical(bvec4(true));
45cb93a386Sopenharmony_ci	vec4 swap_diagonal = subgroupQuadSwapDiagonal(vec4(20.0));
46cb93a386Sopenharmony_ci	bvec4 swap_diagonal_bool = subgroupQuadSwapDiagonal(bvec4(true));
47cb93a386Sopenharmony_ci	vec4 quad_broadcast = subgroupQuadBroadcast(vec4(20.0), 3u);
48cb93a386Sopenharmony_ci	bvec4 quad_broadcast_bool = subgroupQuadBroadcast(bvec4(true), 3u);
49cb93a386Sopenharmony_ci}
50