diff options
author | John Kessenich <cepheus@frii.com> | 2016-11-26 13:23:20 -0700 |
---|---|---|
committer | John Kessenich <cepheus@frii.com> | 2016-11-26 13:23:20 -0700 |
commit | fca826212cddbef03d69c4d7ab3a3efa5e2c81e7 (patch) | |
tree | 5b3a0acc6e1a28475bbff023807b1e1308649d2b | |
parent | 1c573fbcfba6b3d631008b1babc838501ca925d3 (diff) | |
download | glslang-fca826212cddbef03d69c4d7ab3a3efa5e2c81e7.tar.gz |
Always correctly terminate main. Issue #588, PR #600.
-rwxr-xr-x | SPIRV/GlslangToSpv.cpp | 26 | ||||
-rw-r--r-- | Test/baseResults/hlsl.array.implicit-size.frag.out | 1 | ||||
-rwxr-xr-x | Test/baseResults/hlsl.float1.frag.out | 1 | ||||
-rwxr-xr-x | Test/baseResults/hlsl.float4.frag.out | 1 | ||||
-rw-r--r-- | Test/baseResults/hlsl.intrinsics.vert.out | 1 | ||||
-rwxr-xr-x | Test/baseResults/hlsl.layout.frag.out | 1 | ||||
-rwxr-xr-x | Test/baseResults/hlsl.matType.frag.out | 1 | ||||
-rwxr-xr-x | Test/baseResults/hlsl.shapeConv.frag.out | 1 | ||||
-rwxr-xr-x | Test/baseResults/hlsl.swizzle.frag.out | 1 | ||||
-rwxr-xr-x | Test/baseResults/hlsl.typedef.frag.out | 1 | ||||
-rw-r--r-- | glslang/Include/revision.h | 4 |
11 files changed, 24 insertions, 15 deletions
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 37aac177..fc269e9b 100755 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -99,7 +99,7 @@ private: class TGlslangToSpvTraverser : public glslang::TIntermTraverser { public: TGlslangToSpvTraverser(const glslang::TIntermediate*, spv::SpvBuildLogger* logger); - virtual ~TGlslangToSpvTraverser(); + virtual ~TGlslangToSpvTraverser() { } bool visitAggregate(glslang::TVisit, glslang::TIntermAggregate*); bool visitBinary(glslang::TVisit, glslang::TIntermBinary*); @@ -111,6 +111,7 @@ public: bool visitLoop(glslang::TVisit, glslang::TIntermLoop*); bool visitBranch(glslang::TVisit visit, glslang::TIntermBranch*); + void finishSpv(); void dumpSpv(std::vector<unsigned int>& out); protected: @@ -896,27 +897,27 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* gls default: break; } - } -// Finish everything and dump -void TGlslangToSpvTraverser::dumpSpv(std::vector<unsigned int>& out) +// Finish creating SPV, after the traversal is complete. +void TGlslangToSpvTraverser::finishSpv() { + if (! mainTerminated) { + builder.setBuildPoint(shaderEntry->getLastBlock()); + builder.leaveFunction(); + } + // finish off the entry-point SPV instruction by adding the Input/Output <id> for (auto it = iOSet.cbegin(); it != iOSet.cend(); ++it) entryPoint->addIdOperand(*it); builder.eliminateDeadDecorations(); - builder.dump(out); } -TGlslangToSpvTraverser::~TGlslangToSpvTraverser() +// Write the SPV into 'out'. +void TGlslangToSpvTraverser::dumpSpv(std::vector<unsigned int>& out) { - if (! mainTerminated) { - spv::Block* lastMainBlock = shaderEntry->getLastBlock(); - builder.setBuildPoint(lastMainBlock); - builder.leaveFunction(); - } + builder.dump(out); } // @@ -5120,9 +5121,8 @@ void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsign glslang::GetThreadPoolAllocator().push(); TGlslangToSpvTraverser it(&intermediate, logger); - root->traverse(&it); - + it.finishSpv(); it.dumpSpv(spirv); glslang::GetThreadPoolAllocator().pop(); diff --git a/Test/baseResults/hlsl.array.implicit-size.frag.out b/Test/baseResults/hlsl.array.implicit-size.frag.out index d8e0ed86..ffa1c3ee 100644 --- a/Test/baseResults/hlsl.array.implicit-size.frag.out +++ b/Test/baseResults/hlsl.array.implicit-size.frag.out @@ -234,6 +234,7 @@ gl_FragCoord origin is upper left Store 18(g_array) 24 Store 28(g_array_unused) 31 Store 37(g_mystruct) 42 + Return FunctionEnd 12(main(struct-PS_OUTPUT-vf41;): 2 Function None 10 11(ps_output): 9(ptr) FunctionParameter diff --git a/Test/baseResults/hlsl.float1.frag.out b/Test/baseResults/hlsl.float1.frag.out index 83a243fc..a2e3cefb 100755 --- a/Test/baseResults/hlsl.float1.frag.out +++ b/Test/baseResults/hlsl.float1.frag.out @@ -92,6 +92,7 @@ gl_FragCoord origin is upper left 5: Label Store 14(f1) 15 Store 16(scalar) 17 + Return FunctionEnd 11(ShaderFunction(vf1;f1;): 6(float) Function None 8 9(inFloat1): 7(ptr) FunctionParameter diff --git a/Test/baseResults/hlsl.float4.frag.out b/Test/baseResults/hlsl.float4.frag.out index 8d45d6eb..600b4a10 100755 --- a/Test/baseResults/hlsl.float4.frag.out +++ b/Test/baseResults/hlsl.float4.frag.out @@ -82,6 +82,7 @@ gl_FragCoord origin is upper left 20: TypePointer Uniform 7(fvec4) 4(PixelShaderFunction): 2 Function None 3 5: Label + Return FunctionEnd 11(ShaderFunction(vf4;): 7(fvec4) Function None 9 10(input): 8(ptr) FunctionParameter diff --git a/Test/baseResults/hlsl.intrinsics.vert.out b/Test/baseResults/hlsl.intrinsics.vert.out index 7e7a5119..255e3334 100644 --- a/Test/baseResults/hlsl.intrinsics.vert.out +++ b/Test/baseResults/hlsl.intrinsics.vert.out @@ -3011,6 +3011,7 @@ Shader version: 450 1059: 76 ConstantComposite 1058 1058 1058 1058 4(VertexShaderFunction): 2 Function None 3 5: Label + Return FunctionEnd 16(VertexShaderFunctionS(f1;f1;f1;u1;u1;): 6(float) Function None 10 11(inF0): 7(ptr) FunctionParameter diff --git a/Test/baseResults/hlsl.layout.frag.out b/Test/baseResults/hlsl.layout.frag.out index e8fab995..538a26a1 100755 --- a/Test/baseResults/hlsl.layout.frag.out +++ b/Test/baseResults/hlsl.layout.frag.out @@ -119,6 +119,7 @@ gl_FragCoord origin is upper left 38: 17(int) SpecConstant 10 4(main): 2 Function None 3 5: Label + Return FunctionEnd 11(PixelShaderFunction(vf4;): 7(fvec4) Function None 9 10(input): 8(ptr) FunctionParameter diff --git a/Test/baseResults/hlsl.matType.frag.out b/Test/baseResults/hlsl.matType.frag.out index 9b8e4567..468387b0 100755 --- a/Test/baseResults/hlsl.matType.frag.out +++ b/Test/baseResults/hlsl.matType.frag.out @@ -90,6 +90,7 @@ gl_FragCoord origin is upper left 29: 28(ptr) Variable Uniform 4(PixelShaderFunction): 2 Function None 3 5: Label + Return FunctionEnd 11(ShaderFunction(vf1;f1;): 6(float) Function None 8 9(inFloat1): 7(ptr) FunctionParameter diff --git a/Test/baseResults/hlsl.shapeConv.frag.out b/Test/baseResults/hlsl.shapeConv.frag.out index 8278fac9..451bf886 100755 --- a/Test/baseResults/hlsl.shapeConv.frag.out +++ b/Test/baseResults/hlsl.shapeConv.frag.out @@ -282,6 +282,7 @@ gl_FragCoord origin is upper left 62: TypeVector 41(bool) 4 4(main): 2 Function None 3 5: Label + Return FunctionEnd 13(PixelShaderFunction(vf4;f1;): 7(fvec4) Function None 10 11(input): 8(ptr) FunctionParameter diff --git a/Test/baseResults/hlsl.swizzle.frag.out b/Test/baseResults/hlsl.swizzle.frag.out index 16951a34..cf4be74c 100755 --- a/Test/baseResults/hlsl.swizzle.frag.out +++ b/Test/baseResults/hlsl.swizzle.frag.out @@ -106,6 +106,7 @@ gl_FragCoord origin is upper left 4(PixelShaderFunction): 2 Function None 3 5: Label Store 14(AmbientColor) 18 + Return FunctionEnd 11(ShaderFunction(vf4;): 7(fvec4) Function None 9 10(input): 8(ptr) FunctionParameter diff --git a/Test/baseResults/hlsl.typedef.frag.out b/Test/baseResults/hlsl.typedef.frag.out index e8bda1af..10b3413f 100755 --- a/Test/baseResults/hlsl.typedef.frag.out +++ b/Test/baseResults/hlsl.typedef.frag.out @@ -106,6 +106,7 @@ gl_FragCoord origin is upper left 20: 9(int) Constant 2 4(PixelShaderFunction): 2 Function None 3 5: Label + Return FunctionEnd 14(ShaderFunction(vf4;i1;): 7(fvec4) Function None 11 12(input): 8(ptr) FunctionParameter diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h index 4ec53322..841d2854 100644 --- a/glslang/Include/revision.h +++ b/glslang/Include/revision.h @@ -2,5 +2,5 @@ // For the version, it uses the latest git tag followed by the number of commits. // For the date, it uses the current date (when then script is run). -#define GLSLANG_REVISION "Overload400-PrecQual.1650" -#define GLSLANG_DATE "14-Nov-2016" +#define GLSLANG_REVISION "Overload400-PrecQual.1659" +#define GLSLANG_DATE "26-Nov-2016" |