SPV: Update to spec. decisions (and issue #205) for barrier().
authorJohn Kessenich <cepheus@frii.com>
Wed, 15 Jun 2016 01:46:20 +0000 (19:46 -0600)
committerJohn Kessenich <cepheus@frii.com>
Wed, 15 Jun 2016 01:50:26 +0000 (19:50 -0600)
A barrier (ESSL/GLSL) or OpControlBarrier when in a tessellation control
shader also means doing memory synchronization for output variables.

SPIRV/GlslangToSpv.cpp
SPIRV/spvIR.h
Test/baseResults/spv.400.tesc.out

index 0324468..e4280a3 100755 (executable)
@@ -3924,8 +3924,6 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op)
         builder.createNoResultOp(spv::OpEndPrimitive);
         return 0;
     case glslang::EOpBarrier:
-        if (glslangIntermediate->getProfile() != EEsProfile)
-            builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAllMemory);
         builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice, spv::MemorySemanticsMaskNone);
         return 0;
     case glslang::EOpMemoryBarrier:
index 7c9fb98..42c054a 100755 (executable)
@@ -67,10 +67,7 @@ const Id NoType = 0;
 const unsigned int BadValue = 0xFFFFFFFF;
 const Decoration NoPrecision = (Decoration)BadValue;
 const MemorySemanticsMask MemorySemanticsAllMemory = 
