SPV: Change barrier emission to conform to Khronos decisions.
authorJohn Kessenich <cepheus@frii.com>
Mon, 11 Dec 2017 11:02:24 +0000 (04:02 -0700)
committerJohn Kessenich <cepheus@frii.com>
Sat, 16 Dec 2017 07:30:10 +0000 (00:30 -0700)
The memory model group agreed to these definitions for how
to map GLSL barrier, memoryBarrier, etc. With HLSL following suit.

19 files changed:
SPIRV/GlslangToSpv.cpp
SPIRV/spvIR.h
Test/baseResults/hlsl.color.hull.tesc.out
Test/baseResults/hlsl.gs-hs-mix.tesc.out
Test/baseResults/hlsl.hull.1.tesc.out
Test/baseResults/hlsl.hull.2.tesc.out
Test/baseResults/hlsl.hull.3.tesc.out
Test/baseResults/hlsl.hull.4.tesc.out
Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
Test/baseResults/hlsl.hull.void.tesc.out
Test/baseResults/hlsl.intrinsics.barriers.comp.out
Test/baseResults/spv.310.comp.out
Test/baseResults/spv.400.tesc.out
Test/baseResults/spv.atomic.comp.out
Test/baseResults/spv.barrier.vert.out [new file with mode: 0755]
Test/spv.310.comp
Test/spv.barrier.vert [new file with mode: 0644]
gtests/Spv.FromFile.cpp

index 745021f..099d0d5 100755 (executable)
@@ -5429,29 +5429,47 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv:
         builder.createNoResultOp(spv::OpEndPrimitive);
         return 0;
     case glslang::EOpBarrier:
-        builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice, spv::MemorySemanticsMaskNone);
+        if (glslangIntermediate->getStage() == EShLangTessControl) {
+            builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeInvocation, spv::MemorySemanticsMaskNone);
+            // TODO: prefer the following, when available:
+            // builder.createControlBarrier(spv::ScopePatch, spv::ScopePatch,
+            //                                 spv::MemorySemanticsPatchMask |
+            //                                 spv::MemorySemanticsAcquireReleaseMask);
+        } else {
+            builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup,
+                                            spv::MemorySemanticsWorkgroupMemoryMask |
+                                            spv::MemorySemanticsAcquireReleaseMask);
+        }
         return 0;
     case glslang::EOpMemoryBarrier:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAllMemory);
+        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAllMemory |
+                                                      spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpMemoryBarrierAtomicCounter:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAtomicCounterMemoryMask);
+        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAtomicCounterMemoryMask |
+                                                      spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpMemoryBarrierBuffer:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsUniformMemoryMask);
+        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsUniformMemoryMask |
+                                                      spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpMemoryBarrierImage:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsImageMemoryMask);
+        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsImageMemoryMask |
+                                                      spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpMemoryBarrierShared:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsWorkgroupMemoryMask);
+        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsWorkgroupMemoryMask |
+                                                      spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpGroupMemoryBarrier:
-        builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsCrossWorkgroupMemoryMask);
+        builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsAllMemory |
+                                                         spv::MemorySemanticsAcquireReleaseMask);
         return 0;
     case glslang::EOpAllMemoryBarrierWithGroupSync:
         // Control barrier with non-"None" semantic is also a memory barrier.
-        builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice, spv::MemorySemanticsAllMemory);
+        builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice,
+                                        spv::MemorySemanticsAllMemory |
+                                        spv::MemorySemanticsSequentiallyConsistentMask);
         return 0;
     case glslang::EOpGroupMemoryBarrierWithGroupSync:
         // Control barrier with non-"None" semantic is also a memory barrier.
index 6880595..0cb166a 100755 (executable)
@@ -74,8 +74,7 @@ const Decoration NoPrecision = DecorationMax;
 
 POTENTIALLY_UNUSED
 const MemorySemanticsMask MemorySemanticsAllMemory =
