From 8297936dd6eb32163991899c31dd1ab55348635d Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Mon, 11 Dec 2017 04:02:24 -0700 Subject: [PATCH] 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. --- SPIRV/GlslangToSpv.cpp | 34 +++- SPIRV/spvIR.h | 3 +- Test/baseResults/hlsl.color.hull.tesc.out | 65 ++++--- Test/baseResults/hlsl.gs-hs-mix.tesc.out | 48 ++--- Test/baseResults/hlsl.hull.1.tesc.out | 103 ++++++----- Test/baseResults/hlsl.hull.2.tesc.out | 119 +++++++------ Test/baseResults/hlsl.hull.3.tesc.out | 119 +++++++------ Test/baseResults/hlsl.hull.4.tesc.out | 65 ++++--- Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out | 78 ++++----- Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out | 80 ++++----- Test/baseResults/hlsl.hull.void.tesc.out | 2 +- .../hlsl.intrinsics.barriers.comp.out | 35 ++-- Test/baseResults/spv.310.comp.out | 164 +++++++++--------- Test/baseResults/spv.400.tesc.out | 139 ++++++++------- Test/baseResults/spv.atomic.comp.out | 2 +- Test/baseResults/spv.barrier.vert.out | 46 +++++ Test/spv.310.comp | 2 + Test/spv.barrier.vert | 15 ++ gtests/Spv.FromFile.cpp | 1 + 19 files changed, 600 insertions(+), 520 deletions(-) create mode 100755 Test/baseResults/spv.barrier.vert.out create mode 100644 Test/spv.barrier.vert diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 745021f26..099d0d592 100755 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -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. diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h index 6880595e9..0cb166aff 100755 --- a/SPIRV/spvIR.h +++ b/SPIRV/spvIR.h @@ -74,8 +74,7 @@ const Decoration NoPrecision = DecorationMax; POTENTIALLY_UNUSED const MemorySemanticsMask MemorySemanticsAllMemory = - (MemorySemanticsMask)(MemorySemanticsSequentiallyConsistentMask | - MemorySemanticsUniformMemoryMask | + (MemorySemanticsMask)(MemorySemanticsUniformMemoryMask | MemorySemanticsSubgroupMemoryMask | MemorySemanticsWorkgroupMemoryMask | MemorySemanticsCrossWorkgroupMemoryMask | diff --git a/Test/baseResults/hlsl.color.hull.tesc.out b/Test/baseResults/hlsl.color.hull.tesc.out index 92ca0c357..c805a1f2d 100644 --- a/Test/baseResults/hlsl.color.hull.tesc.out +++ b/Test/baseResults/hlsl.color.hull.tesc.out @@ -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 diff --git a/Test/baseResults/hlsl.gs-hs-mix.tesc.out b/Test/baseResults/hlsl.gs-hs-mix.tesc.out index 92153c53a..cc217faea 100644 --- a/Test/baseResults/hlsl.gs-hs-mix.tesc.out +++ b/Test/baseResults/hlsl.gs-hs-mix.tesc.out @@ -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 diff --git a/Test/baseResults/hlsl.hull.1.tesc.out b/Test/baseResults/hlsl.hull.1.tesc.out index 57020ee19..56ea0813e 100644 --- a/Test/baseResults/hlsl.hull.1.tesc.out +++ b/Test/baseResults/hlsl.hull.1.tesc.out @@ -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 diff --git a/Test/baseResults/hlsl.hull.2.tesc.out b/Test/baseResults/hlsl.hull.2.tesc.out index 8d0708ddc..c6d97892f 100644 --- a/Test/baseResults/hlsl.hull.2.tesc.out +++ b/Test/baseResults/hlsl.hull.2.tesc.out @@ -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 diff --git a/Test/baseResults/hlsl.hull.3.tesc.out b/Test/baseResults/hlsl.hull.3.tesc.out index 59eed0d06..876798629 100755 --- a/Test/baseResults/hlsl.hull.3.tesc.out +++ b/Test/baseResults/hlsl.hull.3.tesc.out @@ -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 diff --git a/Test/baseResults/hlsl.hull.4.tesc.out b/Test/baseResults/hlsl.hull.4.tesc.out index 3349df81a..388e582ba 100644 --- a/Test/baseResults/hlsl.hull.4.tesc.out +++ b/Test/baseResults/hlsl.hull.4.tesc.out @@ -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 diff --git a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out index 24e4aa7c3..af650d349 100644 --- a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out +++ b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out @@ -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 diff --git a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out index 89582b73d..58380a4e7 100644 --- a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out +++ b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out @@ -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 diff --git a/Test/baseResults/hlsl.hull.void.tesc.out b/Test/baseResults/hlsl.hull.void.tesc.out index 68524d9d2..a5f2d2c1b 100644 --- a/Test/baseResults/hlsl.hull.void.tesc.out +++ b/Test/baseResults/hlsl.hull.void.tesc.out @@ -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 diff --git a/Test/baseResults/hlsl.intrinsics.barriers.comp.out b/Test/baseResults/hlsl.intrinsics.barriers.comp.out index bc8a07352..4d0fe381a 100644 --- a/Test/baseResults/hlsl.intrinsics.barriers.comp.out +++ b/Test/baseResults/hlsl.intrinsics.barriers.comp.out @@ -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 diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out index fec52c59c..81eb6432c 100644 --- a/Test/baseResults/spv.310.comp.out +++ b/Test/baseResults/spv.310.comp.out @@ -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 diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out index 5b6a6b1ad..44f58262a 100644 --- a/Test/baseResults/spv.400.tesc.out +++ b/Test/baseResults/spv.400.tesc.out @@ -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 diff --git a/Test/baseResults/spv.atomic.comp.out b/Test/baseResults/spv.atomic.comp.out index b64dc90b7..979c0e101 100755 --- a/Test/baseResults/spv.atomic.comp.out +++ b/Test/baseResults/spv.atomic.comp.out @@ -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 index 000000000..9389105a7 --- /dev/null +++ b/Test/baseResults/spv.barrier.vert.out @@ -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 diff --git a/Test/spv.310.comp b/Test/spv.310.comp index 6cbb0430f..53117dd97 100644 --- a/Test/spv.310.comp +++ b/Test/spv.310.comp @@ -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 index 000000000..c7828ce7b --- /dev/null +++ b/Test/spv.barrier.vert @@ -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; +} \ No newline at end of file diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index da80b1168..85762f4c0 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -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",