-                (MemorySemanticsMask)(MemorySemanticsAcquireMask |
-                                      MemorySemanticsReleaseMask |
-                                      MemorySemanticsAcquireReleaseMask |
-                                      MemorySemanticsSequentiallyConsistentMask |
+                (MemorySemanticsMask)(MemorySemanticsSequentiallyConsistentMask |
                                       MemorySemanticsUniformMemoryMask |
                                       MemorySemanticsSubgroupMemoryMask |
                                       MemorySemanticsWorkgroupMemoryMask |
index 290a19c..bcfd963 100755 (executable)
@@ -7,173 +7,171 @@ Linked tessellation control stage:
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 94
+// Id's are bound by 93
 
                               Capability Tessellation
                               Capability TessellationPointSize
                               Capability ClipDistance
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 4  "main" 24 41 44 47 55 69 74 80 84 85 88 89 92 93
+                              EntryPoint TessellationControl 4  "main" 23 40 43 46 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 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 51  "gl_PerVertex"
-                              MemberName 51(gl_PerVertex) 0  "gl_Position"
-                              MemberName 51(gl_PerVertex) 1  "gl_PointSize"
-                              MemberName 51(gl_PerVertex) 2  "gl_ClipDistance"
-                              Name 55  "gl_out"
-                              Name 69  "gl_TessLevelOuter"
-                              Name 74  "gl_TessLevelInner"
-                              Name 79  "outa"
-                              Name 80  "patchOut"
-                              Name 84  "inb"
-                              Name 85  "ind"
-                              Name 88  "ivla"
-                              Name 89  "ivlb"
-                              Name 92  "ovla"
-                              Name 93  "ovlb"
-                              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 51(gl_PerVertex) 0 BuiltIn Position
-                              MemberDecorate 51(gl_PerVertex) 1 BuiltIn PointSize
-                              MemberDecorate 51(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 51(gl_PerVertex) Block
-                              Decorate 69(gl_TessLevelOuter) Patch
-                              Decorate 69(gl_TessLevelOuter) BuiltIn TessLevelOuter
-                              Decorate 74(gl_TessLevelInner) Patch
-                              Decorate 74(gl_TessLevelInner) BuiltIn TessLevelInner
-                              Decorate 80(patchOut) Patch
-                              Decorate 88(ivla) Location 3
-                              Decorate 89(ivlb) Location 4
-                              Decorate 92(ovla) Location 3
-                              Decorate 93(ovlb) Location 4
+                              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 50  "gl_PerVertex"
+                              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"
+                              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 50(gl_PerVertex) 0 BuiltIn Position
+                              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
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
                7:      6(int) Constant 1
-               8:      6(int) Constant 4062
-               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:      6(int) Constant 2
-              50:             TypeArray 14(float) 49
-51(gl_PerVertex):             TypeStruct 15(fvec4) 14(float) 50
-              52:      6(int) Constant 4
-              53:             TypeArray 51(gl_PerVertex) 52
-              54:             TypePointer Output 53
-      55(gl_out):     54(ptr) Variable Output
-              58:             TypePointer Output 15(fvec4)
-              62:             TypePointer Output 14(float)
-              67:             TypeArray 14(float) 52
-              68:             TypePointer Output 67
-69(gl_TessLevelOuter):     68(ptr) Variable Output
-              70:     10(int) Constant 3
-              71:   14(float) Constant 1078774989
-              73:             TypePointer Output 50
-74(gl_TessLevelInner):     73(ptr) Variable Output
-              75:   14(float) Constant 1067869798
-              77:             TypeArray 10(int) 52
-              78:             TypePointer Private 77
-        79(outa):     78(ptr) Variable Private
-    80(patchOut):     58(ptr) Variable Output
-              81:             TypeVector 14(float) 2
-              82:             TypeArray 81(fvec2) 21
-              83:             TypePointer Input 82
-         84(inb):     83(ptr) Variable Input
-         85(ind):     83(ptr) Variable Input
-              86:             TypeArray 15(fvec4) 21
-              87:             TypePointer Input 86
-        88(ivla):     87(ptr) Variable Input
-        89(ivlb):     87(ptr) Variable Input
-              90:             TypeArray 15(fvec4) 52
-              91:             TypePointer Output 90
-        92(ovla):     91(ptr) Variable Output
-        93(ovlb):     91(ptr) Variable Output
+               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
+              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
+              67:             TypePointer Output 66
+68(gl_TessLevelOuter):     67(ptr) Variable Output
+              69:      9(int) Constant 3
+              70:   13(float) Constant 1078774989
+              72:             TypePointer Output 49
+73(gl_TessLevelInner):     72(ptr) Variable Output
+              74:   13(float) Constant 1067869798
+              76:             TypeArray 9(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
+              82:             TypePointer Input 81
+         83(inb):     82(ptr) Variable Input
+         84(ind):     82(ptr) Variable Input
+              85:             TypeArray 14(fvec4) 20
+              86:             TypePointer Input 85
+        87(ivla):     86(ptr) Variable Input
+        88(ivlb):     86(ptr) Variable Input
+              89:             TypeArray 14(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
-           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
-                              MemoryBarrier 7 8
-                              ControlBarrier 7 7 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
-              56:     10(int) Load 47(gl_InvocationID)
-              57:   15(fvec4) Load 17(p)
-              59:     58(ptr) AccessChain 55(gl_out) 56 26
-                              Store 59 57
-              60:     10(int) Load 47(gl_InvocationID)
-              61:   14(float) Load 31(ps)
-              63:     62(ptr) AccessChain 55(gl_out) 60 25
-                              Store 63 61
-              64:     10(int) Load 47(gl_InvocationID)
-              65:   14(float) Load 35(cd)
-              66:     62(ptr) AccessChain 55(gl_out) 64 36 25
-                              Store 66 65
-              72:     62(ptr) AccessChain 69(gl_TessLevelOuter) 70
-                              Store 72 71
-              76:     62(ptr) AccessChain 74(gl_TessLevelInner) 25
-                              Store 76 75
+           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
+                              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
+                              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
+                              Store 65 64
+              71:     61(ptr) AccessChain 68(gl_TessLevelOuter) 69
+                              Store 71 70
+              75:     61(ptr) AccessChain 73(gl_TessLevelInner) 24
+                              Store 75 74
                               Return
                               FunctionEnd