HLSL: Support SV_Coverage and SV_DispatchThreadId; catch SV_GroupIndex.
diff --git a/Test/baseResults/hlsl.basic.comp.out b/Test/baseResults/hlsl.basic.comp.out
new file mode 100755
index 0000000..1948ec3
--- /dev/null
+++ b/Test/baseResults/hlsl.basic.comp.out
@@ -0,0 +1,59 @@
+hlsl.basic.comp
+Shader version: 450
+local_size = (1, 1, 1)
+0:? Sequence
+0:4 Function Definition: main( (temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:5 dti: direct index for structure (layout(offset=0 ) uniform int LocalInvocationID)
+0:5 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int LocalInvocationID dti})
+0:5 Constant:
+0:5 0 (const uint)
+0:? Linker Objects
+0:? 'anon@0' (uniform block{layout(offset=0 ) uniform int LocalInvocationID dti})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+local_size = (1, 1, 1)
+0:? Sequence
+0:4 Function Definition: main( (temp void)
+0:4 Function Parameters:
+0:? Sequence
+0:5 dti: direct index for structure (layout(offset=0 ) uniform int LocalInvocationID)
+0:5 'anon@0' (layout(row_major std140 ) uniform block{layout(offset=0 ) uniform int LocalInvocationID dti})
+0:5 Constant:
+0:5 0 (const uint)
+0:? Linker Objects
+0:? 'anon@0' (uniform block{layout(offset=0 ) uniform int LocalInvocationID dti})
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 11
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main"
+ ExecutionMode 4 LocalSize 1 1 1
+ Name 4 "main"
+ Name 7 "$Global"
+ MemberName 7($Global) 0 "dti"
+ Name 9 ""
+ MemberDecorate 7($Global) 0 Offset 0
+ MemberDecorate 7($Global) 0 BuiltIn LocalInvocationId
+ Decorate 7($Global) Block
+ Decorate 9 DescriptorSet 0
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 1
+ 7($Global): TypeStruct 6(int)
+ 8: TypePointer Uniform 7($Global)
+ 9: 8(ptr) Variable Uniform
+ 10: 6(int) Constant 0
+ 4(main): 2 Function None 3
+ 5: Label
+ Return
+ FunctionEnd
diff --git a/Test/baseResults/hlsl.inoutquals.frag.out b/Test/baseResults/hlsl.inoutquals.frag.out
index 83fe24b..b2716a4 100644
--- a/Test/baseResults/hlsl.inoutquals.frag.out
+++ b/Test/baseResults/hlsl.inoutquals.frag.out
@@ -18,9 +18,10 @@
0:11 'x' (in float)
0:11 Constant:
0:11 -1.000000
-0:15 Function Definition: main(vf4; (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:15 Function Definition: main(vf4;i1; (temp structure{temp 4-component vector of float Color, temp float Depth})
0:15 Function Parameters:
0:15 'inpos' (noperspective in 4-component vector of float FragCoord)
+0:15 'sampleMask' (out int SampleMaskIn)
0:? Sequence
0:18 Sequence
0:18 move second child to first child (temp float)
@@ -74,6 +75,7 @@
0:? 'Color' (layout(location=0 ) out 4-component vector of float)
0:? 'Depth' (out float FragDepth)
0:? 'inpos' (noperspective in 4-component vector of float FragCoord)
+0:? 'sampleMask' (out int SampleMaskIn)
Linked fragment stage:
@@ -98,9 +100,10 @@
0:11 'x' (in float)
0:11 Constant:
0:11 -1.000000
-0:15 Function Definition: main(vf4; (temp structure{temp 4-component vector of float Color, temp float Depth})
+0:15 Function Definition: main(vf4;i1; (temp structure{temp 4-component vector of float Color, temp float Depth})
0:15 Function Parameters:
0:15 'inpos' (noperspective in 4-component vector of float FragCoord)
+0:15 'sampleMask' (out int SampleMaskIn)
0:? Sequence
0:18 Sequence
0:18 move second child to first child (temp float)
@@ -154,15 +157,17 @@
0:? 'Color' (layout(location=0 ) out 4-component vector of float)
0:? 'Depth' (out float FragDepth)
0:? 'inpos' (noperspective in 4-component vector of float FragCoord)
+0:? 'sampleMask' (out int SampleMaskIn)
// Module Version 10000
// Generated by (magic number): 80001
-// Id's are bound by 61
+// Id's are bound by 63
Capability Shader
+ Capability SampleRateShading
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
- EntryPoint Fragment 4 "main" 45 53 57
+ EntryPoint Fragment 4 "main" 45 53 57 62
ExecutionMode 4 OriginUpperLeft
Name 4 "main"
Name 12 "MyFunc(f1;f1;f1;"
@@ -182,10 +187,12 @@
Name 45 "inpos"
Name 53 "Color"
Name 57 "Depth"
+ Name 62 "sampleMask"
Decorate 45(inpos) NoPerspective
Decorate 45(inpos) BuiltIn FragCoord
Decorate 53(Color) Location 0
Decorate 57(Depth) BuiltIn FragDepth
+ Decorate 62(sampleMask) BuiltIn SampleMask
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -211,6 +218,8 @@
53(Color): 52(ptr) Variable Output
56: TypePointer Output 6(float)
57(Depth): 56(ptr) Variable Output
+ 61: TypePointer Output 34(int)
+ 62(sampleMask): 61(ptr) Variable Output
4(main): 2 Function None 3
5: Label
17(x): 7(ptr) Variable Function
diff --git a/Test/hlsl.basic.comp b/Test/hlsl.basic.comp
new file mode 100644
index 0000000..5e43510
--- /dev/null
+++ b/Test/hlsl.basic.comp
@@ -0,0 +1,6 @@
+int dti : SV_DispatchThreadID;
+
+void main()
+{
+ dti;
+}
diff --git a/Test/hlsl.inoutquals.frag b/Test/hlsl.inoutquals.frag
index 91798d5..3234688 100644
--- a/Test/hlsl.inoutquals.frag
+++ b/Test/hlsl.inoutquals.frag
@@ -11,7 +11,7 @@
x = -1; // no effect since x = in param
}
-PS_OUTPUT main(noperspective in float4 inpos : SV_Position)
+PS_OUTPUT main(noperspective in float4 inpos : SV_Position, out int sampleMask : SV_Coverage)
{
PS_OUTPUT psout;
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index 3cdfdb0..882a2d0 100644
--- a/glslang/Include/revision.h
+++ b/glslang/Include/revision.h
@@ -2,5 +2,5 @@
// For the version, it uses the latest git tag followed by the number of commits.
// For the date, it uses the current date (when then script is run).
-#define GLSLANG_REVISION "Overload400-PrecQual.1601"
+#define GLSLANG_REVISION "Overload400-PrecQual.1602"
#define GLSLANG_DATE "16-Oct-2016"
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index f50c749..b50816a 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -86,6 +86,7 @@
{"hlsl.array.multidim.frag", "main"},
{"hlsl.assoc.frag", "PixelShaderFunction"},
{"hlsl.attribute.frag", "PixelShaderFunction"},
+ {"hlsl.basic.comp", "main"},
{"hlsl.buffer.frag", "PixelShaderFunction"},
{"hlsl.calculatelod.dx10.frag", "main"},
{"hlsl.calculatelodunclamped.dx10.frag", "main"},
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index 78f18b6..b4c417d 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -2935,6 +2935,8 @@
qualifier.builtIn = EbvTessLevelInner;
else if (semanticUpperCase == "SV_GSINSTANCEID")
qualifier.builtIn = EbvInvocationId;
+ else if (semanticUpperCase == "SV_DISPATCHTHREADID")
+ qualifier.builtIn = EbvLocalInvocationId;
else if (semanticUpperCase == "SV_GROUPTHREADID")
qualifier.builtIn = EbvLocalInvocationId;
else if (semanticUpperCase == "SV_GROUPID")
@@ -2943,6 +2945,8 @@
qualifier.builtIn = EbvTessCoord;
else if (semanticUpperCase == "SV_DEPTH")
qualifier.builtIn = EbvFragDepth;
+ else if( semanticUpperCase == "SV_COVERAGE")
+ qualifier.builtIn = EbvSampleMask;
//TODO, these need to get refined to be more specific
else if( semanticUpperCase == "SV_DEPTHGREATEREQUAL")
@@ -2950,9 +2954,9 @@
else if( semanticUpperCase == "SV_DEPTHLESSEQUAL")
qualifier.builtIn = EbvFragDepthLesser;
else if( semanticUpperCase == "SV_STENCILREF")
- error(loc, "unimplemented", "SV_STENCILREF", "");
- else if( semanticUpperCase == "SV_COVERAGE")
- error(loc, "unimplemented", "SV_COVERAGE", "");
+ error(loc, "unimplemented; need ARB_shader_stencil_export", "SV_STENCILREF", "");
+ else if( semanticUpperCase == "SV_GROUPINDEX")
+ error(loc, "unimplemented", "SV_GROUPINDEX", "");
}
//