summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--source/slang/glsl.meta.slang1
-rw-r--r--source/slang/slang-ir-glsl-legalize.cpp3
-rw-r--r--tests/glsl-intrinsic/gl-drawid.slang11
4 files changed, 20 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index dac907f55..6330eae45 100644
--- a/.gitignore
+++ b/.gitignore
@@ -57,6 +57,11 @@ tools/gfx-unit-test/test-tmp-*
# Files generated by other shader compilers
*.spv
+*.spv-asm
+*.glsl
+*.hlsl
+*.metal
+*.wgsl
# Intermediate source files generated during build process
/source/slang/slang-generated-*.h
diff --git a/source/slang/glsl.meta.slang b/source/slang/glsl.meta.slang
index f63daf6b0..c78aa2a15 100644
--- a/source/slang/glsl.meta.slang
+++ b/source/slang/glsl.meta.slang
@@ -215,6 +215,7 @@ public in int gl_ViewIndex : SV_ViewID;
public in int gl_ViewportIndex : SV_ViewportArrayIndex;
public in int gl_BaseVertex : SV_StartVertexLocation;
public in int gl_BaseInstance : SV_StartInstanceLocation;
+public in int gl_DrawID : SV_DrawIndex;
public in int gl_FragInvocationCountEXT : SV_FragInvocationCount;
public in int2 gl_FragSizeEXT : SV_FragSize;
diff --git a/source/slang/slang-ir-glsl-legalize.cpp b/source/slang/slang-ir-glsl-legalize.cpp
index bc26b223b..1511bbff2 100644
--- a/source/slang/slang-ir-glsl-legalize.cpp
+++ b/source/slang/slang-ir-glsl-legalize.cpp
@@ -678,6 +678,9 @@ GLSLSystemValueInfo* getGLSLSystemValueInfo(
}
else if (semanticName == "sv_drawindex")
{
+ context->requireGLSLVersion(ProfileVersion::GLSL_460);
+ context->requireGLSLExtension(toSlice("GL_ARB_shader_draw_parameters"));
+
name = "gl_DrawID";
requiredType = builder->getBasicType(BaseType::Int);
}
diff --git a/tests/glsl-intrinsic/gl-drawid.slang b/tests/glsl-intrinsic/gl-drawid.slang
new file mode 100644
index 000000000..d9daca8a4
--- /dev/null
+++ b/tests/glsl-intrinsic/gl-drawid.slang
@@ -0,0 +1,11 @@
+//TEST:SIMPLE(filecheck=SPIRV): -target spirv -entry main -stage vertex
+
+// SPIRV: OpDecorate %{{.*}} BuiltIn DrawIndex
+
+#version 460
+
+void main()
+{
+ int drawID = gl_DrawID;
+ gl_Position = vec4(drawID, 0, 0, 1);
+}