Merge pull request #592 from ChrisGautier/barrier-wg

SPV: The execution scope for barriers should be Workgroup.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index ebf8c5d..37aac17 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -4597,7 +4597,7 @@
         builder.createNoResultOp(spv::OpEndPrimitive);
         return 0;
     case glslang::EOpBarrier:
-        builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice, spv::MemorySemanticsMaskNone);
+        builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice, spv::MemorySemanticsMaskNone);
         return 0;
     case glslang::EOpMemoryBarrier:
         builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAllMemory);
diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out
old mode 100755
new mode 100644
index 3eafc2b..bd1f346
--- a/Test/baseResults/spv.310.comp.out
+++ b/Test/baseResults/spv.310.comp.out
@@ -7,121 +7,122 @@
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 66
+// Id's are bound by 67
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "main" 52
+                              EntryPoint GLCompute 4  "main" 53
                               ExecutionMode 4 LocalSize 16 32 4
                               Source ESSL 310
                               Name 4  "main"
-                              Name 12  "outb"
-                              MemberName 12(outb) 0  "f"
-                              MemberName 12(outb) 1  "g"
-                              MemberName 12(outb) 2  "h"
-                              MemberName 12(outb) 3  "uns"
-                              Name 14  "outbname"
-                              Name 18  "s"
-                              Name 23  "outbna"
-                              MemberName 23(outbna) 0  "k"
-                              MemberName 23(outbna) 1  "na"
-                              Name 25  "outbnamena"
-                              Name 41  "i"
-                              Name 47  "outs"
-                              MemberName 47(outs) 0  "s"
-                              MemberName 47(outs) 1  "va"
-                              Name 49  "outnames"
-                              Name 52  "gl_LocalInvocationID"
-                              Decorate 11 ArrayStride 16
-                              MemberDecorate 12(outb) 0 Offset 0
-                              MemberDecorate 12(outb) 1 Offset 4
-                              MemberDecorate 12(outb) 2 Offset 8
-                              MemberDecorate 12(outb) 3 Offset 16
-                              Decorate 12(outb) BufferBlock
-                              Decorate 14(outbname) DescriptorSet 0
-                              MemberDecorate 23(outbna) 0 Offset 0
-                              MemberDecorate 23(outbna) 1 Offset 16
-                              Decorate 23(outbna) BufferBlock
-                              Decorate 25(outbnamena) DescriptorSet 0
-                              Decorate 46 ArrayStride 16
-                              MemberDecorate 47(outs) 0 Offset 0
-                              MemberDecorate 47(outs) 1 Offset 16
-                              Decorate 47(outs) BufferBlock
-                              Decorate 49(outnames) DescriptorSet 0
-                              Decorate 52(gl_LocalInvocationID) BuiltIn LocalInvocationId
-                              Decorate 65 BuiltIn WorkgroupSize
+                              Name 13  "outb"
+                              MemberName 13(outb) 0  "f"
+                              MemberName 13(outb) 1  "g"
+                              MemberName 13(outb) 2  "h"
+                              MemberName 13(outb) 3  "uns"
+                              Name 15  "outbname"
+                              Name 19  "s"
+                              Name 24  "outbna"
+                              MemberName 24(outbna) 0  "k"
+                              MemberName 24(outbna) 1  "na"
+                              Name 26  "outbnamena"
+                              Name 42  "i"
+                              Name 48  "outs"
+                              MemberName 48(outs) 0  "s"
+                              MemberName 48(outs) 1  "va"
+                              Name 50  "outnames"
+                              Name 53  "gl_LocalInvocationID"
+                              Decorate 12 ArrayStride 16
+                              MemberDecorate 13(outb) 0 Offset 0
+                              MemberDecorate 13(outb) 1 Offset 4
+                              MemberDecorate 13(outb) 2 Offset 8
+                              MemberDecorate 13(outb) 3 Offset 16
+                              Decorate 13(outb) BufferBlock
+                              Decorate 15(outbname) DescriptorSet 0
+                              MemberDecorate 24(outbna) 0 Offset 0
+                              MemberDecorate 24(outbna) 1 Offset 16
+                              Decorate 24(outbna) BufferBlock
+                              Decorate 26(outbnamena) DescriptorSet 0
+                              Decorate 47 ArrayStride 16
+                              MemberDecorate 48(outs) 0 Offset 0
+                              MemberDecorate 48(outs) 1 Offset 16
+                              Decorate 48(outs) BufferBlock
+                              Decorate 50(outnames) DescriptorSet 0
+                              Decorate 53(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 66 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
-               7:      6(int) Constant 1
-               8:      6(int) Constant 0
-               9:             TypeFloat 32
-              10:             TypeVector 9(float) 3
-              11:             TypeRuntimeArray 10(fvec3)
-        12(outb):             TypeStruct 9(float) 9(float) 9(float) 11
-              13:             TypePointer Uniform 12(outb)
-    14(outbname):     13(ptr) Variable Uniform
-              15:             TypeInt 32 1
-              16:     15(int) Constant 0
-              17:             TypePointer Workgroup 9(float)
-           18(s):     17(ptr) Variable Workgroup
-              20:             TypePointer Uniform 9(float)
-              22:             TypeVector 9(float) 4
-      23(outbna):             TypeStruct 15(int) 22(fvec4)
-              24:             TypePointer Uniform 23(outbna)
-  25(outbnamena):     24(ptr) Variable Uniform
-              26:     15(int) Constant 1
-              29:             TypePointer Uniform 22(fvec4)
-              31:     15(int) Constant 3
-              32:     15(int) Constant 18
-              35:     15(int) Constant 17
-              36:    9(float) Constant 1077936128
-              37:   10(fvec3) ConstantComposite 36 36 36
-              38:             TypePointer Uniform 10(fvec3)
-              40:             TypePointer Workgroup 15(int)
-           41(i):     40(ptr) Variable Workgroup
-              46:             TypeRuntimeArray 22(fvec4)
-        47(outs):             TypeStruct 15(int) 46
-              48:             TypePointer Uniform 47(outs)
-    49(outnames):     48(ptr) Variable Uniform
-              50:             TypeVector 6(int) 3
-              51:             TypePointer Input 50(ivec3)
-52(gl_LocalInvocationID):     51(ptr) Variable Input
-              53:             TypePointer Input 6(int)
-              60:             TypePointer Uniform 15(int)
-              62:      6(int) Constant 16
-              63:      6(int) Constant 32
-              64:      6(int) Constant 4
-              65:   50(ivec3) ConstantComposite 62 63 64
+               7:      6(int) Constant 2
+               8:      6(int) Constant 1
+               9:      6(int) Constant 0
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 3
+              12:             TypeRuntimeArray 11(fvec3)
+        13(outb):             TypeStruct 10(float) 10(float) 10(float) 12
+              14:             TypePointer Uniform 13(outb)
+    15(outbname):     14(ptr) Variable Uniform
+              16:             TypeInt 32 1
+              17:     16(int) Constant 0
+              18:             TypePointer Workgroup 10(float)
+           19(s):     18(ptr) Variable Workgroup
+              21:             TypePointer Uniform 10(float)
+              23:             TypeVector 10(float) 4
+      24(outbna):             TypeStruct 16(int) 23(fvec4)
+              25:             TypePointer Uniform 24(outbna)
+  26(outbnamena):     25(ptr) Variable Uniform
+              27:     16(int) Constant 1
+              30:             TypePointer Uniform 23(fvec4)
+              32:     16(int) Constant 3
+              33:     16(int) Constant 18
+              36:     16(int) Constant 17
+              37:   10(float) Constant 1077936128
+              38:   11(fvec3) ConstantComposite 37 37 37
+              39:             TypePointer Uniform 11(fvec3)
+              41:             TypePointer Workgroup 16(int)
+           42(i):     41(ptr) Variable Workgroup
+              47:             TypeRuntimeArray 23(fvec4)
+        48(outs):             TypeStruct 16(int) 47
+              49:             TypePointer Uniform 48(outs)
+    50(outnames):     49(ptr) Variable Uniform
+              51:             TypeVector 6(int) 3
+              52:             TypePointer Input 51(ivec3)
+53(gl_LocalInvocationID):     52(ptr) Variable Input
+              54:             TypePointer Input 6(int)
+              61:             TypePointer Uniform 16(int)
+              63:      6(int) Constant 16
+              64:      6(int) Constant 32
+              65:      6(int) Constant 4
+              66:   51(ivec3) ConstantComposite 63 64 65
          4(main):           2 Function None 3
                5:             Label
-                              ControlBarrier 7 7 8
-              19:    9(float) Load 18(s)
-              21:     20(ptr) AccessChain 14(outbname) 16
-                              Store 21 19
-              27:    9(float) Load 18(s)
-              28:   22(fvec4) CompositeConstruct 27 27 27 27
-              30:     29(ptr) AccessChain 25(outbnamena) 26
-                              Store 30 28
-              33:     20(ptr) AccessChain 14(outbname) 31 32 8
-              34:    9(float) Load 33
-                              Store 18(s) 34
-              39:     38(ptr) AccessChain 14(outbname) 31 35
-                              Store 39 37
-              42:     15(int) Load 41(i)
-              43:    9(float) Load 18(s)
-              44:   10(fvec3) CompositeConstruct 43 43 43
-              45:     38(ptr) AccessChain 14(outbname) 31 42
-                              Store 45 44
-              54:     53(ptr) AccessChain 52(gl_LocalInvocationID) 8
-              55:      6(int) Load 54
-              56:    9(float) Load 18(s)
-              57:   22(fvec4) CompositeConstruct 56 56 56 56
-              58:     29(ptr) AccessChain 49(outnames) 26 55
-                              Store 58 57
-              59:     15(int) ArrayLength 14(outbname) 3
-              61:     60(ptr) AccessChain 49(outnames) 16
-                              Store 61 59
+                              ControlBarrier 7 8 9
+              20:   10(float) Load 19(s)
+              22:     21(ptr) AccessChain 15(outbname) 17
+                              Store 22 20
+              28:   10(float) Load 19(s)
+              29:   23(fvec4) CompositeConstruct 28 28 28 28
+              31:     30(ptr) AccessChain 26(outbnamena) 27
+                              Store 31 29
+              34:     21(ptr) AccessChain 15(outbname) 32 33 9
+              35:   10(float) Load 34
+                              Store 19(s) 35
+              40:     39(ptr) AccessChain 15(outbname) 32 36
+                              Store 40 38
+              43:     16(int) Load 42(i)
+              44:   10(float) Load 19(s)
+              45:   11(fvec3) CompositeConstruct 44 44 44
+              46:     39(ptr) AccessChain 15(outbname) 32 43
+                              Store 46 45
+              55:     54(ptr) AccessChain 53(gl_LocalInvocationID) 9
+              56:      6(int) Load 55
+              57:   10(float) Load 19(s)
+              58:   23(fvec4) CompositeConstruct 57 57 57 57
+              59:     30(ptr) AccessChain 50(outnames) 27 56
+                              Store 59 58
+              60:     16(int) ArrayLength 15(outbname) 3
+              62:     61(ptr) AccessChain 50(outnames) 17
+                              Store 62 60
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out
old mode 100755
new mode 100644
index bcfd963..ae469aa
--- a/Test/baseResults/spv.400.tesc.out
+++ b/Test/baseResults/spv.400.tesc.out
@@ -14,26 +14,26 @@
                               Capability ClipDistance
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 23 40 43 46 54 68 73 79 83 84 87 88 91 92
+                              EntryPoint TessellationControl 4  "main" 24 41 44 47 54 68 73 79 83 84 87 88 91 92
                               ExecutionMode 4 OutputVertices 4
                               Source GLSL 400
                               SourceExtension  "GL_ARB_separate_shader_objects"
                               Name 4  "main"
-                              Name 11  "a"
-                              Name 16  "p"
-                              Name 19  "gl_PerVertex"
-                              MemberName 19(gl_PerVertex) 0  "gl_Position"
-                              MemberName 19(gl_PerVertex) 1  "gl_PointSize"
-                              MemberName 19(gl_PerVertex) 2  "gl_ClipDistance"
-                              Name 23  "gl_in"
-                              Name 30  "ps"
-                              Name 34  "cd"
-                              Name 38  "pvi"
-                              Name 40  "gl_PatchVerticesIn"
-                              Name 42  "pid"
-                              Name 43  "gl_PrimitiveID"
-                              Name 45  "iid"
-                              Name 46  "gl_InvocationID"
+                              Name 12  "a"
+                              Name 17  "p"
+                              Name 20  "gl_PerVertex"
+                              MemberName 20(gl_PerVertex) 0  "gl_Position"
+                              MemberName 20(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 20(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 24  "gl_in"
+                              Name 31  "ps"
+                              Name 35  "cd"
+                              Name 39  "pvi"
+                              Name 41  "gl_PatchVerticesIn"
+                              Name 43  "pid"
+                              Name 44  "gl_PrimitiveID"
+                              Name 46  "iid"
+                              Name 47  "gl_InvocationID"
                               Name 50  "gl_PerVertex"
                               MemberName 50(gl_PerVertex) 0  "gl_Position"
                               MemberName 50(gl_PerVertex) 1  "gl_PointSize"
@@ -49,13 +49,13 @@
                               Name 88  "ivlb"
                               Name 91  "ovla"
                               Name 92  "ovlb"
-                              MemberDecorate 19(gl_PerVertex) 0 BuiltIn Position
-                              MemberDecorate 19(gl_PerVertex) 1 BuiltIn PointSize
-                              MemberDecorate 19(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 19(gl_PerVertex) Block
-                              Decorate 40(gl_PatchVerticesIn) BuiltIn PatchVertices
-                              Decorate 43(gl_PrimitiveID) BuiltIn PrimitiveId
-                              Decorate 46(gl_InvocationID) BuiltIn InvocationId
+                              MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance
+                              Decorate 20(gl_PerVertex) Block
+                              Decorate 41(gl_PatchVerticesIn) BuiltIn PatchVertices
+                              Decorate 44(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 47(gl_InvocationID) BuiltIn InvocationId
                               MemberDecorate 50(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 50(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 50(gl_PerVertex) 2 BuiltIn ClipDistance
@@ -72,106 +72,106 @@
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
-               7:      6(int) Constant 1
-               8:      6(int) Constant 0
-               9:             TypeInt 32 1
-              10:             TypePointer Function 9(int)
-              12:      9(int) Constant 5392
-              13:             TypeFloat 32
-              14:             TypeVector 13(float) 4
-              15:             TypePointer Function 14(fvec4)
-              17:      6(int) Constant 3
-              18:             TypeArray 13(float) 17
-19(gl_PerVertex):             TypeStruct 14(fvec4) 13(float) 18
-              20:      6(int) Constant 32
-              21:             TypeArray 19(gl_PerVertex) 20
-              22:             TypePointer Input 21
-       23(gl_in):     22(ptr) Variable Input
-              24:      9(int) Constant 1
-              25:      9(int) Constant 0
-              26:             TypePointer Input 14(fvec4)
-              29:             TypePointer Function 13(float)
-              31:             TypePointer Input 13(float)
-              35:      9(int) Constant 2
-              39:             TypePointer Input 9(int)
-40(gl_PatchVerticesIn):     39(ptr) Variable Input
-43(gl_PrimitiveID):     39(ptr) Variable Input
-46(gl_InvocationID):     39(ptr) Variable Input
-              48:      6(int) Constant 2
-              49:             TypeArray 13(float) 48
-50(gl_PerVertex):             TypeStruct 14(fvec4) 13(float) 49
+               7:      6(int) Constant 2
+               8:      6(int) Constant 1
+               9:      6(int) Constant 0
+              10:             TypeInt 32 1
+              11:             TypePointer Function 10(int)
+              13:     10(int) Constant 5392
+              14:             TypeFloat 32
+              15:             TypeVector 14(float) 4
+              16:             TypePointer Function 15(fvec4)
+              18:      6(int) Constant 3
+              19:             TypeArray 14(float) 18
+20(gl_PerVertex):             TypeStruct 15(fvec4) 14(float) 19
+              21:      6(int) Constant 32
+              22:             TypeArray 20(gl_PerVertex) 21
+              23:             TypePointer Input 22
+       24(gl_in):     23(ptr) Variable Input
+              25:     10(int) Constant 1
+              26:     10(int) Constant 0
+              27:             TypePointer Input 15(fvec4)
+              30:             TypePointer Function 14(float)
+              32:             TypePointer Input 14(float)
+              36:     10(int) Constant 2
+              40:             TypePointer Input 10(int)
+41(gl_PatchVerticesIn):     40(ptr) Variable Input
+44(gl_PrimitiveID):     40(ptr) Variable Input
+47(gl_InvocationID):     40(ptr) Variable Input
+              49:             TypeArray 14(float) 7
+50(gl_PerVertex):             TypeStruct 15(fvec4) 14(float) 49
               51:      6(int) Constant 4
               52:             TypeArray 50(gl_PerVertex) 51
               53:             TypePointer Output 52
       54(gl_out):     53(ptr) Variable Output
-              57:             TypePointer Output 14(fvec4)
-              61:             TypePointer Output 13(float)
-              66:             TypeArray 13(float) 51
+              57:             TypePointer Output 15(fvec4)
+              61:             TypePointer Output 14(float)
+              66:             TypeArray 14(float) 51
               67:             TypePointer Output 66
 68(gl_TessLevelOuter):     67(ptr) Variable Output
-              69:      9(int) Constant 3
-              70:   13(float) Constant 1078774989
+              69:     10(int) Constant 3
+              70:   14(float) Constant 1078774989
               72:             TypePointer Output 49
 73(gl_TessLevelInner):     72(ptr) Variable Output
-              74:   13(float) Constant 1067869798
-              76:             TypeArray 9(int) 51
+              74:   14(float) Constant 1067869798
+              76:             TypeArray 10(int) 51
               77:             TypePointer Private 76
         78(outa):     77(ptr) Variable Private
     79(patchOut):     57(ptr) Variable Output
-              80:             TypeVector 13(float) 2
-              81:             TypeArray 80(fvec2) 20
+              80:             TypeVector 14(float) 2
+              81:             TypeArray 80(fvec2) 21
               82:             TypePointer Input 81
          83(inb):     82(ptr) Variable Input
          84(ind):     82(ptr) Variable Input
-              85:             TypeArray 14(fvec4) 20
+              85:             TypeArray 15(fvec4) 21
               86:             TypePointer Input 85
         87(ivla):     86(ptr) Variable Input
         88(ivlb):     86(ptr) Variable Input
-              89:             TypeArray 14(fvec4) 51
+              89:             TypeArray 15(fvec4) 51
               90:             TypePointer Output 89
         91(ovla):     90(ptr) Variable Output
         92(ovlb):     90(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
-           11(a):     10(ptr) Variable Function
-           16(p):     15(ptr) Variable Function
-          30(ps):     29(ptr) Variable Function
-          34(cd):     29(ptr) Variable Function
-         38(pvi):     10(ptr) Variable Function
-         42(pid):     10(ptr) Variable Function
-         45(iid):     10(ptr) Variable Function
-                              ControlBarrier 7 7 8
-                              Store 11(a) 12
-              27:     26(ptr) AccessChain 23(gl_in) 24 25
-              28:   14(fvec4) Load 27
-                              Store 16(p) 28
-              32:     31(ptr) AccessChain 23(gl_in) 24 24
-              33:   13(float) Load 32
-                              Store 30(ps) 33
-              36:     31(ptr) AccessChain 23(gl_in) 24 35 35
-              37:   13(float) Load 36
-                              Store 34(cd) 37
-              41:      9(int) Load 40(gl_PatchVerticesIn)
-                              Store 38(pvi) 41
-              44:      9(int) Load 43(gl_PrimitiveID)
-                              Store 42(pid) 44
-              47:      9(int) Load 46(gl_InvocationID)
-                              Store 45(iid) 47
-              55:      9(int) Load 46(gl_InvocationID)
-              56:   14(fvec4) Load 16(p)
-              58:     57(ptr) AccessChain 54(gl_out) 55 25
+           12(a):     11(ptr) Variable Function
+           17(p):     16(ptr) Variable Function
+          31(ps):     30(ptr) Variable Function
+          35(cd):     30(ptr) Variable Function
+         39(pvi):     11(ptr) Variable Function
+         43(pid):     11(ptr) Variable Function
+         46(iid):     11(ptr) Variable Function
+                              ControlBarrier 7 8 9
+                              Store 12(a) 13
+              28:     27(ptr) AccessChain 24(gl_in) 25 26
+              29:   15(fvec4) Load 28
+                              Store 17(p) 29
+              33:     32(ptr) AccessChain 24(gl_in) 25 25
+              34:   14(float) Load 33
+                              Store 31(ps) 34
+              37:     32(ptr) AccessChain 24(gl_in) 25 36 36
+              38:   14(float) Load 37
+                              Store 35(cd) 38
+              42:     10(int) Load 41(gl_PatchVerticesIn)
+                              Store 39(pvi) 42
+              45:     10(int) Load 44(gl_PrimitiveID)
+                              Store 43(pid) 45
+              48:     10(int) Load 47(gl_InvocationID)
+                              Store 46(iid) 48
+              55:     10(int) Load 47(gl_InvocationID)
+              56:   15(fvec4) Load 17(p)
+              58:     57(ptr) AccessChain 54(gl_out) 55 26
                               Store 58 56
-              59:      9(int) Load 46(gl_InvocationID)
-              60:   13(float) Load 30(ps)
-              62:     61(ptr) AccessChain 54(gl_out) 59 24
+              59:     10(int) Load 47(gl_InvocationID)
+              60:   14(float) Load 31(ps)
+              62:     61(ptr) AccessChain 54(gl_out) 59 25
                               Store 62 60
-              63:      9(int) Load 46(gl_InvocationID)
-              64:   13(float) Load 34(cd)
-              65:     61(ptr) AccessChain 54(gl_out) 63 35 24
+              63:     10(int) Load 47(gl_InvocationID)
+              64:   14(float) Load 35(cd)
+              65:     61(ptr) AccessChain 54(gl_out) 63 36 25
                               Store 65 64
               71:     61(ptr) AccessChain 68(gl_TessLevelOuter) 69
                               Store 71 70
-              75:     61(ptr) AccessChain 73(gl_TessLevelInner) 24
+              75:     61(ptr) AccessChain 73(gl_TessLevelInner) 25
                               Store 75 74
                               Return
                               FunctionEnd