зеркало из https://github.com/stride3d/xkslang.git
SPV: Implement short circuiting of && and || when emitting SPIR-V.
This commit is contained in:
Родитель
da581a2b95
Коммит
7c1aa1026e
|
@ -115,6 +115,9 @@ protected:
|
|||
void addDecoration(spv::Id id, spv::Decoration dec);
|
||||
void addMemberDecoration(spv::Id id, int member, spv::Decoration dec);
|
||||
spv::Id createSpvConstant(const glslang::TType& type, const glslang::TConstUnionArray&, int& nextConst);
|
||||
bool isTrivialLeaf(const glslang::TIntermTyped* node);
|
||||
bool isTrivial(const glslang::TIntermTyped* node);
|
||||
spv::Id createShortCircuit(glslang::TOperator, glslang::TIntermTyped& left, glslang::TIntermTyped& right);
|
||||
|
||||
spv::Function* shaderEntry;
|
||||
int sequenceDepth;
|
||||
|
@ -725,6 +728,21 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
|
|||
builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()));
|
||||
}
|
||||
return false;
|
||||
case glslang::EOpLogicalOr:
|
||||
case glslang::EOpLogicalAnd:
|
||||
{
|
||||
|
||||
// These may require short circuiting, but can sometimes be done as straight
|
||||
// binary operations. The right operand must be short circuited if it has
|
||||
// side effects, and should probably be if it is complex.
|
||||
if (isTrivial(node->getRight()->getAsTyped()))
|
||||
break; // handle below as a normal binary operation
|
||||
// otherwise, we need to do dynamic short circuiting on the right operand
|
||||
spv::Id result = createShortCircuit(node->getOp(), *node->getLeft()->getAsTyped(), *node->getRight()->getAsTyped());
|
||||
builder.clearAccessChain();
|
||||
builder.setAccessChainRValue(result);
|
||||
}
|
||||
return false;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -2177,7 +2195,9 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
|
|||
break;
|
||||
}
|
||||
|
||||
// handle mapped binary operations (should be non-comparison)
|
||||
if (binOp != spv::OpNop) {
|
||||
assert(comparison == false);
|
||||
if (builder.isMatrix(left) || builder.isMatrix(right)) {
|
||||
switch (binOp) {
|
||||
case spv::OpMatrixTimesScalar:
|
||||
|
@ -2215,7 +2235,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
|
|||
if (! comparison)
|
||||
return 0;
|
||||
|
||||
// Comparison instructions
|
||||
// Handle comparison instructions
|
||||
|
||||
if (reduceComparison && (builder.isVector(left) || builder.isMatrix(left) || builder.isAggregate(left))) {
|
||||
assert(op == glslang::EOpEqual || op == glslang::EOpNotEqual);
|
||||
|
@ -3025,6 +3045,133 @@ spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TType& glslangT
|
|||
return builder.makeCompositeConstant(typeId, spvConsts);
|
||||
}
|
||||
|
||||
// Return true if the node is a constant or symbol whose reading has no
|
||||
// non-trivial observable cost or effect.
|
||||
bool TGlslangToSpvTraverser::isTrivialLeaf(const glslang::TIntermTyped* node)
|
||||
{
|
||||
// don't know what this is
|
||||
if (node == nullptr)
|
||||
return false;
|
||||
|
||||
// a constant is safe
|
||||
if (node->getAsConstantUnion() != nullptr)
|
||||
return true;
|
||||
|
||||
// not a symbol means non-trivial
|
||||
if (node->getAsSymbolNode() == nullptr)
|
||||
return false;
|
||||
|
||||
// a symbol, depends on what's being read
|
||||
switch (node->getType().getQualifier().storage) {
|
||||
case glslang::EvqTemporary:
|
||||
case glslang::EvqGlobal:
|
||||
case glslang::EvqIn:
|
||||
case glslang::EvqInOut:
|
||||
case glslang::EvqConst:
|
||||
case glslang::EvqConstReadOnly:
|
||||
case glslang::EvqUniform:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// A node is trivial if it is a single operation with no side effects.
|
||||
// Error on the side of saying non-trivial.
|
||||
// Return true if trivial.
|
||||
bool TGlslangToSpvTraverser::isTrivial(const glslang::TIntermTyped* node)
|
||||
{
|
||||
if (node == nullptr)
|
||||
return false;
|
||||
|
||||
// symbols and constants are trivial
|
||||
if (isTrivialLeaf(node))
|
||||
return true;
|
||||
|
||||
// otherwise, it needs to be a simple operation or one or two leaf nodes
|
||||
|
||||
// not a simple operation
|
||||
const glslang::TIntermBinary* binaryNode = node->getAsBinaryNode();
|
||||
const glslang::TIntermUnary* unaryNode = node->getAsUnaryNode();
|
||||
if (binaryNode == nullptr && unaryNode == nullptr)
|
||||
return false;
|
||||
|
||||
// not on leaf nodes
|
||||
if (binaryNode && (! isTrivialLeaf(binaryNode->getLeft()) || ! isTrivialLeaf(binaryNode->getRight())))
|
||||
return false;
|
||||
|
||||
if (unaryNode && ! isTrivialLeaf(unaryNode->getOperand())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (node->getAsOperator()->getOp()) {
|
||||
case glslang::EOpLogicalNot:
|
||||
case glslang::EOpConvIntToBool:
|
||||
case glslang::EOpConvUintToBool:
|
||||
case glslang::EOpConvFloatToBool:
|
||||
case glslang::EOpConvDoubleToBool:
|
||||
case glslang::EOpEqual:
|
||||
case glslang::EOpNotEqual:
|
||||
case glslang::EOpLessThan:
|
||||
case glslang::EOpGreaterThan:
|
||||
case glslang::EOpLessThanEqual:
|
||||
case glslang::EOpGreaterThanEqual:
|
||||
case glslang::EOpIndexDirect:
|
||||
case glslang::EOpIndexDirectStruct:
|
||||
case glslang::EOpLogicalXor:
|
||||
case glslang::EOpAny:
|
||||
case glslang::EOpAll:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Emit short-circuiting code, where 'right' is never evaluated unless
|
||||
// the left side is true (for &&) or false (for ||).
|
||||
spv::Id TGlslangToSpvTraverser::createShortCircuit(glslang::TOperator op, glslang::TIntermTyped& left, glslang::TIntermTyped& right)
|
||||
{
|
||||
spv::Id boolTypeId = builder.makeBoolType();
|
||||
|
||||
// emit left operand
|
||||
builder.clearAccessChain();
|
||||
left.traverse(this);
|
||||
spv::Id leftId = builder.accessChainLoad(boolTypeId);
|
||||
|
||||
// Operands to accumulate OpPhi operands
|
||||
std::vector<spv::Id> phiOperands;
|
||||
// accumulate left operand's phi information
|
||||
phiOperands.push_back(leftId);
|
||||
phiOperands.push_back(builder.getBuildPoint()->getId());
|
||||
|
||||
// Make the two kinds of operation symmetric with a "!"
|
||||
// || => emit "if (! left) result = right"
|
||||
// && => emit "if ( left) result = right"
|
||||
//
|
||||
// TODO: this runtime "not" for || could be avoided by adding functionality
|
||||
// to 'builder' to have an "else" without an "then"
|
||||
if (op == glslang::EOpLogicalOr)
|
||||
leftId = builder.createUnaryOp(spv::OpLogicalNot, boolTypeId, leftId);
|
||||
|
||||
// make an "if" based on the left value
|
||||
spv::Builder::If ifBuilder(leftId, builder);
|
||||
|
||||
// emit right operand as the "then" part of the "if"
|
||||
builder.clearAccessChain();
|
||||
right.traverse(this);
|
||||
spv::Id rightId = builder.accessChainLoad(boolTypeId);
|
||||
|
||||
// accumulate left operand's phi information
|
||||
phiOperands.push_back(rightId);
|
||||
phiOperands.push_back(builder.getBuildPoint()->getId());
|
||||
|
||||
// finish the "if"
|
||||
ifBuilder.makeEndIf();
|
||||
|
||||
// phi together the two results
|
||||
return builder.createOp(spv::OpPhi, boolTypeId, phiOperands);
|
||||
}
|
||||
|
||||
}; // end anonymous namespace
|
||||
|
||||
namespace glslang {
|
||||
|
|
|
@ -5,7 +5,7 @@ Linked vertex stage:
|
|||
|
||||
// Module Version 99
|
||||
// Generated by (magic number): 51a00bb
|
||||
// Id's are bound by 111
|
||||
// Id's are bound by 114
|
||||
|
||||
Source ESSL 300
|
||||
Capability Shader
|
||||
|
@ -40,8 +40,8 @@ Linked vertex stage:
|
|||
MemberName 77(S) 0 "c"
|
||||
MemberName 77(S) 1 "f"
|
||||
Name 79 "s"
|
||||
Name 109 "gl_VertexID"
|
||||
Name 110 "gl_InstanceID"
|
||||
Name 112 "gl_VertexID"
|
||||
Name 113 "gl_InstanceID"
|
||||
Decorate 9(pos) Smooth
|
||||
Decorate 11(p) Location 3
|
||||
MemberDecorate 17(Transform) 0 RowMajor
|
||||
|
@ -67,10 +67,10 @@ Linked vertex stage:
|
|||
Decorate 53(c) Location 7
|
||||
Decorate 61(iout) Flat
|
||||
Decorate 73(aiv2) Location 9
|
||||
Decorate 109(gl_VertexID) BuiltIn VertexId
|
||||
Decorate 109(gl_VertexID) NoStaticUse
|
||||
Decorate 110(gl_InstanceID) BuiltIn InstanceId
|
||||
Decorate 110(gl_InstanceID) NoStaticUse
|
||||
Decorate 112(gl_VertexID) BuiltIn VertexId
|
||||
Decorate 112(gl_VertexID) NoStaticUse
|
||||
Decorate 113(gl_InstanceID) BuiltIn InstanceId
|
||||
Decorate 113(gl_InstanceID) NoStaticUse
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeFloat 32
|
||||
|
@ -124,12 +124,12 @@ Linked vertex stage:
|
|||
89: 6(float) Constant 1065353216
|
||||
90: 14(fvec3) ConstantComposite 89 89 89
|
||||
91: TypeVector 42(bool) 3
|
||||
94: TypePointer Uniform 30(ivec3)
|
||||
97: 29(int) Constant 5
|
||||
98: 30(ivec3) ConstantComposite 97 97 97
|
||||
108: TypePointer Input 16(int)
|
||||
109(gl_VertexID): 108(ptr) Variable Input
|
||||
110(gl_InstanceID): 108(ptr) Variable Input
|
||||
97: TypePointer Uniform 30(ivec3)
|
||||
100: 29(int) Constant 5
|
||||
101: 30(ivec3) ConstantComposite 100 100 100
|
||||
111: TypePointer Input 16(int)
|
||||
112(gl_VertexID): 111(ptr) Variable Input
|
||||
113(gl_InstanceID): 111(ptr) Variable Input
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
12: 7(fvec4) Load 11(p)
|
||||
|
@ -174,20 +174,26 @@ Linked vertex stage:
|
|||
88: 14(fvec3) Load 87
|
||||
92: 91(bvec3) FOrdNotEqual 88 90
|
||||
93: 42(bool) Any 92
|
||||
95: 94(ptr) AccessChain 35 62 55
|
||||
96: 30(ivec3) Load 95
|
||||
99: 91(bvec3) INotEqual 96 98
|
||||
100: 42(bool) Any 99
|
||||
101: 42(bool) LogicalOr 93 100
|
||||
SelectionMerge 103 None
|
||||
BranchConditional 101 102 103
|
||||
102: Label
|
||||
104: 50(ptr) AccessChain 79(s) 20
|
||||
105: 14(fvec3) Load 104
|
||||
106: 14(fvec3) CompositeConstruct 89 89 89
|
||||
107: 14(fvec3) FAdd 105 106
|
||||
Store 104 107
|
||||
Branch 103
|
||||
103: Label
|
||||
94: 42(bool) LogicalNot 93
|
||||
SelectionMerge 96 None
|
||||
BranchConditional 94 95 96
|
||||
95: Label
|
||||
98: 97(ptr) AccessChain 35 62 55
|
||||
99: 30(ivec3) Load 98
|
||||
102: 91(bvec3) INotEqual 99 101
|
||||
103: 42(bool) Any 102
|
||||
Branch 96
|
||||
96: Label
|
||||
104: 42(bool) Phi 93 5 103 95
|
||||
SelectionMerge 106 None
|
||||
BranchConditional 104 105 106
|
||||
105: Label
|
||||
107: 50(ptr) AccessChain 79(s) 20
|
||||
108: 14(fvec3) Load 107
|
||||
109: 14(fvec3) CompositeConstruct 89 89 89
|
||||
110: 14(fvec3) FAdd 108 109
|
||||
Store 107 110
|
||||
Branch 106
|
||||
106: Label
|
||||
Return
|
||||
FunctionEnd
|
||||
|
|
|
@ -5,7 +5,7 @@ Linked fragment stage:
|
|||
|
||||
// Module Version 99
|
||||
// Generated by (magic number): 51a00bb
|
||||
// Id's are bound by 398
|
||||
// Id's are bound by 416
|
||||
|
||||
Source GLSL 130
|
||||
Capability Shader
|
||||
|
@ -20,15 +20,15 @@ Linked fragment stage:
|
|||
Name 22 "ui"
|
||||
Name 169 "uf"
|
||||
Name 216 "b"
|
||||
Name 242 "ub41"
|
||||
Name 244 "ub42"
|
||||
Name 301 "f"
|
||||
Name 377 "gl_FragColor"
|
||||
Name 395 "uiv4"
|
||||
Name 397 "ub"
|
||||
Decorate 377(gl_FragColor) BuiltIn FragColor
|
||||
Decorate 395(uiv4) NoStaticUse
|
||||
Decorate 397(ub) NoStaticUse
|
||||
Name 250 "ub41"
|
||||
Name 252 "ub42"
|
||||
Name 316 "f"
|
||||
Name 395 "gl_FragColor"
|
||||
Name 413 "uiv4"
|
||||
Name 415 "ub"
|
||||
Decorate 395(gl_FragColor) BuiltIn FragColor
|
||||
Decorate 413(uiv4) NoStaticUse
|
||||
Decorate 415(ub) NoStaticUse
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeFloat 32
|
||||
|
@ -45,31 +45,31 @@ Linked fragment stage:
|
|||
214: TypeBool
|
||||
215: TypePointer Function 214(bool)
|
||||
219: TypeVector 214(bool) 4
|
||||
241: TypePointer UniformConstant 219(bvec4)
|
||||
242(ub41): 241(ptr) Variable UniformConstant
|
||||
244(ub42): 241(ptr) Variable UniformConstant
|
||||
291: 18(int) Constant 2
|
||||
298: 18(int) Constant 1
|
||||
300: TypePointer Function 6(float)
|
||||
330: TypeVector 6(float) 3
|
||||
346: 6(float) Constant 1073741824
|
||||
353: 6(float) Constant 1065353216
|
||||
358: 18(int) Constant 66
|
||||
364: 18(int) Constant 17
|
||||
376: TypePointer Output 7(fvec4)
|
||||
377(gl_FragColor): 376(ptr) Variable Output
|
||||
393: TypeVector 18(int) 4
|
||||
394: TypePointer UniformConstant 393(ivec4)
|
||||
395(uiv4): 394(ptr) Variable UniformConstant
|
||||
396: TypePointer UniformConstant 214(bool)
|
||||
397(ub): 396(ptr) Variable UniformConstant
|
||||
249: TypePointer UniformConstant 219(bvec4)
|
||||
250(ub41): 249(ptr) Variable UniformConstant
|
||||
252(ub42): 249(ptr) Variable UniformConstant
|
||||
306: 18(int) Constant 2
|
||||
313: 18(int) Constant 1
|
||||
315: TypePointer Function 6(float)
|
||||
345: TypeVector 6(float) 3
|
||||
364: 6(float) Constant 1073741824
|
||||
371: 6(float) Constant 1065353216
|
||||
376: 18(int) Constant 66
|
||||
382: 18(int) Constant 17
|
||||
394: TypePointer Output 7(fvec4)
|
||||
395(gl_FragColor): 394(ptr) Variable Output
|
||||
411: TypeVector 18(int) 4
|
||||
412: TypePointer UniformConstant 411(ivec4)
|
||||
413(uiv4): 412(ptr) Variable UniformConstant
|
||||
414: TypePointer UniformConstant 214(bool)
|
||||
415(ub): 414(ptr) Variable UniformConstant
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
9(v): 8(ptr) Variable Function
|
||||
20(i): 19(ptr) Variable Function
|
||||
216(b): 215(ptr) Variable Function
|
||||
301(f): 300(ptr) Variable Function
|
||||
378: 8(ptr) Variable Function
|
||||
316(f): 315(ptr) Variable Function
|
||||
396: 8(ptr) Variable Function
|
||||
12: 7(fvec4) Load 11(uv4)
|
||||
13: 7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12
|
||||
Store 9(v) 13
|
||||
|
@ -315,199 +315,241 @@ Linked fragment stage:
|
|||
221: 214(bool) Any 220
|
||||
Store 216(b) 221
|
||||
222: 214(bool) Load 216(b)
|
||||
223: 7(fvec4) Load 9(v)
|
||||
224: 7(fvec4) Load 11(uv4)
|
||||
225: 219(bvec4) FOrdLessThanEqual 223 224
|
||||
226: 214(bool) Any 225
|
||||
227: 214(bool) LogicalAnd 222 226
|
||||
Store 216(b) 227
|
||||
228: 214(bool) Load 216(b)
|
||||
229: 7(fvec4) Load 9(v)
|
||||
230: 7(fvec4) Load 11(uv4)
|
||||
231: 219(bvec4) FOrdGreaterThan 229 230
|
||||
232: 214(bool) Any 231
|
||||
233: 214(bool) LogicalAnd 228 232
|
||||
Store 216(b) 233
|
||||
234: 214(bool) Load 216(b)
|
||||
235: 7(fvec4) Load 9(v)
|
||||
236: 7(fvec4) Load 11(uv4)
|
||||
237: 219(bvec4) FOrdGreaterThanEqual 235 236
|
||||
238: 214(bool) Any 237
|
||||
239: 214(bool) LogicalAnd 234 238
|
||||
Store 216(b) 239
|
||||
240: 214(bool) Load 216(b)
|
||||
243: 219(bvec4) Load 242(ub41)
|
||||
245: 219(bvec4) Load 244(ub42)
|
||||
246: 219(bvec4) IEqual 243 245
|
||||
247: 214(bool) Any 246
|
||||
248: 214(bool) LogicalAnd 240 247
|
||||
Store 216(b) 248
|
||||
249: 214(bool) Load 216(b)
|
||||
250: 219(bvec4) Load 242(ub41)
|
||||
251: 219(bvec4) Load 244(ub42)
|
||||
252: 219(bvec4) INotEqual 250 251
|
||||
253: 214(bool) Any 252
|
||||
254: 214(bool) LogicalAnd 249 253
|
||||
Store 216(b) 254
|
||||
255: 214(bool) Load 216(b)
|
||||
256: 219(bvec4) Load 242(ub41)
|
||||
257: 214(bool) Any 256
|
||||
258: 214(bool) LogicalAnd 255 257
|
||||
Store 216(b) 258
|
||||
259: 214(bool) Load 216(b)
|
||||
260: 219(bvec4) Load 242(ub41)
|
||||
261: 214(bool) All 260
|
||||
262: 214(bool) LogicalAnd 259 261
|
||||
Store 216(b) 262
|
||||
263: 214(bool) Load 216(b)
|
||||
264: 219(bvec4) Load 242(ub41)
|
||||
265: 219(bvec4) LogicalNot 264
|
||||
266: 214(bool) Any 265
|
||||
267: 214(bool) LogicalAnd 263 266
|
||||
Store 216(b) 267
|
||||
268: 18(int) Load 20(i)
|
||||
269: 18(int) Load 22(ui)
|
||||
270: 18(int) IAdd 268 269
|
||||
271: 18(int) Load 20(i)
|
||||
272: 18(int) IMul 270 271
|
||||
273: 18(int) Load 22(ui)
|
||||
274: 18(int) ISub 272 273
|
||||
275: 18(int) Load 20(i)
|
||||
276: 18(int) SDiv 274 275
|
||||
Store 20(i) 276
|
||||
277: 18(int) Load 20(i)
|
||||
278: 18(int) Load 22(ui)
|
||||
279: 18(int) SMod 277 278
|
||||
Store 20(i) 279
|
||||
SelectionMerge 224 None
|
||||
BranchConditional 222 223 224
|
||||
223: Label
|
||||
225: 7(fvec4) Load 9(v)
|
||||
226: 7(fvec4) Load 11(uv4)
|
||||
227: 219(bvec4) FOrdLessThanEqual 225 226
|
||||
228: 214(bool) Any 227
|
||||
Branch 224
|
||||
224: Label
|
||||
229: 214(bool) Phi 222 5 228 223
|
||||
Store 216(b) 229
|
||||
230: 214(bool) Load 216(b)
|
||||
SelectionMerge 232 None
|
||||
BranchConditional 230 231 232
|
||||
231: Label
|
||||
233: 7(fvec4) Load 9(v)
|
||||
234: 7(fvec4) Load 11(uv4)
|
||||
235: 219(bvec4) FOrdGreaterThan 233 234
|
||||
236: 214(bool) Any 235
|
||||
Branch 232
|
||||
232: Label
|
||||
237: 214(bool) Phi 230 224 236 231
|
||||
Store 216(b) 237
|
||||
238: 214(bool) Load 216(b)
|
||||
SelectionMerge 240 None
|
||||
BranchConditional 238 239 240
|
||||
239: Label
|
||||
241: 7(fvec4) Load 9(v)
|
||||
242: 7(fvec4) Load 11(uv4)
|
||||
243: 219(bvec4) FOrdGreaterThanEqual 241 242
|
||||
244: 214(bool) Any 243
|
||||
Branch 240
|
||||
240: Label
|
||||
245: 214(bool) Phi 238 232 244 239
|
||||
Store 216(b) 245
|
||||
246: 214(bool) Load 216(b)
|
||||
SelectionMerge 248 None
|
||||
BranchConditional 246 247 248
|
||||
247: Label
|
||||
251: 219(bvec4) Load 250(ub41)
|
||||
253: 219(bvec4) Load 252(ub42)
|
||||
254: 219(bvec4) IEqual 251 253
|
||||
255: 214(bool) Any 254
|
||||
Branch 248
|
||||
248: Label
|
||||
256: 214(bool) Phi 246 240 255 247
|
||||
Store 216(b) 256
|
||||
257: 214(bool) Load 216(b)
|
||||
SelectionMerge 259 None
|
||||
BranchConditional 257 258 259
|
||||
258: Label
|
||||
260: 219(bvec4) Load 250(ub41)
|
||||
261: 219(bvec4) Load 252(ub42)
|
||||
262: 219(bvec4) INotEqual 260 261
|
||||
263: 214(bool) Any 262
|
||||
Branch 259
|
||||
259: Label
|
||||
264: 214(bool) Phi 257 248 263 258
|
||||
Store 216(b) 264
|
||||
265: 214(bool) Load 216(b)
|
||||
266: 219(bvec4) Load 250(ub41)
|
||||
267: 214(bool) Any 266
|
||||
268: 214(bool) LogicalAnd 265 267
|
||||
Store 216(b) 268
|
||||
269: 214(bool) Load 216(b)
|
||||
270: 219(bvec4) Load 250(ub41)
|
||||
271: 214(bool) All 270
|
||||
272: 214(bool) LogicalAnd 269 271
|
||||
Store 216(b) 272
|
||||
273: 214(bool) Load 216(b)
|
||||
SelectionMerge 275 None
|
||||
BranchConditional 273 274 275
|
||||
274: Label
|
||||
276: 219(bvec4) Load 250(ub41)
|
||||
277: 219(bvec4) LogicalNot 276
|
||||
278: 214(bool) Any 277
|
||||
Branch 275
|
||||
275: Label
|
||||
279: 214(bool) Phi 273 259 278 274
|
||||
Store 216(b) 279
|
||||
280: 18(int) Load 20(i)
|
||||
281: 18(int) Load 22(ui)
|
||||
282: 214(bool) IEqual 280 281
|
||||
282: 18(int) IAdd 280 281
|
||||
283: 18(int) Load 20(i)
|
||||
284: 18(int) Load 22(ui)
|
||||
285: 214(bool) INotEqual 283 284
|
||||
286: 18(int) Load 20(i)
|
||||
287: 18(int) Load 22(ui)
|
||||
288: 214(bool) IEqual 286 287
|
||||
289: 214(bool) LogicalAnd 285 288
|
||||
290: 18(int) Load 20(i)
|
||||
292: 214(bool) INotEqual 290 291
|
||||
293: 214(bool) LogicalNotEqual 289 292
|
||||
294: 214(bool) LogicalOr 282 293
|
||||
SelectionMerge 296 None
|
||||
BranchConditional 294 295 296
|
||||
295: Label
|
||||
297: 18(int) Load 20(i)
|
||||
299: 18(int) IAdd 297 298
|
||||
Store 20(i) 299
|
||||
Branch 296
|
||||
296: Label
|
||||
302: 6(float) Load 169(uf)
|
||||
303: 6(float) Load 169(uf)
|
||||
304: 6(float) FAdd 302 303
|
||||
305: 6(float) Load 169(uf)
|
||||
306: 6(float) FMul 304 305
|
||||
307: 6(float) Load 169(uf)
|
||||
308: 6(float) FSub 306 307
|
||||
309: 6(float) Load 169(uf)
|
||||
310: 6(float) FDiv 308 309
|
||||
Store 301(f) 310
|
||||
311: 7(fvec4) Load 9(v)
|
||||
312: 6(float) ExtInst 1(GLSL.std.450) 65(Length) 311
|
||||
313: 6(float) Load 301(f)
|
||||
314: 6(float) FAdd 313 312
|
||||
Store 301(f) 314
|
||||
315: 7(fvec4) Load 9(v)
|
||||
316: 7(fvec4) Load 9(v)
|
||||
317: 6(float) ExtInst 1(GLSL.std.450) 66(Distance) 315 316
|
||||
318: 6(float) Load 301(f)
|
||||
319: 6(float) FAdd 318 317
|
||||
Store 301(f) 319
|
||||
320: 7(fvec4) Load 9(v)
|
||||
321: 7(fvec4) Load 9(v)
|
||||
322: 6(float) Dot 320 321
|
||||
323: 6(float) Load 301(f)
|
||||
324: 6(float) FAdd 323 322
|
||||
Store 301(f) 324
|
||||
325: 6(float) Load 301(f)
|
||||
326: 6(float) Load 169(uf)
|
||||
327: 6(float) FMul 325 326
|
||||
328: 6(float) Load 301(f)
|
||||
284: 18(int) IMul 282 283
|
||||
285: 18(int) Load 22(ui)
|
||||
286: 18(int) ISub 284 285
|
||||
287: 18(int) Load 20(i)
|
||||
288: 18(int) SDiv 286 287
|
||||
Store 20(i) 288
|
||||
289: 18(int) Load 20(i)
|
||||
290: 18(int) Load 22(ui)
|
||||
291: 18(int) SMod 289 290
|
||||
Store 20(i) 291
|
||||
292: 18(int) Load 20(i)
|
||||
293: 18(int) Load 22(ui)
|
||||
294: 214(bool) IEqual 292 293
|
||||
295: 214(bool) LogicalNot 294
|
||||
SelectionMerge 297 None
|
||||
BranchConditional 295 296 297
|
||||
296: Label
|
||||
298: 18(int) Load 20(i)
|
||||
299: 18(int) Load 22(ui)
|
||||
300: 214(bool) INotEqual 298 299
|
||||
301: 18(int) Load 20(i)
|
||||
302: 18(int) Load 22(ui)
|
||||
303: 214(bool) IEqual 301 302
|
||||
304: 214(bool) LogicalAnd 300 303
|
||||
305: 18(int) Load 20(i)
|
||||
307: 214(bool) INotEqual 305 306
|
||||
308: 214(bool) LogicalNotEqual 304 307
|
||||
Branch 297
|
||||
297: Label
|
||||
309: 214(bool) Phi 294 275 308 296
|
||||
SelectionMerge 311 None
|
||||
BranchConditional 309 310 311
|
||||
310: Label
|
||||
312: 18(int) Load 20(i)
|
||||
314: 18(int) IAdd 312 313
|
||||
Store 20(i) 314
|
||||
Branch 311
|
||||
311: Label
|
||||
317: 6(float) Load 169(uf)
|
||||
318: 6(float) Load 169(uf)
|
||||
319: 6(float) FAdd 317 318
|
||||
320: 6(float) Load 169(uf)
|
||||
321: 6(float) FMul 319 320
|
||||
322: 6(float) Load 169(uf)
|
||||
323: 6(float) FSub 321 322
|
||||
324: 6(float) Load 169(uf)
|
||||
325: 6(float) FDiv 323 324
|
||||
Store 316(f) 325
|
||||
326: 7(fvec4) Load 9(v)
|
||||
327: 6(float) ExtInst 1(GLSL.std.450) 65(Length) 326
|
||||
328: 6(float) Load 316(f)
|
||||
329: 6(float) FAdd 328 327
|
||||
Store 301(f) 329
|
||||
Store 316(f) 329
|
||||
330: 7(fvec4) Load 9(v)
|
||||
331: 7(fvec4) Load 9(v)
|
||||
332: 330(fvec3) VectorShuffle 331 331 0 1 2
|
||||
333: 7(fvec4) Load 9(v)
|
||||
334: 330(fvec3) VectorShuffle 333 333 0 1 2
|
||||
335: 330(fvec3) ExtInst 1(GLSL.std.450) 67(Cross) 332 334
|
||||
336: 6(float) CompositeExtract 335 0
|
||||
337: 6(float) Load 301(f)
|
||||
338: 6(float) FAdd 337 336
|
||||
Store 301(f) 338
|
||||
339: 6(float) Load 301(f)
|
||||
340: 6(float) Load 169(uf)
|
||||
341: 214(bool) FOrdEqual 339 340
|
||||
342: 6(float) Load 301(f)
|
||||
343: 6(float) Load 169(uf)
|
||||
344: 214(bool) FOrdNotEqual 342 343
|
||||
345: 6(float) Load 301(f)
|
||||
347: 214(bool) FOrdNotEqual 345 346
|
||||
348: 214(bool) LogicalAnd 344 347
|
||||
349: 214(bool) LogicalOr 341 348
|
||||
SelectionMerge 351 None
|
||||
BranchConditional 349 350 351
|
||||
350: Label
|
||||
352: 6(float) Load 301(f)
|
||||
354: 6(float) FAdd 352 353
|
||||
Store 301(f) 354
|
||||
Branch 351
|
||||
351: Label
|
||||
355: 18(int) Load 22(ui)
|
||||
356: 18(int) Load 20(i)
|
||||
357: 18(int) BitwiseAnd 356 355
|
||||
Store 20(i) 357
|
||||
359: 18(int) Load 20(i)
|
||||
360: 18(int) BitwiseOr 359 358
|
||||
Store 20(i) 360
|
||||
361: 18(int) Load 22(ui)
|
||||
362: 18(int) Load 20(i)
|
||||
363: 18(int) BitwiseXor 362 361
|
||||
Store 20(i) 363
|
||||
365: 18(int) Load 20(i)
|
||||
366: 18(int) SMod 365 364
|
||||
Store 20(i) 366
|
||||
367: 18(int) Load 20(i)
|
||||
368: 18(int) ShiftRightArithmetic 367 291
|
||||
Store 20(i) 368
|
||||
369: 18(int) Load 22(ui)
|
||||
370: 18(int) Load 20(i)
|
||||
371: 18(int) ShiftLeftLogical 370 369
|
||||
Store 20(i) 371
|
||||
372: 18(int) Load 20(i)
|
||||
373: 18(int) Not 372
|
||||
Store 20(i) 373
|
||||
374: 214(bool) Load 216(b)
|
||||
375: 214(bool) LogicalNot 374
|
||||
Store 216(b) 375
|
||||
379: 214(bool) Load 216(b)
|
||||
SelectionMerge 381 None
|
||||
BranchConditional 379 380 390
|
||||
380: Label
|
||||
382: 18(int) Load 20(i)
|
||||
383: 6(float) ConvertSToF 382
|
||||
384: 7(fvec4) CompositeConstruct 383 383 383 383
|
||||
385: 6(float) Load 301(f)
|
||||
386: 7(fvec4) CompositeConstruct 385 385 385 385
|
||||
387: 7(fvec4) FAdd 384 386
|
||||
388: 7(fvec4) Load 9(v)
|
||||
389: 7(fvec4) FAdd 387 388
|
||||
Store 378 389
|
||||
Branch 381
|
||||
390: Label
|
||||
391: 7(fvec4) Load 9(v)
|
||||
Store 378 391
|
||||
Branch 381
|
||||
381: Label
|
||||
392: 7(fvec4) Load 378
|
||||
Store 377(gl_FragColor) 392
|
||||
332: 6(float) ExtInst 1(GLSL.std.450) 66(Distance) 330 331
|
||||
333: 6(float) Load 316(f)
|
||||
334: 6(float) FAdd 333 332
|
||||
Store 316(f) 334
|
||||
335: 7(fvec4) Load 9(v)
|
||||
336: 7(fvec4) Load 9(v)
|
||||
337: 6(float) Dot 335 336
|
||||
338: 6(float) Load 316(f)
|
||||
339: 6(float) FAdd 338 337
|
||||
Store 316(f) 339
|
||||
340: 6(float) Load 316(f)
|
||||
341: 6(float) Load 169(uf)
|
||||
342: 6(float) FMul 340 341
|
||||
343: 6(float) Load 316(f)
|
||||
344: 6(float) FAdd 343 342
|
||||
Store 316(f) 344
|
||||
346: 7(fvec4) Load 9(v)
|
||||
347: 345(fvec3) VectorShuffle 346 346 0 1 2
|
||||
348: 7(fvec4) Load 9(v)
|
||||
349: 345(fvec3) VectorShuffle 348 348 0 1 2
|
||||
350: 345(fvec3) ExtInst 1(GLSL.std.450) 67(Cross) 347 349
|
||||
351: 6(float) CompositeExtract 350 0
|
||||
352: 6(float) Load 316(f)
|
||||
353: 6(float) FAdd 352 351
|
||||
Store 316(f) 353
|
||||
354: 6(float) Load 316(f)
|
||||
355: 6(float) Load 169(uf)
|
||||
356: 214(bool) FOrdEqual 354 355
|
||||
357: 214(bool) LogicalNot 356
|
||||
SelectionMerge 359 None
|
||||
BranchConditional 357 358 359
|
||||
358: Label
|
||||
360: 6(float) Load 316(f)
|
||||
361: 6(float) Load 169(uf)
|
||||
362: 214(bool) FOrdNotEqual 360 361
|
||||
363: 6(float) Load 316(f)
|
||||
365: 214(bool) FOrdNotEqual 363 364
|
||||
366: 214(bool) LogicalAnd 362 365
|
||||
Branch 359
|
||||
359: Label
|
||||
367: 214(bool) Phi 356 311 366 358
|
||||
SelectionMerge 369 None
|
||||
BranchConditional 367 368 369
|
||||
368: Label
|
||||
370: 6(float) Load 316(f)
|
||||
372: 6(float) FAdd 370 371
|
||||
Store 316(f) 372
|
||||
Branch 369
|
||||
369: Label
|
||||
373: 18(int) Load 22(ui)
|
||||
374: 18(int) Load 20(i)
|
||||
375: 18(int) BitwiseAnd 374 373
|
||||
Store 20(i) 375
|
||||
377: 18(int) Load 20(i)
|
||||
378: 18(int) BitwiseOr 377 376
|
||||
Store 20(i) 378
|
||||
379: 18(int) Load 22(ui)
|
||||
380: 18(int) Load 20(i)
|
||||
381: 18(int) BitwiseXor 380 379
|
||||
Store 20(i) 381
|
||||
383: 18(int) Load 20(i)
|
||||
384: 18(int) SMod 383 382
|
||||
Store 20(i) 384
|
||||
385: 18(int) Load 20(i)
|
||||
386: 18(int) ShiftRightArithmetic 385 306
|
||||
Store 20(i) 386
|
||||
387: 18(int) Load 22(ui)
|
||||
388: 18(int) Load 20(i)
|
||||
389: 18(int) ShiftLeftLogical 388 387
|
||||
Store 20(i) 389
|
||||
390: 18(int) Load 20(i)
|
||||
391: 18(int) Not 390
|
||||
Store 20(i) 391
|
||||
392: 214(bool) Load 216(b)
|
||||
393: 214(bool) LogicalNot 392
|
||||
Store 216(b) 393
|
||||
397: 214(bool) Load 216(b)
|
||||
SelectionMerge 399 None
|
||||
BranchConditional 397 398 408
|
||||
398: Label
|
||||
400: 18(int) Load 20(i)
|
||||
401: 6(float) ConvertSToF 400
|
||||
402: 7(fvec4) CompositeConstruct 401 401 401 401
|
||||
403: 6(float) Load 316(f)
|
||||
404: 7(fvec4) CompositeConstruct 403 403 403 403
|
||||
405: 7(fvec4) FAdd 402 404
|
||||
406: 7(fvec4) Load 9(v)
|
||||
407: 7(fvec4) FAdd 405 406
|
||||
Store 396 407
|
||||
Branch 399
|
||||
408: Label
|
||||
409: 7(fvec4) Load 9(v)
|
||||
Store 396 409
|
||||
Branch 399
|
||||
399: Label
|
||||
410: 7(fvec4) Load 396
|
||||
Store 395(gl_FragColor) 410
|
||||
Return
|
||||
FunctionEnd
|
||||
|
|
|
@ -5,7 +5,7 @@ Linked fragment stage:
|
|||
|
||||
// Module Version 99
|
||||
// Generated by (magic number): 51a00bb
|
||||
// Id's are bound by 443
|
||||
// Id's are bound by 452
|
||||
|
||||
Source GLSL 130
|
||||
Capability Shader
|
||||
|
@ -34,50 +34,50 @@ Linked fragment stage:
|
|||
Name 114 "f3"
|
||||
Name 118 "f4"
|
||||
Name 157 "i_i4"
|
||||
Name 312 "gl_FragColor"
|
||||
Name 405 "cv2"
|
||||
Name 406 "cv5"
|
||||
Name 416 "u_b"
|
||||
Name 418 "u_b2"
|
||||
Name 420 "u_b3"
|
||||
Name 422 "u_b4"
|
||||
Name 424 "u_i2"
|
||||
Name 426 "u_i3"
|
||||
Name 428 "u_i4"
|
||||
Name 429 "i_b"
|
||||
Name 430 "i_b2"
|
||||
Name 431 "i_b3"
|
||||
Name 432 "i_b4"
|
||||
Name 434 "i_i2"
|
||||
Name 436 "i_i3"
|
||||
Name 438 "i_f2"
|
||||
Name 440 "i_f3"
|
||||
Name 442 "i_f4"
|
||||
Name 321 "gl_FragColor"
|
||||
Name 414 "cv2"
|
||||
Name 415 "cv5"
|
||||
Name 425 "u_b"
|
||||
Name 427 "u_b2"
|
||||
Name 429 "u_b3"
|
||||
Name 431 "u_b4"
|
||||
Name 433 "u_i2"
|
||||
Name 435 "u_i3"
|
||||
Name 437 "u_i4"
|
||||
Name 438 "i_b"
|
||||
Name 439 "i_b2"
|
||||
Name 440 "i_b3"
|
||||
Name 441 "i_b4"
|
||||
Name 443 "i_i2"
|
||||
Name 445 "i_i3"
|
||||
Name 447 "i_f2"
|
||||
Name 449 "i_f3"
|
||||
Name 451 "i_f4"
|
||||
Decorate 39(i_i) Flat
|
||||
Decorate 53(i_f) Smooth
|
||||
Decorate 157(i_i4) Flat
|
||||
Decorate 312(gl_FragColor) BuiltIn FragColor
|
||||
Decorate 416(u_b) NoStaticUse
|
||||
Decorate 418(u_b2) NoStaticUse
|
||||
Decorate 420(u_b3) NoStaticUse
|
||||
Decorate 422(u_b4) NoStaticUse
|
||||
Decorate 424(u_i2) NoStaticUse
|
||||
Decorate 426(u_i3) NoStaticUse
|
||||
Decorate 428(u_i4) NoStaticUse
|
||||
Decorate 429(i_b) NoStaticUse
|
||||
Decorate 430(i_b2) NoStaticUse
|
||||
Decorate 431(i_b3) NoStaticUse
|
||||
Decorate 432(i_b4) NoStaticUse
|
||||
Decorate 434(i_i2) Flat
|
||||
Decorate 434(i_i2) NoStaticUse
|
||||
Decorate 436(i_i3) Flat
|
||||
Decorate 436(i_i3) NoStaticUse
|
||||
Decorate 438(i_f2) Smooth
|
||||
Decorate 438(i_f2) NoStaticUse
|
||||
Decorate 440(i_f3) Smooth
|
||||
Decorate 440(i_f3) NoStaticUse
|
||||
Decorate 442(i_f4) Smooth
|
||||
Decorate 442(i_f4) NoStaticUse
|
||||
Decorate 321(gl_FragColor) BuiltIn FragColor
|
||||
Decorate 425(u_b) NoStaticUse
|
||||
Decorate 427(u_b2) NoStaticUse
|
||||
Decorate 429(u_b3) NoStaticUse
|
||||
Decorate 431(u_b4) NoStaticUse
|
||||
Decorate 433(u_i2) NoStaticUse
|
||||
Decorate 435(u_i3) NoStaticUse
|
||||
Decorate 437(u_i4) NoStaticUse
|
||||
Decorate 438(i_b) NoStaticUse
|
||||
Decorate 439(i_b2) NoStaticUse
|
||||
Decorate 440(i_b3) NoStaticUse
|
||||
Decorate 441(i_b4) NoStaticUse
|
||||
Decorate 443(i_i2) Flat
|
||||
Decorate 443(i_i2) NoStaticUse
|
||||
Decorate 445(i_i3) Flat
|
||||
Decorate 445(i_i3) NoStaticUse
|
||||
Decorate 447(i_f2) Smooth
|
||||
Decorate 447(i_f2) NoStaticUse
|
||||
Decorate 449(i_f3) Smooth
|
||||
Decorate 449(i_f3) NoStaticUse
|
||||
Decorate 451(i_f4) Smooth
|
||||
Decorate 451(i_f4) NoStaticUse
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeBool
|
||||
|
@ -140,36 +140,36 @@ Linked fragment stage:
|
|||
157(i_i4): 156(ptr) Variable Input
|
||||
159: TypeVector 13(int) 4
|
||||
160: 159(ivec4) ConstantComposite 14 14 14 14
|
||||
311: TypePointer Output 95(fvec4)
|
||||
312(gl_FragColor): 311(ptr) Variable Output
|
||||
415: TypePointer UniformConstant 6(bool)
|
||||
416(u_b): 415(ptr) Variable UniformConstant
|
||||
417: TypePointer UniformConstant 23(bvec2)
|
||||
418(u_b2): 417(ptr) Variable UniformConstant
|
||||
419: TypePointer UniformConstant 31(bvec3)
|
||||
420(u_b3): 419(ptr) Variable UniformConstant
|
||||
421: TypePointer UniformConstant 43(bvec4)
|
||||
422(u_b4): 421(ptr) Variable UniformConstant
|
||||
423: TypePointer UniformConstant 66(ivec2)
|
||||
424(u_i2): 423(ptr) Variable UniformConstant
|
||||
425: TypePointer UniformConstant 79(ivec3)
|
||||
426(u_i3): 425(ptr) Variable UniformConstant
|
||||
427: TypePointer UniformConstant 92(ivec4)
|
||||
428(u_i4): 427(ptr) Variable UniformConstant
|
||||
429(i_b): 415(ptr) Variable UniformConstant
|
||||
430(i_b2): 417(ptr) Variable UniformConstant
|
||||
431(i_b3): 419(ptr) Variable UniformConstant
|
||||
432(i_b4): 421(ptr) Variable UniformConstant
|
||||
433: TypePointer Input 66(ivec2)
|
||||
434(i_i2): 433(ptr) Variable Input
|
||||
435: TypePointer Input 79(ivec3)
|
||||
436(i_i3): 435(ptr) Variable Input
|
||||
437: TypePointer Input 69(fvec2)
|
||||
438(i_f2): 437(ptr) Variable Input
|
||||
439: TypePointer Input 82(fvec3)
|
||||
440(i_f3): 439(ptr) Variable Input
|
||||
441: TypePointer Input 95(fvec4)
|
||||
442(i_f4): 441(ptr) Variable Input
|
||||
320: TypePointer Output 95(fvec4)
|
||||
321(gl_FragColor): 320(ptr) Variable Output
|
||||
424: TypePointer UniformConstant 6(bool)
|
||||
425(u_b): 424(ptr) Variable UniformConstant
|
||||
426: TypePointer UniformConstant 23(bvec2)
|
||||
427(u_b2): 426(ptr) Variable UniformConstant
|
||||
428: TypePointer UniformConstant 31(bvec3)
|
||||
429(u_b3): 428(ptr) Variable UniformConstant
|
||||
430: TypePointer UniformConstant 43(bvec4)
|
||||
431(u_b4): 430(ptr) Variable UniformConstant
|
||||
432: TypePointer UniformConstant 66(ivec2)
|
||||
433(u_i2): 432(ptr) Variable UniformConstant
|
||||
434: TypePointer UniformConstant 79(ivec3)
|
||||
435(u_i3): 434(ptr) Variable UniformConstant
|
||||
436: TypePointer UniformConstant 92(ivec4)
|
||||
437(u_i4): 436(ptr) Variable UniformConstant
|
||||
438(i_b): 424(ptr) Variable UniformConstant
|
||||
439(i_b2): 426(ptr) Variable UniformConstant
|
||||
440(i_b3): 428(ptr) Variable UniformConstant
|
||||
441(i_b4): 430(ptr) Variable UniformConstant
|
||||
442: TypePointer Input 66(ivec2)
|
||||
443(i_i2): 442(ptr) Variable Input
|
||||
444: TypePointer Input 79(ivec3)
|
||||
445(i_i3): 444(ptr) Variable Input
|
||||
446: TypePointer Input 69(fvec2)
|
||||
447(i_f2): 446(ptr) Variable Input
|
||||
448: TypePointer Input 82(fvec3)
|
||||
449(i_f3): 448(ptr) Variable Input
|
||||
450: TypePointer Input 95(fvec4)
|
||||
451(i_f4): 450(ptr) Variable Input
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
8(b): 7(ptr) Variable Function
|
||||
|
@ -184,11 +184,11 @@ Linked fragment stage:
|
|||
110(f2): 109(ptr) Variable Function
|
||||
114(f3): 113(ptr) Variable Function
|
||||
118(f4): 117(ptr) Variable Function
|
||||
288: 105(ptr) Variable Function
|
||||
298: 105(ptr) Variable Function
|
||||
313: 117(ptr) Variable Function
|
||||
405(cv2): 93(ptr) Variable Function
|
||||
406(cv5): 44(ptr) Variable Function
|
||||
297: 105(ptr) Variable Function
|
||||
307: 105(ptr) Variable Function
|
||||
322: 117(ptr) Variable Function
|
||||
414(cv2): 93(ptr) Variable Function
|
||||
415(cv5): 44(ptr) Variable Function
|
||||
12: 9(int) Load 11(u_i)
|
||||
15: 6(bool) INotEqual 12 14
|
||||
19: 16(float) Load 18(u_f)
|
||||
|
@ -408,170 +408,188 @@ Linked fragment stage:
|
|||
266: 9(int) Load 58(i)
|
||||
267: 16(float) ConvertSToF 266
|
||||
268: 6(bool) FOrdLessThan 265 267
|
||||
269: 9(int) Load 58(i)
|
||||
270: 16(float) ConvertSToF 269
|
||||
271: 16(float) Load 106(f)
|
||||
272: 6(bool) FOrdLessThan 270 271
|
||||
273: 6(bool) LogicalOr 268 272
|
||||
274: 69(fvec2) Load 110(f2)
|
||||
275: 66(ivec2) Load 68(i2)
|
||||
276: 69(fvec2) ConvertSToF 275
|
||||
277: 23(bvec2) FOrdEqual 274 276
|
||||
278: 6(bool) All 277
|
||||
279: 6(bool) LogicalOr 273 278
|
||||
280: 79(ivec3) Load 81(i3)
|
||||
281: 82(fvec3) ConvertSToF 280
|
||||
282: 82(fvec3) Load 114(f3)
|
||||
283: 31(bvec3) FOrdNotEqual 281 282
|
||||
284: 6(bool) Any 283
|
||||
285: 6(bool) LogicalOr 279 284
|
||||
SelectionMerge 287 None
|
||||
BranchConditional 285 286 287
|
||||
286: Label
|
||||
289: 6(bool) Load 8(b)
|
||||
SelectionMerge 291 None
|
||||
BranchConditional 289 290 294
|
||||
290: Label
|
||||
292: 9(int) Load 58(i)
|
||||
293: 16(float) ConvertSToF 292
|
||||
Store 288 293
|
||||
Branch 291
|
||||
294: Label
|
||||
295: 69(fvec2) Load 110(f2)
|
||||
296: 16(float) CompositeExtract 295 0
|
||||
Store 288 296
|
||||
Branch 291
|
||||
291: Label
|
||||
297: 16(float) Load 288
|
||||
299: 23(bvec2) Load 25(b2)
|
||||
300: 6(bool) CompositeExtract 299 0
|
||||
SelectionMerge 302 None
|
||||
BranchConditional 300 301 305
|
||||
301: Label
|
||||
303: 82(fvec3) Load 114(f3)
|
||||
304: 16(float) CompositeExtract 303 0
|
||||
Store 298 304
|
||||
Branch 302
|
||||
305: Label
|
||||
306: 66(ivec2) Load 68(i2)
|
||||
307: 9(int) CompositeExtract 306 1
|
||||
308: 16(float) ConvertSToF 307
|
||||
Store 298 308
|
||||
Branch 302
|
||||
302: Label
|
||||
309: 16(float) Load 298
|
||||
310: 16(float) FAdd 297 309
|
||||
Store 106(f) 310
|
||||
Branch 287
|
||||
287: Label
|
||||
314: 6(bool) Load 8(b)
|
||||
315: 23(bvec2) Load 25(b2)
|
||||
316: 6(bool) CompositeExtract 315 0
|
||||
317: 6(bool) LogicalOr 314 316
|
||||
318: 23(bvec2) Load 25(b2)
|
||||
319: 6(bool) CompositeExtract 318 1
|
||||
320: 6(bool) LogicalOr 317 319
|
||||
321: 31(bvec3) Load 33(b3)
|
||||
322: 6(bool) CompositeExtract 321 0
|
||||
323: 6(bool) LogicalOr 320 322
|
||||
324: 31(bvec3) Load 33(b3)
|
||||
325: 6(bool) CompositeExtract 324 1
|
||||
269: 6(bool) LogicalNot 268
|
||||
SelectionMerge 271 None
|
||||
BranchConditional 269 270 271
|
||||
270: Label
|
||||
272: 9(int) Load 58(i)
|
||||
273: 16(float) ConvertSToF 272
|
||||
274: 16(float) Load 106(f)
|
||||
275: 6(bool) FOrdLessThan 273 274
|
||||
Branch 271
|
||||
271: Label
|
||||
276: 6(bool) Phi 268 5 275 270
|
||||
277: 6(bool) LogicalNot 276
|
||||
SelectionMerge 279 None
|
||||
BranchConditional 277 278 279
|
||||
278: Label
|
||||
280: 69(fvec2) Load 110(f2)
|
||||
281: 66(ivec2) Load 68(i2)
|
||||
282: 69(fvec2) ConvertSToF 281
|
||||
283: 23(bvec2) FOrdEqual 280 282
|
||||
284: 6(bool) All 283
|
||||
Branch 279
|
||||
279: Label
|
||||
285: 6(bool) Phi 276 271 284 278
|
||||
286: 6(bool) LogicalNot 285
|
||||
SelectionMerge 288 None
|
||||
BranchConditional 286 287 288
|
||||
287: Label
|
||||
289: 79(ivec3) Load 81(i3)
|
||||
290: 82(fvec3) ConvertSToF 289
|
||||
291: 82(fvec3) Load 114(f3)
|
||||
292: 31(bvec3) FOrdNotEqual 290 291
|
||||
293: 6(bool) Any 292
|
||||
Branch 288
|
||||
288: Label
|
||||
294: 6(bool) Phi 285 279 293 287
|
||||
SelectionMerge 296 None
|
||||
BranchConditional 294 295 296
|
||||
295: Label
|
||||
298: 6(bool) Load 8(b)
|
||||
SelectionMerge 300 None
|
||||
BranchConditional 298 299 303
|
||||
299: Label
|
||||
301: 9(int) Load 58(i)
|
||||
302: 16(float) ConvertSToF 301
|
||||
Store 297 302
|
||||
Branch 300
|
||||
303: Label
|
||||
304: 69(fvec2) Load 110(f2)
|
||||
305: 16(float) CompositeExtract 304 0
|
||||
Store 297 305
|
||||
Branch 300
|
||||
300: Label
|
||||
306: 16(float) Load 297
|
||||
308: 23(bvec2) Load 25(b2)
|
||||
309: 6(bool) CompositeExtract 308 0
|
||||
SelectionMerge 311 None
|
||||
BranchConditional 309 310 314
|
||||
310: Label
|
||||
312: 82(fvec3) Load 114(f3)
|
||||
313: 16(float) CompositeExtract 312 0
|
||||
Store 307 313
|
||||
Branch 311
|
||||
314: Label
|
||||
315: 66(ivec2) Load 68(i2)
|
||||
316: 9(int) CompositeExtract 315 1
|
||||
317: 16(float) ConvertSToF 316
|
||||
Store 307 317
|
||||
Branch 311
|
||||
311: Label
|
||||
318: 16(float) Load 307
|
||||
319: 16(float) FAdd 306 318
|
||||
Store 106(f) 319
|
||||
Branch 296
|
||||
296: Label
|
||||
323: 6(bool) Load 8(b)
|
||||
324: 23(bvec2) Load 25(b2)
|
||||
325: 6(bool) CompositeExtract 324 0
|
||||
326: 6(bool) LogicalOr 323 325
|
||||
327: 31(bvec3) Load 33(b3)
|
||||
328: 6(bool) CompositeExtract 327 2
|
||||
327: 23(bvec2) Load 25(b2)
|
||||
328: 6(bool) CompositeExtract 327 1
|
||||
329: 6(bool) LogicalOr 326 328
|
||||
330: 43(bvec4) Load 45(b4)
|
||||
330: 31(bvec3) Load 33(b3)
|
||||
331: 6(bool) CompositeExtract 330 0
|
||||
332: 6(bool) LogicalOr 329 331
|
||||
333: 43(bvec4) Load 45(b4)
|
||||
333: 31(bvec3) Load 33(b3)
|
||||
334: 6(bool) CompositeExtract 333 1
|
||||
335: 6(bool) LogicalOr 332 334
|
||||
336: 43(bvec4) Load 45(b4)
|
||||
336: 31(bvec3) Load 33(b3)
|
||||
337: 6(bool) CompositeExtract 336 2
|
||||
338: 6(bool) LogicalOr 335 337
|
||||
339: 43(bvec4) Load 45(b4)
|
||||
340: 6(bool) CompositeExtract 339 3
|
||||
340: 6(bool) CompositeExtract 339 0
|
||||
341: 6(bool) LogicalOr 338 340
|
||||
SelectionMerge 343 None
|
||||
BranchConditional 341 342 403
|
||||
342: Label
|
||||
344: 9(int) Load 58(i)
|
||||
345: 66(ivec2) Load 68(i2)
|
||||
346: 9(int) CompositeExtract 345 0
|
||||
347: 9(int) IAdd 344 346
|
||||
348: 66(ivec2) Load 68(i2)
|
||||
349: 9(int) CompositeExtract 348 1
|
||||
350: 9(int) IAdd 347 349
|
||||
351: 79(ivec3) Load 81(i3)
|
||||
352: 9(int) CompositeExtract 351 0
|
||||
353: 9(int) IAdd 350 352
|
||||
354: 79(ivec3) Load 81(i3)
|
||||
355: 9(int) CompositeExtract 354 1
|
||||
342: 43(bvec4) Load 45(b4)
|
||||
343: 6(bool) CompositeExtract 342 1
|
||||
344: 6(bool) LogicalOr 341 343
|
||||
345: 43(bvec4) Load 45(b4)
|
||||
346: 6(bool) CompositeExtract 345 2
|
||||
347: 6(bool) LogicalOr 344 346
|
||||
348: 43(bvec4) Load 45(b4)
|
||||
349: 6(bool) CompositeExtract 348 3
|
||||
350: 6(bool) LogicalOr 347 349
|
||||
SelectionMerge 352 None
|
||||
BranchConditional 350 351 412
|
||||
351: Label
|
||||
353: 9(int) Load 58(i)
|
||||
354: 66(ivec2) Load 68(i2)
|
||||
355: 9(int) CompositeExtract 354 0
|
||||
356: 9(int) IAdd 353 355
|
||||
357: 79(ivec3) Load 81(i3)
|
||||
358: 9(int) CompositeExtract 357 2
|
||||
357: 66(ivec2) Load 68(i2)
|
||||
358: 9(int) CompositeExtract 357 1
|
||||
359: 9(int) IAdd 356 358
|
||||
360: 92(ivec4) Load 94(i4)
|
||||
360: 79(ivec3) Load 81(i3)
|
||||
361: 9(int) CompositeExtract 360 0
|
||||
362: 9(int) IAdd 359 361
|
||||
363: 92(ivec4) Load 94(i4)
|
||||
363: 79(ivec3) Load 81(i3)
|
||||
364: 9(int) CompositeExtract 363 1
|
||||
365: 9(int) IAdd 362 364
|
||||
366: 92(ivec4) Load 94(i4)
|
||||
366: 79(ivec3) Load 81(i3)
|
||||
367: 9(int) CompositeExtract 366 2
|
||||
368: 9(int) IAdd 365 367
|
||||
369: 92(ivec4) Load 94(i4)
|
||||
370: 9(int) CompositeExtract 369 3
|
||||
370: 9(int) CompositeExtract 369 0
|
||||
371: 9(int) IAdd 368 370
|
||||
372: 16(float) ConvertSToF 371
|
||||
373: 16(float) Load 106(f)
|
||||
374: 16(float) FAdd 372 373
|
||||
375: 69(fvec2) Load 110(f2)
|
||||
376: 16(float) CompositeExtract 375 0
|
||||
377: 16(float) FAdd 374 376
|
||||
378: 69(fvec2) Load 110(f2)
|
||||
379: 16(float) CompositeExtract 378 1
|
||||
380: 16(float) FAdd 377 379
|
||||
381: 82(fvec3) Load 114(f3)
|
||||
382: 16(float) CompositeExtract 381 0
|
||||
383: 16(float) FAdd 380 382
|
||||
384: 82(fvec3) Load 114(f3)
|
||||
385: 16(float) CompositeExtract 384 1
|
||||
372: 92(ivec4) Load 94(i4)
|
||||
373: 9(int) CompositeExtract 372 1
|
||||
374: 9(int) IAdd 371 373
|
||||
375: 92(ivec4) Load 94(i4)
|
||||
376: 9(int) CompositeExtract 375 2
|
||||
377: 9(int) IAdd 374 376
|
||||
378: 92(ivec4) Load 94(i4)
|
||||
379: 9(int) CompositeExtract 378 3
|
||||
380: 9(int) IAdd 377 379
|
||||
381: 16(float) ConvertSToF 380
|
||||
382: 16(float) Load 106(f)
|
||||
383: 16(float) FAdd 381 382
|
||||
384: 69(fvec2) Load 110(f2)
|
||||
385: 16(float) CompositeExtract 384 0
|
||||
386: 16(float) FAdd 383 385
|
||||
387: 82(fvec3) Load 114(f3)
|
||||
388: 16(float) CompositeExtract 387 2
|
||||
387: 69(fvec2) Load 110(f2)
|
||||
388: 16(float) CompositeExtract 387 1
|
||||
389: 16(float) FAdd 386 388
|
||||
390: 95(fvec4) Load 118(f4)
|
||||
390: 82(fvec3) Load 114(f3)
|
||||
391: 16(float) CompositeExtract 390 0
|
||||
392: 16(float) FAdd 389 391
|
||||
393: 95(fvec4) Load 118(f4)
|
||||
393: 82(fvec3) Load 114(f3)
|
||||
394: 16(float) CompositeExtract 393 1
|
||||
395: 16(float) FAdd 392 394
|
||||
396: 95(fvec4) Load 118(f4)
|
||||
396: 82(fvec3) Load 114(f3)
|
||||
397: 16(float) CompositeExtract 396 2
|
||||
398: 16(float) FAdd 395 397
|
||||
399: 95(fvec4) Load 118(f4)
|
||||
400: 16(float) CompositeExtract 399 3
|
||||
400: 16(float) CompositeExtract 399 0
|
||||
401: 16(float) FAdd 398 400
|
||||
402: 95(fvec4) CompositeConstruct 401 401 401 401
|
||||
Store 313 402
|
||||
Branch 343
|
||||
403: Label
|
||||
Store 313 151
|
||||
Branch 343
|
||||
343: Label
|
||||
404: 95(fvec4) Load 313
|
||||
Store 312(gl_FragColor) 404
|
||||
Store 405(cv2) 102
|
||||
407: 92(ivec4) Load 405(cv2)
|
||||
408: 43(bvec4) INotEqual 407 160
|
||||
Store 406(cv5) 408
|
||||
409: 43(bvec4) Load 406(cv5)
|
||||
410: 95(fvec4) Select 409 151 150
|
||||
411: 16(float) CompositeExtract 410 0
|
||||
412: 95(fvec4) Load 312(gl_FragColor)
|
||||
413: 95(fvec4) CompositeConstruct 411 411 411 411
|
||||
414: 95(fvec4) FAdd 412 413
|
||||
Store 312(gl_FragColor) 414
|
||||
402: 95(fvec4) Load 118(f4)
|
||||
403: 16(float) CompositeExtract 402 1
|
||||
404: 16(float) FAdd 401 403
|
||||
405: 95(fvec4) Load 118(f4)
|
||||
406: 16(float) CompositeExtract 405 2
|
||||
407: 16(float) FAdd 404 406
|
||||
408: 95(fvec4) Load 118(f4)
|
||||
409: 16(float) CompositeExtract 408 3
|
||||
410: 16(float) FAdd 407 409
|
||||
411: 95(fvec4) CompositeConstruct 410 410 410 410
|
||||
Store 322 411
|
||||
Branch 352
|
||||
412: Label
|
||||
Store 322 151
|
||||
Branch 352
|
||||
352: Label
|
||||
413: 95(fvec4) Load 322
|
||||
Store 321(gl_FragColor) 413
|
||||
Store 414(cv2) 102
|
||||
416: 92(ivec4) Load 414(cv2)
|
||||
417: 43(bvec4) INotEqual 416 160
|
||||
Store 415(cv5) 417
|
||||
418: 43(bvec4) Load 415(cv5)
|
||||
419: 95(fvec4) Select 418 151 150
|
||||
420: 16(float) CompositeExtract 419 0
|
||||
421: 95(fvec4) Load 321(gl_FragColor)
|
||||
422: 95(fvec4) CompositeConstruct 420 420 420 420
|
||||
423: 95(fvec4) FAdd 421 422
|
||||
Store 321(gl_FragColor) 423
|
||||
Return
|
||||
FunctionEnd
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,237 @@
|
|||
spv.shortCircuit.frag
|
||||
Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
|
||||
|
||||
|
||||
Linked fragment stage:
|
||||
|
||||
|
||||
// Module Version 99
|
||||
// Generated by (magic number): 51a00bb
|
||||
// Id's are bound by 143
|
||||
|
||||
Source GLSL 400
|
||||
Capability Shader
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint Fragment 4 "main"
|
||||
ExecutionMode 4 OriginLowerLeft
|
||||
Name 4 "main"
|
||||
Name 8 "foo("
|
||||
Name 12 "of1"
|
||||
Name 23 "of4"
|
||||
Name 26 "ub"
|
||||
Name 30 "ui"
|
||||
Name 40 "uba"
|
||||
Name 109 "uf"
|
||||
Name 136 "uiv4"
|
||||
Name 138 "uv4"
|
||||
Name 141 "ub41"
|
||||
Name 142 "ub42"
|
||||
Decorate 136(uiv4) NoStaticUse
|
||||
Decorate 138(uv4) NoStaticUse
|
||||
Decorate 141(ub41) NoStaticUse
|
||||
Decorate 142(ub42) NoStaticUse
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeBool
|
||||
7: TypeFunction 6(bool)
|
||||
10: TypeFloat 32
|
||||
11: TypePointer Output 10(float)
|
||||
12(of1): 11(ptr) Variable Output
|
||||
14: 10(float) Constant 1065353216
|
||||
17: 10(float) Constant 1092616192
|
||||
20: 10(float) Constant 0
|
||||
21: TypeVector 10(float) 4
|
||||
22: TypePointer Output 21(fvec4)
|
||||
23(of4): 22(ptr) Variable Output
|
||||
24: 21(fvec4) ConstantComposite 20 20 20 20
|
||||
25: TypePointer UniformConstant 6(bool)
|
||||
26(ub): 25(ptr) Variable UniformConstant
|
||||
28: TypeInt 32 1
|
||||
29: TypePointer UniformConstant 28(int)
|
||||
30(ui): 29(ptr) Variable UniformConstant
|
||||
32: 28(int) Constant 2
|
||||
40(uba): 25(ptr) Variable UniformConstant
|
||||
108: TypePointer UniformConstant 10(float)
|
||||
109(uf): 108(ptr) Variable UniformConstant
|
||||
112: 10(float) Constant 1082130432
|
||||
134: TypeVector 28(int) 4
|
||||
135: TypePointer UniformConstant 134(ivec4)
|
||||
136(uiv4): 135(ptr) Variable UniformConstant
|
||||
137: TypePointer UniformConstant 21(fvec4)
|
||||
138(uv4): 137(ptr) Variable UniformConstant
|
||||
139: TypeVector 6(bool) 4
|
||||
140: TypePointer UniformConstant 139(bvec4)
|
||||
141(ub41): 140(ptr) Variable UniformConstant
|
||||
142(ub42): 140(ptr) Variable UniformConstant
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
Store 12(of1) 20
|
||||
Store 23(of4) 24
|
||||
27: 6(bool) Load 26(ub)
|
||||
31: 28(int) Load 30(ui)
|
||||
33: 6(bool) SGreaterThan 31 32
|
||||
34: 6(bool) LogicalOr 27 33
|
||||
SelectionMerge 36 None
|
||||
BranchConditional 34 35 36
|
||||
35: Label
|
||||
37: 10(float) Load 12(of1)
|
||||
38: 10(float) FAdd 37 14
|
||||
Store 12(of1) 38
|
||||
Branch 36
|
||||
36: Label
|
||||
39: 6(bool) Load 26(ub)
|
||||
41: 6(bool) Load 40(uba)
|
||||
42: 6(bool) LogicalNot 41
|
||||
43: 6(bool) LogicalAnd 39 42
|
||||
SelectionMerge 45 None
|
||||
BranchConditional 43 44 45
|
||||
44: Label
|
||||
46: 10(float) Load 12(of1)
|
||||
47: 10(float) FAdd 46 14
|
||||
Store 12(of1) 47
|
||||
Branch 45
|
||||
45: Label
|
||||
48: 6(bool) Load 26(ub)
|
||||
49: 6(bool) LogicalNot 48
|
||||
SelectionMerge 51 None
|
||||
BranchConditional 49 50 51
|
||||
50: Label
|
||||
52: 6(bool) FunctionCall 8(foo()
|
||||
Branch 51
|
||||
51: Label
|
||||
53: 6(bool) Phi 48 45 52 50
|
||||
SelectionMerge 55 None
|
||||
BranchConditional 53 54 55
|
||||
54: Label
|
||||
56: 10(float) Load 12(of1)
|
||||
57: 10(float) FAdd 56 14
|
||||
Store 12(of1) 57
|
||||
Branch 55
|
||||
55: Label
|
||||
58: 6(bool) Load 26(ub)
|
||||
SelectionMerge 60 None
|
||||
BranchConditional 58 59 60
|
||||
59: Label
|
||||
61: 6(bool) FunctionCall 8(foo()
|
||||
Branch 60
|
||||
60: Label
|
||||
62: 6(bool) Phi 58 55 61 59
|
||||
SelectionMerge 64 None
|
||||
BranchConditional 62 63 64
|
||||
63: Label
|
||||
65: 10(float) Load 12(of1)
|
||||
66: 10(float) FAdd 65 14
|
||||
Store 12(of1) 66
|
||||
Branch 64
|
||||
64: Label
|
||||
67: 6(bool) FunctionCall 8(foo()
|
||||
68: 6(bool) Load 26(ub)
|
||||
69: 6(bool) LogicalOr 67 68
|
||||
SelectionMerge 71 None
|
||||
BranchConditional 69 70 71
|
||||
70: Label
|
||||
72: 10(float) Load 12(of1)
|
||||
73: 10(float) FAdd 72 14
|
||||
Store 12(of1) 73
|
||||
Branch 71
|
||||
71: Label
|
||||
74: 6(bool) FunctionCall 8(foo()
|
||||
75: 6(bool) Load 26(ub)
|
||||
76: 6(bool) LogicalAnd 74 75
|
||||
SelectionMerge 78 None
|
||||
BranchConditional 76 77 78
|
||||
77: Label
|
||||
79: 10(float) Load 12(of1)
|
||||
80: 10(float) FAdd 79 14
|
||||
Store 12(of1) 80
|
||||
Branch 78
|
||||
78: Label
|
||||
81: 6(bool) Load 26(ub)
|
||||
82: 6(bool) LogicalNot 81
|
||||
SelectionMerge 84 None
|
||||
BranchConditional 82 83 84
|
||||
83: Label
|
||||
85: 10(float) Load 12(of1)
|
||||
86: 10(float) FAdd 85 14
|
||||
Store 12(of1) 86
|
||||
87: 6(bool) FOrdGreaterThan 86 14
|
||||
Branch 84
|
||||
84: Label
|
||||
88: 6(bool) Phi 81 78 87 83
|
||||
SelectionMerge 90 None
|
||||
BranchConditional 88 89 90
|
||||
89: Label
|
||||
91: 21(fvec4) Load 23(of4)
|
||||
92: 21(fvec4) CompositeConstruct 14 14 14 14
|
||||
93: 21(fvec4) FAdd 91 92
|
||||
Store 23(of4) 93
|
||||
Branch 90
|
||||
90: Label
|
||||
94: 10(float) Load 12(of1)
|
||||
95: 10(float) FAdd 94 14
|
||||
Store 12(of1) 95
|
||||
96: 6(bool) FOrdGreaterThan 95 14
|
||||
97: 6(bool) Load 26(ub)
|
||||
98: 6(bool) LogicalOr 96 97
|
||||
SelectionMerge 100 None
|
||||
BranchConditional 98 99 100
|
||||
99: Label
|
||||
101: 21(fvec4) Load 23(of4)
|
||||
102: 21(fvec4) CompositeConstruct 14 14 14 14
|
||||
103: 21(fvec4) FAdd 101 102
|
||||
Store 23(of4) 103
|
||||
Branch 100
|
||||
100: Label
|
||||
104: 6(bool) Load 26(ub)
|
||||
105: 6(bool) LogicalNot 104
|
||||
SelectionMerge 107 None
|
||||
BranchConditional 105 106 107
|
||||
106: Label
|
||||
110: 10(float) Load 109(uf)
|
||||
111: 10(float) ExtInst 1(GLSL.std.450) 13(Sin) 110
|
||||
113: 10(float) FMul 111 112
|
||||
114: 10(float) Load 12(of1)
|
||||
115: 6(bool) FOrdGreaterThan 113 114
|
||||
Branch 107
|
||||
107: Label
|
||||
116: 6(bool) Phi 104 100 115 106
|
||||
SelectionMerge 118 None
|
||||
BranchConditional 116 117 118
|
||||
117: Label
|
||||
119: 10(float) Load 12(of1)
|
||||
120: 10(float) FAdd 119 14
|
||||
Store 12(of1) 120
|
||||
Branch 118
|
||||
118: Label
|
||||
121: 6(bool) Load 26(ub)
|
||||
SelectionMerge 123 None
|
||||
BranchConditional 121 122 123
|
||||
122: Label
|
||||
124: 10(float) Load 109(uf)
|
||||
125: 10(float) ExtInst 1(GLSL.std.450) 13(Sin) 124
|
||||
126: 10(float) FMul 125 112
|
||||
127: 10(float) Load 12(of1)
|
||||
128: 6(bool) FOrdGreaterThan 126 127
|
||||
Branch 123
|
||||
123: Label
|
||||
129: 6(bool) Phi 121 118 128 122
|
||||
SelectionMerge 131 None
|
||||
BranchConditional 129 130 131
|
||||
130: Label
|
||||
132: 10(float) Load 12(of1)
|
||||
133: 10(float) FAdd 132 14
|
||||
Store 12(of1) 133
|
||||
Branch 131
|
||||
131: Label
|
||||
Return
|
||||
FunctionEnd
|
||||
8(foo(): 6(bool) Function None 7
|
||||
9: Label
|
||||
13: 10(float) Load 12(of1)
|
||||
15: 10(float) FAdd 13 14
|
||||
Store 12(of1) 15
|
||||
16: 10(float) Load 12(of1)
|
||||
18: 6(bool) FOrdGreaterThan 16 17
|
||||
ReturnValue 18
|
||||
FunctionEnd
|
|
@ -0,0 +1,50 @@
|
|||
#version 400
|
||||
|
||||
uniform ivec4 uiv4;
|
||||
uniform vec4 uv4;
|
||||
uniform bool ub;
|
||||
uniform bool uba;
|
||||
uniform bvec4 ub41, ub42;
|
||||
uniform float uf;
|
||||
uniform int ui;
|
||||
|
||||
out float of1;
|
||||
out vec4 of4;
|
||||
|
||||
bool foo() { ++of1; return of1 > 10.0; }
|
||||
|
||||
void main()
|
||||
{
|
||||
of1 = 0.0;
|
||||
of4 = vec4(0.0);
|
||||
|
||||
if (ub || ui > 2) // not worth short circuiting
|
||||
++of1;
|
||||
|
||||
if (ub && !uba) // not worth short circuiting
|
||||
++of1;
|
||||
|
||||
if (ub || foo()) // must short circuit
|
||||
++of1;
|
||||
|
||||
if (ub && foo()) // must short circuit
|
||||
++of1;
|
||||
|
||||
if (foo() || ub) // not worth short circuiting
|
||||
++of1;
|
||||
|
||||
if (foo() && ub) // not worth short circuiting
|
||||
++of1;
|
||||
|
||||
if (ub || ++of1 > 1.0) // must short circuit
|
||||
++of4;
|
||||
|
||||
if (++of1 > 1.0 || ub) // not worth short circuiting
|
||||
++of4;
|
||||
|
||||
if (ub || sin(uf) * 4.0 > of1) // worth short circuiting
|
||||
++of1;
|
||||
|
||||
if (ub && sin(uf) * 4.0 > of1) // worth short circuiting
|
||||
++of1;
|
||||
}
|
|
@ -82,3 +82,6 @@ spv.whileLoop.frag
|
|||
spv.atomic.comp
|
||||
spv.AofA.frag
|
||||
spv.queryL.frag
|
||||
spv.shortCircuit.frag
|
||||
# GLSL-level semantics
|
||||
vulkan.frag
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
// For the version, it uses the latest git tag followed by the number of commits.
|
||||
// For the date, it uses the current date (when then script is run).
|
||||
|
||||
#define GLSLANG_REVISION "3.0.788"
|
||||
#define GLSLANG_DATE "14-Oct-2015"
|
||||
#define GLSLANG_REVISION "3.0.789"
|
||||
#define GLSLANG_DATE "15-Oct-2015"
|
||||
|
|
Загрузка…
Ссылка в новой задаче