-                (MemorySemanticsMask)(MemorySemanticsSequentiallyConsistentMask |
-                                      MemorySemanticsUniformMemoryMask |
+                (MemorySemanticsMask)(MemorySemanticsUniformMemoryMask |
                                       MemorySemanticsSubgroupMemoryMask |
                                       MemorySemanticsWorkgroupMemoryMask |
                                       MemorySemanticsCrossWorkgroupMemoryMask |
index 92ca0c3..c805a1f 100644 (file)
@@ -357,12 +357,12 @@ triangle order = cw
 
 // Module Version 10000
 // Generated by (magic number): 80002
-// Id's are bound by 128
+// Id's are bound by 127
 
                               Capability Tessellation
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 72 76 79 83 111 124
+                              EntryPoint TessellationControl 4  "main" 72 76 79 83 110 123
                               ExecutionMode 4 OutputVertices 3
                               ExecutionMode 4 Triangles
                               ExecutionMode 4 SpacingEqual
@@ -404,8 +404,8 @@ triangle order = cw
                               Name 102  "@patchConstantResult"
                               Name 103  "param"
                               Name 105  "param"
-                              Name 111  "@patchConstantOutput.edges"
-                              Name 124  "@patchConstantOutput.inside"
+                              Name 110  "@patchConstantOutput.edges"
+                              Name 123  "@patchConstantOutput.inside"
                               MemberDecorate 33(TessellationBuffer) 0 Offset 0
                               MemberDecorate 33(TessellationBuffer) 1 Offset 4
                               Decorate 33(TessellationBuffer) Block
@@ -415,10 +415,10 @@ triangle order = cw
                               Decorate 76(pointId) BuiltIn InvocationId
                               Decorate 79(patchId) BuiltIn PrimitiveId
                               Decorate 83(@entryPointOutput) Location 0
-                              Decorate 111(@patchConstantOutput.edges) Patch
-                              Decorate 111(@patchConstantOutput.edges) BuiltIn TessLevelOuter
-                              Decorate 124(@patchConstantOutput.inside) Patch
-                              Decorate 124(@patchConstantOutput.inside) BuiltIn TessLevelInner
+                              Decorate 110(@patchConstantOutput.edges) Patch
+                              Decorate 110(@patchConstantOutput.edges) BuiltIn TessLevelOuter
+                              Decorate 123(@patchConstantOutput.inside) Patch
+                              Decorate 123(@patchConstantOutput.inside) BuiltIn TessLevelInner
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -458,17 +458,16 @@ triangle order = cw
 83(@entryPointOutput):     82(ptr) Variable Output
               92:             TypePointer Output 22(HullOutputType)
               94:     10(int) Constant 2
-              95:     10(int) Constant 1
+              95:     10(int) Constant 4
               96:     10(int) Constant 0
               98:             TypeBool
-             108:     10(int) Constant 4
-             109:             TypeArray 6(float) 108
-             110:             TypePointer Output 109
-111(@patchConstantOutput.edges):    110(ptr) Variable Output
-             114:             TypePointer Output 6(float)
-             122:             TypeArray 6(float) 94
-             123:             TypePointer Output 122
-124(@patchConstantOutput.inside):    123(ptr) Variable Output
+             108:             TypeArray 6(float) 95
+             109:             TypePointer Output 108
+110(@patchConstantOutput.edges):    109(ptr) Variable Output
+             113:             TypePointer Output 6(float)
+             121:             TypeArray 6(float) 94
+             122:             TypePointer Output 121
+123(@patchConstantOutput.inside):    122(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
        70(patch):     13(ptr) Variable Function
@@ -508,22 +507,22 @@ triangle order = cw
                                 Store 105(param) 106
              107:16(ConstantOutputType)   FunctionCall 20(ColorPatchConstantFunction(struct-HullInputType-vf3-vf41[3];u1;) 103(param) 105(param)
                                 Store 102(@patchConstantResult) 107
-             112:     39(ptr)   AccessChain 102(@patchConstantResult) 32 32
-             113:    6(float)   Load 112
-             115:    114(ptr)   AccessChain 111(@patchConstantOutput.edges) 32
-                                Store 115 113
-             116:     39(ptr)   AccessChain 102(@patchConstantResult) 32 41
-             117:    6(float)   Load 116
-             118:    114(ptr)   AccessChain 111(@patchConstantOutput.edges) 41
-                                Store 118 117
-             119:     39(ptr)   AccessChain 102(@patchConstantResult) 32 45
-             120:    6(float)   Load 119
-             121:    114(ptr)   AccessChain 111(@patchConstantOutput.edges) 45
-                                Store 121 120
-             125:     39(ptr)   AccessChain 102(@patchConstantResult) 41
-             126:    6(float)   Load 125
-             127:    114(ptr)   AccessChain 124(@patchConstantOutput.inside) 32
-                                Store 127 126
+             111:     39(ptr)   AccessChain 102(@patchConstantResult) 32 32
+             112:    6(float)   Load 111
+             114:    113(ptr)   AccessChain 110(@patchConstantOutput.edges) 32
+                                Store 114 112
+             115:     39(ptr)   AccessChain 102(@patchConstantResult) 32 41
+             116:    6(float)   Load 115
+             117:    113(ptr)   AccessChain 110(@patchConstantOutput.edges) 41
+                                Store 117 116
+             118:     39(ptr)   AccessChain 102(@patchConstantResult) 32 45
+             119:    6(float)   Load 118
+             120:    113(ptr)   AccessChain 110(@patchConstantOutput.edges) 45
+                                Store 120 119
+             124:     39(ptr)   AccessChain 102(@patchConstantResult) 41
+             125:    6(float)   Load 124
+             126:    113(ptr)   AccessChain 123(@patchConstantOutput.inside) 32
+                                Store 126 125
                                 Branch 101
              101:             Label
                               Return
index 92153c5..cc217fa 100644 (file)
@@ -854,8 +854,8 @@ triangle order = ccw
                               Name 105  "@entryPointOutput"
                               Name 107  "param"
                               Name 109  "param"
-                              Name 119  "@patchConstantResult"
-                              Name 120  "param"
+                              Name 120  "@patchConstantResult"
+                              Name 121  "param"
                               Name 126  "@patchConstantOutput.EdgeTessFactor"
                               Name 139  "@patchConstantOutput.InsideTessFactor"
                               Name 143  "HSTrianglePatchConstant"
@@ -947,9 +947,9 @@ triangle order = ccw
              104:             TypePointer Output 103
 105(@entryPointOutput):    104(ptr) Variable Output
              112:             TypePointer Output 21(HSOutput)
-             115:             TypeBool
-             123:      9(int) Constant 4
-             124:             TypeArray 6(float) 123
+             114:      9(int) Constant 4
+             116:             TypeBool
+             124:             TypeArray 6(float) 114
              125:             TypePointer Output 124
 126(@patchConstantOutput.EdgeTessFactor):    125(ptr) Variable Output
              129:             TypePointer Output 6(float)
@@ -971,8 +971,8 @@ triangle order = ccw
           99(id):     20(ptr) Variable Function
       107(param):     12(ptr) Variable Function
       109(param):     20(ptr) Variable Function
-119(@patchConstantResult):     55(ptr) Variable Function
-      120(param):     12(ptr) Variable Function
+120(@patchConstantResult):     55(ptr) Variable Function
+      121(param):     12(ptr) Variable Function
               98:          11 Load 97(patch)
                               Store 95(patch) 98
              102:      9(int) Load 101(id)
@@ -985,38 +985,38 @@ triangle order = ccw
              111:21(HSOutput) FunctionCall 25(@HSMain(struct-HSInput-vf3-vf31[3];u1;) 107(param) 109(param)
              113:    112(ptr) AccessChain 105(@entryPointOutput) 106
                               Store 113 111
-                              ControlBarrier 68 63 58
-             114:      9(int) Load 101(id)
-             116:   115(bool) IEqual 114 57
-                              SelectionMerge 118 None
-                              BranchConditional 116 117 118
-             117:               Label
-             121:          11   Load 95(patch)
-                                Store 120(param) 121
-             122:15(HSTrianglePatchConstant)   FunctionCall 18(HSPatchConstant(struct-HSInput-vf3-vf31[3];) 120(param)
-                                Store 119(@patchConstantResult) 122
-             127:     50(ptr)   AccessChain 119(@patchConstantResult) 57 57
+                              ControlBarrier 68 114 58
+             115:      9(int) Load 101(id)
+             117:   116(bool) IEqual 115 57
+                              SelectionMerge 119 None
+                              BranchConditional 117 118 119
+             118:               Label
+             122:          11   Load 95(patch)
+                                Store 121(param) 122
+             123:15(HSTrianglePatchConstant)   FunctionCall 18(HSPatchConstant(struct-HSInput-vf3-vf31[3];) 121(param)
+                                Store 120(@patchConstantResult) 123
+             127:     50(ptr)   AccessChain 120(@patchConstantResult) 57 57
              128:    6(float)   Load 127
              130:    129(ptr)   AccessChain 126(@patchConstantOutput.EdgeTessFactor) 57
                                 Store 130 128
-             131:     50(ptr)   AccessChain 119(@patchConstantResult) 57 62
+             131:     50(ptr)   AccessChain 120(@patchConstantResult) 57 62
              132:    6(float)   Load 131
              133:    129(ptr)   AccessChain 126(@patchConstantOutput.EdgeTessFactor) 62
                                 Store 133 132
-             134:     50(ptr)   AccessChain 119(@patchConstantResult) 57 67
+             134:     50(ptr)   AccessChain 120(@patchConstantResult) 57 67
              135:    6(float)   Load 134
              136:    129(ptr)   AccessChain 126(@patchConstantOutput.EdgeTessFactor) 67
                                 Store 136 135
-             140:     50(ptr)   AccessChain 119(@patchConstantResult) 62
+             140:     50(ptr)   AccessChain 120(@patchConstantResult) 62
              141:    6(float)   Load 140
              142:    129(ptr)   AccessChain 139(@patchConstantOutput.InsideTessFactor) 57
                                 Store 142 141
-             147:    146(ptr)   AccessChain 119(@patchConstantResult) 67
+             147:    146(ptr)   AccessChain 120(@patchConstantResult) 67
              148:          14   Load 147
              150:    149(ptr)   AccessChain 145(@patchConstantOutput) 57
                                 Store 150 148
-                                Branch 118
-             118:             Label
+                                Branch 119
+             119:             Label
                               Return
                               FunctionEnd
 18(HSPatchConstant(struct-HSInput-vf3-vf31[3];):15(HSTrianglePatchConstant) Function None 16
index 57020ee..56ea081 100644 (file)
@@ -225,12 +225,12 @@ vertex spacing = equal_spacing
 
 // Module Version 10000
 // Generated by (magic number): 80002
-// Id's are bound by 90
+// Id's are bound by 89
 
                               Capability Tessellation
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 40 44 48 66 72
+                              EntryPoint TessellationControl 4  "main" 40 44 48 65 71
                               ExecutionMode 4 OutputVertices 4
                               ExecutionMode 4 Isolines
                               ExecutionMode 4 SpacingEqual
@@ -255,17 +255,17 @@ vertex spacing = equal_spacing
                               Name 48  "@entryPointOutput"
                               Name 50  "param"
                               Name 52  "param"
-                              Name 65  "@patchConstantResult"
-                              Name 66  "pid"
-                              Name 67  "param"
-                              Name 72  "@patchConstantOutput.edges"
-                              Name 82  "output"
+                              Name 64  "@patchConstantResult"
+                              Name 65  "pid"
+                              Name 66  "param"
+                              Name 71  "@patchConstantOutput.edges"
+                              Name 81  "output"
                               Decorate 40(ip) Location 0
                               Decorate 44(m_cpid) BuiltIn InvocationId
                               Decorate 48(@entryPointOutput) Location 0
-                              Decorate 66(pid) BuiltIn PrimitiveId
-                              Decorate 72(@patchConstantOutput.edges) Patch
-                              Decorate 72(@patchConstantOutput.edges) BuiltIn TessLevelOuter
+                              Decorate 65(pid) BuiltIn PrimitiveId
+                              Decorate 71(@patchConstantOutput.edges) Patch
+                              Decorate 71(@patchConstantOutput.edges) BuiltIn TessLevelOuter
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -294,27 +294,26 @@ vertex spacing = equal_spacing
               47:             TypePointer Output 46
 48(@entryPointOutput):     47(ptr) Variable Output
               55:             TypePointer Output 14(HS_OUT)
-              57:      9(int) Constant 1
-              58:      9(int) Constant 0
-              60:             TypeBool
-              64:             TypePointer Function 22(HS_CONSTANT_OUT)
-         66(pid):     43(ptr) Variable Input
-              70:             TypeArray 6(float) 10
-              71:             TypePointer Output 70
-72(@patchConstantOutput.edges):     71(ptr) Variable Output
-              73:             TypePointer Function 6(float)
-              76:             TypePointer Output 6(float)
-              78:     29(int) Constant 1
-              83:    6(float) Constant 1073741824
-              85:    6(float) Constant 1090519040
+              57:      9(int) Constant 0
+              59:             TypeBool
+              63:             TypePointer Function 22(HS_CONSTANT_OUT)
+         65(pid):     43(ptr) Variable Input
+              69:             TypeArray 6(float) 10
+              70:             TypePointer Output 69
+71(@patchConstantOutput.edges):     70(ptr) Variable Output
+              72:             TypePointer Function 6(float)
+              75:             TypePointer Output 6(float)
+              77:     29(int) Constant 1
+              82:    6(float) Constant 1073741824
+              84:    6(float) Constant 1090519040
          4(main):           2 Function None 3
                5:             Label
           38(ip):     12(ptr) Variable Function
       42(m_cpid):     13(ptr) Variable Function
        50(param):     12(ptr) Variable Function
        52(param):     13(ptr) Variable Function
-65(@patchConstantResult):     64(ptr) Variable Function
-       67(param):     13(ptr) Variable Function
+64(@patchConstantResult):     63(ptr) Variable Function
+       66(param):     13(ptr) Variable Function
               41:          11 Load 40(ip)
                               Store 38(ip) 41
               45:      9(int) Load 44(m_cpid)
@@ -327,26 +326,26 @@ vertex spacing = equal_spacing
               54:  14(HS_OUT) FunctionCall 18(@main(struct-VS_OUT-vf31[4];u1;) 50(param) 52(param)
               56:     55(ptr) AccessChain 48(@entryPointOutput) 49
                               Store 56 54
-                              ControlBarrier 20 57 58
-              59:      9(int) Load 44(m_cpid)
-              61:    60(bool) IEqual 59 30
-                              SelectionMerge 63 None
-                              BranchConditional 61 62 63
-              62:               Label
-              68:      9(int)   Load 66(pid)
-                                Store 67(param) 68
-              69:22(HS_CONSTANT_OUT)   FunctionCall 25(PCF(u1;) 67(param)
-                                Store 65(@patchConstantResult) 69
-              74:     73(ptr)   AccessChain 65(@patchConstantResult) 30 30
-              75:    6(float)   Load 74
-              77:     76(ptr)   AccessChain 72(@patchConstantOutput.edges) 30
-                                Store 77 75
-              79:     73(ptr)   AccessChain 65(@patchConstantResult) 30 78
-              80:    6(float)   Load 79
-              81:     76(ptr)   AccessChain 72(@patchConstantOutput.edges) 78
-                                Store 81 80
-                                Branch 63
-              63:             Label
+                              ControlBarrier 20 10 57
+              58:      9(int) Load 44(m_cpid)
+              60:    59(bool) IEqual 58 30
+                              SelectionMerge 62 None
+                              BranchConditional 60 61 62
+              61:               Label
+              67:      9(int)   Load 65(pid)
+                                Store 66(param) 67
+              68:22(HS_CONSTANT_OUT)   FunctionCall 25(PCF(u1;) 66(param)
+                                Store 64(@patchConstantResult) 68
+              73:     72(ptr)   AccessChain 64(@patchConstantResult) 30 30
+              74:    6(float)   Load 73
+              76:     75(ptr)   AccessChain 71(@patchConstantOutput.edges) 30
+                                Store 76 74
+              78:     72(ptr)   AccessChain 64(@patchConstantResult) 30 77
+              79:    6(float)   Load 78
+              80:     75(ptr)   AccessChain 71(@patchConstantOutput.edges) 77
+                                Store 80 79
+                                Branch 62
+              62:             Label
                               Return
                               FunctionEnd
 18(@main(struct-VS_OUT-vf31[4];u1;):  14(HS_OUT) Function None 15
@@ -364,11 +363,11 @@ vertex spacing = equal_spacing
      25(PCF(u1;):22(HS_CONSTANT_OUT) Function None 23
          24(pid):     13(ptr) FunctionParameter
               26:             Label
-      82(output):     64(ptr) Variable Function
-              84:     73(ptr) AccessChain 82(output) 30 30
-                              Store 84 83
-              86:     73(ptr) AccessChain 82(output) 30 78
-                              Store 86 85
-              87:22(HS_CONSTANT_OUT) Load 82(output)
-                              ReturnValue 87
+      81(output):     63(ptr) Variable Function
+              83:     72(ptr) AccessChain 81(output) 30 30
+                              Store 83 82
+              85:     72(ptr) AccessChain 81(output) 30 77
+                              Store 85 84
+              86:22(HS_CONSTANT_OUT) Load 81(output)
+                              ReturnValue 86
                               FunctionEnd
index 8d0708d..c6d9789 100644 (file)
@@ -221,12 +221,12 @@ vertex spacing = equal_spacing
 
 // Module Version 10000
 // Generated by (magic number): 80002
-// Id's are bound by 92
+// Id's are bound by 91
 
                               Capability Tessellation
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 42 46 48 64 66 74
+                              EntryPoint TessellationControl 4  "main" 42 46 48 63 65 73
                               ExecutionMode 4 OutputVertices 4
                               ExecutionMode 4 Isolines
                               ExecutionMode 4 SpacingEqual
@@ -249,20 +249,20 @@ vertex spacing = equal_spacing
                               Name 46  "@entryPointOutput"
                               Name 48  "InvocationId"
                               Name 50  "param"
-                              Name 63  "@patchConstantResult"
-                              Name 64  "pid"
-                              Name 66  "pos"
-                              Name 67  "param"
-                              Name 69  "param"
-                              Name 74  "@patchConstantOutput.edges"
-                              Name 84  "output"
+                              Name 62  "@patchConstantResult"
+                              Name 63  "pid"
+                              Name 65  "pos"
+                              Name 66  "param"
+                              Name 68  "param"
+                              Name 73  "@patchConstantOutput.edges"
+                              Name 83  "output"
                               Decorate 42(ip) Location 0
                               Decorate 46(@entryPointOutput) Location 0
                               Decorate 48(InvocationId) BuiltIn InvocationId
-                              Decorate 64(pid) BuiltIn PrimitiveId
-                              Decorate 66(pos) BuiltIn Position
-                              Decorate 74(@patchConstantOutput.edges) Patch
-                              Decorate 74(@patchConstantOutput.edges) BuiltIn TessLevelOuter
+                              Decorate 63(pid) BuiltIn PrimitiveId
+                              Decorate 65(pos) BuiltIn Position
+                              Decorate 73(@patchConstantOutput.edges) Patch
+                              Decorate 73(@patchConstantOutput.edges) BuiltIn TessLevelOuter
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -293,28 +293,27 @@ vertex spacing = equal_spacing
               47:             TypePointer Input 9(int)
 48(InvocationId):     47(ptr) Variable Input
               53:             TypePointer Output 13(HS_OUT)
-              55:      9(int) Constant 1
-              56:      9(int) Constant 0
-              58:             TypeBool
-              62:             TypePointer Function 23(HS_CONSTANT_OUT)
-         64(pid):     47(ptr) Variable Input
-              65:             TypePointer Input 19(fvec4)
-         66(pos):     65(ptr) Variable Input
-              72:             TypeArray 6(float) 10
-              73:             TypePointer Output 72
-74(@patchConstantOutput.edges):     73(ptr) Variable Output
-              75:             TypePointer Function 6(float)
-              78:             TypePointer Output 6(float)
-              80:     31(int) Constant 1
-              85:    6(float) Constant 1073741824
-              87:    6(float) Constant 1090519040
+              55:      9(int) Constant 0
+              57:             TypeBool
+              61:             TypePointer Function 23(HS_CONSTANT_OUT)
+         63(pid):     47(ptr) Variable Input
+              64:             TypePointer Input 19(fvec4)
+         65(pos):     64(ptr) Variable Input
+              71:             TypeArray 6(float) 10
+              72:             TypePointer Output 71
+73(@patchConstantOutput.edges):     72(ptr) Variable Output
+              74:             TypePointer Function 6(float)
+              77:             TypePointer Output 6(float)
+              79:     31(int) Constant 1
+              84:    6(float) Constant 1073741824
+              86:    6(float) Constant 1090519040
          4(main):           2 Function None 3
                5:             Label
           40(ip):     12(ptr) Variable Function
        50(param):     12(ptr) Variable Function
-63(@patchConstantResult):     62(ptr) Variable Function
-       67(param):     18(ptr) Variable Function
-       69(param):     20(ptr) Variable Function
+62(@patchConstantResult):     61(ptr) Variable Function
+       66(param):     18(ptr) Variable Function
+       68(param):     20(ptr) Variable Function
               43:          11 Load 42(ip)
                               Store 40(ip) 43
               49:      9(int) Load 48(InvocationId)
@@ -323,28 +322,28 @@ vertex spacing = equal_spacing
               52:  13(HS_OUT) FunctionCall 16(@main(struct-VS_OUT-vf31[4];) 50(param)
               54:     53(ptr) AccessChain 46(@entryPointOutput) 49
                               Store 54 52
-                              ControlBarrier 21 55 56
-              57:      9(int) Load 48(InvocationId)
-              59:    58(bool) IEqual 57 32
-                              SelectionMerge 61 None
-                              BranchConditional 59 60 61
-              60:               Label
-              68:      9(int)   Load 64(pid)
-                                Store 67(param) 68
-              70:   19(fvec4)   Load 66(pos)
-                                Store 69(param) 70
-              71:23(HS_CONSTANT_OUT)   FunctionCall 27(PCF(u1;vf4;) 67(param) 69(param)
-                                Store 63(@patchConstantResult) 71
-              76:     75(ptr)   AccessChain 63(@patchConstantResult) 32 32
-              77:    6(float)   Load 76
-              79:     78(ptr)   AccessChain 74(@patchConstantOutput.edges) 32
-                                Store 79 77
-              81:     75(ptr)   AccessChain 63(@patchConstantResult) 32 80
-              82:    6(float)   Load 81
-              83:     78(ptr)   AccessChain 74(@patchConstantOutput.edges) 80
-                                Store 83 82
-                                Branch 61
-              61:             Label
+                              ControlBarrier 21 10 55
+              56:      9(int) Load 48(InvocationId)
+              58:    57(bool) IEqual 56 32
+                              SelectionMerge 60 None
+                              BranchConditional 58 59 60
+              59:               Label
+              67:      9(int)   Load 63(pid)
+                                Store 66(param) 67
+              69:   19(fvec4)   Load 65(pos)
+                                Store 68(param) 69
+              70:23(HS_CONSTANT_OUT)   FunctionCall 27(PCF(u1;vf4;) 66(param) 68(param)
+                                Store 62(@patchConstantResult) 70
+              75:     74(ptr)   AccessChain 62(@patchConstantResult) 32 32
+              76:    6(float)   Load 75
+              78:     77(ptr)   AccessChain 73(@patchConstantOutput.edges) 32
+                                Store 78 76
+              80:     74(ptr)   AccessChain 62(@patchConstantResult) 32 79
+              81:    6(float)   Load 80
+              82:     77(ptr)   AccessChain 73(@patchConstantOutput.edges) 79
+                                Store 82 81
+                                Branch 60
+              60:             Label
                               Return
                               FunctionEnd
 16(@main(struct-VS_OUT-vf31[4];):  13(HS_OUT) Function None 14
@@ -362,11 +361,11 @@ vertex spacing = equal_spacing
          25(pid):     18(ptr) FunctionParameter
          26(pos):     20(ptr) FunctionParameter
               28:             Label
-      84(output):     62(ptr) Variable Function
-              86:     75(ptr) AccessChain 84(output) 32 32
-                              Store 86 85
-              88:     75(ptr) AccessChain 84(output) 32 80
-                              Store 88 87
-              89:23(HS_CONSTANT_OUT) Load 84(output)
-                              ReturnValue 89
+      83(output):     61(ptr) Variable Function
+              85:     74(ptr) AccessChain 83(output) 32 32
+                              Store 85 84
+              87:     74(ptr) AccessChain 83(output) 32 79
+                              Store 87 86
+              88:23(HS_CONSTANT_OUT) Load 83(output)
+                              ReturnValue 88
                               FunctionEnd
index 59eed0d..8767986 100755 (executable)
@@ -221,12 +221,12 @@ vertex spacing = equal_spacing
 
 // Module Version 10000
 // Generated by (magic number): 80002
-// Id's are bound by 92
+// Id's are bound by 91
 
                               Capability Tessellation
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 42 46 48 64 66 74
+                              EntryPoint TessellationControl 4  "main" 42 46 48 63 65 73
                               ExecutionMode 4 OutputVertices 4
                               ExecutionMode 4 Triangles
                               ExecutionMode 4 SpacingEqual
@@ -250,20 +250,20 @@ vertex spacing = equal_spacing
                               Name 46  "@entryPointOutput"
                               Name 48  "InvocationId"
                               Name 50  "param"
-                              Name 63  "@patchConstantResult"
-                              Name 64  "pid"
-                              Name 66  "pos"
-                              Name 67  "param"
-                              Name 69  "param"
-                              Name 74  "@patchConstantOutput.edges"
-                              Name 84  "output"
+                              Name 62  "@patchConstantResult"
+                              Name 63  "pid"
+                              Name 65  "pos"
+                              Name 66  "param"
+                              Name 68  "param"
+                              Name 73  "@patchConstantOutput.edges"
+                              Name 83  "output"
                               Decorate 42(ip) Location 0
                               Decorate 46(@entryPointOutput) Location 0
                               Decorate 48(InvocationId) BuiltIn InvocationId
-                              Decorate 64(pid) BuiltIn PrimitiveId
-                              Decorate 66(pos) BuiltIn Position
-                              Decorate 74(@patchConstantOutput.edges) Patch
-                              Decorate 74(@patchConstantOutput.edges) BuiltIn TessLevelOuter
+                              Decorate 63(pid) BuiltIn PrimitiveId
+                              Decorate 65(pos) BuiltIn Position
+                              Decorate 73(@patchConstantOutput.edges) Patch
+                              Decorate 73(@patchConstantOutput.edges) BuiltIn TessLevelOuter
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -294,28 +294,27 @@ vertex spacing = equal_spacing
               47:             TypePointer Input 9(int)
 48(InvocationId):     47(ptr) Variable Input
               53:             TypePointer Output 13(HS_OUT)
-              55:      9(int) Constant 1
-              56:      9(int) Constant 0
-              58:             TypeBool
-              62:             TypePointer Function 23(HS_CONSTANT_OUT)
-         64(pid):     47(ptr) Variable Input
-              65:             TypePointer Input 19(fvec4)
-         66(pos):     65(ptr) Variable Input
-              72:             TypeArray 6(float) 10
-              73:             TypePointer Output 72
-74(@patchConstantOutput.edges):     73(ptr) Variable Output
-              75:             TypePointer Function 6(float)
-              78:             TypePointer Output 6(float)
-              80:     31(int) Constant 1
-              85:    6(float) Constant 1073741824
-              87:    6(float) Constant 1090519040
+              55:      9(int) Constant 0
+              57:             TypeBool
+              61:             TypePointer Function 23(HS_CONSTANT_OUT)
+         63(pid):     47(ptr) Variable Input
+              64:             TypePointer Input 19(fvec4)
+         65(pos):     64(ptr) Variable Input
+              71:             TypeArray 6(float) 10
+              72:             TypePointer Output 71
+73(@patchConstantOutput.edges):     72(ptr) Variable Output
+              74:             TypePointer Function 6(float)
+              77:             TypePointer Output 6(float)
+              79:     31(int) Constant 1
+              84:    6(float) Constant 1073741824
+              86:    6(float) Constant 1090519040
          4(main):           2 Function None 3
                5:             Label
           40(ip):     12(ptr) Variable Function
        50(param):     12(ptr) Variable Function
-63(@patchConstantResult):     62(ptr) Variable Function
-       67(param):     18(ptr) Variable Function
-       69(param):     20(ptr) Variable Function
+62(@patchConstantResult):     61(ptr) Variable Function
+       66(param):     18(ptr) Variable Function
+       68(param):     20(ptr) Variable Function
               43:          11 Load 42(ip)
                               Store 40(ip) 43
               49:      9(int) Load 48(InvocationId)
@@ -324,28 +323,28 @@ vertex spacing = equal_spacing
               52:  13(HS_OUT) FunctionCall 16(@main(struct-VS_OUT-vf31[4];) 50(param)
               54:     53(ptr) AccessChain 46(@entryPointOutput) 49
                               Store 54 52
-                              ControlBarrier 21 55 56
-              57:      9(int) Load 48(InvocationId)
-              59:    58(bool) IEqual 57 32
-                              SelectionMerge 61 None
-                              BranchConditional 59 60 61
-              60:               Label
-              68:      9(int)   Load 64(pid)
-                                Store 67(param) 68
-              70:   19(fvec4)   Load 66(pos)
-                                Store 69(param) 70
-              71:23(HS_CONSTANT_OUT)   FunctionCall 27(PCF(u1;vf4;) 67(param) 69(param)
-                                Store 63(@patchConstantResult) 71
-              76:     75(ptr)   AccessChain 63(@patchConstantResult) 32 32
-              77:    6(float)   Load 76
-              79:     78(ptr)   AccessChain 74(@patchConstantOutput.edges) 32
-                                Store 79 77
-              81:     75(ptr)   AccessChain 63(@patchConstantResult) 32 80
-              82:    6(float)   Load 81
-              83:     78(ptr)   AccessChain 74(@patchConstantOutput.edges) 80
-                                Store 83 82
-                                Branch 61
-              61:             Label
+                              ControlBarrier 21 10 55
+              56:      9(int) Load 48(InvocationId)
+              58:    57(bool) IEqual 56 32
+                              SelectionMerge 60 None
+                              BranchConditional 58 59 60
+              59:               Label
+              67:      9(int)   Load 63(pid)
+                                Store 66(param) 67
+              69:   19(fvec4)   Load 65(pos)
+                                Store 68(param) 69
+              70:23(HS_CONSTANT_OUT)   FunctionCall 27(PCF(u1;vf4;) 66(param) 68(param)
+                                Store 62(@patchConstantResult) 70
+              75:     74(ptr)   AccessChain 62(@patchConstantResult) 32 32
+              76:    6(float)   Load 75
+              78:     77(ptr)   AccessChain 73(@patchConstantOutput.edges) 32
+                                Store 78 76
+              80:     74(ptr)   AccessChain 62(@patchConstantResult) 32 79
+              81:    6(float)   Load 80
+              82:     77(ptr)   AccessChain 73(@patchConstantOutput.edges) 79
+                                Store 82 81
+                                Branch 60
+              60:             Label
                               Return
                               FunctionEnd
 16(@main(struct-VS_OUT-vf31[4];):  13(HS_OUT) Function None 14
@@ -363,11 +362,11 @@ vertex spacing = equal_spacing
          25(pid):     18(ptr) FunctionParameter
          26(pos):     20(ptr) FunctionParameter
               28:             Label
-      84(output):     62(ptr) Variable Function
-              86:     75(ptr) AccessChain 84(output) 32 32
-                              Store 86 85
-              88:     75(ptr) AccessChain 84(output) 32 80
-                              Store 88 87
-              89:23(HS_CONSTANT_OUT) Load 84(output)
-                              ReturnValue 89
+      83(output):     61(ptr) Variable Function
+              85:     74(ptr) AccessChain 83(output) 32 32
+                              Store 85 84
+              87:     74(ptr) AccessChain 83(output) 32 79
+                              Store 87 86
+              88:23(HS_CONSTANT_OUT) Load 83(output)
+                              ReturnValue 88
                               FunctionEnd
index 3349df8..388e582 100644 (file)
@@ -477,12 +477,12 @@ triangle order = cw
 
 // Module Version 10000
 // Generated by (magic number): 80002
-// Id's are bound by 128
+// Id's are bound by 127
 
                               Capability Tessellation
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 56 64 83 86 111 124
+                              EntryPoint TessellationControl 4  "main" 56 64 83 86 110 123
                               ExecutionMode 4 OutputVertices 3
                               ExecutionMode 4 Triangles
                               ExecutionMode 4 SpacingFractionalOdd
@@ -516,16 +516,16 @@ triangle order = cw
                               Name 90  "param"
                               Name 104  "@patchConstantResult"
                               Name 105  "param"
-                              Name 111  "@patchConstantOutput.fTessFactor"
-                              Name 124  "@patchConstantOutput.fInsideTessFactor"
+                              Name 110  "@patchConstantOutput.fTessFactor"
+                              Name 123  "@patchConstantOutput.fInsideTessFactor"
                               Decorate 56(I.m_Position) BuiltIn Position
                               Decorate 64(I) Location 0
                               Decorate 83(cpid) BuiltIn InvocationId
                               Decorate 86(@entryPointOutput.m_Position) BuiltIn Position
-                              Decorate 111(@patchConstantOutput.fTessFactor) Patch
-                              Decorate 111(@patchConstantOutput.fTessFactor) BuiltIn TessLevelOuter
-                              Decorate 124(@patchConstantOutput.fInsideTessFactor) Patch
-                              Decorate 124(@patchConstantOutput.fInsideTessFactor) BuiltIn TessLevelInner
+                              Decorate 110(@patchConstantOutput.fTessFactor) Patch
+                              Decorate 110(@patchConstantOutput.fTessFactor) BuiltIn TessLevelOuter
+                              Decorate 123(@patchConstantOutput.fInsideTessFactor) Patch
+                              Decorate 123(@patchConstantOutput.fInsideTessFactor) BuiltIn TessLevelInner
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -568,17 +568,16 @@ triangle order = cw
 86(@entryPointOutput.m_Position):     85(ptr) Variable Output
               94:             TypePointer Output 7(fvec4)
               96:      9(int) Constant 2
-              97:      9(int) Constant 1
+              97:      9(int) Constant 4
               98:      9(int) Constant 0
              100:             TypeBool
-             108:      9(int) Constant 4
-             109:             TypeArray 6(float) 108
-             110:             TypePointer Output 109
-111(@patchConstantOutput.fTessFactor):    110(ptr) Variable Output
-             114:             TypePointer Output 6(float)
-             122:             TypeArray 6(float) 96
-             123:             TypePointer Output 122
-124(@patchConstantOutput.fInsideTessFactor):    123(ptr) Variable Output
+             108:             TypeArray 6(float) 97
+             109:             TypePointer Output 108
+110(@patchConstantOutput.fTessFactor):    109(ptr) Variable Output
+             113:             TypePointer Output 6(float)
+             121:             TypeArray 6(float) 96
+             122:             TypePointer Output 121
+123(@patchConstantOutput.fInsideTessFactor):    122(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
            53(I):     12(ptr) Variable Function
@@ -632,22 +631,22 @@ triangle order = cw
                                 Store 105(param) 106
              107:14(HS_Output)   FunctionCall 17(HS_ConstFunc(struct-HS_Input-vf4-vf41[3];) 105(param)
                                 Store 104(@patchConstantResult) 107
-             112:     34(ptr)   AccessChain 104(@patchConstantResult) 33 33
-             113:    6(float)   Load 112
-             115:    114(ptr)   AccessChain 111(@patchConstantOutput.fTessFactor) 33
-                                Store 115 113
-             116:     34(ptr)   AccessChain 104(@patchConstantResult) 33 32
-             117:    6(float)   Load 116
-             118:    114(ptr)   AccessChain 111(@patchConstantOutput.fTessFactor) 32
-                                Store 118 117
-             119:     34(ptr)   AccessChain 104(@patchConstantResult) 33 74
-             120:    6(float)   Load 119
-             121:    114(ptr)   AccessChain 111(@patchConstantOutput.fTessFactor) 74
-                                Store 121 120
-             125:     34(ptr)   AccessChain 104(@patchConstantResult) 32
-             126:    6(float)   Load 125
-             127:    114(ptr)   AccessChain 124(@patchConstantOutput.fInsideTessFactor) 33
-                                Store 127 126
+             111:     34(ptr)   AccessChain 104(@patchConstantResult) 33 33
+             112:    6(float)   Load 111
+             114:    113(ptr)   AccessChain 110(@patchConstantOutput.fTessFactor) 33
+                                Store 114 112
+             115:     34(ptr)   AccessChain 104(@patchConstantResult) 33 32
+             116:    6(float)   Load 115
+             117:    113(ptr)   AccessChain 110(@patchConstantOutput.fTessFactor) 32
+                                Store 117 116
+             118:     34(ptr)   AccessChain 104(@patchConstantResult) 33 74
+             119:    6(float)   Load 118
+             120:    113(ptr)   AccessChain 110(@patchConstantOutput.fTessFactor) 74
+                                Store 120 119
+             124:     34(ptr)   AccessChain 104(@patchConstantResult) 32
+             125:    6(float)   Load 124
+             126:    113(ptr)   AccessChain 123(@patchConstantOutput.fInsideTessFactor) 33
+                                Store 126 125
                                 Branch 103
              103:             Label
                               Return
index 24e4aa7..af650d3 100644 (file)
@@ -434,12 +434,12 @@ triangle order = cw
                               Name 68  "param"
                               Name 70  "param"
                               Name 74  "i"
-                              Name 75  "param"
-                              Name 77  "param"
-                              Name 81  "i"
-                              Name 82  "param"
-                              Name 84  "param"
-                              Name 88  "@patchConstantResult"
+                              Name 76  "param"
+                              Name 78  "param"
+                              Name 82  "i"
+                              Name 83  "param"
+                              Name 85  "param"
+                              Name 89  "@patchConstantResult"
                               Name 94  "@patchConstantOutput.tfactor"
                               Name 108  "@patchConstantOutput.flInFactor"
                               Name 112  "o"
@@ -478,15 +478,15 @@ triangle order = cw
 48(@entryPointOutput):     47(ptr) Variable Output
               55:             TypePointer Output 14(hs_out_t)
               57:      9(int) Constant 2
-              58:      9(int) Constant 1
+              58:      9(int) Constant 4
               59:      9(int) Constant 0
               61:             TypeBool
               65:             TypePointer Function 20
               73:     29(int) Constant 1
-              80:     29(int) Constant 2
-              87:             TypePointer Function 22(hs_pcf_t)
-              91:      9(int) Constant 4
-              92:             TypeArray 6(float) 91
+              75:      9(int) Constant 1
+              81:     29(int) Constant 2
+              88:             TypePointer Function 22(hs_pcf_t)
+              92:             TypeArray 6(float) 58
               93:             TypePointer Output 92
 94(@patchConstantOutput.tfactor):     93(ptr) Variable Output
               95:             TypePointer Function 6(float)
@@ -506,12 +506,12 @@ triangle order = cw
        68(param):     12(ptr) Variable Function
        70(param):     13(ptr) Variable Function
            74(i):     12(ptr) Variable Function
-       75(param):     12(ptr) Variable Function
-       77(param):     13(ptr) Variable Function
-           81(i):     12(ptr) Variable Function
-       82(param):     12(ptr) Variable Function
-       84(param):     13(ptr) Variable Function
-88(@patchConstantResult):     87(ptr) Variable Function
+       76(param):     12(ptr) Variable Function
+       78(param):     13(ptr) Variable Function
+           82(i):     12(ptr) Variable Function
+       83(param):     12(ptr) Variable Function
+       85(param):     13(ptr) Variable Function
+89(@patchConstantResult):     88(ptr) Variable Function
               42:          11 Load 41(i)
                               Store 39(i) 42
               46:      9(int) Load 45(cpid)
@@ -536,34 +536,34 @@ triangle order = cw
               71:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 68(param) 70(param)
               72:     27(ptr)   AccessChain 66(pcf_out) 30
                                 Store 72 71
-              76:          11   Load 74(i)
-                                Store 75(param) 76
-                                Store 77(param) 58
-              78:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 75(param) 77(param)
-              79:     27(ptr)   AccessChain 66(pcf_out) 73
-                                Store 79 78
-              83:          11   Load 81(i)
-                                Store 82(param) 83
-                                Store 84(param) 57
-              85:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 82(param) 84(param)
-              86:     27(ptr)   AccessChain 66(pcf_out) 80
-                                Store 86 85
-              89:          20   Load 66(pcf_out)
-              90:22(hs_pcf_t)   FunctionCall 25(PCF(struct-hs_out_t-vf31[3];) 89
-                                Store 88(@patchConstantResult) 90
-              96:     95(ptr)   AccessChain 88(@patchConstantResult) 30 30
+              77:          11   Load 74(i)
+                                Store 76(param) 77
+                                Store 78(param) 75
+              79:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 76(param) 78(param)
+              80:     27(ptr)   AccessChain 66(pcf_out) 73
+                                Store 80 79
+              84:          11   Load 82(i)
+                                Store 83(param) 84
+                                Store 85(param) 57
+              86:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 83(param) 85(param)
+              87:     27(ptr)   AccessChain 66(pcf_out) 81
+                                Store 87 86
+              90:          20   Load 66(pcf_out)
+              91:22(hs_pcf_t)   FunctionCall 25(PCF(struct-hs_out_t-vf31[3];) 90
+                                Store 89(@patchConstantResult) 91
+              96:     95(ptr)   AccessChain 89(@patchConstantResult) 30 30
               97:    6(float)   Load 96
               99:     98(ptr)   AccessChain 94(@patchConstantOutput.tfactor) 30
                                 Store 99 97
-             100:     95(ptr)   AccessChain 88(@patchConstantResult) 30 73
+             100:     95(ptr)   AccessChain 89(@patchConstantResult) 30 73
              101:    6(float)   Load 100
              102:     98(ptr)   AccessChain 94(@patchConstantOutput.tfactor) 73
                                 Store 102 101
-             103:     95(ptr)   AccessChain 88(@patchConstantResult) 30 80
+             103:     95(ptr)   AccessChain 89(@patchConstantResult) 30 81
              104:    6(float)   Load 103
-             105:     98(ptr)   AccessChain 94(@patchConstantOutput.tfactor) 80
+             105:     98(ptr)   AccessChain 94(@patchConstantOutput.tfactor) 81
                                 Store 105 104
-             109:     95(ptr)   AccessChain 88(@patchConstantResult) 73
+             109:     95(ptr)   AccessChain 89(@patchConstantResult) 73
              110:    6(float)   Load 109
              111:     98(ptr)   AccessChain 108(@patchConstantOutput.flInFactor) 30
                                 Store 111 110
@@ -587,7 +587,7 @@ triangle order = cw
 25(PCF(struct-hs_out_t-vf31[3];):22(hs_pcf_t) Function None 23
      24(pcf_out):          20 FunctionParameter
               26:             Label
-          112(o):     87(ptr) Variable Function
+          112(o):     88(ptr) Variable Function
              113:    6(float) CompositeExtract 24(pcf_out) 0 0 0
              114:     95(ptr) AccessChain 112(o) 30 30
                               Store 114 113
@@ -595,7 +595,7 @@ triangle order = cw
              116:     95(ptr) AccessChain 112(o) 30 73
                               Store 116 115
              117:    6(float) CompositeExtract 24(pcf_out) 2 0 0
-             118:     95(ptr) AccessChain 112(o) 30 80
+             118:     95(ptr) AccessChain 112(o) 30 81
                               Store 118 117
              120:     95(ptr) AccessChain 112(o) 73
                               Store 120 119
index 89582b7..58380a4 100644 (file)
@@ -453,12 +453,12 @@ triangle order = cw
                               Name 69  "param"
                               Name 71  "param"
                               Name 75  "i"
-                              Name 76  "param"
-                              Name 78  "param"
-                              Name 82  "i"
-                              Name 83  "param"
-                              Name 85  "param"
-                              Name 89  "@patchConstantResult"
+                              Name 77  "param"
+                              Name 79  "param"
+                              Name 83  "i"
+                              Name 84  "param"
+                              Name 86  "param"
+                              Name 90  "@patchConstantResult"
                               Name 96  "@patchConstantOutput.tfactor"
                               Name 110  "@patchConstantOutput.flInFactor"
                               Name 114  "o"
@@ -497,15 +497,15 @@ triangle order = cw
 49(@entryPointOutput):     48(ptr) Variable Output
               56:             TypePointer Output 14(hs_out_t)
               58:      9(int) Constant 2
-              59:      9(int) Constant 1
+              59:      9(int) Constant 4
               60:      9(int) Constant 0
               62:             TypeBool
               66:             TypePointer Function 20
               74:     28(int) Constant 1
-              81:     28(int) Constant 2
-              88:             TypePointer Function 22(hs_pcf_t)
-              93:      9(int) Constant 4
-              94:             TypeArray 6(float) 93
+              76:      9(int) Constant 1
+              82:     28(int) Constant 2
+              89:             TypePointer Function 22(hs_pcf_t)
+              94:             TypeArray 6(float) 59
               95:             TypePointer Output 94
 96(@patchConstantOutput.tfactor):     95(ptr) Variable Output
               97:             TypePointer Function 6(float)
@@ -525,12 +525,12 @@ triangle order = cw
        69(param):     12(ptr) Variable Function
        71(param):     13(ptr) Variable Function
            75(i):     12(ptr) Variable Function
-       76(param):     12(ptr) Variable Function
-       78(param):     13(ptr) Variable Function
-           82(i):     12(ptr) Variable Function
-       83(param):     12(ptr) Variable Function
-       85(param):     13(ptr) Variable Function
-89(@patchConstantResult):     88(ptr) Variable Function
+       77(param):     12(ptr) Variable Function
+       79(param):     13(ptr) Variable Function
+           83(i):     12(ptr) Variable Function
+       84(param):     12(ptr) Variable Function
+       86(param):     13(ptr) Variable Function
+90(@patchConstantResult):     89(ptr) Variable Function
               43:          11 Load 42(i)
                               Store 40(i) 43
               47:      9(int) Load 46(cpid)
@@ -555,35 +555,35 @@ triangle order = cw
               72:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 69(param) 71(param)
               73:     30(ptr)   AccessChain 67(pcf_out) 29
                                 Store 73 72
-              77:          11   Load 75(i)
-                                Store 76(param) 77
-                                Store 78(param) 59
-              79:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 76(param) 78(param)
-              80:     30(ptr)   AccessChain 67(pcf_out) 74
-                                Store 80 79
-              84:          11   Load 82(i)
-                                Store 83(param) 84
-                                Store 85(param) 58
-              86:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 83(param) 85(param)
-              87:     30(ptr)   AccessChain 67(pcf_out) 81
-                                Store 87 86
-              90:          20   Load 67(pcf_out)
-              91:          11   Load 40(i)
-              92:22(hs_pcf_t)   FunctionCall 26(PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3];) 90 91
-                                Store 89(@patchConstantResult) 92
-              98:     97(ptr)   AccessChain 89(@patchConstantResult) 29 29
+              78:          11   Load 75(i)
+                                Store 77(param) 78
+                                Store 79(param) 76
+              80:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 77(param) 79(param)
+              81:     30(ptr)   AccessChain 67(pcf_out) 74
+                                Store 81 80
+              85:          11   Load 83(i)
+                                Store 84(param) 85
+                                Store 86(param) 58
+              87:14(hs_out_t)   FunctionCall 18(@main(struct-hs_in_t-vf31[3];u1;) 84(param) 86(param)
+              88:     30(ptr)   AccessChain 67(pcf_out) 82
+                                Store 88 87
+              91:          20   Load 67(pcf_out)
+              92:          11   Load 40(i)
+              93:22(hs_pcf_t)   FunctionCall 26(PCF(struct-hs_out_t-vf31[3];struct-hs_in_t-vf31[3];) 91 92
+                                Store 90(@patchConstantResult) 93
+              98:     97(ptr)   AccessChain 90(@patchConstantResult) 29 29
               99:    6(float)   Load 98
              101:    100(ptr)   AccessChain 96(@patchConstantOutput.tfactor) 29
                                 Store 101 99
-             102:     97(ptr)   AccessChain 89(@patchConstantResult) 29 74
+             102:     97(ptr)   AccessChain 90(@patchConstantResult) 29 74
              103:    6(float)   Load 102
              104:    100(ptr)   AccessChain 96(@patchConstantOutput.tfactor) 74
                                 Store 104 103
-             105:     97(ptr)   AccessChain 89(@patchConstantResult) 29 81
+             105:     97(ptr)   AccessChain 90(@patchConstantResult) 29 82
              106:    6(float)   Load 105
-             107:    100(ptr)   AccessChain 96(@patchConstantOutput.tfactor) 81
+             107:    100(ptr)   AccessChain 96(@patchConstantOutput.tfactor) 82
                                 Store 107 106
-             111:     97(ptr)   AccessChain 89(@patchConstantResult) 74
+             111:     97(ptr)   AccessChain 90(@patchConstantResult) 74
              112:    6(float)   Load 111
              113:    100(ptr)   AccessChain 110(@patchConstantOutput.flInFactor) 29
                                 Store 113 112
@@ -608,7 +608,7 @@ triangle order = cw
      24(pcf_out):          20 FunctionParameter
       25(pcf_in):          11 FunctionParameter
               27:             Label
-          114(o):     88(ptr) Variable Function
+          114(o):     89(ptr) Variable Function
              115:    6(float) CompositeExtract 24(pcf_out) 0 0 0
              116:     97(ptr) AccessChain 114(o) 29 29
                               Store 116 115
@@ -616,7 +616,7 @@ triangle order = cw
              118:     97(ptr) AccessChain 114(o) 29 74
                               Store 118 117
              119:    6(float) CompositeExtract 24(pcf_out) 2 0 0
-             120:     97(ptr) AccessChain 114(o) 29 81
+             120:     97(ptr) AccessChain 114(o) 29 82
                               Store 120 119
              122:     97(ptr) AccessChain 114(o) 74
                               Store 122 121
index 68524d9..a5f2d2c 100644 (file)
@@ -161,7 +161,7 @@ triangle order = ccw
 39(InvocationId):     38(ptr) Variable Input
               44:             TypePointer Output 13(HS_OUT)
               46:      9(int) Constant 2
-              47:      9(int) Constant 1
+              47:      9(int) Constant 4
               48:      9(int) Constant 0
               50:             TypeBool
          4(main):           2 Function None 3
index bc8a073..4d0fe38 100644 (file)
@@ -53,44 +53,45 @@ local_size = (1, 1, 1)
 
 // Module Version 10000
 // Generated by (magic number): 80002
-// Id's are bound by 22
+// Id's are bound by 23
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "ComputeShaderFunction" 20
+                              EntryPoint GLCompute 4  "ComputeShaderFunction" 21
                               ExecutionMode 4 LocalSize 1 1 1
                               Source HLSL 500
                               Name 4  "ComputeShaderFunction"
                               Name 8  "@ComputeShaderFunction("
-                              Name 20  "@entryPointOutput"
-                              Decorate 20(@entryPointOutput) Location 0
+                              Name 21  "@entryPointOutput"
+                              Decorate 21(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeFunction 6(float)
               10:             TypeInt 32 0
               11:     10(int) Constant 1
-              12:     10(int) Constant 4048
-              13:     10(int) Constant 512
+              12:     10(int) Constant 4040
+              13:     10(int) Constant 4048
               14:     10(int) Constant 2
-              15:     10(int) Constant 256
-              16:    6(float) Constant 0
-              19:             TypePointer Output 6(float)
-20(@entryPointOutput):     19(ptr) Variable Output
+              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
 4(ComputeShaderFunction):           2 Function None 3
                5:             Label
-              21:    6(float) FunctionCall 8(@ComputeShaderFunction()
-                              Store 20(@entryPointOutput) 21
+              22:    6(float) FunctionCall 8(@ComputeShaderFunction()
+                              Store 21(@entryPointOutput) 22
                               Return
                               FunctionEnd
 8(@ComputeShaderFunction():    6(float) Function None 7
                9:             Label
                               MemoryBarrier 11 12
-                              ControlBarrier 11 11 12
-                              MemoryBarrier 11 13
                               ControlBarrier 11 11 13
-                              MemoryBarrier 14 15
-                              ControlBarrier 14 14 15
-                              ReturnValue 16
+                              MemoryBarrier 14 12
+                              ControlBarrier 11 11 15
+                              MemoryBarrier 14 16
+                              ControlBarrier 14 14 16
+                              ReturnValue 17
                               FunctionEnd
index fec52c5..81eb643 100644 (file)
@@ -1,7 +1,7 @@
 spv.310.comp
 // Module Version 10000
 // Generated by (magic number): 80002
-// Id's are bound by 69
+// Id's are bound by 71
 
                               Capability Shader
                               Capability DeviceGroup
@@ -13,17 +13,17 @@ spv.310.comp
                               Source ESSL 310
                               SourceExtension  "GL_EXT_device_group"
                               Name 4  "main"
-                              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 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 42  "i"
                               Name 48  "outs"
                               MemberName 48(outs) 0  "s"
@@ -31,17 +31,17 @@ spv.310.comp
                               Name 50  "outnames"
                               Name 53  "gl_LocalInvocationID"
                               Name 64  "gl_DeviceIndex"
-                              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 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 47 ArrayStride 16
                               MemberDecorate 48(outs) 0 Offset 0
                               MemberDecorate 48(outs) 1 Offset 16
@@ -49,81 +49,85 @@ spv.310.comp
                               Decorate 50(outnames) DescriptorSet 0
                               Decorate 53(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 64(gl_DeviceIndex) BuiltIn DeviceIndex
-                              Decorate 68 BuiltIn WorkgroupSize
+                              Decorate 70 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
                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)
+               8:      6(int) Constant 264
+               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
+              33:      6(int) Constant 0
+              36:     15(int) Constant 17
+              37:    9(float) Constant 1077936128
+              38:   10(fvec3) ConstantComposite 37 37 37
+              39:             TypePointer Uniform 10(fvec3)
+              41:             TypePointer Workgroup 15(int)
            42(i):     41(ptr) Variable Workgroup
-              47:             TypeRuntimeArray 23(fvec4)
-        48(outs):             TypeStruct 16(int) 47
+              47:             TypeRuntimeArray 22(fvec4)
+        48(outs):             TypeStruct 15(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:             TypePointer Input 16(int)
+              61:             TypePointer Uniform 15(int)
+              63:             TypePointer Input 15(int)
 64(gl_DeviceIndex):     63(ptr) Variable Input
-              65:      6(int) Constant 16
-              66:      6(int) Constant 32
-              67:      6(int) Constant 4
-              68:   51(ivec3) ConstantComposite 65 66 67
+              65:      6(int) Constant 1
+              66:      6(int) Constant 4040
+              67:      6(int) Constant 16
+              68:      6(int) Constant 32
+              69:      6(int) Constant 4
+              70:   51(ivec3) ConstantComposite 67 68 69
          4(main):           2 Function None 3
                5:             Label
-                              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
+                              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
+              34:     20(ptr) AccessChain 14(outbname) 31 32 33
+              35:    9(float) Load 34
+                              Store 18(s) 35
+              40:     39(ptr) AccessChain 14(outbname) 31 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
+              43:     15(int) Load 42(i)
+              44:    9(float) Load 18(s)
+              45:   10(fvec3) CompositeConstruct 44 44 44
+              46:     39(ptr) AccessChain 14(outbname) 31 43
                               Store 46 45
-              55:     54(ptr) AccessChain 53(gl_LocalInvocationID) 9
+              55:     54(ptr) AccessChain 53(gl_LocalInvocationID) 33
               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
+              57:    9(float) Load 18(s)
+              58:   22(fvec4) CompositeConstruct 57 57 57 57
+              59:     29(ptr) AccessChain 50(outnames) 26 56
                               Store 59 58
-              60:     16(int) ArrayLength 15(outbname) 3
-              62:     61(ptr) AccessChain 50(outnames) 17
+              60:     15(int) ArrayLength 14(outbname) 3
+              62:     61(ptr) AccessChain 50(outnames) 16
                               Store 62 60
+                              MemoryBarrier 65 8
+                              MemoryBarrier 7 66
                               Return
                               FunctionEnd
index 5b6a6b1..44f5826 100644 (file)
@@ -1,14 +1,14 @@
 spv.400.tesc
 // Module Version 10000
 // Generated by (magic number): 80002
-// Id's are bound by 93
+// Id's are bound by 92
 
                               Capability Tessellation
                               Capability TessellationPointSize
                               Capability ClipDistance
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 24 41 44 47 54 68 73 79 83 84 87 88 91 92
+                              EntryPoint TessellationControl 4  "main" 24 41 44 47 53 67 72 78 82 83 86 87 90 91
                               ExecutionMode 4 OutputVertices 4
                               Source GLSL 400
                               SourceExtension  "GL_ARB_separate_shader_objects"
@@ -32,17 +32,17 @@ spv.400.tesc
                               MemberName 50(gl_PerVertex) 0  "gl_Position"
                               MemberName 50(gl_PerVertex) 1  "gl_PointSize"
                               MemberName 50(gl_PerVertex) 2  "gl_ClipDistance"
-                              Name 54  "gl_out"
-                              Name 68  "gl_TessLevelOuter"
-                              Name 73  "gl_TessLevelInner"
-                              Name 78  "outa"
-                              Name 79  "patchOut"
-                              Name 83  "inb"
-                              Name 84  "ind"
-                              Name 87  "ivla"
-                              Name 88  "ivlb"
-                              Name 91  "ovla"
-                              Name 92  "ovlb"
+                              Name 53  "gl_out"
+                              Name 67  "gl_TessLevelOuter"
+                              Name 72  "gl_TessLevelInner"
+                              Name 77  "outa"
+                              Name 78  "patchOut"
+                              Name 82  "inb"
+                              Name 83  "ind"
+                              Name 86  "ivla"
+                              Name 87  "ivlb"
+                              Name 90  "ovla"
+                              Name 91  "ovlb"
                               MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance
@@ -54,20 +54,20 @@ spv.400.tesc
                               MemberDecorate 50(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 50(gl_PerVertex) 2 BuiltIn ClipDistance
                               Decorate 50(gl_PerVertex) Block
-                              Decorate 68(gl_TessLevelOuter) Patch
-                              Decorate 68(gl_TessLevelOuter) BuiltIn TessLevelOuter
-                              Decorate 73(gl_TessLevelInner) Patch
-                              Decorate 73(gl_TessLevelInner) BuiltIn TessLevelInner
-                              Decorate 79(patchOut) Patch
-                              Decorate 87(ivla) Location 3
-                              Decorate 88(ivlb) Location 4
-                              Decorate 91(ovla) Location 3
-                              Decorate 92(ovlb) Location 4
+                              Decorate 67(gl_TessLevelOuter) Patch
+                              Decorate 67(gl_TessLevelOuter) BuiltIn TessLevelOuter
+                              Decorate 72(gl_TessLevelInner) Patch
+                              Decorate 72(gl_TessLevelInner) BuiltIn TessLevelInner
+                              Decorate 78(patchOut) Patch
+                              Decorate 86(ivla) Location 3
+                              Decorate 87(ivlb) Location 4
+                              Decorate 90(ovla) Location 3
+                              Decorate 91(ovlb) Location 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
                7:      6(int) Constant 2
-               8:      6(int) Constant 1
+               8:      6(int) Constant 4
                9:      6(int) Constant 0
               10:             TypeInt 32 1
               11:             TypePointer Function 10(int)
@@ -94,37 +94,36 @@ spv.400.tesc
 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 15(fvec4)
-              61:             TypePointer Output 14(float)
-              66:             TypeArray 14(float) 51
-              67:             TypePointer Output 66
-68(gl_TessLevelOuter):     67(ptr) Variable Output
-              69:     10(int) Constant 3
-              70:   14(float) Constant 1078774989
-              72:             TypePointer Output 49
-73(gl_TessLevelInner):     72(ptr) Variable Output
-              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 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 15(fvec4) 21
-              86:             TypePointer Input 85
-        87(ivla):     86(ptr) Variable Input
-        88(ivlb):     86(ptr) Variable Input
-              89:             TypeArray 15(fvec4) 51
-              90:             TypePointer Output 89
-        91(ovla):     90(ptr) Variable Output
-        92(ovlb):     90(ptr) Variable Output
+              51:             TypeArray 50(gl_PerVertex) 8
+              52:             TypePointer Output 51
+      53(gl_out):     52(ptr) Variable Output
+              56:             TypePointer Output 15(fvec4)
+              60:             TypePointer Output 14(float)
+              65:             TypeArray 14(float) 8
+              66:             TypePointer Output 65
+67(gl_TessLevelOuter):     66(ptr) Variable Output
+              68:     10(int) Constant 3
+              69:   14(float) Constant 1078774989
+              71:             TypePointer Output 49
+72(gl_TessLevelInner):     71(ptr) Variable Output
+              73:   14(float) Constant 1067869798
+              75:             TypeArray 10(int) 8
+              76:             TypePointer Private 75
+        77(outa):     76(ptr) Variable Private
+    78(patchOut):     56(ptr) Variable Output
+              79:             TypeVector 14(float) 2
+              80:             TypeArray 79(fvec2) 21
+              81:             TypePointer Input 80
+         82(inb):     81(ptr) Variable Input
+         83(ind):     81(ptr) Variable Input
+              84:             TypeArray 15(fvec4) 21
+              85:             TypePointer Input 84
+        86(ivla):     85(ptr) Variable Input
+        87(ivlb):     85(ptr) Variable Input
+              88:             TypeArray 15(fvec4) 8
+              89:             TypePointer Output 88
+        90(ovla):     89(ptr) Variable Output
+        91(ovlb):     89(ptr) Variable Output
          4(main):           2 Function None 3
                5:             Label
            12(a):     11(ptr) Variable Function
@@ -151,21 +150,21 @@ spv.400.tesc
                               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:     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:     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) 25
-                              Store 75 74
+              54:     10(int) Load 47(gl_InvocationID)
+              55:   15(fvec4) Load 17(p)
+              57:     56(ptr) AccessChain 53(gl_out) 54 26
+                              Store 57 55
+              58:     10(int) Load 47(gl_InvocationID)
+              59:   14(float) Load 31(ps)
+              61:     60(ptr) AccessChain 53(gl_out) 58 25
+                              Store 61 59
+              62:     10(int) Load 47(gl_InvocationID)
+              63:   14(float) Load 35(cd)
+              64:     60(ptr) AccessChain 53(gl_out) 62 36 25
+                              Store 64 63
+              70:     60(ptr) AccessChain 67(gl_TessLevelOuter) 68
+                              Store 70 69
+              74:     60(ptr) AccessChain 72(gl_TessLevelInner) 25
+                              Store 74 73
                               Return
                               FunctionEnd
index b64dc90..979c0e1 100755 (executable)
@@ -47,7 +47,7 @@ spv.atomic.comp
                8:             TypeFunction 6(int) 7(ptr)
               14:      6(int) Constant 1
               15:      6(int) Constant 0
-              19:      6(int) Constant 1024
+              19:      6(int) Constant 1032
      20(counter):      7(ptr) Variable AtomicCounter
               22:             TypePointer Function 6(int)
               24:      6(int) Constant 4
diff --git a/Test/baseResults/spv.barrier.vert.out b/Test/baseResults/spv.barrier.vert.out
new file mode 100755 (executable)
index 0000000..9389105
--- /dev/null
@@ -0,0 +1,46 @@
+spv.barrier.vert
+// Module Version 10000
+// Generated by (magic number): 80002
+// Id's are bound by 24
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 9 15
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "c0"
+                              Name 15  "c1"
+                              Decorate 9(c0) Location 0
+                              Decorate 15(c1) Location 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+           9(c0):      8(ptr) Variable Output
+              10:    6(float) Constant 1065353216
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+              12:             TypeInt 32 0
+              13:     12(int) Constant 1
+              14:     12(int) Constant 4040
+          15(c1):      8(ptr) Variable Output
+              16:     12(int) Constant 72
+              20:     12(int) Constant 2056
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 9(c0) 11
+                              MemoryBarrier 13 14
+                              Store 15(c1) 11
+                              MemoryBarrier 13 16
+              17:    7(fvec4) Load 9(c0)
+              18:    7(fvec4) CompositeConstruct 10 10 10 10
+              19:    7(fvec4) FAdd 17 18
+                              Store 9(c0) 19
+                              MemoryBarrier 13 20
+              21:    7(fvec4) Load 9(c0)
+              22:    7(fvec4) CompositeConstruct 10 10 10 10
+              23:    7(fvec4) FAdd 21 22
+                              Store 9(c0) 23
+                              Return
+                              FunctionEnd
index 6cbb043..53117dd 100644 (file)
@@ -37,4 +37,6 @@ void main()
     outnames.va[gl_LocalInvocationID.x] = vec4(s);
     outnames.s = outbname.uns.length();
     gl_DeviceIndex;
+    memoryBarrierShared();
+    groupMemoryBarrier();
 }
diff --git a/Test/spv.barrier.vert b/Test/spv.barrier.vert
new file mode 100644 (file)
index 0000000..c7828ce
--- /dev/null
@@ -0,0 +1,15 @@
+#version 450\r
+\r
+layout(location=0) out vec4 c0;\r
+layout(location=1) out vec4 c1;\r
+\r
+void main()\r
+{\r
+    c0 = vec4(1.0);\r
+    memoryBarrier();\r
+    c1 = vec4(1.0);\r
+    memoryBarrierBuffer();\r
+    ++c0;\r
+    memoryBarrierImage();\r
+    ++c0;\r
+}
\ No newline at end of file
index da80b11..85762f4 100644 (file)
@@ -189,6 +189,7 @@ INSTANTIATE_TEST_CASE_P(
         // Test looping constructs.
         // No tests yet for making sure break and continue from a nested loop
         // goes to the innermost target.
+        "spv.barrier.vert",
         "spv.do-simple.vert",
         "spv.do-while-continue-break.vert",
         "spv.for-complex-condition.vert",