diff options
| -rw-r--r-- | source/slang/slang-ir-glsl-legalize.cpp | 8 | ||||
| -rw-r--r-- | source/slang/slang-language-server-completion.cpp | 1 | ||||
| -rw-r--r-- | tests/cross-compile/multiview.slang | 11 | ||||
| -rw-r--r-- | tests/cross-compile/multiview.slang.glsl | 11 |
4 files changed, 31 insertions, 0 deletions
diff --git a/source/slang/slang-ir-glsl-legalize.cpp b/source/slang/slang-ir-glsl-legalize.cpp index 59f741050..76c73796f 100644 --- a/source/slang/slang-ir-glsl-legalize.cpp +++ b/source/slang/slang-ir-glsl-legalize.cpp @@ -662,6 +662,14 @@ GLSLSystemValueInfo* getGLSLSystemValueInfo( requiredType = builder->getBasicType(BaseType::Int); name = "gl_VertexIndex"; } + else if (semanticName == "sv_viewid") + { + // uint in hlsl, int in glsl + // https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GL_EXT_multiview.txt + requiredType = builder->getBasicType(BaseType::Int); + context->requireGLSLExtension(UnownedStringSlice::fromLiteral("GL_EXT_multiview")); + name = "gl_ViewIndex"; + } else if (semanticName == "sv_viewportarrayindex") { // uint on hlsl, int on glsl diff --git a/source/slang/slang-language-server-completion.cpp b/source/slang/slang-language-server-completion.cpp index c1d6fc9b5..92a0b3860 100644 --- a/source/slang/slang-language-server-completion.cpp +++ b/source/slang/slang-language-server-completion.cpp @@ -65,6 +65,7 @@ static const char* hlslSemanticNames[] = { "SV_Target", "SV_TessFactor", "SV_VertexID", + "SV_ViewID", "SV_ViewportArrayIndex", "SV_ShadingRate", }; diff --git a/tests/cross-compile/multiview.slang b/tests/cross-compile/multiview.slang new file mode 100644 index 000000000..86d80cd51 --- /dev/null +++ b/tests/cross-compile/multiview.slang @@ -0,0 +1,11 @@ +// multiview.slang + +// Confirm that the SPV_KHR_multiview and EXT_multiview extensions are compiled +// correctly + +//TEST:CROSS_COMPILE:-target spirv-assembly -entry main -stage vertex + +void main(uint viewId : SV_ViewID, out float4 p : SV_Position) +{ + p = float4(viewId, 0, 0, 0); +} diff --git a/tests/cross-compile/multiview.slang.glsl b/tests/cross-compile/multiview.slang.glsl new file mode 100644 index 000000000..04476cada --- /dev/null +++ b/tests/cross-compile/multiview.slang.glsl @@ -0,0 +1,11 @@ +// multiview.slang.glsl +#version 450 +#extension GL_EXT_multiview : require + +void main() +{ + // Cast to uint as the GLSL extension types gl_ViewIndex as `highp int` + gl_Position = vec4(float(uint(gl_ViewIndex)), 0, 0, 0); + return; +} + |
