From f37f4d23fc967f48d6261f38174c31b88fa0e647 Mon Sep 17 00:00:00 2001
From: John Kessenich <cepheus@frii.com>
Date: Mon, 2 Jan 2017 14:59:19 -0700
Subject: [PATCH] HLSL: Fix issue #646: map SV_DispatchThreadID ->
 GlobalInvocationID.

---
 Test/baseResults/hlsl.basic.comp.out      | 52 ++++++++++++++---------
 Test/baseResults/hlsl.numthreads.comp.out | 10 ++---
 Test/hlsl.basic.comp                      |  4 +-
 glslang/Include/revision.h                |  4 +-
 hlsl/hlslParseHelper.cpp                  |  2 +-
 5 files changed, 43 insertions(+), 29 deletions(-)

diff --git a/Test/baseResults/hlsl.basic.comp.out b/Test/baseResults/hlsl.basic.comp.out
index 9101e22f8..b6557efa5 100755
--- a/Test/baseResults/hlsl.basic.comp.out
+++ b/Test/baseResults/hlsl.basic.comp.out
@@ -2,13 +2,17 @@ hlsl.basic.comp
 Shader version: 450
 local_size = (1, 1, 1)
 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      'dti' (in int LocalInvocationID)
+0:4      'dti' (in int GlobalInvocationID)
+0:4      'gti' (in int LocalInvocationID)
 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:?     '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)
 
 
@@ -18,41 +22,51 @@ Linked compute stage:
 Shader version: 450
 local_size = (1, 1, 1)
 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      'dti' (in int LocalInvocationID)
+0:4      'dti' (in int GlobalInvocationID)
+0:4      'gti' (in int LocalInvocationID)
 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:?     '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)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 16
+// Id's are bound by 20
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "main" 8
+                              EntryPoint GLCompute 4  "main" 8 10
                               ExecutionMode 4 LocalSize 1 1 1
                               Name 4  "main"
                               Name 8  "dti"
-                              Name 15  "a"
-                              Decorate 8(dti) BuiltIn LocalInvocationId
+                              Name 10  "gti"
+                              Name 19  "a"
+                              Decorate 8(dti) BuiltIn GlobalInvocationId
+                              Decorate 10(gti) BuiltIn LocalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
                7:             TypePointer Input 6(int)
           8(dti):      7(ptr) Variable Input
-               9:             TypeFloat 32
-              10:             TypeVector 9(float) 4
-              11:             TypeInt 32 0
-              12:     11(int) Constant 100
-              13:             TypeArray 10(fvec4) 12
-              14:             TypePointer Workgroup 13
-           15(a):     14(ptr) Variable Workgroup
+         10(gti):      7(ptr) Variable Input
+              13:             TypeFloat 32
+              14:             TypeVector 13(float) 4
+              15:             TypeInt 32 0
+              16:     15(int) Constant 100
+              17:             TypeArray 14(fvec4) 16
+              18:             TypePointer Workgroup 17
+           19(a):     18(ptr) Variable Workgroup
          4(main):           2 Function None 3
                5:             Label
+               9:      6(int) Load 8(dti)
+              11:      6(int) Load 10(gti)
+              12:      6(int) ISub 9 11
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.numthreads.comp.out b/Test/baseResults/hlsl.numthreads.comp.out
index 76e95c8f8..8ac76a962 100644
--- a/Test/baseResults/hlsl.numthreads.comp.out
+++ b/Test/baseResults/hlsl.numthreads.comp.out
@@ -7,9 +7,9 @@ local_size = (4, 4, 2)
 0:4      'tid' (in 3-component vector of uint)
 0:9  Function Definition: main_aux1(vu3; (temp void)
 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:?     'tid' (in 3-component vector of uint LocalInvocationID)
+0:?     'tid' (in 3-component vector of uint GlobalInvocationID)
 
 
 Linked compute stage:
@@ -23,9 +23,9 @@ local_size = (4, 4, 2)
 0:4      'tid' (in 3-component vector of uint)
 0:9  Function Definition: main_aux1(vu3; (temp void)
 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:?     'tid' (in 3-component vector of uint LocalInvocationID)
+0:?     'tid' (in 3-component vector of uint GlobalInvocationID)
 
 // Module Version 10000
 // Generated by (magic number): 80001
@@ -40,7 +40,7 @@ local_size = (4, 4, 2)
                               Name 11  "main(vu3;"
                               Name 10  "tid"
                               Name 14  "tid"
-                              Decorate 14(tid) BuiltIn LocalInvocationId
+                              Decorate 14(tid) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/hlsl.basic.comp b/Test/hlsl.basic.comp
index 8a65a5961..1d95239ed 100644
--- a/Test/hlsl.basic.comp
+++ b/Test/hlsl.basic.comp
@@ -1,6 +1,6 @@
 groupshared float4 a[100];
 
-void main(int dti : SV_DispatchThreadID)
+void main(int dti : SV_DispatchThreadID, int gti : SV_GroupThreadID)
 {
-    dti;
+    dti - gti;
 }
diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h
index f4c35bcbb..f99e69a32 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.1725"
-#define GLSLANG_DATE "30-Dec-2016"
+#define GLSLANG_REVISION "Overload400-PrecQual.1726"
+#define GLSLANG_DATE "02-Jan-2017"
diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp
index 893cbfcaf..5978ae38a 100755
--- a/hlsl/hlslParseHelper.cpp
+++ b/hlsl/hlslParseHelper.cpp
@@ -3195,7 +3195,7 @@ void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, con
     else if (semanticUpperCase == "SV_GSINSTANCEID")
         qualifier.builtIn = EbvInvocationId;
     else if (semanticUpperCase == "SV_DISPATCHTHREADID")
-        qualifier.builtIn = EbvLocalInvocationId;
+        qualifier.builtIn = EbvGlobalInvocationId;
     else if (semanticUpperCase == "SV_GROUPTHREADID")
         qualifier.builtIn = EbvLocalInvocationId;
     else if (semanticUpperCase == "SV_GROUPID")
-- 
GitLab