SPV: HLSL: Move to correct HLSL barrier semantics, per Khronos recommendation.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index ecb8b1e..f933a04 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -1762,8 +1762,9 @@
     case glslang::EOpMemoryBarrierImage:
     case glslang::EOpMemoryBarrierShared:
     case glslang::EOpGroupMemoryBarrier:
+    case glslang::EOpDeviceMemoryBarrier:
     case glslang::EOpAllMemoryBarrierWithGroupSync:
-    case glslang::EOpGroupMemoryBarrierWithGroupSync:
+    case glslang::EOpDeviceMemoryBarrierWithGroupSync:
     case glslang::EOpWorkgroupMemoryBarrier:
     case glslang::EOpWorkgroupMemoryBarrierWithGroupSync:
         noReturnValue = true;
@@ -5466,21 +5467,28 @@
                                                          spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpAllMemoryBarrierWithGroupSync:
-        // Control barrier with non-"None" semantic is also a memory barrier.
-        builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice,
+        builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice,
                                         spv::MemorySemanticsAllMemory |
-                                        spv::MemorySemanticsSequentiallyConsistentMask);
+                                        spv::MemorySemanticsAcquireReleaseMask);
         return 0;
-    case glslang::EOpGroupMemoryBarrierWithGroupSync:
-        // Control barrier with non-"None" semantic is also a memory barrier.
-        builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice, spv::MemorySemanticsCrossWorkgroupMemoryMask);
+    case glslang::EOpDeviceMemoryBarrier:
+        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsUniformMemoryMask |
+                                                      spv::MemorySemanticsImageMemoryMask |
+                                                      spv::MemorySemanticsAcquireReleaseMask);
+        return 0;
+    case glslang::EOpDeviceMemoryBarrierWithGroupSync:
+        builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice, spv::MemorySemanticsUniformMemoryMask |
+                                                                            spv::MemorySemanticsImageMemoryMask |
+                                                                            spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpWorkgroupMemoryBarrier:
-        builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask);
+        builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask |
+                                                         spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpWorkgroupMemoryBarrierWithGroupSync:
-        // Control barrier with non-"None" semantic is also a memory barrier.
-        builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask);
+        builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup,
+                                        spv::MemorySemanticsWorkgroupMemoryMask |
+                                        spv::MemorySemanticsAcquireReleaseMask);
         return 0;
 #ifdef AMD_EXTENSIONS
     case glslang::EOpTime:
diff --git a/Test/baseResults/hlsl.intrinsics.barriers.comp.out b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
index b525c3e..f5b4814 100644
--- a/Test/baseResults/hlsl.intrinsics.barriers.comp.out
+++ b/Test/baseResults/hlsl.intrinsics.barriers.comp.out
@@ -7,8 +7,8 @@
 0:?     Sequence
 0:4      MemoryBarrier ( temp void)
 0:5      AllMemoryBarrierWithGroupSync ( temp void)
-0:6      GroupMemoryBarrier ( temp void)
-0:7      GroupMemoryBarrierWithGroupSync ( temp void)
+0:6      DeviceMemoryBarrier ( temp void)
+0:7      DeviceMemoryBarrierWithGroupSync ( temp void)
 0:8      WorkgroupMemoryBarrier ( temp void)
 0:9      WorkgroupMemoryBarrierWithGroupSync ( temp void)
 0:11      Branch: Return with expression
@@ -35,8 +35,8 @@
 0:?     Sequence
 0:4      MemoryBarrier ( temp void)
 0:5      AllMemoryBarrierWithGroupSync ( temp void)
-0:6      GroupMemoryBarrier ( temp void)
-0:7      GroupMemoryBarrierWithGroupSync ( temp void)
+0:6      DeviceMemoryBarrier ( temp void)
+0:7      DeviceMemoryBarrierWithGroupSync ( temp void)
 0:8      WorkgroupMemoryBarrier ( temp void)
 0:9      WorkgroupMemoryBarrierWithGroupSync ( temp void)
 0:11      Branch: Return with expression
@@ -53,18 +53,18 @@
 
 // Module Version 10000
 // Generated by (magic number): 80003
-// Id's are bound by 23
+// Id's are bound by 22
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "ComputeShaderFunction" 21
+                              EntryPoint GLCompute 4  "ComputeShaderFunction" 20
                               ExecutionMode 4 LocalSize 1 1 1
                               Source HLSL 500
                               Name 4  "ComputeShaderFunction"
                               Name 8  "@ComputeShaderFunction("
