summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/slang-ir-glsl-legalize.cpp9
-rw-r--r--tests/bugs/gh-6525.slang16
2 files changed, 25 insertions, 0 deletions
diff --git a/source/slang/slang-ir-glsl-legalize.cpp b/source/slang/slang-ir-glsl-legalize.cpp
index 455c924ca..802fc1eb4 100644
--- a/source/slang/slang-ir-glsl-legalize.cpp
+++ b/source/slang/slang-ir-glsl-legalize.cpp
@@ -3541,6 +3541,15 @@ void legalizeEntryPointParameterForGLSL(
if (elem.key == key)
{
realGlobalVar = elem.val.irValue;
+ if (!realGlobalVar &&
+ ScalarizedVal::Flavor::typeAdapter == elem.val.flavor)
+ {
+ if (auto typeAdapterVal =
+ as<ScalarizedTypeAdapterValImpl>(elem.val.impl))
+ {
+ realGlobalVar = typeAdapterVal->val.irValue;
+ }
+ }
break;
}
}
diff --git a/tests/bugs/gh-6525.slang b/tests/bugs/gh-6525.slang
new file mode 100644
index 000000000..fe57b601c
--- /dev/null
+++ b/tests/bugs/gh-6525.slang
@@ -0,0 +1,16 @@
+//TEST:SIMPLE(filecheck=CHECK): -target spirv
+
+//CHECK: OpEntryPoint
+
+// SV_VertexID is a int in the system binding semantic.
+// However, declare it as uint should also work with
+// the typeAdapter mechanism in Slang compiler.
+in uint gl_VertexIndex : SV_VertexID;
+
+static const float2 uvs[] = { float2(0.0, 0.0), float2(0.0, 2.0), float2(2.0, 0.0) };
+
+[shader("vertex")]
+float4 vert_main() : SV_Position{
+ const float2 uv = uvs[gl_VertexIndex];
+ return float4((uv * 2.0 - 1.0), 0.0, 1.0);
+} \ No newline at end of file