SPV: Fix extra operands when using the "struct" form of a built-in taking an 'out' param.

This commit is contained in:
John Kessenich 2015-12-06 19:29:11 -07:00
parent e721f49dbd
commit 2359bd0a1d
3 changed files with 7 additions and 5 deletions

View File

@ -2892,9 +2892,11 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
} }
spv::Id id = 0; spv::Id id = 0;
if (libCall >= 0) if (libCall >= 0) {
while (consumedOperands < (int)operands.size())
operands.pop_back();
id = builder.createBuiltinCall(precision, typeId, stdBuiltins, libCall, operands); id = builder.createBuiltinCall(precision, typeId, stdBuiltins, libCall, operands);
else { } else {
switch (consumedOperands) { switch (consumedOperands) {
case 0: case 0:
// should all be handled by visitAggregate and createNoArgOperation // should all be handled by visitAggregate and createNoArgOperation

View File

@ -193,7 +193,7 @@ Linked vertex stage:
97: 7(ivec4) IAdd 96 95 97: 7(ivec4) IAdd 96 95
Store 9(iout) 97 Store 9(iout) 97
101: 98(fvec3) Load 100(v3) 101: 98(fvec3) Load 100(v3)
106:105(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 101 104(i3out) 106:105(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 101
107: 102(ivec3) CompositeExtract 106 1 107: 102(ivec3) CompositeExtract 106 1
Store 104(i3out) 107 Store 104(i3out) 107
108: 98(fvec3) CompositeExtract 106 0 108: 98(fvec3) CompositeExtract 106 0
@ -211,7 +211,7 @@ Linked vertex stage:
119: 7(ivec4) VectorShuffle 118 117 4 5 6 3 119: 7(ivec4) VectorShuffle 118 117 4 5 6 3
Store 9(iout) 119 Store 9(iout) 119
122: 18(float) Load 121(v1) 122: 18(float) Load 121(v1)
126:125(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 122 124(i1out) 126:125(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 122
127: 6(int) CompositeExtract 126 1 127: 6(int) CompositeExtract 126 1
Store 124(i1out) 127 Store 124(i1out) 127
128: 18(float) CompositeExtract 126 0 128: 18(float) CompositeExtract 126 0

View File

@ -2,5 +2,5 @@
// For the version, it uses the latest git tag followed by the number of commits. // 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). // For the date, it uses the current date (when then script is run).
#define GLSLANG_REVISION "SPIRV99.822" #define GLSLANG_REVISION "SPIRV99.823"
#define GLSLANG_DATE "06-Dec-2015" #define GLSLANG_DATE "06-Dec-2015"