-                              Name 21  "@entryPointOutput"
-                              Decorate 21(@entryPointOutput) Location 0
+                              Name 20  "@entryPointOutput"
+                              Decorate 20(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -72,26 +72,25 @@
               10:             TypeInt 32 0
               11:     10(int) Constant 1
               12:     10(int) Constant 4040
-              13:     10(int) Constant 4048
-              14:     10(int) Constant 2
-              15:     10(int) Constant 512
-              16:     10(int) Constant 256
-              17:    6(float) Constant 0
-              20:             TypePointer Output 6(float)
-21(@entryPointOutput):     20(ptr) Variable Output
+              13:     10(int) Constant 2
+              14:     10(int) Constant 2120
+              15:     10(int) Constant 264
+              16:    6(float) Constant 0
+              19:             TypePointer Output 6(float)
+20(@entryPointOutput):     19(ptr) Variable Output
 4(ComputeShaderFunction):           2 Function None 3
                5:             Label
-              22:    6(float) FunctionCall 8(@ComputeShaderFunction()
-                              Store 21(@entryPointOutput) 22
+              21:    6(float) FunctionCall 8(@ComputeShaderFunction()
+                              Store 20(@entryPointOutput) 21
                               Return
                               FunctionEnd
 8(@ComputeShaderFunction():    6(float) Function None 7
                9:             Label
                               MemoryBarrier 11 12
-                              ControlBarrier 11 11 13
-                              MemoryBarrier 14 12
-                              ControlBarrier 11 11 15
-                              MemoryBarrier 14 16
-                              ControlBarrier 14 14 16
-                              ReturnValue 17
+                              ControlBarrier 13 11 12
+                              MemoryBarrier 11 14
+                              ControlBarrier 13 11 14
+                              MemoryBarrier 13 15
+                              ControlBarrier 13 13 15
+                              ReturnValue 16
                               FunctionEnd
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index 4a28e35..5876019 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -722,7 +722,8 @@
     EOpInterlockedOr,       // ...
     EOpInterlockedXor,      // ...
     EOpAllMemoryBarrierWithGroupSync,    // memory barriers without non-hlsl AST equivalents
-    EOpGroupMemoryBarrierWithGroupSync,  // ...
+    EOpDeviceMemoryBarrier,              // ...
+    EOpDeviceMemoryBarrierWithGroupSync, // ...
     EOpWorkgroupMemoryBarrier,           // ...
     EOpWorkgroupMemoryBarrierWithGroupSync, // ...
     EOpEvaluateAttributeSnapped,         // InterpolateAtOffset with int position on 16x16 grid
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index 7e15392..dd2cdc8 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -791,7 +791,8 @@
     case EOpGenMul:                     out.debug << "mul";                   break;
 
     case EOpAllMemoryBarrierWithGroupSync:    out.debug << "AllMemoryBarrierWithGroupSync";    break;
-    case EOpGroupMemoryBarrierWithGroupSync: out.debug << "GroupMemoryBarrierWithGroupSync"; break;
+    case EOpDeviceMemoryBarrier:              out.debug << "DeviceMemoryBarrier";              break;
+    case EOpDeviceMemoryBarrierWithGroupSync: out.debug << "DeviceMemoryBarrierWithGroupSync"; break;
     case EOpWorkgroupMemoryBarrier:           out.debug << "WorkgroupMemoryBarrier";           break;
     case EOpWorkgroupMemoryBarrierWithGroupSync: out.debug << "WorkgroupMemoryBarrierWithGroupSync"; break;
 
diff --git a/hlsl/hlslParseables.cpp b/hlsl/hlslParseables.cpp
index bae9e6e..7a46e80 100755
--- a/hlsl/hlslParseables.cpp
+++ b/hlsl/hlslParseables.cpp
@@ -1087,8 +1087,8 @@
     symbolTable.relateToOperator("ddy_fine",                    EOpDPdyFine);
     symbolTable.relateToOperator("degrees",                     EOpDegrees);
     symbolTable.relateToOperator("determinant",                 EOpDeterminant);
-    symbolTable.relateToOperator("DeviceMemoryBarrier",         EOpGroupMemoryBarrier);
-    symbolTable.relateToOperator("DeviceMemoryBarrierWithGroupSync", EOpGroupMemoryBarrierWithGroupSync); // ...
+    symbolTable.relateToOperator("DeviceMemoryBarrier",         EOpDeviceMemoryBarrier);
+    symbolTable.relateToOperator("DeviceMemoryBarrierWithGroupSync", EOpDeviceMemoryBarrierWithGroupSync);
     symbolTable.relateToOperator("distance",                    EOpDistance);
     symbolTable.relateToOperator("dot",                         EOpDot);
     symbolTable.relateToOperator("dst",                         EOpDst);