SPV: Change barrier emission to conform to Khronos decisions.

The memory model group agreed to these definitions for how
to map GLSL barrier, memoryBarrier, etc. With HLSL following suit.
This commit is contained in:
John Kessenich 2017-12-11 04:02:24 -07:00
parent 070aaeafcd
commit 8297936dd6
19 changed files with 600 additions and 520 deletions

View File

@ -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.

View File

@ -74,8 +74,7 @@ const Decoration NoPrecision = DecorationMax;
POTENTIALLY_UNUSED
const MemorySemanticsMask MemorySemanticsAllMemory =
(MemorySemanticsMask)(MemorySemanticsSequentiallyConsistentMask |
MemorySemanticsUniformMemoryMask |
(MemorySemanticsMask)(MemorySemanticsUniformMemoryMask |
MemorySemanticsSubgroupMemoryMask |
MemorySemanticsWorkgroupMemoryMask |
MemorySemanticsCrossWorkgroupMemoryMask |

View 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

View 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

View 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
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
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
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

View 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
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
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
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

View 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 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
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
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
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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View File

@ -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

View File

@ -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

View File

@ -37,4 +37,6 @@ void main()
outnames.va[gl_LocalInvocationID.x] = vec4(s);
outnames.s = outbname.uns.length();
gl_DeviceIndex;
memoryBarrierShared();
groupMemoryBarrier();
}

15
Test/spv.barrier.vert Normal file
View File

@ -0,0 +1,15 @@
#version 450
layout(location=0) out vec4 c0;
layout(location=1) out vec4 c1;
void main()
{
c0 = vec4(1.0);
memoryBarrier();
c1 = vec4(1.0);
memoryBarrierBuffer();
++c0;
memoryBarrierImage();
++c0;
}

View 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",