diff options
| -rw-r--r-- | source/slang/slang-ir-legalize-varying-params.cpp | 3 | ||||
| -rw-r--r-- | tests/wgsl/entry-point-legalization.slang | 40 |
2 files changed, 43 insertions, 0 deletions
diff --git a/source/slang/slang-ir-legalize-varying-params.cpp b/source/slang/slang-ir-legalize-varying-params.cpp index ca65a37c1..bd1648513 100644 --- a/source/slang/slang-ir-legalize-varying-params.cpp +++ b/source/slang/slang-ir-legalize-varying-params.cpp @@ -1908,6 +1908,9 @@ private: field->getKey(), fieldParam); + // Remove the sementic info from the original struct + semanticInfoToRemove.add(field); + IRVarLayout* fieldLayout = structTypeLayout ? structTypeLayout->getFieldLayout(fieldIndex) : nullptr; if (varLayout) diff --git a/tests/wgsl/entry-point-legalization.slang b/tests/wgsl/entry-point-legalization.slang new file mode 100644 index 000000000..454d3a775 --- /dev/null +++ b/tests/wgsl/entry-point-legalization.slang @@ -0,0 +1,40 @@ +// tests/wgsl/entry-point-legalization.slang +//TEST:SIMPLE(filecheck=CHK):-target wgsl-spirv-asm -stage vertex -entry vertexMain +//TEST:SIMPLE(filecheck=CHK):-target wgsl-spirv-asm -stage vertex -entry vertexMain -DREPRODUCE + +//CHK: %vertexMain = OpFunction + +struct AssembledVertex +{ + float3 position; +}; + +struct VertexStageInput +{ + AssembledVertex assembledVertex : A; +}; + +struct VertexStageOutput +{ + float4 sv_position : SV_Position; +}; + +float3 GetPosition(VertexStageInput i) +{ + return i.assembledVertex.position; +} + +[shader("vertex")] +VertexStageOutput vertexMain(VertexStageInput input) +{ + VertexStageOutput output; + +#if defined(REPRODUCE) + float3 position = GetPosition(input); +#else + float3 position = input.assembledVertex.position; +#endif + + output.sv_position = float4(position, 1.0); + return output; +} |
