HLSL: Support SV_Coverage and SV_DispatchThreadId; catch SV_GroupIndex.

This commit is contained in:
John Kessenich 2016-10-16 12:12:11 -06:00
parent 4a3467933e
commit b50fd17acb
7 changed files with 88 additions and 9 deletions

View File

@ -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

View File

@ -18,9 +18,10 @@ gl_FragCoord origin is upper left
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 @@ gl_FragCoord origin is upper left
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 @@ gl_FragCoord origin is upper left
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 @@ gl_FragCoord origin is upper left
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 @@ gl_FragCoord origin is upper left
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 @@ gl_FragCoord origin is upper left
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

6
Test/hlsl.basic.comp Normal file
View File

@ -0,0 +1,6 @@
int dti : SV_DispatchThreadID;
void main()
{
dti;
}

View File

@ -11,7 +11,7 @@ void MyFunc(in float x, out float y, inout float z)
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;

View File

@ -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"

View File

@ -86,6 +86,7 @@ INSTANTIATE_TEST_CASE_P(
{"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"},

View File

@ -2935,6 +2935,8 @@ void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, con
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 @@ void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, con
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 @@ void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, con
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", "");
}
//