yum-mirror/glslang

git clone https://git.yummers.dev/yum-mirror/glslang

spencer-lunargRemove invalid reading from MeshEXT outputdffbc797

main
3.8 KiB149 linesraw
1#version 460
2
3#define MAX_VER  81
4#define MAX_PRIM 32
5
6#define BARRIER() \
7    memoryBarrierShared(); \
8    barrier();
9
10#extension GL_EXT_mesh_shader : enable
11
12layout(local_size_x = 32, local_size_y=1, local_size_z=1) in;
13
14layout(max_vertices=MAX_VER) out;
15layout(max_primitives=MAX_PRIM) out;
16layout(triangles) out;
17
18// test use of builtins in mesh shaders:
19
20void main()
21{
22    uint iid = gl_LocalInvocationID.x;
23    uint gid = gl_WorkGroupID.x;
24    uint vertexCount = MAX_VER; // vertexCount <= max_vertices
25    uint primitiveCount = MAX_PRIM; // primitiveCount <= max_primtives
26    SetMeshOutputsEXT(vertexCount, primitiveCount);
27
28    gl_MeshVerticesEXT[iid].gl_Position = vec4(1.0);
29    gl_MeshVerticesEXT[iid].gl_PointSize = 2.0;
30    gl_MeshVerticesEXT[iid].gl_ClipDistance[3] = 3.0;
31    gl_MeshVerticesEXT[iid].gl_CullDistance[2] = 4.0;
32
33    BARRIER();
34
35    gl_MeshPrimitivesEXT[iid].gl_PrimitiveID = 6;
36    gl_MeshPrimitivesEXT[iid].gl_Layer = 7;
37    gl_MeshPrimitivesEXT[iid].gl_ViewportIndex = 8;
38    gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT = false;
39
40
41    BARRIER();
42
43    // check bound limits
44    gl_PrimitiveTriangleIndicesEXT[0] = uvec3(1, 1, 1); // range is between [0, vertexCount-1]
45    gl_PrimitiveTriangleIndicesEXT[primitiveCount - 1] = uvec3(2, 2, 2); // array size is primitiveCount*3 for triangle
46
47    BARRIER();
48}
49
50#extension GL_KHR_shader_subgroup_basic: enable
51void basic_works (void)
52{
53  gl_SubgroupSize;
54  gl_SubgroupInvocationID;
55  subgroupBarrier();
56  subgroupMemoryBarrier();
57  subgroupMemoryBarrierBuffer();
58  subgroupMemoryBarrierImage();
59  subgroupElect();
60  gl_NumSubgroups;                  // allowed in mesh
61  gl_SubgroupID;                    // allowed in mesh
62  subgroupMemoryBarrierShared();    // allowed in mesh
63}
64
65#extension GL_KHR_shader_subgroup_ballot: enable
66void ballot_works(vec4 f4) {
67  gl_SubgroupEqMask;
68  gl_SubgroupGeMask;
69  gl_SubgroupGtMask;
70  gl_SubgroupLeMask;
71  gl_SubgroupLtMask;
72  subgroupBroadcast(f4, 0);
73  subgroupBroadcastFirst(f4);
74  uvec4 ballot = subgroupBallot(false);
75  subgroupInverseBallot(uvec4(0x1));
76  subgroupBallotBitExtract(ballot, 0);
77  subgroupBallotBitCount(ballot);
78  subgroupBallotInclusiveBitCount(ballot);
79  subgroupBallotExclusiveBitCount(ballot);
80  subgroupBallotFindLSB(ballot);
81  subgroupBallotFindMSB(ballot);
82}
83
84#extension GL_KHR_shader_subgroup_vote: enable
85void vote_works(vec4 f4)
86{
87  subgroupAll(true);
88  subgroupAny(false);
89  subgroupAllEqual(f4);
90}
91
92#extension GL_KHR_shader_subgroup_shuffle: enable
93#extension GL_KHR_shader_subgroup_shuffle_relative: enable
94void shuffle_works(vec4 f4)
95{
96  subgroupShuffle(f4, 0);
97  subgroupShuffleXor(f4, 0x1);
98  subgroupShuffleUp(f4, 1);
99  subgroupShuffleDown(f4, 1);
100}
101
102#extension GL_KHR_shader_subgroup_arithmetic: enable
103void arith_works(vec4 f4)
104{
105  uvec4 ballot;
106  subgroupAdd(f4);
107  subgroupMul(f4);
108  subgroupMin(f4);
109  subgroupMax(f4);
110  subgroupAnd(ballot);
111  subgroupOr(ballot);
112  subgroupXor(ballot);
113  subgroupInclusiveAdd(f4);
114  subgroupInclusiveMul(f4);
115  subgroupInclusiveMin(f4);
116  subgroupInclusiveMax(f4);
117  subgroupInclusiveAnd(ballot);
118  subgroupInclusiveOr(ballot);
119  subgroupInclusiveXor(ballot);
120  subgroupExclusiveAdd(f4);
121  subgroupExclusiveMul(f4);
122  subgroupExclusiveMin(f4);
123  subgroupExclusiveMax(f4);
124  subgroupExclusiveAnd(ballot);
125  subgroupExclusiveOr(ballot);
126  subgroupExclusiveXor(ballot);
127}
128
129#extension GL_KHR_shader_subgroup_clustered: enable
130void clustered_works(vec4 f4)
131{
132  uvec4 ballot = uvec4(0x55,0,0,0);
133  subgroupClusteredAdd(f4, 2);
134  subgroupClusteredMul(f4, 2);
135  subgroupClusteredMin(f4, 2);
136  subgroupClusteredMax(f4, 2);
137  subgroupClusteredAnd(ballot, 2);
138  subgroupClusteredOr(ballot, 2);
139  subgroupClusteredXor(ballot, 2);
140}
141
142#extension GL_KHR_shader_subgroup_quad: enable
143void quad_works(vec4 f4)
144{
145  subgroupQuadBroadcast(f4, 0);
146  subgroupQuadSwapHorizontal(f4);
147  subgroupQuadSwapVertical(f4);
148  subgroupQuadSwapDiagonal(f4);
149}