diff options
| -rw-r--r-- | source/slang/slang-ir-glsl-legalize.cpp | 9 | ||||
| -rw-r--r-- | tests/bugs/gh-6525.slang | 16 |
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 |
