HLSL: Fix issue #646: map SV_DispatchThreadID -> GlobalInvocationID.

This commit is contained in:
John Kessenich 2017-01-02 14:59:19 -07:00
parent aa6d56298d
commit f37f4d23fc
5 changed files with 43 additions and 29 deletions

View File

@ -2,13 +2,17 @@ hlsl.basic.comp
Shader version: 450 Shader version: 450
local_size = (1, 1, 1) local_size = (1, 1, 1)
0:? Sequence 0:? Sequence
0:4 Function Definition: main(i1; (temp void) 0:4 Function Definition: main(i1;i1; (temp void)
0:4 Function Parameters: 0:4 Function Parameters:
0:4 'dti' (in int LocalInvocationID) 0:4 'dti' (in int GlobalInvocationID)
0:4 'gti' (in int LocalInvocationID)
0:? Sequence 0:? Sequence
0:5 'dti' (in int LocalInvocationID) 0:5 subtract (temp int)
0:5 'dti' (in int GlobalInvocationID)
0:5 'gti' (in int LocalInvocationID)
0:? Linker Objects 0:? Linker Objects
0:? 'dti' (in int LocalInvocationID) 0:? 'dti' (in int GlobalInvocationID)
0:? 'gti' (in int LocalInvocationID)
0:? 'a' (shared 100-element array of 4-component vector of float) 0:? 'a' (shared 100-element array of 4-component vector of float)
@ -18,41 +22,51 @@ Linked compute stage:
Shader version: 450 Shader version: 450
local_size = (1, 1, 1) local_size = (1, 1, 1)
0:? Sequence 0:? Sequence
0:4 Function Definition: main(i1; (temp void) 0:4 Function Definition: main(i1;i1; (temp void)
0:4 Function Parameters: 0:4 Function Parameters:
0:4 'dti' (in int LocalInvocationID) 0:4 'dti' (in int GlobalInvocationID)
0:4 'gti' (in int LocalInvocationID)
0:? Sequence 0:? Sequence
0:5 'dti' (in int LocalInvocationID) 0:5 subtract (temp int)
0:5 'dti' (in int GlobalInvocationID)
0:5 'gti' (in int LocalInvocationID)
0:? Linker Objects 0:? Linker Objects
0:? 'dti' (in int LocalInvocationID) 0:? 'dti' (in int GlobalInvocationID)
0:? 'gti' (in int LocalInvocationID)
0:? 'a' (shared 100-element array of 4-component vector of float) 0:? 'a' (shared 100-element array of 4-component vector of float)
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 16 // Id's are bound by 20
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main" 8 EntryPoint GLCompute 4 "main" 8 10
ExecutionMode 4 LocalSize 1 1 1 ExecutionMode 4 LocalSize 1 1 1
Name 4 "main" Name 4 "main"
Name 8 "dti" Name 8 "dti"
Name 15 "a" Name 10 "gti"
Decorate 8(dti) BuiltIn LocalInvocationId Name 19 "a"
Decorate 8(dti) BuiltIn GlobalInvocationId
Decorate 10(gti) BuiltIn LocalInvocationId
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 1 6: TypeInt 32 1
7: TypePointer Input 6(int) 7: TypePointer Input 6(int)
8(dti): 7(ptr) Variable Input 8(dti): 7(ptr) Variable Input
9: TypeFloat 32 10(gti): 7(ptr) Variable Input
10: TypeVector 9(float) 4 13: TypeFloat 32
11: TypeInt 32 0 14: TypeVector 13(float) 4
12: 11(int) Constant 100 15: TypeInt 32 0
13: TypeArray 10(fvec4) 12 16: 15(int) Constant 100
14: TypePointer Workgroup 13 17: TypeArray 14(fvec4) 16
15(a): 14(ptr) Variable Workgroup 18: TypePointer Workgroup 17
19(a): 18(ptr) Variable Workgroup
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
9: 6(int) Load 8(dti)
11: 6(int) Load 10(gti)
12: 6(int) ISub 9 11
Return Return
FunctionEnd FunctionEnd

View File

@ -7,9 +7,9 @@ local_size = (4, 4, 2)
0:4 'tid' (in 3-component vector of uint) 0:4 'tid' (in 3-component vector of uint)
0:9 Function Definition: main_aux1(vu3; (temp void) 0:9 Function Definition: main_aux1(vu3; (temp void)
0:9 Function Parameters: 0:9 Function Parameters:
0:9 'tid' (in 3-component vector of uint LocalInvocationID) 0:9 'tid' (in 3-component vector of uint GlobalInvocationID)
0:? Linker Objects 0:? Linker Objects
0:? 'tid' (in 3-component vector of uint LocalInvocationID) 0:? 'tid' (in 3-component vector of uint GlobalInvocationID)
Linked compute stage: Linked compute stage:
@ -23,9 +23,9 @@ local_size = (4, 4, 2)
0:4 'tid' (in 3-component vector of uint) 0:4 'tid' (in 3-component vector of uint)
0:9 Function Definition: main_aux1(vu3; (temp void) 0:9 Function Definition: main_aux1(vu3; (temp void)
0:9 Function Parameters: 0:9 Function Parameters:
0:9 'tid' (in 3-component vector of uint LocalInvocationID) 0:9 'tid' (in 3-component vector of uint GlobalInvocationID)
0:? Linker Objects 0:? Linker Objects
0:? 'tid' (in 3-component vector of uint LocalInvocationID) 0:? 'tid' (in 3-component vector of uint GlobalInvocationID)
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
@ -40,7 +40,7 @@ local_size = (4, 4, 2)
Name 11 "main(vu3;" Name 11 "main(vu3;"
Name 10 "tid" Name 10 "tid"
Name 14 "tid" Name 14 "tid"
Decorate 14(tid) BuiltIn LocalInvocationId Decorate 14(tid) BuiltIn GlobalInvocationId
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeInt 32 0 6: TypeInt 32 0

View File

@ -1,6 +1,6 @@
groupshared float4 a[100]; groupshared float4 a[100];
void main(int dti : SV_DispatchThreadID) void main(int dti : SV_DispatchThreadID, int gti : SV_GroupThreadID)
{ {
dti; dti - gti;
} }

View File

@ -2,5 +2,5 @@
// For the version, it uses the latest git tag followed by the number of commits. // 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). // For the date, it uses the current date (when then script is run).
#define GLSLANG_REVISION "Overload400-PrecQual.1725" #define GLSLANG_REVISION "Overload400-PrecQual.1726"
#define GLSLANG_DATE "30-Dec-2016" #define GLSLANG_DATE "02-Jan-2017"

View File

@ -3195,7 +3195,7 @@ void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, con
else if (semanticUpperCase == "SV_GSINSTANCEID") else if (semanticUpperCase == "SV_GSINSTANCEID")
qualifier.builtIn = EbvInvocationId; qualifier.builtIn = EbvInvocationId;
else if (semanticUpperCase == "SV_DISPATCHTHREADID") else if (semanticUpperCase == "SV_DISPATCHTHREADID")
qualifier.builtIn = EbvLocalInvocationId; qualifier.builtIn = EbvGlobalInvocationId;
else if (semanticUpperCase == "SV_GROUPTHREADID") else if (semanticUpperCase == "SV_GROUPTHREADID")
qualifier.builtIn = EbvLocalInvocationId; qualifier.builtIn = EbvLocalInvocationId;
else if (semanticUpperCase == "SV_GROUPID") else if (semanticUpperCase == "SV_GROUPID")