diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index f877a2ec..0afcc643 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -1388,16 +1388,13 @@ Id Builder::createLvalueSwizzle(Id typeId, Id target, Id source, const std::vect return createCompositeInsert(source, target, typeId, channels.front()); Instruction* swizzle = new Instruction(getUniqueId(), typeId, OpVectorShuffle); + assert(isVector(target)); swizzle->addIdOperand(target); - if (accessChain.component != NoResult) - // For dynamic component selection, source does not involve in l-value swizzle - swizzle->addIdOperand(target); - else { - assert(getNumComponents(source) == (int)channels.size()); - assert(isVector(source)); - swizzle->addIdOperand(source); - } + + assert(getNumComponents(source) == (int)channels.size()); + assert(isVector(source)); + swizzle->addIdOperand(source); // Set up an identity shuffle from the base value to the result value unsigned int components[4]; @@ -1406,12 +1403,8 @@ Id Builder::createLvalueSwizzle(Id typeId, Id target, Id source, const std::vect components[i] = i; // Punch in the l-value swizzle - for (int i = 0; i < (int)channels.size(); ++i) { - if (accessChain.component != NoResult) - components[i] = channels[i]; // Only shuffle the base value - else - components[channels[i]] = numTargetComponents + i; - } + for (int i = 0; i < (int)channels.size(); ++i) + components[channels[i]] = numTargetComponents + i; // finish the instruction with these components selectors for (int i = 0; i < numTargetComponents; ++i) @@ -2203,7 +2196,7 @@ void Builder::accessChainPushSwizzle(std::vector& swizzle, Id preSwizz accessChain.preSwizzleBaseType = preSwizzleBaseType; // if needed, propagate the swizzle for the current access chain - if (accessChain.swizzle.size()) { + if (accessChain.swizzle.size() > 0) { std::vector oldSwizzle = accessChain.swizzle; accessChain.swizzle.resize(0); for (unsigned int i = 0; i < swizzle.size(); ++i) { @@ -2224,24 +2217,18 @@ void Builder::accessChainStore(Id rvalue) transferAccessChainSwizzle(true); Id base = collapseAccessChain(); + Id source = rvalue; + + // dynamic component should be gone + assert(accessChain.component == NoResult); // If swizzle still exists, it is out-of-order or not full, we must load the target vector, // extract and insert elements to perform writeMask and/or swizzle. - Id source = NoResult; - if (accessChain.swizzle.size()) { + if (accessChain.swizzle.size() > 0) { Id tempBaseId = createLoad(base); - source = createLvalueSwizzle(getTypeId(tempBaseId), tempBaseId, rvalue, accessChain.swizzle); + source = createLvalueSwizzle(getTypeId(tempBaseId), tempBaseId, source, accessChain.swizzle); } - // dynamic component selection - if (accessChain.component != NoResult) { - Id tempBaseId = (source == NoResult) ? createLoad(base) : source; - source = createVectorInsertDynamic(tempBaseId, getTypeId(tempBaseId), rvalue, accessChain.component); - } - - if (source == NoResult) - source = rvalue; - createStore(source, base); } @@ -2251,7 +2238,7 @@ Id Builder::accessChainLoad(Decoration precision, Id resultType) Id id; if (accessChain.isRValue) { - // transfer access chain, but keep it static, so we can stay in registers + // transfer access chain, but try to stay in registers transferAccessChainSwizzle(false); if (accessChain.indexChain.size() > 0) { Id swizzleBase = accessChain.preSwizzleBaseType != NoType ? accessChain.preSwizzleBaseType : resultType; @@ -2299,16 +2286,16 @@ Id Builder::accessChainLoad(Decoration precision, Id resultType) return id; // Do remaining swizzling - // First, static swizzling - if (accessChain.swizzle.size()) { - // static swizzle + + // Do the basic swizzle + if (accessChain.swizzle.size() > 0) { Id swizzledType = getScalarTypeId(getTypeId(id)); if (accessChain.swizzle.size() > 1) swizzledType = makeVectorType(swizzledType, (int)accessChain.swizzle.size()); id = createRvalueSwizzle(precision, swizzledType, id, accessChain.swizzle); } - // dynamic single-component selection + // Do the dynamic component if (accessChain.component != NoResult) id = setPrecision(createVectorExtractDynamic(id, resultType, accessChain.component), precision); @@ -2458,26 +2445,66 @@ void Builder::dump(std::vector& out) const // Protected methods. // -// Turn the described access chain in 'accessChain' into an instruction +// Turn the described access chain in 'accessChain' into an instruction(s) // computing its address. This *cannot* include complex swizzles, which must -// be handled after this is called, but it does include swizzles that select -// an individual element, as a single address of a scalar type can be -// computed by an OpAccessChain instruction. +// be handled after this is called. +// +// Can generate code. Id Builder::collapseAccessChain() { assert(accessChain.isRValue == false); - if (accessChain.indexChain.size() > 0) { - if (accessChain.instr == 0) { - StorageClass storageClass = (StorageClass)module.getStorageClass(getTypeId(accessChain.base)); - accessChain.instr = createAccessChain(storageClass, accessChain.base, accessChain.indexChain); - } - + // did we already emit an access chain for this? + if (accessChain.instr != NoResult) return accessChain.instr; - } else + + // If we have a dynamic component, we can still transfer + // that into a final operand to the access chain. We need to remap the + // dynamic component through the swizzle to get a new dynamic component to + // update. + // + // This was not done in transferAccessChainSwizzle() because it might + // generate code. + remapDynamicSwizzle(); + if (accessChain.component != NoResult) { + // transfer the dynamic component to the access chain + accessChain.indexChain.push_back(accessChain.component); + accessChain.component = NoResult; + } + + // note that non-trivial swizzling is left pending + + // do we have an access chain? + if (accessChain.indexChain.size() == 0) return accessChain.base; - // note that non-trivial swizzling is left pending... + // emit the access chain + StorageClass storageClass = (StorageClass)module.getStorageClass(getTypeId(accessChain.base)); + accessChain.instr = createAccessChain(storageClass, accessChain.base, accessChain.indexChain); + + return accessChain.instr; +} + +// For a dynamic component selection of a swizzle. +// +// Turn the swizzle and dynamic component into just a dynamic component. +// +// Generates code. +void Builder::remapDynamicSwizzle() +{ + // do we have a swizzle to remap a dynamic component through? + if (accessChain.component != NoResult && accessChain.swizzle.size() > 1) { + // build a vector of the swizzle for the component to map into + std::vector components; + for (int c = 0; c < accessChain.swizzle.size(); ++c) + components.push_back(makeUintConstant(accessChain.swizzle[c])); + Id mapType = makeVectorType(makeUintType(32), (int)accessChain.swizzle.size()); + Id map = makeCompositeConstant(mapType, components); + + // use it + accessChain.component = createVectorExtractDynamic(map, makeUintType(32), accessChain.component); + accessChain.swizzle.clear(); + } } // clear out swizzle if it is redundant, that is reselecting the same components @@ -2503,38 +2530,30 @@ void Builder::simplifyAccessChainSwizzle() // To the extent any swizzling can become part of the chain // of accesses instead of a post operation, make it so. -// If 'dynamic' is true, include transferring a non-static component index, -// otherwise, only transfer static indexes. +// If 'dynamic' is true, include transferring the dynamic component, +// otherwise, leave it pending. // -// Also, Boolean vectors are likely to be special. While -// for external storage, they should only be integer types, -// function-local bool vectors could use sub-word indexing, -// so keep that as a separate Insert/Extract on a loaded vector. +// Does not generate code. just updates the access chain. void Builder::transferAccessChainSwizzle(bool dynamic) { - // too complex? - if (accessChain.swizzle.size() > 1) - return; - // non existent? if (accessChain.swizzle.size() == 0 && accessChain.component == NoResult) return; - // single component... - - // skip doing it for Boolean vectors - if (isBoolType(getContainedTypeId(accessChain.preSwizzleBaseType))) + // too complex? + // (this requires either a swizzle, or generating code for a dynamic component) + if (accessChain.swizzle.size() > 1) return; + // single component, either in the swizzle and/or dynamic component if (accessChain.swizzle.size() == 1) { - // handle static component + assert(accessChain.component == NoResult); + // handle static component selection accessChain.indexChain.push_back(makeUintConstant(accessChain.swizzle.front())); accessChain.swizzle.clear(); - // note, the only valid remaining dynamic access would be to this one - // component, so don't bother even looking at accessChain.component accessChain.preSwizzleBaseType = NoType; - accessChain.component = NoResult; } else if (dynamic && accessChain.component != NoResult) { + assert(accessChain.swizzle.size() == 0); // handle dynamic component accessChain.indexChain.push_back(accessChain.component); accessChain.preSwizzleBaseType = NoType; diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index 9f15989a..c0e244c8 100755 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -533,12 +533,15 @@ public: // push new swizzle onto the end of any existing swizzle, merging into a single swizzle void accessChainPushSwizzle(std::vector& swizzle, Id preSwizzleBaseType); - // push a variable component selection onto the access chain; supporting only one, so unsided + // push a dynamic component selection onto the access chain, only applicable with a + // non-trivial swizzle or no swizzle void accessChainPushComponent(Id component, Id preSwizzleBaseType) { - accessChain.component = component; - if (accessChain.preSwizzleBaseType == NoType) - accessChain.preSwizzleBaseType = preSwizzleBaseType; + if (accessChain.swizzle.size() != 1) { + accessChain.component = component; + if (accessChain.preSwizzleBaseType == NoType) + accessChain.preSwizzleBaseType = preSwizzleBaseType; + } } // use accessChain and swizzle to store value @@ -577,6 +580,7 @@ public: Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2) const; Id findCompositeConstant(Op typeClass, const std::vector& comps) const; Id collapseAccessChain(); + void remapDynamicSwizzle(); void transferAccessChainSwizzle(bool dynamic); void simplifyAccessChainSwizzle(); void createAndSetNoPredecessorBlock(const char*); diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out index 3f73f5ba..8cb19cbc 100644 --- a/Test/baseResults/spv.400.frag.out +++ b/Test/baseResults/spv.400.frag.out @@ -1368,18 +1368,18 @@ spv.400.frag 997: 10(float) Select 995 996 21 998: 39(float) FConvert 997 999: 39(float) FAdd 994 998 - 1000: 437(bvec2) Load 439(bvec2v) - 1001: 428(bool) CompositeExtract 1000 0 + 1000: 429(ptr) AccessChain 439(bvec2v) 33 + 1001: 428(bool) Load 1000 1002: 10(float) Select 1001 996 21 1003: 39(float) FConvert 1002 1004: 39(float) FAdd 999 1003 - 1005: 446(bvec3) Load 448(bvec3v) - 1006: 428(bool) CompositeExtract 1005 0 + 1005: 429(ptr) AccessChain 448(bvec3v) 33 + 1006: 428(bool) Load 1005 1007: 10(float) Select 1006 996 21 1008: 39(float) FConvert 1007 1009: 39(float) FAdd 1004 1008 - 1010: 455(bvec4) Load 457(bvec4v) - 1011: 428(bool) CompositeExtract 1010 0 + 1010: 429(ptr) AccessChain 457(bvec4v) 33 + 1011: 428(bool) Load 1010 1012: 10(float) Select 1011 996 21 1013: 39(float) FConvert 1012 1014: 39(float) FAdd 1009 1013 diff --git a/Test/baseResults/spv.accessChain.frag.out b/Test/baseResults/spv.accessChain.frag.out index 2f4bf3aa..c0c27b74 100755 --- a/Test/baseResults/spv.accessChain.frag.out +++ b/Test/baseResults/spv.accessChain.frag.out @@ -1,12 +1,12 @@ spv.accessChain.frag // Module Version 10000 // Generated by (magic number): 80003 -// Id's are bound by 206 +// Id's are bound by 222 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 65 158 + EntryPoint Fragment 4 "main" 69 170 ExecutionMode 4 OriginUpperLeft Source GLSL 420 Name 4 "main" @@ -50,12 +50,12 @@ spv.accessChain.frag Name 62 "GetColor13(struct-S-vf31;i1;" Name 60 "i" Name 61 "comp" - Name 65 "OutColor" - Name 153 "s" - Name 158 "u" - Name 159 "param" - Name 163 "param" - Name 167 "param" + Name 66 "GetColor14(struct-S-vf31;i1;" + Name 64 "i" + Name 65 "comp" + Name 69 "OutColor" + Name 165 "s" + Name 170 "u" Name 171 "param" Name 175 "param" Name 179 "param" @@ -65,8 +65,12 @@ spv.accessChain.frag Name 195 "param" Name 199 "param" Name 203 "param" - Decorate 65(OutColor) Location 0 - Decorate 158(u) Flat + Name 207 "param" + Name 211 "param" + Name 215 "param" + Name 219 "param" + Decorate 69(OutColor) Location 0 + Decorate 170(u) Flat 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -76,25 +80,27 @@ spv.accessChain.frag 13: TypeInt 32 1 14: TypePointer Function 13(int) 15: TypeFunction 2 8(S) 14(ptr) - 64: TypePointer Output 7(fvec3) - 65(OutColor): 64(ptr) Variable Output - 66: 13(int) Constant 0 - 67: TypeInt 32 0 - 68: 67(int) Constant 0 - 95: TypeVector 6(float) 2 - 109: 67(int) Constant 2 - 136: TypePointer Output 6(float) - 150: 6(float) Constant 0 - 151: 7(fvec3) ConstantComposite 150 150 150 - 152: TypePointer Function 8(S) - 157: TypePointer Input 13(int) - 158(u): 157(ptr) Variable Input + 68: TypePointer Output 7(fvec3) + 69(OutColor): 68(ptr) Variable Output + 70: 13(int) Constant 0 + 71: TypeInt 32 0 + 72: 71(int) Constant 0 + 99: TypeVector 6(float) 2 + 113: 71(int) Constant 2 + 140: TypePointer Output 6(float) + 147: 71(int) Constant 1 + 148: TypeVector 71(int) 2 + 149: 148(ivec2) ConstantComposite 113 147 + 158: TypeVector 71(int) 3 + 159: 158(ivec3) ConstantComposite 113 147 72 + 162: 6(float) Constant 0 + 163: 7(fvec3) ConstantComposite 162 162 162 + 164: TypePointer Function 8(S) + 169: TypePointer Input 13(int) + 170(u): 169(ptr) Variable Input 4(main): 2 Function None 3 5: Label - 153(s): 152(ptr) Variable Function - 159(param): 14(ptr) Variable Function - 163(param): 14(ptr) Variable Function - 167(param): 14(ptr) Variable Function + 165(s): 164(ptr) Variable Function 171(param): 14(ptr) Variable Function 175(param): 14(ptr) Variable Function 179(param): 14(ptr) Variable Function @@ -104,224 +110,242 @@ spv.accessChain.frag 195(param): 14(ptr) Variable Function 199(param): 14(ptr) Variable Function 203(param): 14(ptr) Variable Function - Store 65(OutColor) 151 - 154: 8(S) Load 153(s) - 155: 2 FunctionCall 11(GetColor1(struct-S-vf31;) 154 - 156: 8(S) Load 153(s) - 160: 13(int) Load 158(u) - Store 159(param) 160 - 161: 2 FunctionCall 18(GetColor2(struct-S-vf31;i1;) 156 159(param) - 162: 8(S) Load 153(s) - 164: 13(int) Load 158(u) - Store 163(param) 164 - 165: 2 FunctionCall 22(GetColor3(struct-S-vf31;i1;) 162 163(param) - 166: 8(S) Load 153(s) - 168: 13(int) Load 158(u) - Store 167(param) 168 - 169: 2 FunctionCall 26(GetColor4(struct-S-vf31;i1;) 166 167(param) - 170: 8(S) Load 153(s) - 172: 13(int) Load 158(u) + 207(param): 14(ptr) Variable Function + 211(param): 14(ptr) Variable Function + 215(param): 14(ptr) Variable Function + 219(param): 14(ptr) Variable Function + Store 69(OutColor) 163 + 166: 8(S) Load 165(s) + 167: 2 FunctionCall 11(GetColor1(struct-S-vf31;) 166 + 168: 8(S) Load 165(s) + 172: 13(int) Load 170(u) Store 171(param) 172 - 173: 2 FunctionCall 30(GetColor5(struct-S-vf31;i1;) 170 171(param) - 174: 8(S) Load 153(s) - 176: 13(int) Load 158(u) + 173: 2 FunctionCall 18(GetColor2(struct-S-vf31;i1;) 168 171(param) + 174: 8(S) Load 165(s) + 176: 13(int) Load 170(u) Store 175(param) 176 - 177: 2 FunctionCall 34(GetColor6(struct-S-vf31;i1;) 174 175(param) - 178: 8(S) Load 153(s) - 180: 13(int) Load 158(u) + 177: 2 FunctionCall 22(GetColor3(struct-S-vf31;i1;) 174 175(param) + 178: 8(S) Load 165(s) + 180: 13(int) Load 170(u) Store 179(param) 180 - 181: 2 FunctionCall 38(GetColor7(struct-S-vf31;i1;) 178 179(param) - 182: 8(S) Load 153(s) - 184: 13(int) Load 158(u) + 181: 2 FunctionCall 26(GetColor4(struct-S-vf31;i1;) 178 179(param) + 182: 8(S) Load 165(s) + 184: 13(int) Load 170(u) Store 183(param) 184 - 185: 2 FunctionCall 42(GetColor8(struct-S-vf31;i1;) 182 183(param) - 186: 8(S) Load 153(s) - 188: 13(int) Load 158(u) + 185: 2 FunctionCall 30(GetColor5(struct-S-vf31;i1;) 182 183(param) + 186: 8(S) Load 165(s) + 188: 13(int) Load 170(u) Store 187(param) 188 - 189: 2 FunctionCall 46(GetColor9(struct-S-vf31;i1;) 186 187(param) - 190: 8(S) Load 153(s) - 192: 13(int) Load 158(u) + 189: 2 FunctionCall 34(GetColor6(struct-S-vf31;i1;) 186 187(param) + 190: 8(S) Load 165(s) + 192: 13(int) Load 170(u) Store 191(param) 192 - 193: 2 FunctionCall 50(GetColor10(struct-S-vf31;i1;) 190 191(param) - 194: 8(S) Load 153(s) - 196: 13(int) Load 158(u) + 193: 2 FunctionCall 38(GetColor7(struct-S-vf31;i1;) 190 191(param) + 194: 8(S) Load 165(s) + 196: 13(int) Load 170(u) Store 195(param) 196 - 197: 2 FunctionCall 54(GetColor11(struct-S-vf31;i1;) 194 195(param) - 198: 8(S) Load 153(s) - 200: 13(int) Load 158(u) + 197: 2 FunctionCall 42(GetColor8(struct-S-vf31;i1;) 194 195(param) + 198: 8(S) Load 165(s) + 200: 13(int) Load 170(u) Store 199(param) 200 - 201: 2 FunctionCall 58(GetColor12(struct-S-vf31;i1;) 198 199(param) - 202: 8(S) Load 153(s) - 204: 13(int) Load 158(u) + 201: 2 FunctionCall 46(GetColor9(struct-S-vf31;i1;) 198 199(param) + 202: 8(S) Load 165(s) + 204: 13(int) Load 170(u) Store 203(param) 204 - 205: 2 FunctionCall 62(GetColor13(struct-S-vf31;i1;) 202 203(param) + 205: 2 FunctionCall 50(GetColor10(struct-S-vf31;i1;) 202 203(param) + 206: 8(S) Load 165(s) + 208: 13(int) Load 170(u) + Store 207(param) 208 + 209: 2 FunctionCall 54(GetColor11(struct-S-vf31;i1;) 206 207(param) + 210: 8(S) Load 165(s) + 212: 13(int) Load 170(u) + Store 211(param) 212 + 213: 2 FunctionCall 58(GetColor12(struct-S-vf31;i1;) 210 211(param) + 214: 8(S) Load 165(s) + 216: 13(int) Load 170(u) + Store 215(param) 216 + 217: 2 FunctionCall 62(GetColor13(struct-S-vf31;i1;) 214 215(param) + 218: 8(S) Load 165(s) + 220: 13(int) Load 170(u) + Store 219(param) 220 + 221: 2 FunctionCall 66(GetColor14(struct-S-vf31;i1;) 218 219(param) Return FunctionEnd 11(GetColor1(struct-S-vf31;): 2 Function None 9 10(i): 8(S) FunctionParameter 12: Label - 69: 6(float) CompositeExtract 10(i) 0 0 - 70: 7(fvec3) Load 65(OutColor) - 71: 7(fvec3) CompositeConstruct 69 69 69 - 72: 7(fvec3) FAdd 70 71 - Store 65(OutColor) 72 + 73: 6(float) CompositeExtract 10(i) 0 0 + 74: 7(fvec3) Load 69(OutColor) + 75: 7(fvec3) CompositeConstruct 73 73 73 + 76: 7(fvec3) FAdd 74 75 + Store 69(OutColor) 76 Return FunctionEnd 18(GetColor2(struct-S-vf31;i1;): 2 Function None 15 16(i): 8(S) FunctionParameter 17(comp): 14(ptr) FunctionParameter 19: Label - 73: 13(int) Load 17(comp) - 74: 7(fvec3) CompositeExtract 16(i) 0 - 75: 6(float) VectorExtractDynamic 74 73 - 76: 7(fvec3) Load 65(OutColor) - 77: 7(fvec3) CompositeConstruct 75 75 75 - 78: 7(fvec3) FAdd 76 77 - Store 65(OutColor) 78 + 77: 13(int) Load 17(comp) + 78: 7(fvec3) CompositeExtract 16(i) 0 + 79: 6(float) VectorExtractDynamic 78 77 + 80: 7(fvec3) Load 69(OutColor) + 81: 7(fvec3) CompositeConstruct 79 79 79 + 82: 7(fvec3) FAdd 80 81 + Store 69(OutColor) 82 Return FunctionEnd 22(GetColor3(struct-S-vf31;i1;): 2 Function None 15 20(i): 8(S) FunctionParameter 21(comp): 14(ptr) FunctionParameter 23: Label - 79: 13(int) Load 21(comp) - 80: 7(fvec3) CompositeExtract 20(i) 0 - 81: 6(float) VectorExtractDynamic 80 79 - 82: 7(fvec3) Load 65(OutColor) - 83: 7(fvec3) CompositeConstruct 81 81 81 - 84: 7(fvec3) FAdd 82 83 - Store 65(OutColor) 84 + 83: 13(int) Load 21(comp) + 84: 7(fvec3) CompositeExtract 20(i) 0 + 85: 6(float) VectorExtractDynamic 84 83 + 86: 7(fvec3) Load 69(OutColor) + 87: 7(fvec3) CompositeConstruct 85 85 85 + 88: 7(fvec3) FAdd 86 87 + Store 69(OutColor) 88 Return FunctionEnd 26(GetColor4(struct-S-vf31;i1;): 2 Function None 15 24(i): 8(S) FunctionParameter 25(comp): 14(ptr) FunctionParameter 27: Label - 85: 13(int) Load 25(comp) - 86: 7(fvec3) CompositeExtract 24(i) 0 - 87: 6(float) VectorExtractDynamic 86 85 - 88: 7(fvec3) Load 65(OutColor) - 89: 7(fvec3) CompositeConstruct 87 87 87 - 90: 7(fvec3) FAdd 88 89 - Store 65(OutColor) 90 + 89: 13(int) Load 25(comp) + 90: 7(fvec3) CompositeExtract 24(i) 0 + 91: 6(float) VectorExtractDynamic 90 89 + 92: 7(fvec3) Load 69(OutColor) + 93: 7(fvec3) CompositeConstruct 91 91 91 + 94: 7(fvec3) FAdd 92 93 + Store 69(OutColor) 94 Return FunctionEnd 30(GetColor5(struct-S-vf31;i1;): 2 Function None 15 28(i): 8(S) FunctionParameter 29(comp): 14(ptr) FunctionParameter 31: Label - 91: 7(fvec3) CompositeExtract 28(i) 0 - 92: 7(fvec3) Load 65(OutColor) - 93: 7(fvec3) FAdd 92 91 - Store 65(OutColor) 93 + 95: 7(fvec3) CompositeExtract 28(i) 0 + 96: 7(fvec3) Load 69(OutColor) + 97: 7(fvec3) FAdd 96 95 + Store 69(OutColor) 97 Return FunctionEnd 34(GetColor6(struct-S-vf31;i1;): 2 Function None 15 32(i): 8(S) FunctionParameter 33(comp): 14(ptr) FunctionParameter 35: Label - 94: 13(int) Load 33(comp) - 96: 7(fvec3) CompositeExtract 32(i) 0 - 97: 95(fvec2) VectorShuffle 96 96 1 0 - 98: 6(float) VectorExtractDynamic 97 94 - 99: 7(fvec3) Load 65(OutColor) - 100: 7(fvec3) CompositeConstruct 98 98 98 - 101: 7(fvec3) FAdd 99 100 - Store 65(OutColor) 101 + 98: 13(int) Load 33(comp) + 100: 7(fvec3) CompositeExtract 32(i) 0 + 101: 99(fvec2) VectorShuffle 100 100 1 0 + 102: 6(float) VectorExtractDynamic 101 98 + 103: 7(fvec3) Load 69(OutColor) + 104: 7(fvec3) CompositeConstruct 102 102 102 + 105: 7(fvec3) FAdd 103 104 + Store 69(OutColor) 105 Return FunctionEnd 38(GetColor7(struct-S-vf31;i1;): 2 Function None 15 36(i): 8(S) FunctionParameter 37(comp): 14(ptr) FunctionParameter 39: Label - 102: 7(fvec3) CompositeExtract 36(i) 0 - 103: 95(fvec2) VectorShuffle 102 102 0 1 - 104: 7(fvec3) Load 65(OutColor) - 105: 95(fvec2) VectorShuffle 104 104 0 1 - 106: 95(fvec2) FAdd 105 103 - 107: 7(fvec3) Load 65(OutColor) - 108: 7(fvec3) VectorShuffle 107 106 3 4 2 - Store 65(OutColor) 108 + 106: 7(fvec3) CompositeExtract 36(i) 0 + 107: 99(fvec2) VectorShuffle 106 106 0 1 + 108: 7(fvec3) Load 69(OutColor) + 109: 99(fvec2) VectorShuffle 108 108 0 1 + 110: 99(fvec2) FAdd 109 107 + 111: 7(fvec3) Load 69(OutColor) + 112: 7(fvec3) VectorShuffle 111 110 3 4 2 + Store 69(OutColor) 112 Return FunctionEnd 42(GetColor8(struct-S-vf31;i1;): 2 Function None 15 40(i): 8(S) FunctionParameter 41(comp): 14(ptr) FunctionParameter 43: Label - 110: 6(float) CompositeExtract 40(i) 0 2 - 111: 7(fvec3) Load 65(OutColor) - 112: 7(fvec3) CompositeConstruct 110 110 110 - 113: 7(fvec3) FAdd 111 112 - Store 65(OutColor) 113 + 114: 6(float) CompositeExtract 40(i) 0 2 + 115: 7(fvec3) Load 69(OutColor) + 116: 7(fvec3) CompositeConstruct 114 114 114 + 117: 7(fvec3) FAdd 115 116 + Store 69(OutColor) 117 Return FunctionEnd 46(GetColor9(struct-S-vf31;i1;): 2 Function None 15 44(i): 8(S) FunctionParameter 45(comp): 14(ptr) FunctionParameter 47: Label - 114: 7(fvec3) CompositeExtract 44(i) 0 - 115: 7(fvec3) Load 65(OutColor) - 116: 7(fvec3) VectorShuffle 115 115 2 0 1 - 117: 7(fvec3) FAdd 116 114 - 118: 7(fvec3) Load 65(OutColor) - 119: 7(fvec3) VectorShuffle 118 117 4 5 3 - Store 65(OutColor) 119 + 118: 7(fvec3) CompositeExtract 44(i) 0 + 119: 7(fvec3) Load 69(OutColor) + 120: 7(fvec3) VectorShuffle 119 119 2 0 1 + 121: 7(fvec3) FAdd 120 118 + 122: 7(fvec3) Load 69(OutColor) + 123: 7(fvec3) VectorShuffle 122 121 4 5 3 + Store 69(OutColor) 123 Return FunctionEnd 50(GetColor10(struct-S-vf31;i1;): 2 Function None 15 48(i): 8(S) FunctionParameter 49(comp): 14(ptr) FunctionParameter 51: Label - 120: 7(fvec3) CompositeExtract 48(i) 0 - 121: 95(fvec2) VectorShuffle 120 120 0 1 - 122: 7(fvec3) Load 65(OutColor) - 123: 95(fvec2) VectorShuffle 122 122 2 1 - 124: 95(fvec2) FAdd 123 121 - 125: 7(fvec3) Load 65(OutColor) - 126: 7(fvec3) VectorShuffle 125 124 0 4 3 - Store 65(OutColor) 126 + 124: 7(fvec3) CompositeExtract 48(i) 0 + 125: 99(fvec2) VectorShuffle 124 124 0 1 + 126: 7(fvec3) Load 69(OutColor) + 127: 99(fvec2) VectorShuffle 126 126 2 1 + 128: 99(fvec2) FAdd 127 125 + 129: 7(fvec3) Load 69(OutColor) + 130: 7(fvec3) VectorShuffle 129 128 0 4 3 + Store 69(OutColor) 130 Return FunctionEnd 54(GetColor11(struct-S-vf31;i1;): 2 Function None 15 52(i): 8(S) FunctionParameter 53(comp): 14(ptr) FunctionParameter 55: Label - 127: 7(fvec3) CompositeExtract 52(i) 0 - 128: 95(fvec2) VectorShuffle 127 127 0 1 - 129: 7(fvec3) Load 65(OutColor) - 130: 95(fvec2) VectorShuffle 129 129 0 2 - 131: 95(fvec2) FAdd 130 128 - 132: 7(fvec3) Load 65(OutColor) - 133: 7(fvec3) VectorShuffle 132 131 3 1 4 - Store 65(OutColor) 133 + 131: 7(fvec3) CompositeExtract 52(i) 0 + 132: 99(fvec2) VectorShuffle 131 131 0 1 + 133: 7(fvec3) Load 69(OutColor) + 134: 99(fvec2) VectorShuffle 133 133 0 2 + 135: 99(fvec2) FAdd 134 132 + 136: 7(fvec3) Load 69(OutColor) + 137: 7(fvec3) VectorShuffle 136 135 3 1 4 + Store 69(OutColor) 137 Return FunctionEnd 58(GetColor12(struct-S-vf31;i1;): 2 Function None 15 56(i): 8(S) FunctionParameter 57(comp): 14(ptr) FunctionParameter 59: Label - 134: 13(int) Load 57(comp) - 135: 6(float) CompositeExtract 56(i) 0 0 - 137: 136(ptr) AccessChain 65(OutColor) 134 - 138: 6(float) Load 137 - 139: 6(float) FAdd 138 135 - 140: 136(ptr) AccessChain 65(OutColor) 134 - Store 140 139 + 138: 13(int) Load 57(comp) + 139: 6(float) CompositeExtract 56(i) 0 0 + 141: 140(ptr) AccessChain 69(OutColor) 138 + 142: 6(float) Load 141 + 143: 6(float) FAdd 142 139 + 144: 140(ptr) AccessChain 69(OutColor) 138 + Store 144 143 Return FunctionEnd 62(GetColor13(struct-S-vf31;i1;): 2 Function None 15 60(i): 8(S) FunctionParameter 61(comp): 14(ptr) FunctionParameter 63: Label - 141: 13(int) Load 61(comp) - 142: 6(float) CompositeExtract 60(i) 0 0 - 143: 7(fvec3) Load 65(OutColor) - 144: 95(fvec2) VectorShuffle 143 143 2 1 - 145: 6(float) VectorExtractDynamic 144 141 - 146: 6(float) FAdd 145 142 - 147: 7(fvec3) Load 65(OutColor) - 148: 7(fvec3) VectorShuffle 147 147 2 1 2 - 149: 7(fvec3) VectorInsertDynamic 148 146 141 - Store 65(OutColor) 149 + 145: 13(int) Load 61(comp) + 146: 6(float) CompositeExtract 60(i) 0 0 + 150: 71(int) VectorExtractDynamic 149 145 + 151: 140(ptr) AccessChain 69(OutColor) 150 + 152: 6(float) Load 151 + 153: 6(float) FAdd 152 146 + 154: 71(int) VectorExtractDynamic 149 145 + 155: 140(ptr) AccessChain 69(OutColor) 154 + Store 155 153 + Return + FunctionEnd +66(GetColor14(struct-S-vf31;i1;): 2 Function None 15 + 64(i): 8(S) FunctionParameter + 65(comp): 14(ptr) FunctionParameter + 67: Label + 156: 13(int) Load 65(comp) + 157: 6(float) CompositeExtract 64(i) 0 0 + 160: 71(int) VectorExtractDynamic 159 156 + 161: 140(ptr) AccessChain 69(OutColor) 160 + Store 161 157 Return FunctionEnd diff --git a/Test/baseResults/spv.boolInBlock.frag.out b/Test/baseResults/spv.boolInBlock.frag.out index e099c729..1fb2941e 100644 --- a/Test/baseResults/spv.boolInBlock.frag.out +++ b/Test/baseResults/spv.boolInBlock.frag.out @@ -1,12 +1,12 @@ spv.boolInBlock.frag // Module Version 10000 // Generated by (magic number): 80003 -// Id's are bound by 107 +// Id's are bound by 102 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 75 + EntryPoint Fragment 4 "main" 74 ExecutionMode 4 OriginUpperLeft Source GLSL 450 Name 4 "main" @@ -14,24 +14,24 @@ spv.boolInBlock.frag Name 12 "paramb4" Name 13 "paramb2" Name 17 "b1" - Name 24 "Buffer" - MemberName 24(Buffer) 0 "b2" - Name 26 "" - Name 39 "Uniform" - MemberName 39(Uniform) 0 "b4" - Name 41 "" - Name 62 "param" - Name 67 "param" - Name 75 "fragColor" - MemberDecorate 24(Buffer) 0 Offset 0 - Decorate 24(Buffer) BufferBlock - Decorate 26 DescriptorSet 0 - Decorate 26 Binding 1 - MemberDecorate 39(Uniform) 0 Offset 0 - Decorate 39(Uniform) Block - Decorate 41 DescriptorSet 0 - Decorate 41 Binding 0 - Decorate 75(fragColor) Location 0 + Name 25 "Buffer" + MemberName 25(Buffer) 0 "b2" + Name 27 "" + Name 40 "Uniform" + MemberName 40(Uniform) 0 "b4" + Name 42 "" + Name 60 "param" + Name 66 "param" + Name 74 "fragColor" + MemberDecorate 25(Buffer) 0 Offset 0 + Decorate 25(Buffer) BufferBlock + Decorate 27 DescriptorSet 0 + Decorate 27 Binding 1 + MemberDecorate 40(Uniform) 0 Offset 0 + Decorate 40(Uniform) Block + Decorate 42 DescriptorSet 0 + Decorate 42 Binding 0 + Decorate 74(fragColor) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeBool @@ -41,111 +41,106 @@ spv.boolInBlock.frag 10: TypePointer Function 9(bvec2) 11: TypeFunction 2 8(ptr) 10(ptr) 16: TypePointer Function 6(bool) - 22: TypeInt 32 0 - 23: TypeVector 22(int) 2 - 24(Buffer): TypeStruct 23(ivec2) - 25: TypePointer Uniform 24(Buffer) - 26: 25(ptr) Variable Uniform - 27: TypeInt 32 1 - 28: 27(int) Constant 0 - 29: 6(bool) ConstantFalse - 30: 9(bvec2) ConstantComposite 29 29 - 31: 22(int) Constant 1 - 32: 23(ivec2) ConstantComposite 31 31 - 33: 22(int) Constant 0 - 34: 23(ivec2) ConstantComposite 33 33 - 36: TypePointer Uniform 23(ivec2) - 38: TypeVector 22(int) 4 - 39(Uniform): TypeStruct 38(ivec4) - 40: TypePointer Uniform 39(Uniform) - 41: 40(ptr) Variable Uniform - 42: TypePointer Uniform 38(ivec4) - 65: 38(ivec4) ConstantComposite 33 33 33 33 - 72: TypeFloat 32 - 73: TypeVector 72(float) 4 - 74: TypePointer Output 73(fvec4) - 75(fragColor): 74(ptr) Variable Output - 87: 72(float) Constant 0 - 88: 72(float) Constant 1065353216 + 18: TypeInt 32 0 + 19: 18(int) Constant 2 + 24: TypeVector 18(int) 2 + 25(Buffer): TypeStruct 24(ivec2) + 26: TypePointer Uniform 25(Buffer) + 27: 26(ptr) Variable Uniform + 28: TypeInt 32 1 + 29: 28(int) Constant 0 + 30: 6(bool) ConstantFalse + 31: 9(bvec2) ConstantComposite 30 30 + 32: 18(int) Constant 1 + 33: 24(ivec2) ConstantComposite 32 32 + 34: 18(int) Constant 0 + 35: 24(ivec2) ConstantComposite 34 34 + 37: TypePointer Uniform 24(ivec2) + 39: TypeVector 18(int) 4 + 40(Uniform): TypeStruct 39(ivec4) + 41: TypePointer Uniform 40(Uniform) + 42: 41(ptr) Variable Uniform + 43: TypePointer Uniform 18(int) + 61: TypePointer Uniform 39(ivec4) + 64: 39(ivec4) ConstantComposite 34 34 34 34 + 71: TypeFloat 32 + 72: TypeVector 71(float) 4 + 73: TypePointer Output 72(fvec4) + 74(fragColor): 73(ptr) Variable Output + 84: 71(float) Constant 0 + 85: 71(float) Constant 1065353216 4(main): 2 Function None 3 5: Label - 62(param): 8(ptr) Variable Function - 67(param): 10(ptr) Variable Function - 35: 23(ivec2) Select 30 32 34 - 37: 36(ptr) AccessChain 26 28 - Store 37 35 - 43: 42(ptr) AccessChain 41 28 - 44: 38(ivec4) Load 43 - 45: 22(int) CompositeExtract 44 2 - 46: 6(bool) INotEqual 45 33 + 60(param): 8(ptr) Variable Function + 66(param): 10(ptr) Variable Function + 36: 24(ivec2) Select 31 33 35 + 38: 37(ptr) AccessChain 27 29 + Store 38 36 + 44: 43(ptr) AccessChain 42 29 19 + 45: 18(int) Load 44 + 46: 6(bool) INotEqual 45 34 SelectionMerge 48 None BranchConditional 46 47 48 47: Label - 49: 42(ptr) AccessChain 41 28 - 50: 38(ivec4) Load 49 - 51: 22(int) CompositeExtract 50 0 - 52: 6(bool) INotEqual 51 33 - 53: 9(bvec2) CompositeConstruct 52 52 - 54: 23(ivec2) Select 53 32 34 - 55: 36(ptr) AccessChain 26 28 - Store 55 54 + 49: 43(ptr) AccessChain 42 29 34 + 50: 18(int) Load 49 + 51: 6(bool) INotEqual 50 34 + 52: 9(bvec2) CompositeConstruct 51 51 + 53: 24(ivec2) Select 52 33 35 + 54: 37(ptr) AccessChain 27 29 + Store 54 53 Branch 48 48: Label - 56: 36(ptr) AccessChain 26 28 - 57: 23(ivec2) Load 56 - 58: 22(int) CompositeExtract 57 0 - 59: 6(bool) INotEqual 58 33 - SelectionMerge 61 None - BranchConditional 59 60 61 - 60: Label - 63: 42(ptr) AccessChain 41 28 - 64: 38(ivec4) Load 63 - 66: 7(bvec4) INotEqual 64 65 - Store 62(param) 66 - 68: 2 FunctionCall 14(foo(vb4;vb2;) 62(param) 67(param) - 69: 9(bvec2) Load 67(param) - 70: 23(ivec2) Select 69 32 34 - 71: 36(ptr) AccessChain 26 28 - Store 71 70 - Branch 61 - 61: Label - 76: 42(ptr) AccessChain 41 28 - 77: 38(ivec4) Load 76 - 78: 22(int) CompositeExtract 77 0 - 79: 6(bool) INotEqual 78 33 - SelectionMerge 81 None - BranchConditional 79 80 81 - 80: Label - 82: 42(ptr) AccessChain 41 28 - 83: 38(ivec4) Load 82 - 84: 22(int) CompositeExtract 83 1 - 85: 6(bool) INotEqual 84 33 - Branch 81 - 81: Label - 86: 6(bool) Phi 79 61 85 80 - 89: 72(float) Select 86 88 87 - 90: 73(fvec4) CompositeConstruct 89 89 89 89 - Store 75(fragColor) 90 - 91: 42(ptr) AccessChain 41 28 - 92: 38(ivec4) Load 91 - 93: 22(int) CompositeExtract 92 0 - 94: 6(bool) INotEqual 93 33 - 95: 6(bool) LogicalNot 94 - SelectionMerge 97 None - BranchConditional 95 96 97 - 96: Label - 98: 42(ptr) AccessChain 41 28 - 99: 38(ivec4) Load 98 - 100: 22(int) CompositeExtract 99 1 - 101: 6(bool) INotEqual 100 33 - Branch 97 - 97: Label - 102: 6(bool) Phi 94 81 101 96 - 103: 72(float) Select 102 88 87 - 104: 73(fvec4) CompositeConstruct 103 103 103 103 - 105: 73(fvec4) Load 75(fragColor) - 106: 73(fvec4) FSub 105 104 - Store 75(fragColor) 106 + 55: 43(ptr) AccessChain 27 29 34 + 56: 18(int) Load 55 + 57: 6(bool) INotEqual 56 34 + SelectionMerge 59 None + BranchConditional 57 58 59 + 58: Label + 62: 61(ptr) AccessChain 42 29 + 63: 39(ivec4) Load 62 + 65: 7(bvec4) INotEqual 63 64 + Store 60(param) 65 + 67: 2 FunctionCall 14(foo(vb4;vb2;) 60(param) 66(param) + 68: 9(bvec2) Load 66(param) + 69: 24(ivec2) Select 68 33 35 + 70: 37(ptr) AccessChain 27 29 + Store 70 69 + Branch 59 + 59: Label + 75: 43(ptr) AccessChain 42 29 34 + 76: 18(int) Load 75 + 77: 6(bool) INotEqual 76 34 + SelectionMerge 79 None + BranchConditional 77 78 79 + 78: Label + 80: 43(ptr) AccessChain 42 29 32 + 81: 18(int) Load 80 + 82: 6(bool) INotEqual 81 34 + Branch 79 + 79: Label + 83: 6(bool) Phi 77 59 82 78 + 86: 71(float) Select 83 85 84 + 87: 72(fvec4) CompositeConstruct 86 86 86 86 + Store 74(fragColor) 87 + 88: 43(ptr) AccessChain 42 29 34 + 89: 18(int) Load 88 + 90: 6(bool) INotEqual 89 34 + 91: 6(bool) LogicalNot 90 + SelectionMerge 93 None + BranchConditional 91 92 93 + 92: Label + 94: 43(ptr) AccessChain 42 29 32 + 95: 18(int) Load 94 + 96: 6(bool) INotEqual 95 34 + Branch 93 + 93: Label + 97: 6(bool) Phi 90 79 96 92 + 98: 71(float) Select 97 85 84 + 99: 72(fvec4) CompositeConstruct 98 98 98 98 + 100: 72(fvec4) Load 74(fragColor) + 101: 72(fvec4) FSub 100 99 + Store 74(fragColor) 101 Return FunctionEnd 14(foo(vb4;vb2;): 2 Function None 11 @@ -153,11 +148,11 @@ spv.boolInBlock.frag 13(paramb2): 10(ptr) FunctionParameter 15: Label 17(b1): 16(ptr) Variable Function - 18: 7(bvec4) Load 12(paramb4) - 19: 6(bool) CompositeExtract 18 2 - Store 17(b1) 19 - 20: 6(bool) Load 17(b1) - 21: 9(bvec2) CompositeConstruct 20 20 - Store 13(paramb2) 21 + 20: 16(ptr) AccessChain 12(paramb4) 19 + 21: 6(bool) Load 20 + Store 17(b1) 21 + 22: 6(bool) Load 17(b1) + 23: 9(bvec2) CompositeConstruct 22 22 + Store 13(paramb2) 23 Return FunctionEnd diff --git a/Test/baseResults/spv.conversion.frag.out b/Test/baseResults/spv.conversion.frag.out index 87956dbf..01ae957a 100755 --- a/Test/baseResults/spv.conversion.frag.out +++ b/Test/baseResults/spv.conversion.frag.out @@ -119,8 +119,8 @@ spv.conversion.frag 315: 13(int) Constant 1 321: TypePointer Output 95(fvec4) 322(gl_FragColor): 321(ptr) Variable Output - 367: 13(int) Constant 2 - 380: 13(int) Constant 3 + 337: 13(int) Constant 2 + 350: 13(int) Constant 3 427: TypePointer Private 6(bool) 428(u_b): 427(ptr) Variable Private 429: TypePointer Private 23(bvec2) @@ -440,8 +440,8 @@ spv.conversion.frag Branch 300 300: Label 306: 16(float) Load 297 - 308: 23(bvec2) Load 25(b2) - 309: 6(bool) CompositeExtract 308 0 + 308: 7(ptr) AccessChain 25(b2) 14 + 309: 6(bool) Load 308 SelectionMerge 311 None BranchConditional 309 310 314 310: Label @@ -462,64 +462,64 @@ spv.conversion.frag Branch 296 296: Label 324: 6(bool) Load 8(b) - 325: 23(bvec2) Load 25(b2) - 326: 6(bool) CompositeExtract 325 0 + 325: 7(ptr) AccessChain 25(b2) 14 + 326: 6(bool) Load 325 327: 6(bool) LogicalOr 324 326 - 328: 23(bvec2) Load 25(b2) - 329: 6(bool) CompositeExtract 328 1 + 328: 7(ptr) AccessChain 25(b2) 315 + 329: 6(bool) Load 328 330: 6(bool) LogicalOr 327 329 - 331: 31(bvec3) Load 33(b3) - 332: 6(bool) CompositeExtract 331 0 + 331: 7(ptr) AccessChain 33(b3) 14 + 332: 6(bool) Load 331 333: 6(bool) LogicalOr 330 332 - 334: 31(bvec3) Load 33(b3) - 335: 6(bool) CompositeExtract 334 1 + 334: 7(ptr) AccessChain 33(b3) 315 + 335: 6(bool) Load 334 336: 6(bool) LogicalOr 333 335 - 337: 31(bvec3) Load 33(b3) - 338: 6(bool) CompositeExtract 337 2 - 339: 6(bool) LogicalOr 336 338 - 340: 43(bvec4) Load 45(b4) - 341: 6(bool) CompositeExtract 340 0 - 342: 6(bool) LogicalOr 339 341 - 343: 43(bvec4) Load 45(b4) - 344: 6(bool) CompositeExtract 343 1 - 345: 6(bool) LogicalOr 342 344 - 346: 43(bvec4) Load 45(b4) - 347: 6(bool) CompositeExtract 346 2 - 348: 6(bool) LogicalOr 345 347 - 349: 43(bvec4) Load 45(b4) - 350: 6(bool) CompositeExtract 349 3 - 351: 6(bool) LogicalOr 348 350 - SelectionMerge 353 None - BranchConditional 351 352 415 - 352: Label - 354: 9(int) Load 58(i) - 355: 57(ptr) AccessChain 68(i2) 14 - 356: 9(int) Load 355 - 357: 9(int) IAdd 354 356 - 358: 57(ptr) AccessChain 68(i2) 315 - 359: 9(int) Load 358 - 360: 9(int) IAdd 357 359 - 361: 57(ptr) AccessChain 81(i3) 14 - 362: 9(int) Load 361 - 363: 9(int) IAdd 360 362 - 364: 57(ptr) AccessChain 81(i3) 315 - 365: 9(int) Load 364 - 366: 9(int) IAdd 363 365 - 368: 57(ptr) AccessChain 81(i3) 367 - 369: 9(int) Load 368 - 370: 9(int) IAdd 366 369 - 371: 57(ptr) AccessChain 94(i4) 14 - 372: 9(int) Load 371 - 373: 9(int) IAdd 370 372 - 374: 57(ptr) AccessChain 94(i4) 315 - 375: 9(int) Load 374 - 376: 9(int) IAdd 373 375 - 377: 57(ptr) AccessChain 94(i4) 367 - 378: 9(int) Load 377 - 379: 9(int) IAdd 376 378 - 381: 57(ptr) AccessChain 94(i4) 380 + 338: 7(ptr) AccessChain 33(b3) 337 + 339: 6(bool) Load 338 + 340: 6(bool) LogicalOr 336 339 + 341: 7(ptr) AccessChain 45(b4) 14 + 342: 6(bool) Load 341 + 343: 6(bool) LogicalOr 340 342 + 344: 7(ptr) AccessChain 45(b4) 315 + 345: 6(bool) Load 344 + 346: 6(bool) LogicalOr 343 345 + 347: 7(ptr) AccessChain 45(b4) 337 + 348: 6(bool) Load 347 + 349: 6(bool) LogicalOr 346 348 + 351: 7(ptr) AccessChain 45(b4) 350 + 352: 6(bool) Load 351 + 353: 6(bool) LogicalOr 349 352 + SelectionMerge 355 None + BranchConditional 353 354 415 + 354: Label + 356: 9(int) Load 58(i) + 357: 57(ptr) AccessChain 68(i2) 14 + 358: 9(int) Load 357 + 359: 9(int) IAdd 356 358 + 360: 57(ptr) AccessChain 68(i2) 315 + 361: 9(int) Load 360 + 362: 9(int) IAdd 359 361 + 363: 57(ptr) AccessChain 81(i3) 14 + 364: 9(int) Load 363 + 365: 9(int) IAdd 362 364 + 366: 57(ptr) AccessChain 81(i3) 315 + 367: 9(int) Load 366 + 368: 9(int) IAdd 365 367 + 369: 57(ptr) AccessChain 81(i3) 337 + 370: 9(int) Load 369 + 371: 9(int) IAdd 368 370 + 372: 57(ptr) AccessChain 94(i4) 14 + 373: 9(int) Load 372 + 374: 9(int) IAdd 371 373 + 375: 57(ptr) AccessChain 94(i4) 315 + 376: 9(int) Load 375 + 377: 9(int) IAdd 374 376 + 378: 57(ptr) AccessChain 94(i4) 337 + 379: 9(int) Load 378 + 380: 9(int) IAdd 377 379 + 381: 57(ptr) AccessChain 94(i4) 350 382: 9(int) Load 381 - 383: 9(int) IAdd 379 382 + 383: 9(int) IAdd 380 382 384: 16(float) ConvertSToF 383 385: 16(float) Load 106(f) 386: 16(float) FAdd 384 385 @@ -535,7 +535,7 @@ spv.conversion.frag 396: 105(ptr) AccessChain 114(f3) 315 397: 16(float) Load 396 398: 16(float) FAdd 395 397 - 399: 105(ptr) AccessChain 114(f3) 367 + 399: 105(ptr) AccessChain 114(f3) 337 400: 16(float) Load 399 401: 16(float) FAdd 398 400 402: 105(ptr) AccessChain 118(f4) 14 @@ -544,19 +544,19 @@ spv.conversion.frag 405: 105(ptr) AccessChain 118(f4) 315 406: 16(float) Load 405 407: 16(float) FAdd 404 406 - 408: 105(ptr) AccessChain 118(f4) 367 + 408: 105(ptr) AccessChain 118(f4) 337 409: 16(float) Load 408 410: 16(float) FAdd 407 409 - 411: 105(ptr) AccessChain 118(f4) 380 + 411: 105(ptr) AccessChain 118(f4) 350 412: 16(float) Load 411 413: 16(float) FAdd 410 412 414: 95(fvec4) CompositeConstruct 413 413 413 413 Store 323 414 - Branch 353 + Branch 355 415: Label Store 323 151 - Branch 353 - 353: Label + Branch 355 + 355: Label 416: 95(fvec4) Load 323 Store 322(gl_FragColor) 416 Store 417(cv2) 102 diff --git a/Test/baseResults/spv.types.frag.out b/Test/baseResults/spv.types.frag.out index 704561ac..0f483c3b 100755 --- a/Test/baseResults/spv.types.frag.out +++ b/Test/baseResults/spv.types.frag.out @@ -6,7 +6,7 @@ spv.types.frag Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 91 93 100 102 109 111 118 120 127 129 136 138 145 147 154 156 160 + EntryPoint Fragment 4 "main" 96 98 105 107 114 116 123 125 132 134 141 143 150 152 159 161 165 ExecutionMode 4 OriginUpperLeft Source GLSL 140 Name 4 "main" @@ -15,47 +15,47 @@ spv.types.frag Name 12 "i_b" Name 17 "b2" Name 19 "u_b2" - Name 22 "i_b2" - Name 35 "b3" - Name 37 "u_b3" - Name 40 "i_b3" - Name 59 "b4" - Name 61 "u_b4" - Name 64 "i_b4" - Name 89 "i" - Name 91 "u_i" - Name 93 "i_i" - Name 98 "i2" - Name 100 "u_i2" - Name 102 "i_i2" - Name 107 "i3" - Name 109 "u_i3" - Name 111 "i_i3" - Name 116 "i4" - Name 118 "u_i4" - Name 120 "i_i4" - Name 125 "f" - Name 127 "u_f" - Name 129 "i_f" - Name 134 "f2" - Name 136 "u_f2" - Name 138 "i_f2" - Name 143 "f3" - Name 145 "u_f3" - Name 147 "i_f3" - Name 152 "f4" - Name 154 "u_f4" - Name 156 "i_f4" - Name 160 "gl_FragColor" - Decorate 91(u_i) Flat - Decorate 93(i_i) Flat - Decorate 100(u_i2) Flat - Decorate 102(i_i2) Flat - Decorate 109(u_i3) Flat - Decorate 111(i_i3) Flat - Decorate 118(u_i4) Flat - Decorate 120(i_i4) Flat - Decorate 160(gl_FragColor) Location 0 + Name 24 "i_b2" + Name 38 "b3" + Name 40 "u_b3" + Name 43 "i_b3" + Name 63 "b4" + Name 65 "u_b4" + Name 68 "i_b4" + Name 94 "i" + Name 96 "u_i" + Name 98 "i_i" + Name 103 "i2" + Name 105 "u_i2" + Name 107 "i_i2" + Name 112 "i3" + Name 114 "u_i3" + Name 116 "i_i3" + Name 121 "i4" + Name 123 "u_i4" + Name 125 "i_i4" + Name 130 "f" + Name 132 "u_f" + Name 134 "i_f" + Name 139 "f2" + Name 141 "u_f2" + Name 143 "i_f2" + Name 148 "f3" + Name 150 "u_f3" + Name 152 "i_f3" + Name 157 "f4" + Name 159 "u_f4" + Name 161 "i_f4" + Name 165 "gl_FragColor" + Decorate 96(u_i) Flat + Decorate 98(i_i) Flat + Decorate 105(u_i2) Flat + Decorate 107(i_i2) Flat + Decorate 114(u_i3) Flat + Decorate 116(i_i3) Flat + Decorate 123(u_i4) Flat + Decorate 125(i_i4) Flat + Decorate 165(gl_FragColor) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeBool @@ -67,271 +67,271 @@ spv.types.frag 16: TypePointer Function 15(bvec2) 18: TypePointer Private 15(bvec2) 19(u_b2): 18(ptr) Variable Private - 22(i_b2): 18(ptr) Variable Private - 33: TypeVector 6(bool) 3 - 34: TypePointer Function 33(bvec3) - 36: TypePointer Private 33(bvec3) - 37(u_b3): 36(ptr) Variable Private - 40(i_b3): 36(ptr) Variable Private - 57: TypeVector 6(bool) 4 - 58: TypePointer Function 57(bvec4) - 60: TypePointer Private 57(bvec4) - 61(u_b4): 60(ptr) Variable Private - 64(i_b4): 60(ptr) Variable Private - 87: TypeInt 32 1 - 88: TypePointer Function 87(int) - 90: TypePointer Input 87(int) - 91(u_i): 90(ptr) Variable Input - 93(i_i): 90(ptr) Variable Input - 96: TypeVector 87(int) 2 - 97: TypePointer Function 96(ivec2) - 99: TypePointer Input 96(ivec2) - 100(u_i2): 99(ptr) Variable Input - 102(i_i2): 99(ptr) Variable Input - 105: TypeVector 87(int) 3 - 106: TypePointer Function 105(ivec3) - 108: TypePointer Input 105(ivec3) - 109(u_i3): 108(ptr) Variable Input - 111(i_i3): 108(ptr) Variable Input - 114: TypeVector 87(int) 4 - 115: TypePointer Function 114(ivec4) - 117: TypePointer Input 114(ivec4) - 118(u_i4): 117(ptr) Variable Input - 120(i_i4): 117(ptr) Variable Input - 123: TypeFloat 32 - 124: TypePointer Function 123(float) - 126: TypePointer Input 123(float) - 127(u_f): 126(ptr) Variable Input - 129(i_f): 126(ptr) Variable Input - 132: TypeVector 123(float) 2 - 133: TypePointer Function 132(fvec2) - 135: TypePointer Input 132(fvec2) - 136(u_f2): 135(ptr) Variable Input - 138(i_f2): 135(ptr) Variable Input - 141: TypeVector 123(float) 3 - 142: TypePointer Function 141(fvec3) - 144: TypePointer Input 141(fvec3) - 145(u_f3): 144(ptr) Variable Input - 147(i_f3): 144(ptr) Variable Input - 150: TypeVector 123(float) 4 - 151: TypePointer Function 150(fvec4) - 153: TypePointer Input 150(fvec4) - 154(u_f4): 153(ptr) Variable Input - 156(i_f4): 153(ptr) Variable Input - 159: TypePointer Output 150(fvec4) -160(gl_FragColor): 159(ptr) Variable Output - 193: TypeInt 32 0 - 194: 193(int) Constant 0 - 198: 193(int) Constant 1 - 208: 193(int) Constant 2 - 221: 193(int) Constant 3 - 257: 123(float) Constant 1065353216 - 258: 150(fvec4) ConstantComposite 257 257 257 257 + 20: TypeInt 32 0 + 21: 20(int) Constant 0 + 24(i_b2): 18(ptr) Variable Private + 28: 20(int) Constant 1 + 36: TypeVector 6(bool) 3 + 37: TypePointer Function 36(bvec3) + 39: TypePointer Private 36(bvec3) + 40(u_b3): 39(ptr) Variable Private + 43(i_b3): 39(ptr) Variable Private + 53: 20(int) Constant 2 + 61: TypeVector 6(bool) 4 + 62: TypePointer Function 61(bvec4) + 64: TypePointer Private 61(bvec4) + 65(u_b4): 64(ptr) Variable Private + 68(i_b4): 64(ptr) Variable Private + 84: 20(int) Constant 3 + 92: TypeInt 32 1 + 93: TypePointer Function 92(int) + 95: TypePointer Input 92(int) + 96(u_i): 95(ptr) Variable Input + 98(i_i): 95(ptr) Variable Input + 101: TypeVector 92(int) 2 + 102: TypePointer Function 101(ivec2) + 104: TypePointer Input 101(ivec2) + 105(u_i2): 104(ptr) Variable Input + 107(i_i2): 104(ptr) Variable Input + 110: TypeVector 92(int) 3 + 111: TypePointer Function 110(ivec3) + 113: TypePointer Input 110(ivec3) + 114(u_i3): 113(ptr) Variable Input + 116(i_i3): 113(ptr) Variable Input + 119: TypeVector 92(int) 4 + 120: TypePointer Function 119(ivec4) + 122: TypePointer Input 119(ivec4) + 123(u_i4): 122(ptr) Variable Input + 125(i_i4): 122(ptr) Variable Input + 128: TypeFloat 32 + 129: TypePointer Function 128(float) + 131: TypePointer Input 128(float) + 132(u_f): 131(ptr) Variable Input + 134(i_f): 131(ptr) Variable Input + 137: TypeVector 128(float) 2 + 138: TypePointer Function 137(fvec2) + 140: TypePointer Input 137(fvec2) + 141(u_f2): 140(ptr) Variable Input + 143(i_f2): 140(ptr) Variable Input + 146: TypeVector 128(float) 3 + 147: TypePointer Function 146(fvec3) + 149: TypePointer Input 146(fvec3) + 150(u_f3): 149(ptr) Variable Input + 152(i_f3): 149(ptr) Variable Input + 155: TypeVector 128(float) 4 + 156: TypePointer Function 155(fvec4) + 158: TypePointer Input 155(fvec4) + 159(u_f4): 158(ptr) Variable Input + 161(i_f4): 158(ptr) Variable Input + 164: TypePointer Output 155(fvec4) +165(gl_FragColor): 164(ptr) Variable Output + 257: 128(float) Constant 1065353216 + 258: 155(fvec4) ConstantComposite 257 257 257 257 4(main): 2 Function None 3 5: Label 8(b): 7(ptr) Variable Function 17(b2): 16(ptr) Variable Function - 35(b3): 34(ptr) Variable Function - 59(b4): 58(ptr) Variable Function - 89(i): 88(ptr) Variable Function - 98(i2): 97(ptr) Variable Function - 107(i3): 106(ptr) Variable Function - 116(i4): 115(ptr) Variable Function - 125(f): 124(ptr) Variable Function - 134(f2): 133(ptr) Variable Function - 143(f3): 142(ptr) Variable Function - 152(f4): 151(ptr) Variable Function - 161: 151(ptr) Variable Function + 38(b3): 37(ptr) Variable Function + 63(b4): 62(ptr) Variable Function + 94(i): 93(ptr) Variable Function + 103(i2): 102(ptr) Variable Function + 112(i3): 111(ptr) Variable Function + 121(i4): 120(ptr) Variable Function + 130(f): 129(ptr) Variable Function + 139(f2): 138(ptr) Variable Function + 148(f3): 147(ptr) Variable Function + 157(f4): 156(ptr) Variable Function + 166: 156(ptr) Variable Function 11: 6(bool) Load 10(u_b) 13: 6(bool) Load 12(i_b) 14: 6(bool) LogicalAnd 11 13 Store 8(b) 14 - 20: 15(bvec2) Load 19(u_b2) - 21: 6(bool) CompositeExtract 20 0 - 23: 15(bvec2) Load 22(i_b2) - 24: 6(bool) CompositeExtract 23 0 - 25: 6(bool) LogicalAnd 21 24 - 26: 15(bvec2) Load 19(u_b2) - 27: 6(bool) CompositeExtract 26 1 - 28: 6(bool) LogicalAnd 25 27 - 29: 15(bvec2) Load 22(i_b2) - 30: 6(bool) CompositeExtract 29 1 - 31: 6(bool) LogicalAnd 28 30 - 32: 15(bvec2) CompositeConstruct 31 31 - Store 17(b2) 32 - 38: 33(bvec3) Load 37(u_b3) - 39: 6(bool) CompositeExtract 38 0 - 41: 33(bvec3) Load 40(i_b3) - 42: 6(bool) CompositeExtract 41 0 - 43: 6(bool) LogicalAnd 39 42 - 44: 33(bvec3) Load 37(u_b3) - 45: 6(bool) CompositeExtract 44 1 - 46: 6(bool) LogicalAnd 43 45 - 47: 33(bvec3) Load 40(i_b3) - 48: 6(bool) CompositeExtract 47 1 + 22: 9(ptr) AccessChain 19(u_b2) 21 + 23: 6(bool) Load 22 + 25: 9(ptr) AccessChain 24(i_b2) 21 + 26: 6(bool) Load 25 + 27: 6(bool) LogicalAnd 23 26 + 29: 9(ptr) AccessChain 19(u_b2) 28 + 30: 6(bool) Load 29 + 31: 6(bool) LogicalAnd 27 30 + 32: 9(ptr) AccessChain 24(i_b2) 28 + 33: 6(bool) Load 32 + 34: 6(bool) LogicalAnd 31 33 + 35: 15(bvec2) CompositeConstruct 34 34 + Store 17(b2) 35 + 41: 9(ptr) AccessChain 40(u_b3) 21 + 42: 6(bool) Load 41 + 44: 9(ptr) AccessChain 43(i_b3) 21 + 45: 6(bool) Load 44 + 46: 6(bool) LogicalAnd 42 45 + 47: 9(ptr) AccessChain 40(u_b3) 28 + 48: 6(bool) Load 47 49: 6(bool) LogicalAnd 46 48 - 50: 33(bvec3) Load 37(u_b3) - 51: 6(bool) CompositeExtract 50 2 + 50: 9(ptr) AccessChain 43(i_b3) 28 + 51: 6(bool) Load 50 52: 6(bool) LogicalAnd 49 51 - 53: 33(bvec3) Load 40(i_b3) - 54: 6(bool) CompositeExtract 53 2 - 55: 6(bool) LogicalAnd 52 54 - 56: 33(bvec3) CompositeConstruct 55 55 55 - Store 35(b3) 56 - 62: 57(bvec4) Load 61(u_b4) - 63: 6(bool) CompositeExtract 62 0 - 65: 57(bvec4) Load 64(i_b4) - 66: 6(bool) CompositeExtract 65 0 - 67: 6(bool) LogicalAnd 63 66 - 68: 57(bvec4) Load 61(u_b4) - 69: 6(bool) CompositeExtract 68 1 - 70: 6(bool) LogicalAnd 67 69 - 71: 57(bvec4) Load 64(i_b4) - 72: 6(bool) CompositeExtract 71 1 - 73: 6(bool) LogicalAnd 70 72 - 74: 57(bvec4) Load 61(u_b4) - 75: 6(bool) CompositeExtract 74 2 - 76: 6(bool) LogicalAnd 73 75 - 77: 57(bvec4) Load 64(i_b4) - 78: 6(bool) CompositeExtract 77 2 - 79: 6(bool) LogicalAnd 76 78 - 80: 57(bvec4) Load 61(u_b4) - 81: 6(bool) CompositeExtract 80 3 - 82: 6(bool) LogicalAnd 79 81 - 83: 57(bvec4) Load 64(i_b4) - 84: 6(bool) CompositeExtract 83 3 - 85: 6(bool) LogicalAnd 82 84 - 86: 57(bvec4) CompositeConstruct 85 85 85 85 - Store 59(b4) 86 - 92: 87(int) Load 91(u_i) - 94: 87(int) Load 93(i_i) - 95: 87(int) IAdd 92 94 - Store 89(i) 95 - 101: 96(ivec2) Load 100(u_i2) - 103: 96(ivec2) Load 102(i_i2) - 104: 96(ivec2) IAdd 101 103 - Store 98(i2) 104 - 110: 105(ivec3) Load 109(u_i3) - 112: 105(ivec3) Load 111(i_i3) - 113: 105(ivec3) IAdd 110 112 - Store 107(i3) 113 - 119: 114(ivec4) Load 118(u_i4) - 121: 114(ivec4) Load 120(i_i4) - 122: 114(ivec4) IAdd 119 121 - Store 116(i4) 122 - 128: 123(float) Load 127(u_f) - 130: 123(float) Load 129(i_f) - 131: 123(float) FAdd 128 130 - Store 125(f) 131 - 137: 132(fvec2) Load 136(u_f2) - 139: 132(fvec2) Load 138(i_f2) - 140: 132(fvec2) FAdd 137 139 - Store 134(f2) 140 - 146: 141(fvec3) Load 145(u_f3) - 148: 141(fvec3) Load 147(i_f3) - 149: 141(fvec3) FAdd 146 148 - Store 143(f3) 149 - 155: 150(fvec4) Load 154(u_f4) - 157: 150(fvec4) Load 156(i_f4) - 158: 150(fvec4) FAdd 155 157 - Store 152(f4) 158 - 162: 6(bool) Load 8(b) - 163: 15(bvec2) Load 17(b2) - 164: 6(bool) CompositeExtract 163 0 - 165: 6(bool) LogicalOr 162 164 - 166: 15(bvec2) Load 17(b2) - 167: 6(bool) CompositeExtract 166 1 - 168: 6(bool) LogicalOr 165 167 - 169: 33(bvec3) Load 35(b3) - 170: 6(bool) CompositeExtract 169 0 - 171: 6(bool) LogicalOr 168 170 - 172: 33(bvec3) Load 35(b3) - 173: 6(bool) CompositeExtract 172 1 - 174: 6(bool) LogicalOr 171 173 - 175: 33(bvec3) Load 35(b3) - 176: 6(bool) CompositeExtract 175 2 - 177: 6(bool) LogicalOr 174 176 - 178: 57(bvec4) Load 59(b4) - 179: 6(bool) CompositeExtract 178 0 - 180: 6(bool) LogicalOr 177 179 - 181: 57(bvec4) Load 59(b4) - 182: 6(bool) CompositeExtract 181 1 - 183: 6(bool) LogicalOr 180 182 - 184: 57(bvec4) Load 59(b4) - 185: 6(bool) CompositeExtract 184 2 - 186: 6(bool) LogicalOr 183 185 - 187: 57(bvec4) Load 59(b4) - 188: 6(bool) CompositeExtract 187 3 - 189: 6(bool) LogicalOr 186 188 - SelectionMerge 191 None - BranchConditional 189 190 256 - 190: Label - 192: 87(int) Load 89(i) - 195: 88(ptr) AccessChain 98(i2) 194 - 196: 87(int) Load 195 - 197: 87(int) IAdd 192 196 - 199: 88(ptr) AccessChain 98(i2) 198 - 200: 87(int) Load 199 - 201: 87(int) IAdd 197 200 - 202: 88(ptr) AccessChain 107(i3) 194 - 203: 87(int) Load 202 - 204: 87(int) IAdd 201 203 - 205: 88(ptr) AccessChain 107(i3) 198 - 206: 87(int) Load 205 - 207: 87(int) IAdd 204 206 - 209: 88(ptr) AccessChain 107(i3) 208 - 210: 87(int) Load 209 - 211: 87(int) IAdd 207 210 - 212: 88(ptr) AccessChain 116(i4) 194 - 213: 87(int) Load 212 - 214: 87(int) IAdd 211 213 - 215: 88(ptr) AccessChain 116(i4) 198 - 216: 87(int) Load 215 - 217: 87(int) IAdd 214 216 - 218: 88(ptr) AccessChain 116(i4) 208 - 219: 87(int) Load 218 - 220: 87(int) IAdd 217 219 - 222: 88(ptr) AccessChain 116(i4) 221 - 223: 87(int) Load 222 - 224: 87(int) IAdd 220 223 - 225: 123(float) ConvertSToF 224 - 226: 123(float) Load 125(f) - 227: 123(float) FAdd 225 226 - 228: 124(ptr) AccessChain 134(f2) 194 - 229: 123(float) Load 228 - 230: 123(float) FAdd 227 229 - 231: 124(ptr) AccessChain 134(f2) 198 - 232: 123(float) Load 231 - 233: 123(float) FAdd 230 232 - 234: 124(ptr) AccessChain 143(f3) 194 - 235: 123(float) Load 234 - 236: 123(float) FAdd 233 235 - 237: 124(ptr) AccessChain 143(f3) 198 - 238: 123(float) Load 237 - 239: 123(float) FAdd 236 238 - 240: 124(ptr) AccessChain 143(f3) 208 - 241: 123(float) Load 240 - 242: 123(float) FAdd 239 241 - 243: 124(ptr) AccessChain 152(f4) 194 - 244: 123(float) Load 243 - 245: 123(float) FAdd 242 244 - 246: 124(ptr) AccessChain 152(f4) 198 - 247: 123(float) Load 246 - 248: 123(float) FAdd 245 247 - 249: 124(ptr) AccessChain 152(f4) 208 - 250: 123(float) Load 249 - 251: 123(float) FAdd 248 250 - 252: 124(ptr) AccessChain 152(f4) 221 - 253: 123(float) Load 252 - 254: 123(float) FAdd 251 253 - 255: 150(fvec4) CompositeConstruct 254 254 254 254 - Store 161 255 - Branch 191 + 54: 9(ptr) AccessChain 40(u_b3) 53 + 55: 6(bool) Load 54 + 56: 6(bool) LogicalAnd 52 55 + 57: 9(ptr) AccessChain 43(i_b3) 53 + 58: 6(bool) Load 57 + 59: 6(bool) LogicalAnd 56 58 + 60: 36(bvec3) CompositeConstruct 59 59 59 + Store 38(b3) 60 + 66: 9(ptr) AccessChain 65(u_b4) 21 + 67: 6(bool) Load 66 + 69: 9(ptr) AccessChain 68(i_b4) 21 + 70: 6(bool) Load 69 + 71: 6(bool) LogicalAnd 67 70 + 72: 9(ptr) AccessChain 65(u_b4) 28 + 73: 6(bool) Load 72 + 74: 6(bool) LogicalAnd 71 73 + 75: 9(ptr) AccessChain 68(i_b4) 28 + 76: 6(bool) Load 75 + 77: 6(bool) LogicalAnd 74 76 + 78: 9(ptr) AccessChain 65(u_b4) 53 + 79: 6(bool) Load 78 + 80: 6(bool) LogicalAnd 77 79 + 81: 9(ptr) AccessChain 68(i_b4) 53 + 82: 6(bool) Load 81 + 83: 6(bool) LogicalAnd 80 82 + 85: 9(ptr) AccessChain 65(u_b4) 84 + 86: 6(bool) Load 85 + 87: 6(bool) LogicalAnd 83 86 + 88: 9(ptr) AccessChain 68(i_b4) 84 + 89: 6(bool) Load 88 + 90: 6(bool) LogicalAnd 87 89 + 91: 61(bvec4) CompositeConstruct 90 90 90 90 + Store 63(b4) 91 + 97: 92(int) Load 96(u_i) + 99: 92(int) Load 98(i_i) + 100: 92(int) IAdd 97 99 + Store 94(i) 100 + 106: 101(ivec2) Load 105(u_i2) + 108: 101(ivec2) Load 107(i_i2) + 109: 101(ivec2) IAdd 106 108 + Store 103(i2) 109 + 115: 110(ivec3) Load 114(u_i3) + 117: 110(ivec3) Load 116(i_i3) + 118: 110(ivec3) IAdd 115 117 + Store 112(i3) 118 + 124: 119(ivec4) Load 123(u_i4) + 126: 119(ivec4) Load 125(i_i4) + 127: 119(ivec4) IAdd 124 126 + Store 121(i4) 127 + 133: 128(float) Load 132(u_f) + 135: 128(float) Load 134(i_f) + 136: 128(float) FAdd 133 135 + Store 130(f) 136 + 142: 137(fvec2) Load 141(u_f2) + 144: 137(fvec2) Load 143(i_f2) + 145: 137(fvec2) FAdd 142 144 + Store 139(f2) 145 + 151: 146(fvec3) Load 150(u_f3) + 153: 146(fvec3) Load 152(i_f3) + 154: 146(fvec3) FAdd 151 153 + Store 148(f3) 154 + 160: 155(fvec4) Load 159(u_f4) + 162: 155(fvec4) Load 161(i_f4) + 163: 155(fvec4) FAdd 160 162 + Store 157(f4) 163 + 167: 6(bool) Load 8(b) + 168: 7(ptr) AccessChain 17(b2) 21 + 169: 6(bool) Load 168 + 170: 6(bool) LogicalOr 167 169 + 171: 7(ptr) AccessChain 17(b2) 28 + 172: 6(bool) Load 171 + 173: 6(bool) LogicalOr 170 172 + 174: 7(ptr) AccessChain 38(b3) 21 + 175: 6(bool) Load 174 + 176: 6(bool) LogicalOr 173 175 + 177: 7(ptr) AccessChain 38(b3) 28 + 178: 6(bool) Load 177 + 179: 6(bool) LogicalOr 176 178 + 180: 7(ptr) AccessChain 38(b3) 53 + 181: 6(bool) Load 180 + 182: 6(bool) LogicalOr 179 181 + 183: 7(ptr) AccessChain 63(b4) 21 + 184: 6(bool) Load 183 + 185: 6(bool) LogicalOr 182 184 + 186: 7(ptr) AccessChain 63(b4) 28 + 187: 6(bool) Load 186 + 188: 6(bool) LogicalOr 185 187 + 189: 7(ptr) AccessChain 63(b4) 53 + 190: 6(bool) Load 189 + 191: 6(bool) LogicalOr 188 190 + 192: 7(ptr) AccessChain 63(b4) 84 + 193: 6(bool) Load 192 + 194: 6(bool) LogicalOr 191 193 + SelectionMerge 196 None + BranchConditional 194 195 256 + 195: Label + 197: 92(int) Load 94(i) + 198: 93(ptr) AccessChain 103(i2) 21 + 199: 92(int) Load 198 + 200: 92(int) IAdd 197 199 + 201: 93(ptr) AccessChain 103(i2) 28 + 202: 92(int) Load 201 + 203: 92(int) IAdd 200 202 + 204: 93(ptr) AccessChain 112(i3) 21 + 205: 92(int) Load 204 + 206: 92(int) IAdd 203 205 + 207: 93(ptr) AccessChain 112(i3) 28 + 208: 92(int) Load 207 + 209: 92(int) IAdd 206 208 + 210: 93(ptr) AccessChain 112(i3) 53 + 211: 92(int) Load 210 + 212: 92(int) IAdd 209 211 + 213: 93(ptr) AccessChain 121(i4) 21 + 214: 92(int) Load 213 + 215: 92(int) IAdd 212 214 + 216: 93(ptr) AccessChain 121(i4) 28 + 217: 92(int) Load 216 + 218: 92(int) IAdd 215 217 + 219: 93(ptr) AccessChain 121(i4) 53 + 220: 92(int) Load 219 + 221: 92(int) IAdd 218 220 + 222: 93(ptr) AccessChain 121(i4) 84 + 223: 92(int) Load 222 + 224: 92(int) IAdd 221 223 + 225: 128(float) ConvertSToF 224 + 226: 128(float) Load 130(f) + 227: 128(float) FAdd 225 226 + 228: 129(ptr) AccessChain 139(f2) 21 + 229: 128(float) Load 228 + 230: 128(float) FAdd 227 229 + 231: 129(ptr) AccessChain 139(f2) 28 + 232: 128(float) Load 231 + 233: 128(float) FAdd 230 232 + 234: 129(ptr) AccessChain 148(f3) 21 + 235: 128(float) Load 234 + 236: 128(float) FAdd 233 235 + 237: 129(ptr) AccessChain 148(f3) 28 + 238: 128(float) Load 237 + 239: 128(float) FAdd 236 238 + 240: 129(ptr) AccessChain 148(f3) 53 + 241: 128(float) Load 240 + 242: 128(float) FAdd 239 241 + 243: 129(ptr) AccessChain 157(f4) 21 + 244: 128(float) Load 243 + 245: 128(float) FAdd 242 244 + 246: 129(ptr) AccessChain 157(f4) 28 + 247: 128(float) Load 246 + 248: 128(float) FAdd 245 247 + 249: 129(ptr) AccessChain 157(f4) 53 + 250: 128(float) Load 249 + 251: 128(float) FAdd 248 250 + 252: 129(ptr) AccessChain 157(f4) 84 + 253: 128(float) Load 252 + 254: 128(float) FAdd 251 253 + 255: 155(fvec4) CompositeConstruct 254 254 254 254 + Store 166 255 + Branch 196 256: Label - Store 161 258 - Branch 191 - 191: Label - 259: 150(fvec4) Load 161 - Store 160(gl_FragColor) 259 + Store 166 258 + Branch 196 + 196: Label + 259: 155(fvec4) Load 166 + Store 165(gl_FragColor) 259 Return FunctionEnd diff --git a/Test/spv.accessChain.frag b/Test/spv.accessChain.frag index c7f805b5..3f4929b6 100644 --- a/Test/spv.accessChain.frag +++ b/Test/spv.accessChain.frag @@ -74,6 +74,11 @@ void GetColor13(const S i, int comp) OutColor.zy[comp] += i.color.x; } +void GetColor14(const S i, int comp) +{ + OutColor.zyx[comp] = i.color.x; +} + void main() { S s; @@ -91,4 +96,5 @@ void main() GetColor11(s, u); GetColor12(s, u); GetColor13(s, u); + GetColor14(s, u); }