mirror of
https://github.com/KhronosGroup/SPIRV-Cross.git
synced 2024-11-09 22:00:05 +00:00
HLSL: Make sure to test deeply nested functions in mesh shaders.
This commit is contained in:
parent
e418266d25
commit
f5ef0a74fb
@ -54,12 +54,12 @@ groupshared float shared_float[16];
|
||||
void mesh_main(inout gl_MeshPerVertexEXT gl_MeshVerticesEXT[24], inout gl_MeshPerPrimitiveEXT gl_MeshPrimitivesEXT[22], TaskPayload _payload, inout uint2 gl_PrimitiveLineIndicesEXT[22])
|
||||
{
|
||||
SetMeshOutputCounts(24u, 22u);
|
||||
float3 _29 = float3(gl_GlobalInvocationID);
|
||||
float _31 = _29.x;
|
||||
gl_MeshVerticesEXT[gl_LocalInvocationIndex].gl_Position = float4(_31, _29.yz, 1.0f);
|
||||
float3 _171 = float3(gl_GlobalInvocationID);
|
||||
float _172 = _171.x;
|
||||
gl_MeshVerticesEXT[gl_LocalInvocationIndex].gl_Position = float4(_172, _171.yz, 1.0f);
|
||||
gl_MeshVerticesEXT[gl_LocalInvocationIndex].gl_ClipDistance[0 / 4][0 % 4] = 4.0f;
|
||||
gl_MeshVerticesEXT[gl_LocalInvocationIndex].gl_CullDistance[1 / 4][1 % 4] = 5.0f;
|
||||
gl_MeshVerticesEXT[gl_LocalInvocationIndex].vOut = float4(_31, _29.yz, 2.0f);
|
||||
gl_MeshVerticesEXT[gl_LocalInvocationIndex].vOut = float4(_172, _171.yz, 2.0f);
|
||||
gl_MeshVerticesEXT[gl_LocalInvocationIndex].outputs.a = 5.0f.xxxx;
|
||||
gl_MeshVerticesEXT[gl_LocalInvocationIndex].outputs.b = 6.0f.xxxx;
|
||||
GroupMemoryBarrierWithGroupSync();
|
||||
@ -69,12 +69,12 @@ void mesh_main(inout gl_MeshPerVertexEXT gl_MeshVerticesEXT[24], inout gl_MeshPe
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].prim_outputs.a = _payload.a.xxxx;
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].prim_outputs.b = _payload.b.xxxx;
|
||||
gl_PrimitiveLineIndicesEXT[gl_LocalInvocationIndex] = uint2(0u, 1u) + gl_LocalInvocationIndex.xx;
|
||||
int _126 = int(gl_GlobalInvocationID.x);
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_PrimitiveID = _126;
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_Layer = _126 + 1;
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_ViewportIndex = _126 + 2;
|
||||
int _225 = int(gl_GlobalInvocationID.x);
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_PrimitiveID = _225;
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_Layer = _225 + 1;
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_ViewportIndex = _225 + 2;
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_CullPrimitiveEXT = (gl_GlobalInvocationID.x & 1u) != 0u;
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_PrimitiveShadingRateEXT = _126 + 3;
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_PrimitiveShadingRateEXT = _225 + 3;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -51,7 +51,17 @@ struct gl_MeshPerPrimitiveEXT
|
||||
|
||||
groupshared float shared_float[16];
|
||||
|
||||
void mesh_main(inout gl_MeshPerVertexEXT gl_MeshVerticesEXT[24], inout gl_MeshPerPrimitiveEXT gl_MeshPrimitivesEXT[22], TaskPayload _payload, inout uint2 gl_PrimitiveLineIndicesEXT[22])
|
||||
void main3(inout uint2 gl_PrimitiveLineIndicesEXT[22], inout gl_MeshPerPrimitiveEXT gl_MeshPrimitivesEXT[22])
|
||||
{
|
||||
gl_PrimitiveLineIndicesEXT[gl_LocalInvocationIndex] = uint2(0u, 1u) + gl_LocalInvocationIndex.xx;
|
||||
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 = (gl_GlobalInvocationID.x & 1u) != 0u;
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_PrimitiveShadingRateEXT = int(gl_GlobalInvocationID.x) + 3;
|
||||
}
|
||||
|
||||
void main2(inout gl_MeshPerVertexEXT gl_MeshVerticesEXT[24], inout gl_MeshPerPrimitiveEXT gl_MeshPrimitivesEXT[22], TaskPayload _payload, inout uint2 gl_PrimitiveLineIndicesEXT[22])
|
||||
{
|
||||
SetMeshOutputCounts(24u, 22u);
|
||||
gl_MeshVerticesEXT[gl_LocalInvocationIndex].gl_Position = float4(float3(gl_GlobalInvocationID), 1.0f);
|
||||
@ -66,15 +76,15 @@ void mesh_main(inout gl_MeshPerVertexEXT gl_MeshVerticesEXT[24], inout gl_MeshPe
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].vPrim = float4(float3(gl_WorkGroupID), 3.0f);
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].prim_outputs.a = _payload.a.xxxx;
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].prim_outputs.b = _payload.b.xxxx;
|
||||
gl_PrimitiveLineIndicesEXT[gl_LocalInvocationIndex] = uint2(0u, 1u) + gl_LocalInvocationIndex.xx;
|
||||
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 = (gl_GlobalInvocationID.x & 1u) != 0u;
|
||||
gl_MeshPrimitivesEXT[gl_LocalInvocationIndex].gl_PrimitiveShadingRateEXT = int(gl_GlobalInvocationID.x) + 3;
|
||||
main3(gl_PrimitiveLineIndicesEXT, gl_MeshPrimitivesEXT);
|
||||
}
|
||||
}
|
||||
|
||||
void mesh_main(inout gl_MeshPerVertexEXT gl_MeshVerticesEXT[24], inout gl_MeshPerPrimitiveEXT gl_MeshPrimitivesEXT[22], TaskPayload _payload, inout uint2 gl_PrimitiveLineIndicesEXT[22])
|
||||
{
|
||||
main2(gl_MeshVerticesEXT, gl_MeshPrimitivesEXT, _payload, gl_PrimitiveLineIndicesEXT);
|
||||
}
|
||||
|
||||
[outputtopology("line")]
|
||||
[numthreads(2, 3, 4)]
|
||||
void main(SPIRV_Cross_Input stage_input, out vertices gl_MeshPerVertexEXT gl_MeshVerticesEXT[24], out primitives gl_MeshPerPrimitiveEXT gl_MeshPrimitivesEXT[22], in payload TaskPayload _payload, out indices uint2 gl_PrimitiveLineIndicesEXT[22])
|
||||
|
@ -37,7 +37,17 @@ struct TaskPayload
|
||||
|
||||
taskPayloadSharedEXT TaskPayload payload;
|
||||
|
||||
void main()
|
||||
void main3()
|
||||
{
|
||||
gl_PrimitiveLineIndicesEXT[gl_LocalInvocationIndex] = uvec2(0, 1) + 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;
|
||||
}
|
||||
|
||||
void main2()
|
||||
{
|
||||
SetMeshOutputsEXT(24, 22);
|
||||
gl_MeshVerticesEXT[gl_LocalInvocationIndex].gl_Position = vec4(gl_GlobalInvocationID, 1.0);
|
||||
@ -53,11 +63,11 @@ void main()
|
||||
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_PrimitiveLineIndicesEXT[gl_LocalInvocationIndex] = uvec2(0, 1) + 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;
|
||||
main3();
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
main2();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user