SPV: Create more access chains addressing a few swizzling issues.

- Fixes #1233
- Treats local bools like anything else
- more consistently deals with a dynamic component selection
This commit is contained in:
John Kessenich 2018-02-05 14:44:14 -07:00
parent 2651ccaec8
commit 5c3eed542d
8 changed files with 764 additions and 716 deletions

View File

@ -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<unsigned>& 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<unsigned> 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<unsigned int>& 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<Id> 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;

View File

@ -533,12 +533,15 @@ public:
// push new swizzle onto the end of any existing swizzle, merging into a single swizzle
void accessChainPushSwizzle(std::vector<unsigned>& 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<Id>& comps) const;
Id collapseAccessChain();
void remapDynamicSwizzle();
void transferAccessChainSwizzle(bool dynamic);
void simplifyAccessChainSwizzle();
void createAndSetNoPredecessorBlock(const char*);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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);
}