summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/slang-ir-glsl-legalize.cpp8
-rw-r--r--source/slang/slang-language-server-completion.cpp1
-rw-r--r--tests/cross-compile/multiview.slang11
-rw-r--r--tests/cross-compile/multiview.slang.glsl11
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;
+}
+