ebf779dcfb
The array mechanism breaks DXC which needs to observe that all components have been written. Uninitialized outputs will be undefined. Resort to simple vector instead.
65 lines
2.1 KiB
Plaintext
65 lines
2.1 KiB
Plaintext
#version 450
|
|
#extension GL_EXT_mesh_shader : require
|
|
layout(local_size_x = 2, local_size_y = 3, local_size_z = 4) in;
|
|
layout(triangles, max_vertices = 24, max_primitives = 22) out;
|
|
|
|
out gl_MeshPerVertexEXT
|
|
{
|
|
vec4 gl_Position;
|
|
float gl_PointSize;
|
|
float gl_ClipDistance[1];
|
|
float gl_CullDistance[2];
|
|
} gl_MeshVerticesEXT[];
|
|
|
|
layout(location = 0) out vec4 vOut[];
|
|
layout(location = 1) perprimitiveEXT out vec4 vPrim[];
|
|
|
|
layout(location = 2) out BlockOut
|
|
{
|
|
vec4 a;
|
|
vec4 b;
|
|
} outputs[];
|
|
|
|
layout(location = 4) perprimitiveEXT out BlockOutPrim
|
|
{
|
|
vec4 a;
|
|
vec4 b;
|
|
} prim_outputs[];
|
|
|
|
shared float shared_float[16];
|
|
|
|
struct TaskPayload
|
|
{
|
|
float a;
|
|
float b;
|
|
int c;
|
|
};
|
|
|
|
taskPayloadSharedEXT TaskPayload payload;
|
|
|
|
void main()
|
|
{
|
|
SetMeshOutputsEXT(24, 22);
|
|
gl_MeshVerticesEXT[gl_LocalInvocationIndex].gl_Position = vec4(gl_GlobalInvocationID, 1.0);
|
|
// gl_MeshVerticesEXT[gl_LocalInvocationIndex].gl_PointSize = 2.0;
|
|
gl_MeshVerticesEXT[gl_LocalInvocationIndex].gl_ClipDistance[0] = 4.0;
|
|
gl_MeshVerticesEXT[gl_LocalInvocationIndex].gl_CullDistance[0] = 3.0;
|
|
gl_MeshVerticesEXT[gl_LocalInvocationIndex].gl_CullDistance[1] = 5.0;
|
|
vOut[gl_LocalInvocationIndex] = vec4(gl_GlobalInvocationID, 2.0);
|
|
outputs[gl_LocalInvocationIndex].a = vec4(5.0);
|
|
outputs[gl_LocalInvocationIndex].b = vec4(6.0);
|
|
barrier();
|
|
if (gl_LocalInvocationIndex < 22)
|
|
{
|
|
vPrim[gl_LocalInvocationIndex] = vec4(gl_WorkGroupID, 3.0);
|
|
prim_outputs[gl_LocalInvocationIndex].a = vec4(payload.a);
|
|
prim_outputs[gl_LocalInvocationIndex].b = vec4(payload.b);
|
|
gl_PrimitiveTriangleIndicesEXT[gl_LocalInvocationIndex] = uvec3(0, 1, 2) + gl_LocalInvocationIndex;
|
|
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_PrimitiveID = int(gl_GlobalInvocationID.x);
|
|
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_Layer = int(gl_GlobalInvocationID.x) + 1;
|
|
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_ViewportIndex = int(gl_GlobalInvocationID.x) + 2;
|
|
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_CullPrimitiveEXT = bool(gl_GlobalInvocationID.x & 1);
|
|
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_PrimitiveShadingRateEXT = int(gl_GlobalInvocationID.x) + 3;
|
|
}
|
|
}
|