summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/slang-ir-legalize-varying-params.cpp3
-rw-r--r--tests/wgsl/entry-point-legalization.slang40
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;
+}