mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-10 12:30:05 +00:00
HLSL: Fix #1249: Always execute both sides of ternary "?:".
This is semantically required by HLSL, and frequently results in using OpSelect instead of control flow.
This commit is contained in:
parent
a5cae08259
commit
4bee531fc1
@ -1973,18 +1973,29 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
|
||||
// next layer copies r-values into memory to use the access-chain mechanism
|
||||
bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang::TIntermSelection* node)
|
||||
{
|
||||
// See if it simple and safe to generate OpSelect instead of using control flow.
|
||||
// Crucially, side effects must be avoided, and there are performance trade-offs.
|
||||
// Return true if good idea (and safe) for OpSelect, false otherwise.
|
||||
const auto selectPolicy = [&]() -> bool {
|
||||
if ((!node->getType().isScalar() && !node->getType().isVector()) ||
|
||||
node->getBasicType() == glslang::EbtVoid)
|
||||
return false;
|
||||
|
||||
// See if it simple and safe, or required, to execute both sides.
|
||||
// Crucially, side effects must be either semantically required or avoided,
|
||||
// and there are performance trade-offs.
|
||||
// Return true if required or a good idea (and safe) to execute both sides,
|
||||
// false otherwise.
|
||||
const auto bothSidesPolicy = [&]() -> bool {
|
||||
// do we have both sides?
|
||||
if (node->getTrueBlock() == nullptr ||
|
||||
node->getFalseBlock() == nullptr)
|
||||
return false;
|
||||
|
||||
// required? (unless we write additional code to look for side effects
|
||||
// and make performance trade-offs if none are present)
|
||||
if (!node->getShortCircuit())
|
||||
return true;
|
||||
|
||||
// if not required to execute both, decide based on performance/practicality...
|
||||
|
||||
// see if OpSelect can handle it
|
||||
if ((!node->getType().isScalar() && !node->getType().isVector()) ||
|
||||
node->getBasicType() == glslang::EbtVoid)
|
||||
return false;
|
||||
|
||||
assert(node->getType() == node->getTrueBlock() ->getAsTyped()->getType() &&
|
||||
node->getType() == node->getFalseBlock()->getAsTyped()->getType());
|
||||
|
||||
@ -1997,10 +2008,14 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang
|
||||
operandOkay(node->getFalseBlock()->getAsTyped());
|
||||
};
|
||||
|
||||
// Emit OpSelect for this selection.
|
||||
const auto handleAsOpSelect = [&]() {
|
||||
node->getCondition()->traverse(this);
|
||||
spv::Id condition = accessChainLoad(node->getCondition()->getType());
|
||||
spv::Id result = spv::NoResult; // upcoming result selecting between trueValue and falseValue
|
||||
// emit the condition before doing anything with selection
|
||||
node->getCondition()->traverse(this);
|
||||
spv::Id condition = accessChainLoad(node->getCondition()->getType());
|
||||
|
||||
// Find a way of executing both sides and selecting the right result.
|
||||
const auto executeBothSides = [&]() -> void {
|
||||
// execute both sides
|
||||
node->getTrueBlock()->traverse(this);
|
||||
spv::Id trueValue = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType());
|
||||
node->getFalseBlock()->traverse(this);
|
||||
@ -2008,72 +2023,98 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang
|
||||
|
||||
builder.setLine(node->getLoc().line);
|
||||
|
||||
// smear condition to vector, if necessary (AST is always scalar)
|
||||
if (builder.isVector(trueValue))
|
||||
condition = builder.smearScalar(spv::NoPrecision, condition,
|
||||
builder.makeVectorType(builder.makeBoolType(),
|
||||
builder.getNumComponents(trueValue)));
|
||||
// done if void
|
||||
if (node->getBasicType() == glslang::EbtVoid)
|
||||
return;
|
||||
|
||||
spv::Id select = builder.createTriOp(spv::OpSelect,
|
||||
convertGlslangToSpvType(node->getType()), condition,
|
||||
trueValue, falseValue);
|
||||
builder.clearAccessChain();
|
||||
builder.setAccessChainRValue(select);
|
||||
// emit code to select between trueValue and falseValue
|
||||
|
||||
// see if OpSelect can handle it
|
||||
if (node->getType().isScalar() || node->getType().isVector()) {
|
||||
// Emit OpSelect for this selection.
|
||||
|
||||
// smear condition to vector, if necessary (AST is always scalar)
|
||||
if (builder.isVector(trueValue))
|
||||
condition = builder.smearScalar(spv::NoPrecision, condition,
|
||||
builder.makeVectorType(builder.makeBoolType(),
|
||||
builder.getNumComponents(trueValue)));
|
||||
|
||||
// OpSelect
|
||||
result = builder.createTriOp(spv::OpSelect,
|
||||
convertGlslangToSpvType(node->getType()), condition,
|
||||
trueValue, falseValue);
|
||||
|
||||
builder.clearAccessChain();
|
||||
builder.setAccessChainRValue(result);
|
||||
} else {
|
||||
// We need control flow to select the result.
|
||||
// TODO: Once SPIR-V OpSelect allows arbitrary types, eliminate this path.
|
||||
result = builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(node->getType()));
|
||||
|
||||
// Selection control:
|
||||
const spv::SelectionControlMask control = TranslateSelectionControl(*node);
|
||||
|
||||
// make an "if" based on the value created by the condition
|
||||
spv::Builder::If ifBuilder(condition, control, builder);
|
||||
|
||||
// emit the "then" statement
|
||||
builder.createStore(trueValue, result);
|
||||
ifBuilder.makeBeginElse();
|
||||
// emit the "else" statement
|
||||
builder.createStore(falseValue, result);
|
||||
|
||||
// finish off the control flow
|
||||
ifBuilder.makeEndIf();
|
||||
|
||||
builder.clearAccessChain();
|
||||
builder.setAccessChainLValue(result);
|
||||
}
|
||||
};
|
||||
|
||||
// Try for OpSelect
|
||||
// Execute the one side needed, as per the condition
|
||||
const auto executeOneSide = [&]() {
|
||||
// Always emit control flow.
|
||||
if (node->getBasicType() != glslang::EbtVoid)
|
||||
result = builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(node->getType()));
|
||||
|
||||
if (selectPolicy()) {
|
||||
// Selection control:
|
||||
const spv::SelectionControlMask control = TranslateSelectionControl(*node);
|
||||
|
||||
// make an "if" based on the value created by the condition
|
||||
spv::Builder::If ifBuilder(condition, control, builder);
|
||||
|
||||
// emit the "then" statement
|
||||
if (node->getTrueBlock() != nullptr) {
|
||||
node->getTrueBlock()->traverse(this);
|
||||
if (result != spv::NoResult)
|
||||
builder.createStore(accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()), result);
|
||||
}
|
||||
|
||||
if (node->getFalseBlock() != nullptr) {
|
||||
ifBuilder.makeBeginElse();
|
||||
// emit the "else" statement
|
||||
node->getFalseBlock()->traverse(this);
|
||||
if (result != spv::NoResult)
|
||||
builder.createStore(accessChainLoad(node->getFalseBlock()->getAsTyped()->getType()), result);
|
||||
}
|
||||
|
||||
// finish off the control flow
|
||||
ifBuilder.makeEndIf();
|
||||
|
||||
if (result != spv::NoResult) {
|
||||
builder.clearAccessChain();
|
||||
builder.setAccessChainLValue(result);
|
||||
}
|
||||
};
|
||||
|
||||
// Try for OpSelect (or a requirement to execute both sides)
|
||||
if (bothSidesPolicy()) {
|
||||
SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
|
||||
if (node->getType().getQualifier().isSpecConstant())
|
||||
spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
|
||||
|
||||
handleAsOpSelect();
|
||||
return false;
|
||||
}
|
||||
|
||||
// Instead, emit control flow...
|
||||
// Don't handle results as temporaries, because there will be two names
|
||||
// and better to leave SSA to later passes.
|
||||
spv::Id result = (node->getBasicType() == glslang::EbtVoid)
|
||||
? spv::NoResult
|
||||
: builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(node->getType()));
|
||||
|
||||
// emit the condition before doing anything with selection
|
||||
node->getCondition()->traverse(this);
|
||||
|
||||
// Selection control:
|
||||
const spv::SelectionControlMask control = TranslateSelectionControl(*node);
|
||||
|
||||
// make an "if" based on the value created by the condition
|
||||
spv::Builder::If ifBuilder(accessChainLoad(node->getCondition()->getType()), control, builder);
|
||||
|
||||
// emit the "then" statement
|
||||
if (node->getTrueBlock() != nullptr) {
|
||||
node->getTrueBlock()->traverse(this);
|
||||
if (result != spv::NoResult)
|
||||
builder.createStore(accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()), result);
|
||||
}
|
||||
|
||||
if (node->getFalseBlock() != nullptr) {
|
||||
ifBuilder.makeBeginElse();
|
||||
// emit the "else" statement
|
||||
node->getFalseBlock()->traverse(this);
|
||||
if (result != spv::NoResult)
|
||||
builder.createStore(accessChainLoad(node->getFalseBlock()->getAsTyped()->getType()), result);
|
||||
}
|
||||
|
||||
// finish off the control flow
|
||||
ifBuilder.makeEndIf();
|
||||
|
||||
if (result != spv::NoResult) {
|
||||
// GLSL only has r-values as the result of a :?, but
|
||||
// if we have an l-value, that can be more efficient if it will
|
||||
// become the base of a complex r-value expression, because the
|
||||
// next layer copies r-values into memory to use the access-chain mechanism
|
||||
builder.clearAccessChain();
|
||||
builder.setAccessChainLValue(result);
|
||||
}
|
||||
executeBothSides();
|
||||
} else
|
||||
executeOneSide();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ gl_FragCoord origin is upper left
|
||||
0:17 Sequence
|
||||
0:17 move second child to first child ( temp 4-component vector of float)
|
||||
0:17 'ret' ( temp 4-component vector of float)
|
||||
0:17 Test condition and select ( temp 4-component vector of float)
|
||||
0:17 Test condition and select ( temp 4-component vector of float): no shortcircuit
|
||||
0:17 Condition
|
||||
0:17 Compare Not Equal ( temp bool)
|
||||
0:17 t: direct index for structure ( uniform float)
|
||||
@ -169,7 +169,7 @@ gl_FragCoord origin is upper left
|
||||
0:37 'e' ( temp int)
|
||||
0:37 move second child to first child ( temp int)
|
||||
0:37 'a' ( temp int)
|
||||
0:37 Test condition and select ( temp int)
|
||||
0:37 Test condition and select ( temp int): no shortcircuit
|
||||
0:37 Condition
|
||||
0:37 Convert int to bool ( temp bool)
|
||||
0:37 'b' ( temp int)
|
||||
@ -182,7 +182,7 @@ gl_FragCoord origin is upper left
|
||||
0:37 10 (const int)
|
||||
0:37 move second child to first child ( temp int)
|
||||
0:37 'b' ( temp int)
|
||||
0:37 Test condition and select ( temp int)
|
||||
0:37 Test condition and select ( temp int): no shortcircuit
|
||||
0:37 Condition
|
||||
0:37 Convert int to bool ( temp bool)
|
||||
0:37 'a' ( temp int)
|
||||
@ -195,7 +195,7 @@ gl_FragCoord origin is upper left
|
||||
0:37 11 (const int)
|
||||
0:39 move second child to first child ( temp 4-component vector of float)
|
||||
0:39 'f' ( temp 4-component vector of float)
|
||||
0:39 Test condition and select ( temp 4-component vector of float)
|
||||
0:39 Test condition and select ( temp 4-component vector of float): no shortcircuit
|
||||
0:39 Condition
|
||||
0:39 Compare Less Than ( temp bool)
|
||||
0:39 direct index ( temp float)
|
||||
@ -341,7 +341,7 @@ gl_FragCoord origin is upper left
|
||||
0:17 Sequence
|
||||
0:17 move second child to first child ( temp 4-component vector of float)
|
||||
0:17 'ret' ( temp 4-component vector of float)
|
||||
0:17 Test condition and select ( temp 4-component vector of float)
|
||||
0:17 Test condition and select ( temp 4-component vector of float): no shortcircuit
|
||||
0:17 Condition
|
||||
0:17 Compare Not Equal ( temp bool)
|
||||
0:17 t: direct index for structure ( uniform float)
|
||||
@ -432,7 +432,7 @@ gl_FragCoord origin is upper left
|
||||
0:37 'e' ( temp int)
|
||||
0:37 move second child to first child ( temp int)
|
||||
0:37 'a' ( temp int)
|
||||
0:37 Test condition and select ( temp int)
|
||||
0:37 Test condition and select ( temp int): no shortcircuit
|
||||
0:37 Condition
|
||||
0:37 Convert int to bool ( temp bool)
|
||||
0:37 'b' ( temp int)
|
||||
@ -445,7 +445,7 @@ gl_FragCoord origin is upper left
|
||||
0:37 10 (const int)
|
||||
0:37 move second child to first child ( temp int)
|
||||
0:37 'b' ( temp int)
|
||||
0:37 Test condition and select ( temp int)
|
||||
0:37 Test condition and select ( temp int): no shortcircuit
|
||||
0:37 Condition
|
||||
0:37 Convert int to bool ( temp bool)
|
||||
0:37 'a' ( temp int)
|
||||
@ -458,7 +458,7 @@ gl_FragCoord origin is upper left
|
||||
0:37 11 (const int)
|
||||
0:39 move second child to first child ( temp 4-component vector of float)
|
||||
0:39 'f' ( temp 4-component vector of float)
|
||||
0:39 Test condition and select ( temp 4-component vector of float)
|
||||
0:39 Test condition and select ( temp 4-component vector of float): no shortcircuit
|
||||
0:39 Condition
|
||||
0:39 Compare Less Than ( temp bool)
|
||||
0:39 direct index ( temp float)
|
||||
@ -523,12 +523,12 @@ gl_FragCoord origin is upper left
|
||||
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 80004
|
||||
// Id's are bound by 220
|
||||
// Id's are bound by 206
|
||||
|
||||
Capability Shader
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint Fragment 4 "PixelShaderFunction" 213 216
|
||||
EntryPoint Fragment 4 "PixelShaderFunction" 199 202
|
||||
ExecutionMode 4 OriginUpperLeft
|
||||
Source HLSL 500
|
||||
Name 4 "PixelShaderFunction"
|
||||
@ -548,20 +548,20 @@ gl_FragCoord origin is upper left
|
||||
MemberName 29($Global) 4 "f"
|
||||
Name 31 ""
|
||||
Name 85 "ret"
|
||||
Name 113 "a"
|
||||
Name 115 "b"
|
||||
Name 117 "c"
|
||||
Name 119 "d"
|
||||
Name 120 "ret"
|
||||
Name 140 "e"
|
||||
Name 161 "f"
|
||||
Name 200 "param"
|
||||
Name 201 "param"
|
||||
Name 202 "param"
|
||||
Name 211 "input"
|
||||
Name 213 "input"
|
||||
Name 216 "@entryPointOutput"
|
||||
Name 217 "param"
|
||||
Name 110 "a"
|
||||
Name 112 "b"
|
||||
Name 114 "c"
|
||||
Name 116 "d"
|
||||
Name 117 "ret"
|
||||
Name 137 "e"
|
||||
Name 150 "f"
|
||||
Name 186 "param"
|
||||
Name 187 "param"
|
||||
Name 188 "param"
|
||||
Name 197 "input"
|
||||
Name 199 "input"
|
||||
Name 202 "@entryPointOutput"
|
||||
Name 203 "param"
|
||||
MemberDecorate 29($Global) 0 Offset 0
|
||||
MemberDecorate 29($Global) 1 Offset 16
|
||||
MemberDecorate 29($Global) 2 Offset 32
|
||||
@ -569,8 +569,8 @@ gl_FragCoord origin is upper left
|
||||
MemberDecorate 29($Global) 4 Offset 52
|
||||
Decorate 29($Global) Block
|
||||
Decorate 31 DescriptorSet 0
|
||||
Decorate 213(input) Location 0
|
||||
Decorate 216(@entryPointOutput) Location 0
|
||||
Decorate 199(input) Location 0
|
||||
Decorate 202(@entryPointOutput) Location 0
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeFloat 32
|
||||
@ -598,41 +598,41 @@ gl_FragCoord origin is upper left
|
||||
48: 32(int) Constant 4
|
||||
49: TypePointer Uniform 6(float)
|
||||
53: 32(int) Constant 3
|
||||
100: 6(float) Constant 1065353216
|
||||
101: 7(fvec4) ConstantComposite 100 100 100 100
|
||||
112: TypePointer Function 32(int)
|
||||
114: 32(int) Constant 5
|
||||
116: 32(int) Constant 6
|
||||
118: 32(int) Constant 7
|
||||
143: TypeInt 32 0
|
||||
144: 143(int) Constant 0
|
||||
150: 32(int) Constant 10
|
||||
159: 32(int) Constant 11
|
||||
163: TypePointer Function 6(float)
|
||||
166: 143(int) Constant 1
|
||||
192: 13(bool) ConstantTrue
|
||||
193: 13(bool) ConstantFalse
|
||||
194: 14(bvec2) ConstantComposite 192 193
|
||||
195: 6(float) Constant 1073741824
|
||||
196: 16(fvec2) ConstantComposite 100 195
|
||||
197: 6(float) Constant 1077936128
|
||||
198: 6(float) Constant 1082130432
|
||||
199: 16(fvec2) ConstantComposite 197 198
|
||||
204: 6(float) Constant 1092616192
|
||||
212: TypePointer Input 7(fvec4)
|
||||
213(input): 212(ptr) Variable Input
|
||||
215: TypePointer Output 7(fvec4)
|
||||
216(@entryPointOutput): 215(ptr) Variable Output
|
||||
96: 6(float) Constant 1065353216
|
||||
97: 7(fvec4) ConstantComposite 96 96 96 96
|
||||
109: TypePointer Function 32(int)
|
||||
111: 32(int) Constant 5
|
||||
113: 32(int) Constant 6
|
||||
115: 32(int) Constant 7
|
||||
139: TypeInt 32 0
|
||||
140: 139(int) Constant 0
|
||||
143: 32(int) Constant 10
|
||||
148: 32(int) Constant 11
|
||||
151: TypePointer Function 6(float)
|
||||
154: 139(int) Constant 1
|
||||
178: 13(bool) ConstantTrue
|
||||
179: 13(bool) ConstantFalse
|
||||
180: 14(bvec2) ConstantComposite 178 179
|
||||
181: 6(float) Constant 1073741824
|
||||
182: 16(fvec2) ConstantComposite 96 181
|
||||
183: 6(float) Constant 1077936128
|
||||
184: 6(float) Constant 1082130432
|
||||
185: 16(fvec2) ConstantComposite 183 184
|
||||
190: 6(float) Constant 1092616192
|
||||
198: TypePointer Input 7(fvec4)
|
||||
199(input): 198(ptr) Variable Input
|
||||
201: TypePointer Output 7(fvec4)
|
||||
202(@entryPointOutput): 201(ptr) Variable Output
|
||||
4(PixelShaderFunction): 2 Function None 3
|
||||
5: Label
|
||||
211(input): 24(ptr) Variable Function
|
||||
217(param): 24(ptr) Variable Function
|
||||
214: 7(fvec4) Load 213(input)
|
||||
Store 211(input) 214
|
||||
218: 7(fvec4) Load 211(input)
|
||||
Store 217(param) 218
|
||||
219: 7(fvec4) FunctionCall 27(@PixelShaderFunction(vf4;) 217(param)
|
||||
Store 216(@entryPointOutput) 219
|
||||
197(input): 24(ptr) Variable Function
|
||||
203(param): 24(ptr) Variable Function
|
||||
200: 7(fvec4) Load 199(input)
|
||||
Store 197(input) 200
|
||||
204: 7(fvec4) Load 197(input)
|
||||
Store 203(param) 204
|
||||
205: 7(fvec4) FunctionCall 27(@PixelShaderFunction(vf4;) 203(param)
|
||||
Store 202(@entryPointOutput) 205
|
||||
Return
|
||||
FunctionEnd
|
||||
9(vectorCond(): 7(fvec4) Function None 8
|
||||
@ -682,154 +682,116 @@ gl_FragCoord origin is upper left
|
||||
11(scalarCond(): 7(fvec4) Function None 8
|
||||
12: Label
|
||||
85(ret): 24(ptr) Variable Function
|
||||
86: 24(ptr) Variable Function
|
||||
87: 49(ptr) AccessChain 31 53
|
||||
88: 6(float) Load 87
|
||||
89: 49(ptr) AccessChain 31 48
|
||||
90: 6(float) Load 89
|
||||
91: 13(bool) FOrdNotEqual 88 90
|
||||
SelectionMerge 93 None
|
||||
BranchConditional 91 92 99
|
||||
92: Label
|
||||
94: 49(ptr) AccessChain 31 53
|
||||
95: 6(float) Load 94
|
||||
96: 34(ptr) AccessChain 31 33
|
||||
97: 7(fvec4) Load 96
|
||||
98: 7(fvec4) VectorTimesScalar 97 95
|
||||
Store 86 98
|
||||
Branch 93
|
||||
99: Label
|
||||
Store 86 101
|
||||
Branch 93
|
||||
93: Label
|
||||
102: 7(fvec4) Load 86
|
||||
Store 85(ret) 102
|
||||
103: 7(fvec4) Load 85(ret)
|
||||
ReturnValue 103
|
||||
86: 49(ptr) AccessChain 31 53
|
||||
87: 6(float) Load 86
|
||||
88: 49(ptr) AccessChain 31 48
|
||||
89: 6(float) Load 88
|
||||
90: 13(bool) FOrdNotEqual 87 89
|
||||
91: 49(ptr) AccessChain 31 53
|
||||
92: 6(float) Load 91
|
||||
93: 34(ptr) AccessChain 31 33
|
||||
94: 7(fvec4) Load 93
|
||||
95: 7(fvec4) VectorTimesScalar 94 92
|
||||
98: 43(bvec4) CompositeConstruct 90 90 90 90
|
||||
99: 7(fvec4) Select 98 95 97
|
||||
Store 85(ret) 99
|
||||
100: 7(fvec4) Load 85(ret)
|
||||
ReturnValue 100
|
||||
FunctionEnd
|
||||
22(fbSelect(vb2;vf2;vf2;): 16(fvec2) Function None 18
|
||||
19(cnd): 15(ptr) FunctionParameter
|
||||
20(src0): 17(ptr) FunctionParameter
|
||||
21(src1): 17(ptr) FunctionParameter
|
||||
23: Label
|
||||
106: 16(fvec2) Load 21(src1)
|
||||
107: 16(fvec2) Load 20(src0)
|
||||
108: 14(bvec2) Load 19(cnd)
|
||||
109: 16(fvec2) Select 108 107 106
|
||||
ReturnValue 109
|
||||
103: 16(fvec2) Load 21(src1)
|
||||
104: 16(fvec2) Load 20(src0)
|
||||
105: 14(bvec2) Load 19(cnd)
|
||||
106: 16(fvec2) Select 105 104 103
|
||||
ReturnValue 106
|
||||
FunctionEnd
|
||||
27(@PixelShaderFunction(vf4;): 7(fvec4) Function None 25
|
||||
26(input): 24(ptr) FunctionParameter
|
||||
28: Label
|
||||
113(a): 112(ptr) Variable Function
|
||||
115(b): 112(ptr) Variable Function
|
||||
117(c): 112(ptr) Variable Function
|
||||
119(d): 112(ptr) Variable Function
|
||||
120(ret): 24(ptr) Variable Function
|
||||
140(e): 112(ptr) Variable Function
|
||||
141: 112(ptr) Variable Function
|
||||
152: 112(ptr) Variable Function
|
||||
161(f): 24(ptr) Variable Function
|
||||
162: 24(ptr) Variable Function
|
||||
200(param): 15(ptr) Variable Function
|
||||
201(param): 17(ptr) Variable Function
|
||||
202(param): 17(ptr) Variable Function
|
||||
Store 113(a) 114
|
||||
Store 115(b) 116
|
||||
Store 117(c) 118
|
||||
Store 119(d) 118
|
||||
121: 32(int) Load 113(a)
|
||||
122: 6(float) ConvertSToF 121
|
||||
123: 7(fvec4) Load 26(input)
|
||||
124: 7(fvec4) VectorTimesScalar 123 122
|
||||
125: 32(int) Load 115(b)
|
||||
126: 6(float) ConvertSToF 125
|
||||
127: 7(fvec4) Load 26(input)
|
||||
128: 7(fvec4) VectorTimesScalar 127 126
|
||||
129: 7(fvec4) FAdd 124 128
|
||||
130: 32(int) Load 117(c)
|
||||
131: 6(float) ConvertSToF 130
|
||||
132: 7(fvec4) Load 26(input)
|
||||
133: 7(fvec4) VectorTimesScalar 132 131
|
||||
134: 7(fvec4) FAdd 129 133
|
||||
135: 32(int) Load 119(d)
|
||||
136: 6(float) ConvertSToF 135
|
||||
137: 7(fvec4) Load 26(input)
|
||||
138: 7(fvec4) VectorTimesScalar 137 136
|
||||
139: 7(fvec4) FAdd 134 138
|
||||
Store 120(ret) 139
|
||||
142: 32(int) Load 115(b)
|
||||
145: 13(bool) INotEqual 142 144
|
||||
SelectionMerge 147 None
|
||||
BranchConditional 145 146 149
|
||||
146: Label
|
||||
148: 32(int) Load 119(d)
|
||||
Store 117(c) 148
|
||||
Store 141 148
|
||||
Branch 147
|
||||
149: Label
|
||||
Store 141 150
|
||||
Branch 147
|
||||
147: Label
|
||||
151: 32(int) Load 141
|
||||
Store 113(a) 151
|
||||
Store 140(e) 151
|
||||
153: 32(int) Load 113(a)
|
||||
154: 13(bool) INotEqual 153 144
|
||||
SelectionMerge 156 None
|
||||
BranchConditional 154 155 158
|
||||
155: Label
|
||||
157: 32(int) Load 117(c)
|
||||
Store 119(d) 157
|
||||
Store 152 157
|
||||
Branch 156
|
||||
158: Label
|
||||
Store 152 159
|
||||
Branch 156
|
||||
156: Label
|
||||
160: 32(int) Load 152
|
||||
Store 115(b) 160
|
||||
164: 163(ptr) AccessChain 120(ret) 144
|
||||
165: 6(float) Load 164
|
||||
167: 163(ptr) AccessChain 26(input) 166
|
||||
168: 6(float) Load 167
|
||||
169: 13(bool) FOrdLessThan 165 168
|
||||
SelectionMerge 171 None
|
||||
BranchConditional 169 170 176
|
||||
170: Label
|
||||
172: 32(int) Load 117(c)
|
||||
173: 6(float) ConvertSToF 172
|
||||
174: 7(fvec4) Load 26(input)
|
||||
175: 7(fvec4) VectorTimesScalar 174 173
|
||||
Store 162 175
|
||||
Branch 171
|
||||
176: Label
|
||||
177: 32(int) Load 119(d)
|
||||
178: 6(float) ConvertSToF 177
|
||||
179: 7(fvec4) Load 26(input)
|
||||
180: 7(fvec4) VectorTimesScalar 179 178
|
||||
Store 162 180
|
||||
Branch 171
|
||||
171: Label
|
||||
181: 7(fvec4) Load 162
|
||||
Store 161(f) 181
|
||||
182: 32(int) Load 140(e)
|
||||
183: 6(float) ConvertSToF 182
|
||||
184: 7(fvec4) Load 120(ret)
|
||||
185: 7(fvec4) VectorTimesScalar 184 183
|
||||
186: 7(fvec4) Load 161(f)
|
||||
187: 7(fvec4) FAdd 185 186
|
||||
188: 7(fvec4) FunctionCall 9(vectorCond()
|
||||
189: 7(fvec4) FAdd 187 188
|
||||
190: 7(fvec4) FunctionCall 11(scalarCond()
|
||||
191: 7(fvec4) FAdd 189 190
|
||||
Store 200(param) 194
|
||||
Store 201(param) 196
|
||||
Store 202(param) 199
|
||||
203: 16(fvec2) FunctionCall 22(fbSelect(vb2;vf2;vf2;) 200(param) 201(param) 202(param)
|
||||
205: 6(float) CompositeExtract 203 0
|
||||
206: 6(float) CompositeExtract 203 1
|
||||
207: 7(fvec4) CompositeConstruct 205 206 204 204
|
||||
208: 7(fvec4) FAdd 191 207
|
||||
ReturnValue 208
|
||||
110(a): 109(ptr) Variable Function
|
||||
112(b): 109(ptr) Variable Function
|
||||
114(c): 109(ptr) Variable Function
|
||||
116(d): 109(ptr) Variable Function
|
||||
117(ret): 24(ptr) Variable Function
|
||||
137(e): 109(ptr) Variable Function
|
||||
150(f): 24(ptr) Variable Function
|
||||
186(param): 15(ptr) Variable Function
|
||||
187(param): 17(ptr) Variable Function
|
||||
188(param): 17(ptr) Variable Function
|
||||
Store 110(a) 111
|
||||
Store 112(b) 113
|
||||
Store 114(c) 115
|
||||
Store 116(d) 115
|
||||
118: 32(int) Load 110(a)
|
||||
119: 6(float) ConvertSToF 118
|
||||
120: 7(fvec4) Load 26(input)
|
||||
121: 7(fvec4) VectorTimesScalar 120 119
|
||||
122: 32(int) Load 112(b)
|
||||
123: 6(float) ConvertSToF 122
|
||||
124: 7(fvec4) Load 26(input)
|
||||
125: 7(fvec4) VectorTimesScalar 124 123
|
||||
126: 7(fvec4) FAdd 121 125
|
||||
127: 32(int) Load 114(c)
|
||||
128: 6(float) ConvertSToF 127
|
||||
129: 7(fvec4) Load 26(input)
|
||||
130: 7(fvec4) VectorTimesScalar 129 128
|
||||
131: 7(fvec4) FAdd 126 130
|
||||
132: 32(int) Load 116(d)
|
||||
133: 6(float) ConvertSToF 132
|
||||
134: 7(fvec4) Load 26(input)
|
||||
135: 7(fvec4) VectorTimesScalar 134 133
|
||||
136: 7(fvec4) FAdd 131 135
|
||||
Store 117(ret) 136
|
||||
138: 32(int) Load 112(b)
|
||||
141: 13(bool) INotEqual 138 140
|
||||
142: 32(int) Load 116(d)
|
||||
Store 114(c) 142
|
||||
144: 32(int) Select 141 142 143
|
||||
Store 110(a) 144
|
||||
Store 137(e) 144
|
||||
145: 32(int) Load 110(a)
|
||||
146: 13(bool) INotEqual 145 140
|
||||
147: 32(int) Load 114(c)
|
||||
Store 116(d) 147
|
||||
149: 32(int) Select 146 147 148
|
||||
Store 112(b) 149
|
||||
152: 151(ptr) AccessChain 117(ret) 140
|
||||
153: 6(float) Load 152
|
||||
155: 151(ptr) AccessChain 26(input) 154
|
||||
156: 6(float) Load 155
|
||||
157: 13(bool) FOrdLessThan 153 156
|
||||
158: 32(int) Load 114(c)
|
||||
159: 6(float) ConvertSToF 158
|
||||
160: 7(fvec4) Load 26(input)
|
||||
161: 7(fvec4) VectorTimesScalar 160 159
|
||||
162: 32(int) Load 116(d)
|
||||
163: 6(float) ConvertSToF 162
|
||||
164: 7(fvec4) Load 26(input)
|
||||
165: 7(fvec4) VectorTimesScalar 164 163
|
||||
166: 43(bvec4) CompositeConstruct 157 157 157 157
|
||||
167: 7(fvec4) Select 166 161 165
|
||||
Store 150(f) 167
|
||||
168: 32(int) Load 137(e)
|
||||
169: 6(float) ConvertSToF 168
|
||||
170: 7(fvec4) Load 117(ret)
|
||||
171: 7(fvec4) VectorTimesScalar 170 169
|
||||
172: 7(fvec4) Load 150(f)
|
||||
173: 7(fvec4) FAdd 171 172
|
||||
174: 7(fvec4) FunctionCall 9(vectorCond()
|
||||
175: 7(fvec4) FAdd 173 174
|
||||
176: 7(fvec4) FunctionCall 11(scalarCond()
|
||||
177: 7(fvec4) FAdd 175 176
|
||||
Store 186(param) 180
|
||||
Store 187(param) 182
|
||||
Store 188(param) 185
|
||||
189: 16(fvec2) FunctionCall 22(fbSelect(vb2;vf2;vf2;) 186(param) 187(param) 188(param)
|
||||
191: 6(float) CompositeExtract 189 0
|
||||
192: 6(float) CompositeExtract 189 1
|
||||
193: 7(fvec4) CompositeConstruct 191 192 190 190
|
||||
194: 7(fvec4) FAdd 177 193
|
||||
ReturnValue 194
|
||||
FunctionEnd
|
||||
|
@ -14,7 +14,7 @@ gl_FragCoord origin is upper left
|
||||
0:16 '@sampleCount' ( temp uint)
|
||||
0:16 imageQuerySamples ( temp uint)
|
||||
0:16 'g_tTex2dmsf4' ( uniform texture2DMS)
|
||||
0:16 Test condition and select ( temp 2-component vector of float)
|
||||
0:16 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:16 Condition
|
||||
0:16 Compare Equal ( temp bool)
|
||||
0:16 '@sampleCount' ( temp uint)
|
||||
@ -29,7 +29,7 @@ gl_FragCoord origin is upper left
|
||||
0:? -0.250000
|
||||
0:16 'sample' ( in int)
|
||||
0:16 false case
|
||||
0:16 Test condition and select ( temp 2-component vector of float)
|
||||
0:16 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:16 Condition
|
||||
0:16 Compare Equal ( temp bool)
|
||||
0:16 '@sampleCount' ( temp uint)
|
||||
@ -48,7 +48,7 @@ gl_FragCoord origin is upper left
|
||||
0:? 0.375000
|
||||
0:16 'sample' ( in int)
|
||||
0:16 false case
|
||||
0:16 Test condition and select ( temp 2-component vector of float)
|
||||
0:16 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:16 Condition
|
||||
0:16 Compare Equal ( temp bool)
|
||||
0:16 '@sampleCount' ( temp uint)
|
||||
@ -75,7 +75,7 @@ gl_FragCoord origin is upper left
|
||||
0:? -0.437500
|
||||
0:16 'sample' ( in int)
|
||||
0:16 false case
|
||||
0:16 Test condition and select ( temp 2-component vector of float)
|
||||
0:16 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:16 Condition
|
||||
0:16 Compare Equal ( temp bool)
|
||||
0:16 '@sampleCount' ( temp uint)
|
||||
@ -129,7 +129,7 @@ gl_FragCoord origin is upper left
|
||||
0:17 '@sampleCount' ( temp uint)
|
||||
0:17 imageQuerySamples ( temp uint)
|
||||
0:17 'g_tTex2dmsf4a' ( uniform texture2DMSArray)
|
||||
0:17 Test condition and select ( temp 2-component vector of float)
|
||||
0:17 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:17 Condition
|
||||
0:17 Compare Equal ( temp bool)
|
||||
0:17 '@sampleCount' ( temp uint)
|
||||
@ -144,7 +144,7 @@ gl_FragCoord origin is upper left
|
||||
0:? -0.250000
|
||||
0:17 'sample' ( in int)
|
||||
0:17 false case
|
||||
0:17 Test condition and select ( temp 2-component vector of float)
|
||||
0:17 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:17 Condition
|
||||
0:17 Compare Equal ( temp bool)
|
||||
0:17 '@sampleCount' ( temp uint)
|
||||
@ -163,7 +163,7 @@ gl_FragCoord origin is upper left
|
||||
0:? 0.375000
|
||||
0:17 'sample' ( in int)
|
||||
0:17 false case
|
||||
0:17 Test condition and select ( temp 2-component vector of float)
|
||||
0:17 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:17 Condition
|
||||
0:17 Compare Equal ( temp bool)
|
||||
0:17 '@sampleCount' ( temp uint)
|
||||
@ -190,7 +190,7 @@ gl_FragCoord origin is upper left
|
||||
0:? -0.437500
|
||||
0:17 'sample' ( in int)
|
||||
0:17 false case
|
||||
0:17 Test condition and select ( temp 2-component vector of float)
|
||||
0:17 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:17 Condition
|
||||
0:17 Compare Equal ( temp bool)
|
||||
0:17 '@sampleCount' ( temp uint)
|
||||
@ -305,7 +305,7 @@ gl_FragCoord origin is upper left
|
||||
0:16 '@sampleCount' ( temp uint)
|
||||
0:16 imageQuerySamples ( temp uint)
|
||||
0:16 'g_tTex2dmsf4' ( uniform texture2DMS)
|
||||
0:16 Test condition and select ( temp 2-component vector of float)
|
||||
0:16 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:16 Condition
|
||||
0:16 Compare Equal ( temp bool)
|
||||
0:16 '@sampleCount' ( temp uint)
|
||||
@ -320,7 +320,7 @@ gl_FragCoord origin is upper left
|
||||
0:? -0.250000
|
||||
0:16 'sample' ( in int)
|
||||
0:16 false case
|
||||
0:16 Test condition and select ( temp 2-component vector of float)
|
||||
0:16 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:16 Condition
|
||||
0:16 Compare Equal ( temp bool)
|
||||
0:16 '@sampleCount' ( temp uint)
|
||||
@ -339,7 +339,7 @@ gl_FragCoord origin is upper left
|
||||
0:? 0.375000
|
||||
0:16 'sample' ( in int)
|
||||
0:16 false case
|
||||
0:16 Test condition and select ( temp 2-component vector of float)
|
||||
0:16 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:16 Condition
|
||||
0:16 Compare Equal ( temp bool)
|
||||
0:16 '@sampleCount' ( temp uint)
|
||||
@ -366,7 +366,7 @@ gl_FragCoord origin is upper left
|
||||
0:? -0.437500
|
||||
0:16 'sample' ( in int)
|
||||
0:16 false case
|
||||
0:16 Test condition and select ( temp 2-component vector of float)
|
||||
0:16 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:16 Condition
|
||||
0:16 Compare Equal ( temp bool)
|
||||
0:16 '@sampleCount' ( temp uint)
|
||||
@ -420,7 +420,7 @@ gl_FragCoord origin is upper left
|
||||
0:17 '@sampleCount' ( temp uint)
|
||||
0:17 imageQuerySamples ( temp uint)
|
||||
0:17 'g_tTex2dmsf4a' ( uniform texture2DMSArray)
|
||||
0:17 Test condition and select ( temp 2-component vector of float)
|
||||
0:17 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:17 Condition
|
||||
0:17 Compare Equal ( temp bool)
|
||||
0:17 '@sampleCount' ( temp uint)
|
||||
@ -435,7 +435,7 @@ gl_FragCoord origin is upper left
|
||||
0:? -0.250000
|
||||
0:17 'sample' ( in int)
|
||||
0:17 false case
|
||||
0:17 Test condition and select ( temp 2-component vector of float)
|
||||
0:17 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:17 Condition
|
||||
0:17 Compare Equal ( temp bool)
|
||||
0:17 '@sampleCount' ( temp uint)
|
||||
@ -454,7 +454,7 @@ gl_FragCoord origin is upper left
|
||||
0:? 0.375000
|
||||
0:17 'sample' ( in int)
|
||||
0:17 false case
|
||||
0:17 Test condition and select ( temp 2-component vector of float)
|
||||
0:17 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:17 Condition
|
||||
0:17 Compare Equal ( temp bool)
|
||||
0:17 '@sampleCount' ( temp uint)
|
||||
@ -481,7 +481,7 @@ gl_FragCoord origin is upper left
|
||||
0:? -0.437500
|
||||
0:17 'sample' ( in int)
|
||||
0:17 false case
|
||||
0:17 Test condition and select ( temp 2-component vector of float)
|
||||
0:17 Test condition and select ( temp 2-component vector of float): no shortcircuit
|
||||
0:17 Condition
|
||||
0:17 Compare Equal ( temp bool)
|
||||
0:17 '@sampleCount' ( temp uint)
|
||||
@ -579,13 +579,13 @@ gl_FragCoord origin is upper left
|
||||
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 80004
|
||||
// Id's are bound by 221
|
||||
// Id's are bound by 198
|
||||
|
||||
Capability Shader
|
||||
Capability ImageQuery
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint Fragment 4 "main" 204 211 215
|
||||
EntryPoint Fragment 4 "main" 181 188 192
|
||||
ExecutionMode 4 OriginUpperLeft
|
||||
Source HLSL 500
|
||||
Name 4 "main"
|
||||
@ -597,33 +597,33 @@ gl_FragCoord origin is upper left
|
||||
Name 17 "r00"
|
||||
Name 20 "@sampleCount"
|
||||
Name 23 "g_tTex2dmsf4"
|
||||
Name 42 "indexable"
|
||||
Name 65 "indexable"
|
||||
Name 96 "indexable"
|
||||
Name 129 "indexable"
|
||||
Name 138 "r01"
|
||||
Name 139 "@sampleCount"
|
||||
Name 142 "g_tTex2dmsf4a"
|
||||
Name 151 "indexable"
|
||||
Name 161 "indexable"
|
||||
Name 171 "indexable"
|
||||
Name 181 "indexable"
|
||||
Name 190 "psout"
|
||||
Name 202 "sample"
|
||||
Name 204 "sample"
|
||||
Name 206 "flattenTemp"
|
||||
Name 207 "param"
|
||||
Name 211 "@entryPointOutput.Color"
|
||||
Name 215 "@entryPointOutput.Depth"
|
||||
Name 220 "g_sSamp"
|
||||
Name 39 "indexable"
|
||||
Name 58 "indexable"
|
||||
Name 85 "indexable"
|
||||
Name 114 "indexable"
|
||||
Name 127 "r01"
|
||||
Name 128 "@sampleCount"
|
||||
Name 131 "g_tTex2dmsf4a"
|
||||
Name 137 "indexable"
|
||||
Name 143 "indexable"
|
||||
Name 149 "indexable"
|
||||
Name 155 "indexable"
|
||||
Name 167 "psout"
|
||||
Name 179 "sample"
|
||||
Name 181 "sample"
|
||||
Name 183 "flattenTemp"
|
||||
Name 184 "param"
|
||||
Name 188 "@entryPointOutput.Color"
|
||||
Name 192 "@entryPointOutput.Depth"
|
||||
Name 197 "g_sSamp"
|
||||
Decorate 23(g_tTex2dmsf4) DescriptorSet 0
|
||||
Decorate 142(g_tTex2dmsf4a) DescriptorSet 0
|
||||
Decorate 204(sample) Flat
|
||||
Decorate 204(sample) Location 0
|
||||
Decorate 211(@entryPointOutput.Color) Location 0
|
||||
Decorate 215(@entryPointOutput.Depth) BuiltIn FragDepth
|
||||
Decorate 220(g_sSamp) DescriptorSet 0
|
||||
Decorate 220(g_sSamp) Binding 0
|
||||
Decorate 131(g_tTex2dmsf4a) DescriptorSet 0
|
||||
Decorate 181(sample) Flat
|
||||
Decorate 181(sample) Location 0
|
||||
Decorate 188(@entryPointOutput.Color) Location 0
|
||||
Decorate 192(@entryPointOutput.Depth) BuiltIn FragDepth
|
||||
Decorate 197(g_sSamp) DescriptorSet 0
|
||||
Decorate 197(g_sSamp) Binding 0
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeInt 32 1
|
||||
@ -639,110 +639,111 @@ gl_FragCoord origin is upper left
|
||||
21: TypeImage 8(float) 2D multi-sampled sampled format:Unknown
|
||||
22: TypePointer UniformConstant 21
|
||||
23(g_tTex2dmsf4): 22(ptr) Variable UniformConstant
|
||||
28: 6(int) Constant 2
|
||||
29: TypeBool
|
||||
33: 18(int) Constant 2
|
||||
34: TypeArray 15(fvec2) 33
|
||||
35: 8(float) Constant 1048576000
|
||||
36: 15(fvec2) ConstantComposite 35 35
|
||||
37: 8(float) Constant 3196059648
|
||||
38: 15(fvec2) ConstantComposite 37 37
|
||||
39: 34 ConstantComposite 36 38
|
||||
41: TypePointer Function 34
|
||||
48: 6(int) Constant 4
|
||||
52: 18(int) Constant 4
|
||||
53: TypeArray 15(fvec2) 52
|
||||
54: 8(float) Constant 3187671040
|
||||
55: 8(float) Constant 3200253952
|
||||
56: 15(fvec2) ConstantComposite 54 55
|
||||
57: 8(float) Constant 1052770304
|
||||
58: 15(fvec2) ConstantComposite 57 54
|
||||
59: 8(float) Constant 1040187392
|
||||
60: 15(fvec2) ConstantComposite 55 59
|
||||
61: 15(fvec2) ConstantComposite 59 57
|
||||
62: 53 ConstantComposite 56 58 60 61
|
||||
64: TypePointer Function 53
|
||||
71: 6(int) Constant 8
|
||||
75: 18(int) Constant 8
|
||||
76: TypeArray 15(fvec2) 75
|
||||
77: 8(float) Constant 1031798784
|
||||
78: 8(float) Constant 3191865344
|
||||
79: 15(fvec2) ConstantComposite 77 78
|
||||
80: 8(float) Constant 3179282432
|
||||
81: 8(float) Constant 1044381696
|
||||
82: 15(fvec2) ConstantComposite 80 81
|
||||
83: 8(float) Constant 1050673152
|
||||
84: 15(fvec2) ConstantComposite 83 77
|
||||
85: 8(float) Constant 3198156800
|
||||
86: 15(fvec2) ConstantComposite 78 85
|
||||
87: 15(fvec2) ConstantComposite 85 83
|
||||
88: 8(float) Constant 3202351104
|
||||
89: 15(fvec2) ConstantComposite 88 80
|
||||
90: 8(float) Constant 1054867456
|
||||
91: 15(fvec2) ConstantComposite 81 90
|
||||
92: 15(fvec2) ConstantComposite 90 88
|
||||
93: 76 ConstantComposite 79 82 84 86 87 89 91 92
|
||||
95: TypePointer Function 76
|
||||
102: 6(int) Constant 16
|
||||
106: 18(int) Constant 16
|
||||
107: TypeArray 15(fvec2) 106
|
||||
108: 15(fvec2) ConstantComposite 77 77
|
||||
109: 15(fvec2) ConstantComposite 80 78
|
||||
110: 15(fvec2) ConstantComposite 78 59
|
||||
111: 15(fvec2) ConstantComposite 35 80
|
||||
112: 15(fvec2) ConstantComposite 85 54
|
||||
113: 15(fvec2) ConstantComposite 59 83
|
||||
114: 15(fvec2) ConstantComposite 83 81
|
||||
115: 15(fvec2) ConstantComposite 81 85
|
||||
116: 15(fvec2) ConstantComposite 54 57
|
||||
117: 8(float) Constant 0
|
||||
118: 15(fvec2) ConstantComposite 117 88
|
||||
119: 15(fvec2) ConstantComposite 37 55
|
||||
120: 15(fvec2) ConstantComposite 55 35
|
||||
121: 8(float) Constant 3204448256
|
||||
122: 15(fvec2) ConstantComposite 121 117
|
||||
123: 15(fvec2) ConstantComposite 90 37
|
||||
124: 15(fvec2) ConstantComposite 57 90
|
||||
125: 15(fvec2) ConstantComposite 88 121
|
||||
126: 107 ConstantComposite 108 109 110 111 112 113 114 115 116 118 119 120 122 123 124 125
|
||||
128: TypePointer Function 107
|
||||
133: 15(fvec2) ConstantComposite 117 117
|
||||
140: TypeImage 8(float) 2D array multi-sampled sampled format:Unknown
|
||||
141: TypePointer UniformConstant 140
|
||||
142(g_tTex2dmsf4a): 141(ptr) Variable UniformConstant
|
||||
189: TypePointer Function 10(PS_OUTPUT)
|
||||
191: 6(int) Constant 0
|
||||
192: 8(float) Constant 1065353216
|
||||
193: 9(fvec4) ConstantComposite 192 192 192 192
|
||||
194: TypePointer Function 9(fvec4)
|
||||
196: 6(int) Constant 1
|
||||
197: TypePointer Function 8(float)
|
||||
203: TypePointer Input 6(int)
|
||||
204(sample): 203(ptr) Variable Input
|
||||
210: TypePointer Output 9(fvec4)
|
||||
211(@entryPointOutput.Color): 210(ptr) Variable Output
|
||||
214: TypePointer Output 8(float)
|
||||
215(@entryPointOutput.Depth): 214(ptr) Variable Output
|
||||
218: TypeSampler
|
||||
219: TypePointer UniformConstant 218
|
||||
220(g_sSamp): 219(ptr) Variable UniformConstant
|
||||
27: 6(int) Constant 2
|
||||
28: TypeBool
|
||||
30: 18(int) Constant 2
|
||||
31: TypeArray 15(fvec2) 30
|
||||
32: 8(float) Constant 1048576000
|
||||
33: 15(fvec2) ConstantComposite 32 32
|
||||
34: 8(float) Constant 3196059648
|
||||
35: 15(fvec2) ConstantComposite 34 34
|
||||
36: 31 ConstantComposite 33 35
|
||||
38: TypePointer Function 31
|
||||
43: 6(int) Constant 4
|
||||
45: 18(int) Constant 4
|
||||
46: TypeArray 15(fvec2) 45
|
||||
47: 8(float) Constant 3187671040
|
||||
48: 8(float) Constant 3200253952
|
||||
49: 15(fvec2) ConstantComposite 47 48
|
||||
50: 8(float) Constant 1052770304
|
||||
51: 15(fvec2) ConstantComposite 50 47
|
||||
52: 8(float) Constant 1040187392
|
||||
53: 15(fvec2) ConstantComposite 48 52
|
||||
54: 15(fvec2) ConstantComposite 52 50
|
||||
55: 46 ConstantComposite 49 51 53 54
|
||||
57: TypePointer Function 46
|
||||
62: 6(int) Constant 8
|
||||
64: 18(int) Constant 8
|
||||
65: TypeArray 15(fvec2) 64
|
||||
66: 8(float) Constant 1031798784
|
||||
67: 8(float) Constant 3191865344
|
||||
68: 15(fvec2) ConstantComposite 66 67
|
||||
69: 8(float) Constant 3179282432
|
||||
70: 8(float) Constant 1044381696
|
||||
71: 15(fvec2) ConstantComposite 69 70
|
||||
72: 8(float) Constant 1050673152
|
||||
73: 15(fvec2) ConstantComposite 72 66
|
||||
74: 8(float) Constant 3198156800
|
||||
75: 15(fvec2) ConstantComposite 67 74
|
||||
76: 15(fvec2) ConstantComposite 74 72
|
||||
77: 8(float) Constant 3202351104
|
||||
78: 15(fvec2) ConstantComposite 77 69
|
||||
79: 8(float) Constant 1054867456
|
||||
80: 15(fvec2) ConstantComposite 70 79
|
||||
81: 15(fvec2) ConstantComposite 79 77
|
||||
82: 65 ConstantComposite 68 71 73 75 76 78 80 81
|
||||
84: TypePointer Function 65
|
||||
89: 6(int) Constant 16
|
||||
91: 18(int) Constant 16
|
||||
92: TypeArray 15(fvec2) 91
|
||||
93: 15(fvec2) ConstantComposite 66 66
|
||||
94: 15(fvec2) ConstantComposite 69 67
|
||||
95: 15(fvec2) ConstantComposite 67 52
|
||||
96: 15(fvec2) ConstantComposite 32 69
|
||||
97: 15(fvec2) ConstantComposite 74 47
|
||||
98: 15(fvec2) ConstantComposite 52 72
|
||||
99: 15(fvec2) ConstantComposite 72 70
|
||||
100: 15(fvec2) ConstantComposite 70 74
|
||||
101: 15(fvec2) ConstantComposite 47 50
|
||||
102: 8(float) Constant 0
|
||||
103: 15(fvec2) ConstantComposite 102 77
|
||||
104: 15(fvec2) ConstantComposite 34 48
|
||||
105: 15(fvec2) ConstantComposite 48 32
|
||||
106: 8(float) Constant 3204448256
|
||||
107: 15(fvec2) ConstantComposite 106 102
|
||||
108: 15(fvec2) ConstantComposite 79 34
|
||||
109: 15(fvec2) ConstantComposite 50 79
|
||||
110: 15(fvec2) ConstantComposite 77 106
|
||||
111: 92 ConstantComposite 93 94 95 96 97 98 99 100 101 103 104 105 107 108 109 110
|
||||
113: TypePointer Function 92
|
||||
117: 15(fvec2) ConstantComposite 102 102
|
||||
118: TypeVector 28(bool) 2
|
||||
129: TypeImage 8(float) 2D array multi-sampled sampled format:Unknown
|
||||
130: TypePointer UniformConstant 129
|
||||
131(g_tTex2dmsf4a): 130(ptr) Variable UniformConstant
|
||||
166: TypePointer Function 10(PS_OUTPUT)
|
||||
168: 6(int) Constant 0
|
||||
169: 8(float) Constant 1065353216
|
||||
170: 9(fvec4) ConstantComposite 169 169 169 169
|
||||
171: TypePointer Function 9(fvec4)
|
||||
173: 6(int) Constant 1
|
||||
174: TypePointer Function 8(float)
|
||||
180: TypePointer Input 6(int)
|
||||
181(sample): 180(ptr) Variable Input
|
||||
187: TypePointer Output 9(fvec4)
|
||||
188(@entryPointOutput.Color): 187(ptr) Variable Output
|
||||
191: TypePointer Output 8(float)
|
||||
192(@entryPointOutput.Depth): 191(ptr) Variable Output
|
||||
195: TypeSampler
|
||||
196: TypePointer UniformConstant 195
|
||||
197(g_sSamp): 196(ptr) Variable UniformConstant
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
202(sample): 7(ptr) Variable Function
|
||||
206(flattenTemp): 189(ptr) Variable Function
|
||||
207(param): 7(ptr) Variable Function
|
||||
205: 6(int) Load 204(sample)
|
||||
Store 202(sample) 205
|
||||
208: 6(int) Load 202(sample)
|
||||
Store 207(param) 208
|
||||
209:10(PS_OUTPUT) FunctionCall 13(@main(i1;) 207(param)
|
||||
Store 206(flattenTemp) 209
|
||||
212: 194(ptr) AccessChain 206(flattenTemp) 191
|
||||
213: 9(fvec4) Load 212
|
||||
Store 211(@entryPointOutput.Color) 213
|
||||
216: 197(ptr) AccessChain 206(flattenTemp) 196
|
||||
217: 8(float) Load 216
|
||||
Store 215(@entryPointOutput.Depth) 217
|
||||
179(sample): 7(ptr) Variable Function
|
||||
183(flattenTemp): 166(ptr) Variable Function
|
||||
184(param): 7(ptr) Variable Function
|
||||
182: 6(int) Load 181(sample)
|
||||
Store 179(sample) 182
|
||||
185: 6(int) Load 179(sample)
|
||||
Store 184(param) 185
|
||||
186:10(PS_OUTPUT) FunctionCall 13(@main(i1;) 184(param)
|
||||
Store 183(flattenTemp) 186
|
||||
189: 171(ptr) AccessChain 183(flattenTemp) 168
|
||||
190: 9(fvec4) Load 189
|
||||
Store 188(@entryPointOutput.Color) 190
|
||||
193: 174(ptr) AccessChain 183(flattenTemp) 173
|
||||
194: 8(float) Load 193
|
||||
Store 192(@entryPointOutput.Depth) 194
|
||||
Return
|
||||
FunctionEnd
|
||||
13(@main(i1;):10(PS_OUTPUT) Function None 11
|
||||
@ -750,165 +751,93 @@ gl_FragCoord origin is upper left
|
||||
14: Label
|
||||
17(r00): 16(ptr) Variable Function
|
||||
20(@sampleCount): 19(ptr) Variable Function
|
||||
26: 16(ptr) Variable Function
|
||||
42(indexable): 41(ptr) Variable Function
|
||||
46: 16(ptr) Variable Function
|
||||
65(indexable): 64(ptr) Variable Function
|
||||
69: 16(ptr) Variable Function
|
||||
96(indexable): 95(ptr) Variable Function
|
||||
100: 16(ptr) Variable Function
|
||||
129(indexable): 128(ptr) Variable Function
|
||||
138(r01): 16(ptr) Variable Function
|
||||
139(@sampleCount): 19(ptr) Variable Function
|
||||
145: 16(ptr) Variable Function
|
||||
151(indexable): 41(ptr) Variable Function
|
||||
155: 16(ptr) Variable Function
|
||||
161(indexable): 64(ptr) Variable Function
|
||||
165: 16(ptr) Variable Function
|
||||
171(indexable): 95(ptr) Variable Function
|
||||
175: 16(ptr) Variable Function
|
||||
181(indexable): 128(ptr) Variable Function
|
||||
190(psout): 189(ptr) Variable Function
|
||||
39(indexable): 38(ptr) Variable Function
|
||||
58(indexable): 57(ptr) Variable Function
|
||||
85(indexable): 84(ptr) Variable Function
|
||||
114(indexable): 113(ptr) Variable Function
|
||||
127(r01): 16(ptr) Variable Function
|
||||
128(@sampleCount): 19(ptr) Variable Function
|
||||
137(indexable): 38(ptr) Variable Function
|
||||
143(indexable): 57(ptr) Variable Function
|
||||
149(indexable): 84(ptr) Variable Function
|
||||
155(indexable): 113(ptr) Variable Function
|
||||
167(psout): 166(ptr) Variable Function
|
||||
24: 21 Load 23(g_tTex2dmsf4)
|
||||
25: 18(int) ImageQuerySamples 24
|
||||
Store 20(@sampleCount) 25
|
||||
27: 18(int) Load 20(@sampleCount)
|
||||
30: 29(bool) IEqual 27 28
|
||||
SelectionMerge 32 None
|
||||
BranchConditional 30 31 45
|
||||
31: Label
|
||||
40: 6(int) Load 12(sample)
|
||||
Store 42(indexable) 39
|
||||
43: 16(ptr) AccessChain 42(indexable) 40
|
||||
44: 15(fvec2) Load 43
|
||||
Store 26 44
|
||||
Branch 32
|
||||
45: Label
|
||||
47: 18(int) Load 20(@sampleCount)
|
||||
49: 29(bool) IEqual 47 48
|
||||
SelectionMerge 51 None
|
||||
BranchConditional 49 50 68
|
||||
50: Label
|
||||
63: 6(int) Load 12(sample)
|
||||
Store 65(indexable) 62
|
||||
66: 16(ptr) AccessChain 65(indexable) 63
|
||||
67: 15(fvec2) Load 66
|
||||
Store 46 67
|
||||
Branch 51
|
||||
68: Label
|
||||
70: 18(int) Load 20(@sampleCount)
|
||||
72: 29(bool) IEqual 70 71
|
||||
SelectionMerge 74 None
|
||||
BranchConditional 72 73 99
|
||||
73: Label
|
||||
94: 6(int) Load 12(sample)
|
||||
Store 96(indexable) 93
|
||||
97: 16(ptr) AccessChain 96(indexable) 94
|
||||
98: 15(fvec2) Load 97
|
||||
Store 69 98
|
||||
Branch 74
|
||||
99: Label
|
||||
101: 18(int) Load 20(@sampleCount)
|
||||
103: 29(bool) IEqual 101 102
|
||||
SelectionMerge 105 None
|
||||
BranchConditional 103 104 132
|
||||
104: Label
|
||||
127: 6(int) Load 12(sample)
|
||||
Store 129(indexable) 126
|
||||
130: 16(ptr) AccessChain 129(indexable) 127
|
||||
131: 15(fvec2) Load 130
|
||||
Store 100 131
|
||||
Branch 105
|
||||
132: Label
|
||||
Store 100 133
|
||||
Branch 105
|
||||
105: Label
|
||||
134: 15(fvec2) Load 100
|
||||
Store 69 134
|
||||
Branch 74
|
||||
74: Label
|
||||
135: 15(fvec2) Load 69
|
||||
Store 46 135
|
||||
Branch 51
|
||||
51: Label
|
||||
136: 15(fvec2) Load 46
|
||||
Store 26 136
|
||||
Branch 32
|
||||
32: Label
|
||||
137: 15(fvec2) Load 26
|
||||
Store 17(r00) 137
|
||||
143: 140 Load 142(g_tTex2dmsf4a)
|
||||
144: 18(int) ImageQuerySamples 143
|
||||
Store 139(@sampleCount) 144
|
||||
146: 18(int) Load 139(@sampleCount)
|
||||
147: 29(bool) IEqual 146 28
|
||||
SelectionMerge 149 None
|
||||
BranchConditional 147 148 154
|
||||
148: Label
|
||||
150: 6(int) Load 12(sample)
|
||||
Store 151(indexable) 39
|
||||
152: 16(ptr) AccessChain 151(indexable) 150
|
||||
153: 15(fvec2) Load 152
|
||||
Store 145 153
|
||||
Branch 149
|
||||
154: Label
|
||||
156: 18(int) Load 139(@sampleCount)
|
||||
157: 29(bool) IEqual 156 48
|
||||
SelectionMerge 159 None
|
||||
BranchConditional 157 158 164
|
||||
158: Label
|
||||
160: 6(int) Load 12(sample)
|
||||
Store 161(indexable) 62
|
||||
162: 16(ptr) AccessChain 161(indexable) 160
|
||||
163: 15(fvec2) Load 162
|
||||
Store 155 163
|
||||
Branch 159
|
||||
164: Label
|
||||
166: 18(int) Load 139(@sampleCount)
|
||||
167: 29(bool) IEqual 166 71
|
||||
SelectionMerge 169 None
|
||||
BranchConditional 167 168 174
|
||||
168: Label
|
||||
170: 6(int) Load 12(sample)
|
||||
Store 171(indexable) 93
|
||||
172: 16(ptr) AccessChain 171(indexable) 170
|
||||
173: 15(fvec2) Load 172
|
||||
Store 165 173
|
||||
Branch 169
|
||||
174: Label
|
||||
176: 18(int) Load 139(@sampleCount)
|
||||
177: 29(bool) IEqual 176 102
|
||||
SelectionMerge 179 None
|
||||
BranchConditional 177 178 184
|
||||
178: Label
|
||||
180: 6(int) Load 12(sample)
|
||||
Store 181(indexable) 126
|
||||
182: 16(ptr) AccessChain 181(indexable) 180
|
||||
183: 15(fvec2) Load 182
|
||||
Store 175 183
|
||||
Branch 179
|
||||
184: Label
|
||||
Store 175 133
|
||||
Branch 179
|
||||
179: Label
|
||||
185: 15(fvec2) Load 175
|
||||
Store 165 185
|
||||
Branch 169
|
||||
169: Label
|
||||
186: 15(fvec2) Load 165
|
||||
Store 155 186
|
||||
Branch 159
|
||||
159: Label
|
||||
187: 15(fvec2) Load 155
|
||||
Store 145 187
|
||||
Branch 149
|
||||
149: Label
|
||||
188: 15(fvec2) Load 145
|
||||
Store 138(r01) 188
|
||||
195: 194(ptr) AccessChain 190(psout) 191
|
||||
Store 195 193
|
||||
198: 197(ptr) AccessChain 190(psout) 196
|
||||
Store 198 192
|
||||
199:10(PS_OUTPUT) Load 190(psout)
|
||||
ReturnValue 199
|
||||
26: 18(int) Load 20(@sampleCount)
|
||||
29: 28(bool) IEqual 26 27
|
||||
37: 6(int) Load 12(sample)
|
||||
Store 39(indexable) 36
|
||||
40: 16(ptr) AccessChain 39(indexable) 37
|
||||
41: 15(fvec2) Load 40
|
||||
42: 18(int) Load 20(@sampleCount)
|
||||
44: 28(bool) IEqual 42 43
|
||||
56: 6(int) Load 12(sample)
|
||||
Store 58(indexable) 55
|
||||
59: 16(ptr) AccessChain 58(indexable) 56
|
||||
60: 15(fvec2) Load 59
|
||||
61: 18(int) Load 20(@sampleCount)
|
||||
63: 28(bool) IEqual 61 62
|
||||
83: 6(int) Load 12(sample)
|
||||
Store 85(indexable) 82
|
||||
86: 16(ptr) AccessChain 85(indexable) 83
|
||||
87: 15(fvec2) Load 86
|
||||
88: 18(int) Load 20(@sampleCount)
|
||||
90: 28(bool) IEqual 88 89
|
||||
112: 6(int) Load 12(sample)
|
||||
Store 114(indexable) 111
|
||||
115: 16(ptr) AccessChain 114(indexable) 112
|
||||
116: 15(fvec2) Load 115
|
||||
119: 118(bvec2) CompositeConstruct 90 90
|
||||
120: 15(fvec2) Select 119 116 117
|
||||
121: 118(bvec2) CompositeConstruct 63 63
|
||||
122: 15(fvec2) Select 121 87 120
|
||||
123: 118(bvec2) CompositeConstruct 44 44
|
||||
124: 15(fvec2) Select 123 60 122
|
||||
125: 118(bvec2) CompositeConstruct 29 29
|
||||
126: 15(fvec2) Select 125 41 124
|
||||
Store 17(r00) 126
|
||||
132: 129 Load 131(g_tTex2dmsf4a)
|
||||
133: 18(int) ImageQuerySamples 132
|
||||
Store 128(@sampleCount) 133
|
||||
134: 18(int) Load 128(@sampleCount)
|
||||
135: 28(bool) IEqual 134 27
|
||||
136: 6(int) Load 12(sample)
|
||||
Store 137(indexable) 36
|
||||
138: 16(ptr) AccessChain 137(indexable) 136
|
||||
139: 15(fvec2) Load 138
|
||||
140: 18(int) Load 128(@sampleCount)
|
||||
141: 28(bool) IEqual 140 43
|
||||
142: 6(int) Load 12(sample)
|
||||
Store 143(indexable) 55
|
||||
144: 16(ptr) AccessChain 143(indexable) 142
|
||||
145: 15(fvec2) Load 144
|
||||
146: 18(int) Load 128(@sampleCount)
|
||||
147: 28(bool) IEqual 146 62
|
||||
148: 6(int) Load 12(sample)
|
||||
Store 149(indexable) 82
|
||||
150: 16(ptr) AccessChain 149(indexable) 148
|
||||
151: 15(fvec2) Load 150
|
||||
152: 18(int) Load 128(@sampleCount)
|
||||
153: 28(bool) IEqual 152 89
|
||||
154: 6(int) Load 12(sample)
|
||||
Store 155(indexable) 111
|
||||
156: 16(ptr) AccessChain 155(indexable) 154
|
||||
157: 15(fvec2) Load 156
|
||||
158: 118(bvec2) CompositeConstruct 153 153
|
||||
159: 15(fvec2) Select 158 157 117
|
||||
160: 118(bvec2) CompositeConstruct 147 147
|
||||
161: 15(fvec2) Select 160 151 159
|
||||
162: 118(bvec2) CompositeConstruct 141 141
|
||||
163: 15(fvec2) Select 162 145 161
|
||||
164: 118(bvec2) CompositeConstruct 135 135
|
||||
165: 15(fvec2) Select 164 139 163
|
||||
Store 127(r01) 165
|
||||
172: 171(ptr) AccessChain 167(psout) 168
|
||||
Store 172 170
|
||||
175: 174(ptr) AccessChain 167(psout) 173
|
||||
Store 175 169
|
||||
176:10(PS_OUTPUT) Load 167(psout)
|
||||
ReturnValue 176
|
||||
FunctionEnd
|
||||
|
@ -133,7 +133,7 @@ gl_FragCoord origin is upper left
|
||||
0:28 Sequence
|
||||
0:28 move second child to first child ( temp float)
|
||||
0:28 'g' ( temp float)
|
||||
0:28 Test condition and select ( temp float)
|
||||
0:28 Test condition and select ( temp float): no shortcircuit
|
||||
0:28 Condition
|
||||
0:28 Convert float to bool ( temp bool)
|
||||
0:28 condf: direct index for structure ( uniform float)
|
||||
@ -302,7 +302,7 @@ gl_FragCoord origin is upper left
|
||||
0:28 Sequence
|
||||
0:28 move second child to first child ( temp float)
|
||||
0:28 'g' ( temp float)
|
||||
0:28 Test condition and select ( temp float)
|
||||
0:28 Test condition and select ( temp float): no shortcircuit
|
||||
0:28 Condition
|
||||
0:28 Convert float to bool ( temp bool)
|
||||
0:28 condf: direct index for structure ( uniform float)
|
||||
|
@ -18,7 +18,7 @@ gl_FragCoord origin is upper left
|
||||
0:3 'n_dot_l' ( in float)
|
||||
0:3 Constant:
|
||||
0:3 0.000000
|
||||
0:3 Test condition and select ( temp float)
|
||||
0:3 Test condition and select ( temp float): no shortcircuit
|
||||
0:3 Condition
|
||||
0:3 Compare Less Than ( temp bool)
|
||||
0:3 min ( temp float)
|
||||
@ -79,7 +79,7 @@ gl_FragCoord origin is upper left
|
||||
0:3 'n_dot_l' ( in float)
|
||||
0:3 Constant:
|
||||
0:3 0.000000
|
||||
0:3 Test condition and select ( temp float)
|
||||
0:3 Test condition and select ( temp float): no shortcircuit
|
||||
0:3 Condition
|
||||
0:3 Compare Less Than ( temp bool)
|
||||
0:3 min ( temp float)
|
||||
@ -119,12 +119,12 @@ gl_FragCoord origin is upper left
|
||||
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 80004
|
||||
// Id's are bound by 52
|
||||
// Id's are bound by 48
|
||||
|
||||
Capability Shader
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint Fragment 4 "PixelShaderFunction" 37 40 43
|
||||
EntryPoint Fragment 4 "PixelShaderFunction" 33 36 39
|
||||
ExecutionMode 4 OriginUpperLeft
|
||||
Source HLSL 500
|
||||
Name 4 "PixelShaderFunction"
|
||||
@ -133,18 +133,18 @@ gl_FragCoord origin is upper left
|
||||
Name 10 "n_dot_h"
|
||||
Name 11 "m"
|
||||
Name 16 "r0"
|
||||
Name 35 "n_dot_l"
|
||||
Name 37 "n_dot_l"
|
||||
Name 39 "n_dot_h"
|
||||
Name 40 "n_dot_h"
|
||||
Name 42 "m"
|
||||
Name 43 "m"
|
||||
Name 31 "n_dot_l"
|
||||
Name 33 "n_dot_l"
|
||||
Name 35 "n_dot_h"
|
||||
Name 36 "n_dot_h"
|
||||
Name 38 "m"
|
||||
Name 39 "m"
|
||||
Name 41 "param"
|
||||
Name 43 "param"
|
||||
Name 45 "param"
|
||||
Name 47 "param"
|
||||
Name 49 "param"
|
||||
Decorate 37(n_dot_l) Location 0
|
||||
Decorate 40(n_dot_h) Location 1
|
||||
Decorate 43(m) Location 2
|
||||
Decorate 33(n_dot_l) Location 0
|
||||
Decorate 36(n_dot_h) Location 1
|
||||
Decorate 39(m) Location 2
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeFloat 32
|
||||
@ -154,32 +154,32 @@ gl_FragCoord origin is upper left
|
||||
15: TypePointer Function 14(fvec4)
|
||||
17: 6(float) Constant 1065353216
|
||||
19: 6(float) Constant 0
|
||||
25: TypeBool
|
||||
36: TypePointer Input 6(float)
|
||||
37(n_dot_l): 36(ptr) Variable Input
|
||||
40(n_dot_h): 36(ptr) Variable Input
|
||||
43(m): 36(ptr) Variable Input
|
||||
24: TypeBool
|
||||
32: TypePointer Input 6(float)
|
||||
33(n_dot_l): 32(ptr) Variable Input
|
||||
36(n_dot_h): 32(ptr) Variable Input
|
||||
39(m): 32(ptr) Variable Input
|
||||
4(PixelShaderFunction): 2 Function None 3
|
||||
5: Label
|
||||
35(n_dot_l): 7(ptr) Variable Function
|
||||
39(n_dot_h): 7(ptr) Variable Function
|
||||
42(m): 7(ptr) Variable Function
|
||||
31(n_dot_l): 7(ptr) Variable Function
|
||||
35(n_dot_h): 7(ptr) Variable Function
|
||||
38(m): 7(ptr) Variable Function
|
||||
41(param): 7(ptr) Variable Function
|
||||
43(param): 7(ptr) Variable Function
|
||||
45(param): 7(ptr) Variable Function
|
||||
47(param): 7(ptr) Variable Function
|
||||
49(param): 7(ptr) Variable Function
|
||||
38: 6(float) Load 37(n_dot_l)
|
||||
Store 35(n_dot_l) 38
|
||||
41: 6(float) Load 40(n_dot_h)
|
||||
Store 39(n_dot_h) 41
|
||||
44: 6(float) Load 43(m)
|
||||
Store 42(m) 44
|
||||
46: 6(float) Load 35(n_dot_l)
|
||||
34: 6(float) Load 33(n_dot_l)
|
||||
Store 31(n_dot_l) 34
|
||||
37: 6(float) Load 36(n_dot_h)
|
||||
Store 35(n_dot_h) 37
|
||||
40: 6(float) Load 39(m)
|
||||
Store 38(m) 40
|
||||
42: 6(float) Load 31(n_dot_l)
|
||||
Store 41(param) 42
|
||||
44: 6(float) Load 35(n_dot_h)
|
||||
Store 43(param) 44
|
||||
46: 6(float) Load 38(m)
|
||||
Store 45(param) 46
|
||||
48: 6(float) Load 39(n_dot_h)
|
||||
Store 47(param) 48
|
||||
50: 6(float) Load 42(m)
|
||||
Store 49(param) 50
|
||||
51: 2 FunctionCall 12(@PixelShaderFunction(f1;f1;f1;) 45(param) 47(param) 49(param)
|
||||
47: 2 FunctionCall 12(@PixelShaderFunction(f1;f1;f1;) 41(param) 43(param) 45(param)
|
||||
Return
|
||||
FunctionEnd
|
||||
12(@PixelShaderFunction(f1;f1;f1;): 2 Function None 8
|
||||
@ -188,27 +188,17 @@ gl_FragCoord origin is upper left
|
||||
11(m): 7(ptr) FunctionParameter
|
||||
13: Label
|
||||
16(r0): 15(ptr) Variable Function
|
||||
21: 7(ptr) Variable Function
|
||||
18: 6(float) Load 9(n_dot_l)
|
||||
20: 6(float) ExtInst 1(GLSL.std.450) 40(FMax) 18 19
|
||||
22: 6(float) Load 9(n_dot_l)
|
||||
23: 6(float) Load 10(n_dot_h)
|
||||
24: 6(float) ExtInst 1(GLSL.std.450) 37(FMin) 22 23
|
||||
26: 25(bool) FOrdLessThan 24 19
|
||||
SelectionMerge 28 None
|
||||
BranchConditional 26 27 29
|
||||
27: Label
|
||||
Store 21 19
|
||||
Branch 28
|
||||
29: Label
|
||||
30: 6(float) Load 10(n_dot_h)
|
||||
31: 6(float) Load 11(m)
|
||||
32: 6(float) FMul 30 31
|
||||
Store 21 32
|
||||
Branch 28
|
||||
28: Label
|
||||
33: 6(float) Load 21
|
||||
34: 14(fvec4) CompositeConstruct 17 20 33 17
|
||||
Store 16(r0) 34
|
||||
21: 6(float) Load 9(n_dot_l)
|
||||
22: 6(float) Load 10(n_dot_h)
|
||||
23: 6(float) ExtInst 1(GLSL.std.450) 37(FMin) 21 22
|
||||
25: 24(bool) FOrdLessThan 23 19
|
||||
26: 6(float) Load 10(n_dot_h)
|
||||
27: 6(float) Load 11(m)
|
||||
28: 6(float) FMul 26 27
|
||||
29: 6(float) Select 25 19 28
|
||||
30: 14(fvec4) CompositeConstruct 17 20 29 17
|
||||
Store 16(r0) 30
|
||||
Return
|
||||
FunctionEnd
|
||||
|
@ -86,7 +86,7 @@ gl_FragCoord origin is upper left
|
||||
0:25 'uint' ( temp mediump uint)
|
||||
0:25 'min16float' ( temp mediump float)
|
||||
0:25 'min10float' ( temp mediump float)
|
||||
0:25 Test condition and select ( temp mediump float)
|
||||
0:25 Test condition and select ( temp mediump float): no shortcircuit
|
||||
0:25 Condition
|
||||
0:25 direct index ( temp bool)
|
||||
0:25 'bool' ( temp 2-element array of bool)
|
||||
@ -221,7 +221,7 @@ gl_FragCoord origin is upper left
|
||||
0:25 'uint' ( temp mediump uint)
|
||||
0:25 'min16float' ( temp mediump float)
|
||||
0:25 'min10float' ( temp mediump float)
|
||||
0:25 Test condition and select ( temp mediump float)
|
||||
0:25 Test condition and select ( temp mediump float): no shortcircuit
|
||||
0:25 Condition
|
||||
0:25 direct index ( temp bool)
|
||||
0:25 'bool' ( temp 2-element array of bool)
|
||||
@ -267,12 +267,12 @@ gl_FragCoord origin is upper left
|
||||
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 80004
|
||||
// Id's are bound by 109
|
||||
// Id's are bound by 105
|
||||
|
||||
Capability Shader
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint Fragment 4 "main" 107
|
||||
EntryPoint Fragment 4 "main" 103
|
||||
ExecutionMode 4 OriginUpperLeft
|
||||
Source HLSL 500
|
||||
Name 4 "main"
|
||||
@ -289,9 +289,9 @@ gl_FragCoord origin is upper left
|
||||
Name 56 "foo_t"
|
||||
MemberName 56(foo_t) 0 "float"
|
||||
Name 58 "float"
|
||||
Name 86 "param"
|
||||
Name 93 "half2x3"
|
||||
Name 107 "@entryPointOutput"
|
||||
Name 82 "param"
|
||||
Name 89 "half2x3"
|
||||
Name 103 "@entryPointOutput"
|
||||
Decorate 49(min16float) RelaxedPrecision
|
||||
Decorate 50 RelaxedPrecision
|
||||
Decorate 51 RelaxedPrecision
|
||||
@ -308,15 +308,14 @@ gl_FragCoord origin is upper left
|
||||
Decorate 72 RelaxedPrecision
|
||||
Decorate 73 RelaxedPrecision
|
||||
Decorate 74 RelaxedPrecision
|
||||
Decorate 80 RelaxedPrecision
|
||||
Decorate 77 RelaxedPrecision
|
||||
Decorate 78 RelaxedPrecision
|
||||
Decorate 79 RelaxedPrecision
|
||||
Decorate 81 RelaxedPrecision
|
||||
Decorate 83 RelaxedPrecision
|
||||
Decorate 84 RelaxedPrecision
|
||||
Decorate 85 RelaxedPrecision
|
||||
Decorate 87 RelaxedPrecision
|
||||
Decorate 88 RelaxedPrecision
|
||||
Decorate 89 RelaxedPrecision
|
||||
Decorate 107(@entryPointOutput) Location 0
|
||||
Decorate 103(@entryPointOutput) Location 0
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeFloat 32
|
||||
@ -341,16 +340,16 @@ gl_FragCoord origin is upper left
|
||||
56(foo_t): TypeStruct 6(float)
|
||||
57: TypePointer Function 56(foo_t)
|
||||
59: 6(float) Constant 1109917696
|
||||
90: TypeVector 6(float) 3
|
||||
91: TypeMatrix 90(fvec3) 2
|
||||
92: TypePointer Function 91
|
||||
97: 22(int) Constant 0
|
||||
106: TypePointer Output 12(fvec4)
|
||||
107(@entryPointOutput): 106(ptr) Variable Output
|
||||
86: TypeVector 6(float) 3
|
||||
87: TypeMatrix 86(fvec3) 2
|
||||
88: TypePointer Function 87
|
||||
93: 22(int) Constant 0
|
||||
102: TypePointer Output 12(fvec4)
|
||||
103(@entryPointOutput): 102(ptr) Variable Output
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
108: 12(fvec4) FunctionCall 14(@main()
|
||||
Store 107(@entryPointOutput) 108
|
||||
104: 12(fvec4) FunctionCall 14(@main()
|
||||
Store 103(@entryPointOutput) 104
|
||||
Return
|
||||
FunctionEnd
|
||||
10(fn(f1;): 6(float) Function None 8
|
||||
@ -369,9 +368,8 @@ gl_FragCoord origin is upper left
|
||||
52(min10float): 7(ptr) Variable Function
|
||||
54(half): 7(ptr) Variable Function
|
||||
58(float): 57(ptr) Variable Function
|
||||
75: 7(ptr) Variable Function
|
||||
86(param): 7(ptr) Variable Function
|
||||
93(half2x3): 92(ptr) Variable Function
|
||||
82(param): 7(ptr) Variable Function
|
||||
89(half2x3): 88(ptr) Variable Function
|
||||
Store 19(float) 20
|
||||
27: 6(float) Load 19(float)
|
||||
29: 21(bool) FOrdNotEqual 27 28
|
||||
@ -412,36 +410,27 @@ gl_FragCoord origin is upper left
|
||||
72: 6(float) FAdd 70 71
|
||||
73: 6(float) Load 52(min10float)
|
||||
74: 6(float) FAdd 72 73
|
||||
76: 37(ptr) AccessChain 26(bool) 40
|
||||
77: 21(bool) Load 76
|
||||
SelectionMerge 79 None
|
||||
BranchConditional 77 78 82
|
||||
78: Label
|
||||
80: 33(int) Load 35(int)
|
||||
81: 6(float) ConvertSToF 80
|
||||
Store 75 81
|
||||
Branch 79
|
||||
82: Label
|
||||
83: 6(float) Load 19(float)
|
||||
Store 75 83
|
||||
Branch 79
|
||||
79: Label
|
||||
84: 6(float) Load 75
|
||||
85: 6(float) FAdd 74 84
|
||||
87: 6(float) Load 19(float)
|
||||
Store 86(param) 87
|
||||
88: 6(float) FunctionCall 10(fn(f1;) 86(param)
|
||||
89: 6(float) FAdd 85 88
|
||||
Store 19(float) 89
|
||||
94: 6(float) Load 19(float)
|
||||
75: 37(ptr) AccessChain 26(bool) 40
|
||||
76: 21(bool) Load 75
|
||||
77: 33(int) Load 35(int)
|
||||
78: 6(float) ConvertSToF 77
|
||||
79: 6(float) Load 19(float)
|
||||
80: 6(float) Select 76 78 79
|
||||
81: 6(float) FAdd 74 80
|
||||
83: 6(float) Load 19(float)
|
||||
Store 82(param) 83
|
||||
84: 6(float) FunctionCall 10(fn(f1;) 82(param)
|
||||
85: 6(float) FAdd 81 84
|
||||
Store 19(float) 85
|
||||
90: 6(float) Load 19(float)
|
||||
91: 6(float) Load 19(float)
|
||||
92: 6(float) FMul 90 91
|
||||
94: 7(ptr) AccessChain 89(half2x3) 40 93
|
||||
Store 94 92
|
||||
95: 6(float) Load 19(float)
|
||||
96: 6(float) FMul 94 95
|
||||
98: 7(ptr) AccessChain 93(half2x3) 40 97
|
||||
Store 98 96
|
||||
99: 6(float) Load 19(float)
|
||||
100: 7(ptr) AccessChain 93(half2x3) 40 97
|
||||
101: 6(float) Load 100
|
||||
102: 6(float) FAdd 99 101
|
||||
103: 12(fvec4) CompositeConstruct 102 102 102 102
|
||||
ReturnValue 103
|
||||
96: 7(ptr) AccessChain 89(half2x3) 40 93
|
||||
97: 6(float) Load 96
|
||||
98: 6(float) FAdd 95 97
|
||||
99: 12(fvec4) CompositeConstruct 98 98 98 98
|
||||
ReturnValue 99
|
||||
FunctionEnd
|
||||
|
@ -273,10 +273,10 @@ spv.400.frag
|
||||
439(bvec2v): 438(ptr) Variable Function
|
||||
448(bvec3v): 447(ptr) Variable Function
|
||||
457(bvec4v): 456(ptr) Variable Function
|
||||
556: 429(ptr) Variable Function
|
||||
565: 438(ptr) Variable Function
|
||||
574: 447(ptr) Variable Function
|
||||
583: 456(ptr) Variable Function
|
||||
557: 429(ptr) Variable Function
|
||||
566: 438(ptr) Variable Function
|
||||
575: 447(ptr) Variable Function
|
||||
584: 456(ptr) Variable Function
|
||||
739(dmat2v): 738(ptr) Variable Function
|
||||
745(dmat3v): 744(ptr) Variable Function
|
||||
751(dmat4v): 750(ptr) Variable Function
|
||||
@ -875,61 +875,61 @@ spv.400.frag
|
||||
554: 53(fvec4) Load 55(dvec4v)
|
||||
555: 455(bvec4) IsNan 554
|
||||
Store 457(bvec4v) 555
|
||||
557: 428(bool) Load 430(boolv)
|
||||
556: 428(bool) Load 430(boolv)
|
||||
SelectionMerge 559 None
|
||||
BranchConditional 557 558 562
|
||||
BranchConditional 556 558 562
|
||||
558: Label
|
||||
560: 39(float) Load 41(doublev)
|
||||
561: 428(bool) IsInf 560
|
||||
Store 556 561
|
||||
Store 557 561
|
||||
Branch 559
|
||||
562: Label
|
||||
Store 556 563
|
||||
Store 557 563
|
||||
Branch 559
|
||||
559: Label
|
||||
564: 428(bool) Load 556
|
||||
564: 428(bool) Load 557
|
||||
Store 430(boolv) 564
|
||||
566: 428(bool) Load 430(boolv)
|
||||
565: 428(bool) Load 430(boolv)
|
||||
SelectionMerge 568 None
|
||||
BranchConditional 566 567 571
|
||||
BranchConditional 565 567 571
|
||||
567: Label
|
||||
569: 43(fvec2) Load 45(dvec2v)
|
||||
570: 437(bvec2) IsInf 569
|
||||
Store 565 570
|
||||
Store 566 570
|
||||
Branch 568
|
||||
571: Label
|
||||
Store 565 572
|
||||
Store 566 572
|
||||
Branch 568
|
||||
568: Label
|
||||
573: 437(bvec2) Load 565
|
||||
573: 437(bvec2) Load 566
|
||||
Store 439(bvec2v) 573
|
||||
575: 428(bool) Load 430(boolv)
|
||||
574: 428(bool) Load 430(boolv)
|
||||
SelectionMerge 577 None
|
||||
BranchConditional 575 576 580
|
||||
BranchConditional 574 576 580
|
||||
576: Label
|
||||
578: 48(fvec3) Load 50(dvec3v)
|
||||
579: 446(bvec3) IsInf 578
|
||||
Store 574 579
|
||||
Store 575 579
|
||||
Branch 577
|
||||
580: Label
|
||||
Store 574 581
|
||||
Store 575 581
|
||||
Branch 577
|
||||
577: Label
|
||||
582: 446(bvec3) Load 574
|
||||
582: 446(bvec3) Load 575
|
||||
Store 448(bvec3v) 582
|
||||
584: 428(bool) Load 430(boolv)
|
||||
583: 428(bool) Load 430(boolv)
|
||||
SelectionMerge 586 None
|
||||
BranchConditional 584 585 589
|
||||
BranchConditional 583 585 589
|
||||
585: Label
|
||||
587: 53(fvec4) Load 55(dvec4v)
|
||||
588: 455(bvec4) IsInf 587
|
||||
Store 583 588
|
||||
Store 584 588
|
||||
Branch 586
|
||||
589: Label
|
||||
Store 583 590
|
||||
Store 584 590
|
||||
Branch 586
|
||||
586: Label
|
||||
591: 455(bvec4) Load 583
|
||||
591: 455(bvec4) Load 584
|
||||
Store 457(bvec4v) 591
|
||||
592: 39(float) Load 41(doublev)
|
||||
593: 39(float) ExtInst 1(GLSL.std.450) 66(Length) 592
|
||||
|
@ -90,10 +90,10 @@ spv.Operations.frag
|
||||
188(f): 143(ptr) Variable Function
|
||||
285(u): 284(ptr) Variable Function
|
||||
305(b): 304(ptr) Variable Function
|
||||
486: 8(ptr) Variable Function
|
||||
487: 8(ptr) Variable Function
|
||||
503(m1): 502(ptr) Variable Function
|
||||
510(m2): 502(ptr) Variable Function
|
||||
513: 502(ptr) Variable Function
|
||||
514: 502(ptr) Variable Function
|
||||
12: 7(fvec4) Load 11(uv4)
|
||||
13: 7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12
|
||||
Store 9(v) 13
|
||||
@ -658,9 +658,9 @@ spv.Operations.frag
|
||||
482: 178(bool) Load 305(b)
|
||||
483: 178(bool) LogicalNot 482
|
||||
Store 305(b) 483
|
||||
487: 178(bool) Load 305(b)
|
||||
486: 178(bool) Load 305(b)
|
||||
SelectionMerge 489 None
|
||||
BranchConditional 487 488 498
|
||||
BranchConditional 486 488 498
|
||||
488: Label
|
||||
490: 18(int) Load 20(i)
|
||||
491: 6(float) ConvertSToF 490
|
||||
@ -670,30 +670,30 @@ spv.Operations.frag
|
||||
495: 7(fvec4) FAdd 492 494
|
||||
496: 7(fvec4) Load 9(v)
|
||||
497: 7(fvec4) FAdd 495 496
|
||||
Store 486 497
|
||||
Store 487 497
|
||||
Branch 489
|
||||
498: Label
|
||||
499: 7(fvec4) Load 9(v)
|
||||
Store 486 499
|
||||
Store 487 499
|
||||
Branch 489
|
||||
489: Label
|
||||
500: 7(fvec4) Load 486
|
||||
500: 7(fvec4) Load 487
|
||||
Store 485(FragColor) 500
|
||||
Store 503(m1) 509
|
||||
Store 510(m2) 512
|
||||
514: 178(bool) Load 305(b)
|
||||
513: 178(bool) Load 305(b)
|
||||
SelectionMerge 516 None
|
||||
BranchConditional 514 515 518
|
||||
BranchConditional 513 515 518
|
||||
515: Label
|
||||
517: 501 Load 503(m1)
|
||||
Store 513 517
|
||||
Store 514 517
|
||||
Branch 516
|
||||
518: Label
|
||||
519: 501 Load 510(m2)
|
||||
Store 513 519
|
||||
Store 514 519
|
||||
Branch 516
|
||||
516: Label
|
||||
520: 8(ptr) AccessChain 513 405
|
||||
520: 8(ptr) AccessChain 514 405
|
||||
521: 7(fvec4) Load 520
|
||||
522: 7(fvec4) Load 485(FragColor)
|
||||
523: 7(fvec4) FAdd 522 521
|
||||
|
@ -86,8 +86,8 @@ spv.bitCast.frag
|
||||
148(u4): 147(ptr) Variable Input
|
||||
153: TypePointer Output 46(fvec4)
|
||||
154(fragColor): 153(ptr) Variable Output
|
||||
159: TypeBool
|
||||
160: TypeVector 159(bool) 4
|
||||
158: TypeBool
|
||||
159: TypeVector 158(bool) 4
|
||||
168: 12(float) Constant 1045220557
|
||||
169: 46(fvec4) ConstantComposite 168 168 168 168
|
||||
4(main): 2 Function None 3
|
||||
@ -95,7 +95,7 @@ spv.bitCast.frag
|
||||
9(idata): 8(ptr) Variable Function
|
||||
55(udata): 54(ptr) Variable Function
|
||||
85(fdata): 84(ptr) Variable Function
|
||||
155: 84(ptr) Variable Function
|
||||
162: 84(ptr) Variable Function
|
||||
Store 9(idata) 11
|
||||
15: 12(float) Load 14(f1)
|
||||
16: 6(int) Bitcast 15
|
||||
@ -211,24 +211,24 @@ spv.bitCast.frag
|
||||
151: 46(fvec4) Load 85(fdata)
|
||||
152: 46(fvec4) FAdd 151 150
|
||||
Store 85(fdata) 152
|
||||
156: 7(ivec4) Load 9(idata)
|
||||
157: 53(ivec4) Bitcast 156
|
||||
158: 53(ivec4) Load 55(udata)
|
||||
161: 160(bvec4) IEqual 157 158
|
||||
162: 159(bool) All 161
|
||||
155: 7(ivec4) Load 9(idata)
|
||||
156: 53(ivec4) Bitcast 155
|
||||
157: 53(ivec4) Load 55(udata)
|
||||
160: 159(bvec4) IEqual 156 157
|
||||
161: 158(bool) All 160
|
||||
SelectionMerge 164 None
|
||||
BranchConditional 162 163 166
|
||||
BranchConditional 161 163 166
|
||||
163: Label
|
||||
165: 46(fvec4) Load 85(fdata)
|
||||
Store 155 165
|
||||
Store 162 165
|
||||
Branch 164
|
||||
166: Label
|
||||
167: 46(fvec4) Load 85(fdata)
|
||||
170: 46(fvec4) FAdd 167 169
|
||||
Store 155 170
|
||||
Store 162 170
|
||||
Branch 164
|
||||
164: Label
|
||||
171: 46(fvec4) Load 155
|
||||
171: 46(fvec4) Load 162
|
||||
Store 154(fragColor) 171
|
||||
Return
|
||||
FunctionEnd
|
||||
|
@ -119,8 +119,8 @@ spv.conversion.frag
|
||||
315: 13(int) Constant 1
|
||||
321: TypePointer Output 95(fvec4)
|
||||
322(gl_FragColor): 321(ptr) Variable Output
|
||||
337: 13(int) Constant 2
|
||||
350: 13(int) Constant 3
|
||||
336: 13(int) Constant 2
|
||||
349: 13(int) Constant 3
|
||||
427: TypePointer Private 6(bool)
|
||||
428(u_b): 427(ptr) Variable Private
|
||||
429: TypePointer Private 23(bvec2)
|
||||
@ -163,9 +163,9 @@ spv.conversion.frag
|
||||
110(f2): 109(ptr) Variable Function
|
||||
114(f3): 113(ptr) Variable Function
|
||||
118(f4): 117(ptr) Variable Function
|
||||
297: 105(ptr) Variable Function
|
||||
307: 105(ptr) Variable Function
|
||||
323: 117(ptr) Variable Function
|
||||
298: 105(ptr) Variable Function
|
||||
309: 105(ptr) Variable Function
|
||||
353: 117(ptr) Variable Function
|
||||
417(cv2): 93(ptr) Variable Function
|
||||
418(cv5): 44(ptr) Variable Function
|
||||
12: 9(int) Load 11(u_i)
|
||||
@ -425,72 +425,72 @@ spv.conversion.frag
|
||||
SelectionMerge 296 None
|
||||
BranchConditional 294 295 296
|
||||
295: Label
|
||||
298: 6(bool) Load 8(b)
|
||||
297: 6(bool) Load 8(b)
|
||||
SelectionMerge 300 None
|
||||
BranchConditional 298 299 303
|
||||
BranchConditional 297 299 303
|
||||
299: Label
|
||||
301: 9(int) Load 58(i)
|
||||
302: 16(float) ConvertSToF 301
|
||||
Store 297 302
|
||||
Store 298 302
|
||||
Branch 300
|
||||
303: Label
|
||||
304: 105(ptr) AccessChain 110(f2) 14
|
||||
305: 16(float) Load 304
|
||||
Store 297 305
|
||||
Store 298 305
|
||||
Branch 300
|
||||
300: Label
|
||||
306: 16(float) Load 297
|
||||
308: 7(ptr) AccessChain 25(b2) 14
|
||||
309: 6(bool) Load 308
|
||||
306: 16(float) Load 298
|
||||
307: 7(ptr) AccessChain 25(b2) 14
|
||||
308: 6(bool) Load 307
|
||||
SelectionMerge 311 None
|
||||
BranchConditional 309 310 314
|
||||
BranchConditional 308 310 314
|
||||
310: Label
|
||||
312: 105(ptr) AccessChain 114(f3) 14
|
||||
313: 16(float) Load 312
|
||||
Store 307 313
|
||||
Store 309 313
|
||||
Branch 311
|
||||
314: Label
|
||||
316: 57(ptr) AccessChain 68(i2) 315
|
||||
317: 9(int) Load 316
|
||||
318: 16(float) ConvertSToF 317
|
||||
Store 307 318
|
||||
Store 309 318
|
||||
Branch 311
|
||||
311: Label
|
||||
319: 16(float) Load 307
|
||||
319: 16(float) Load 309
|
||||
320: 16(float) FAdd 306 319
|
||||
Store 106(f) 320
|
||||
Branch 296
|
||||
296: Label
|
||||
324: 6(bool) Load 8(b)
|
||||
325: 7(ptr) AccessChain 25(b2) 14
|
||||
326: 6(bool) Load 325
|
||||
327: 6(bool) LogicalOr 324 326
|
||||
328: 7(ptr) AccessChain 25(b2) 315
|
||||
329: 6(bool) Load 328
|
||||
330: 6(bool) LogicalOr 327 329
|
||||
331: 7(ptr) AccessChain 33(b3) 14
|
||||
332: 6(bool) Load 331
|
||||
333: 6(bool) LogicalOr 330 332
|
||||
334: 7(ptr) AccessChain 33(b3) 315
|
||||
335: 6(bool) Load 334
|
||||
336: 6(bool) LogicalOr 333 335
|
||||
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
|
||||
323: 6(bool) Load 8(b)
|
||||
324: 7(ptr) AccessChain 25(b2) 14
|
||||
325: 6(bool) Load 324
|
||||
326: 6(bool) LogicalOr 323 325
|
||||
327: 7(ptr) AccessChain 25(b2) 315
|
||||
328: 6(bool) Load 327
|
||||
329: 6(bool) LogicalOr 326 328
|
||||
330: 7(ptr) AccessChain 33(b3) 14
|
||||
331: 6(bool) Load 330
|
||||
332: 6(bool) LogicalOr 329 331
|
||||
333: 7(ptr) AccessChain 33(b3) 315
|
||||
334: 6(bool) Load 333
|
||||
335: 6(bool) LogicalOr 332 334
|
||||
337: 7(ptr) AccessChain 33(b3) 336
|
||||
338: 6(bool) Load 337
|
||||
339: 6(bool) LogicalOr 335 338
|
||||
340: 7(ptr) AccessChain 45(b4) 14
|
||||
341: 6(bool) Load 340
|
||||
342: 6(bool) LogicalOr 339 341
|
||||
343: 7(ptr) AccessChain 45(b4) 315
|
||||
344: 6(bool) Load 343
|
||||
345: 6(bool) LogicalOr 342 344
|
||||
346: 7(ptr) AccessChain 45(b4) 336
|
||||
347: 6(bool) Load 346
|
||||
348: 6(bool) LogicalOr 345 347
|
||||
350: 7(ptr) AccessChain 45(b4) 349
|
||||
351: 6(bool) Load 350
|
||||
352: 6(bool) LogicalOr 348 351
|
||||
SelectionMerge 355 None
|
||||
BranchConditional 353 354 415
|
||||
BranchConditional 352 354 415
|
||||
354: Label
|
||||
356: 9(int) Load 58(i)
|
||||
357: 57(ptr) AccessChain 68(i2) 14
|
||||
@ -505,7 +505,7 @@ spv.conversion.frag
|
||||
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
|
||||
369: 57(ptr) AccessChain 81(i3) 336
|
||||
370: 9(int) Load 369
|
||||
371: 9(int) IAdd 368 370
|
||||
372: 57(ptr) AccessChain 94(i4) 14
|
||||
@ -514,10 +514,10 @@ spv.conversion.frag
|
||||
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
|
||||
378: 57(ptr) AccessChain 94(i4) 336
|
||||
379: 9(int) Load 378
|
||||
380: 9(int) IAdd 377 379
|
||||
381: 57(ptr) AccessChain 94(i4) 350
|
||||
381: 57(ptr) AccessChain 94(i4) 349
|
||||
382: 9(int) Load 381
|
||||
383: 9(int) IAdd 380 382
|
||||
384: 16(float) ConvertSToF 383
|
||||
@ -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) 337
|
||||
399: 105(ptr) AccessChain 114(f3) 336
|
||||
400: 16(float) Load 399
|
||||
401: 16(float) FAdd 398 400
|
||||
402: 105(ptr) AccessChain 118(f4) 14
|
||||
@ -544,20 +544,20 @@ 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) 337
|
||||
408: 105(ptr) AccessChain 118(f4) 336
|
||||
409: 16(float) Load 408
|
||||
410: 16(float) FAdd 407 409
|
||||
411: 105(ptr) AccessChain 118(f4) 350
|
||||
411: 105(ptr) AccessChain 118(f4) 349
|
||||
412: 16(float) Load 411
|
||||
413: 16(float) FAdd 410 412
|
||||
414: 95(fvec4) CompositeConstruct 413 413 413 413
|
||||
Store 323 414
|
||||
Store 353 414
|
||||
Branch 355
|
||||
415: Label
|
||||
Store 323 151
|
||||
Store 353 151
|
||||
Branch 355
|
||||
355: Label
|
||||
416: 95(fvec4) Load 323
|
||||
416: 95(fvec4) Load 353
|
||||
Store 322(gl_FragColor) 416
|
||||
Store 417(cv2) 102
|
||||
419: 92(ivec4) Load 417(cv2)
|
||||
|
@ -135,13 +135,13 @@ void main()
|
||||
77: TypePointer Uniform 7(int)
|
||||
106: 7(int) Constant 10
|
||||
111: 7(int) Constant 1
|
||||
114: TypePointer Output 10(float)
|
||||
117: 10(float) Constant 1092616192
|
||||
113: TypePointer Output 10(float)
|
||||
116: 10(float) Constant 1092616192
|
||||
5(main): 3 Function None 4
|
||||
6: Label
|
||||
59(param): 58(ptr) Variable Function
|
||||
99(i): 19(ptr) Variable Function
|
||||
113: 16(ptr) Variable Function
|
||||
118: 16(ptr) Variable Function
|
||||
Line 1 30 0
|
||||
61: 60(ptr) AccessChain 56 18
|
||||
62: 53(S) Load 61
|
||||
@ -216,24 +216,24 @@ void main()
|
||||
Branch 100
|
||||
102: Label
|
||||
Line 1 49 0
|
||||
115: 114(ptr) AccessChain 52(outv) 32
|
||||
116: 10(float) Load 115
|
||||
118: 37(bool) FOrdLessThan 116 117
|
||||
114: 113(ptr) AccessChain 52(outv) 32
|
||||
115: 10(float) Load 114
|
||||
117: 37(bool) FOrdLessThan 115 116
|
||||
SelectionMerge 120 None
|
||||
BranchConditional 118 119 123
|
||||
BranchConditional 117 119 123
|
||||
119: Label
|
||||
Line 1 50 0
|
||||
121: 11(fvec4) Load 52(outv)
|
||||
122: 11(fvec4) ExtInst 2(GLSL.std.450) 13(Sin) 121
|
||||
Store 52(outv) 122
|
||||
Store 113 122
|
||||
Store 118 122
|
||||
Branch 120
|
||||
123: Label
|
||||
Line 1 51 0
|
||||
124: 11(fvec4) Load 52(outv)
|
||||
125: 11(fvec4) ExtInst 2(GLSL.std.450) 14(Cos) 124
|
||||
Store 52(outv) 125
|
||||
Store 113 125
|
||||
Store 118 125
|
||||
Branch 120
|
||||
120: Label
|
||||
Return
|
||||
|
@ -182,14 +182,14 @@ spv.sparseTexture.frag
|
||||
414(i2DMS): 413(ptr) Variable UniformConstant
|
||||
422: TypePointer Output 11(fvec4)
|
||||
423(outColor): 422(ptr) Variable Output
|
||||
426: TypeBool
|
||||
425: TypeBool
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
8(resident): 7(ptr) Variable Function
|
||||
13(texel): 12(ptr) Variable Function
|
||||
18(itexel): 17(ptr) Variable Function
|
||||
23(utexel): 22(ptr) Variable Function
|
||||
424: 12(ptr) Variable Function
|
||||
427: 12(ptr) Variable Function
|
||||
Store 8(resident) 9
|
||||
Store 13(texel) 15
|
||||
Store 18(itexel) 19
|
||||
@ -565,13 +565,13 @@ spv.sparseTexture.frag
|
||||
420: 6(int) Load 8(resident)
|
||||
421: 6(int) BitwiseOr 420 419
|
||||
Store 8(resident) 421
|
||||
425: 6(int) Load 8(resident)
|
||||
427: 426(bool) ImageSparseTexelsResident 425
|
||||
424: 6(int) Load 8(resident)
|
||||
426: 425(bool) ImageSparseTexelsResident 424
|
||||
SelectionMerge 429 None
|
||||
BranchConditional 427 428 431
|
||||
BranchConditional 426 428 431
|
||||
428: Label
|
||||
430: 11(fvec4) Load 13(texel)
|
||||
Store 424 430
|
||||
Store 427 430
|
||||
Branch 429
|
||||
431: Label
|
||||
432: 16(ivec4) Load 18(itexel)
|
||||
@ -579,10 +579,10 @@ spv.sparseTexture.frag
|
||||
434: 21(ivec4) Load 23(utexel)
|
||||
435: 11(fvec4) ConvertUToF 434
|
||||
436: 11(fvec4) FAdd 433 435
|
||||
Store 424 436
|
||||
Store 427 436
|
||||
Branch 429
|
||||
429: Label
|
||||
437: 11(fvec4) Load 424
|
||||
437: 11(fvec4) Load 427
|
||||
Store 423(outColor) 437
|
||||
Return
|
||||
FunctionEnd
|
||||
|
@ -145,14 +145,14 @@ spv.sparseTextureClamp.frag
|
||||
310: 157(ivec2) ConstantComposite 143 143
|
||||
344: TypePointer Output 11(fvec4)
|
||||
345(outColor): 344(ptr) Variable Output
|
||||
348: TypeBool
|
||||
347: TypeBool
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
8(resident): 7(ptr) Variable Function
|
||||
13(texel): 12(ptr) Variable Function
|
||||
18(itexel): 17(ptr) Variable Function
|
||||
23(utexel): 22(ptr) Variable Function
|
||||
346: 12(ptr) Variable Function
|
||||
349: 12(ptr) Variable Function
|
||||
Store 8(resident) 9
|
||||
Store 13(texel) 15
|
||||
Store 18(itexel) 19
|
||||
@ -442,13 +442,13 @@ spv.sparseTextureClamp.frag
|
||||
342: 16(ivec4) Load 18(itexel)
|
||||
343: 16(ivec4) IAdd 342 341
|
||||
Store 18(itexel) 343
|
||||
347: 6(int) Load 8(resident)
|
||||
349: 348(bool) ImageSparseTexelsResident 347
|
||||
346: 6(int) Load 8(resident)
|
||||
348: 347(bool) ImageSparseTexelsResident 346
|
||||
SelectionMerge 351 None
|
||||
BranchConditional 349 350 353
|
||||
BranchConditional 348 350 353
|
||||
350: Label
|
||||
352: 11(fvec4) Load 13(texel)
|
||||
Store 346 352
|
||||
Store 349 352
|
||||
Branch 351
|
||||
353: Label
|
||||
354: 16(ivec4) Load 18(itexel)
|
||||
@ -456,10 +456,10 @@ spv.sparseTextureClamp.frag
|
||||
356: 21(ivec4) Load 23(utexel)
|
||||
357: 11(fvec4) ConvertUToF 356
|
||||
358: 11(fvec4) FAdd 355 357
|
||||
Store 346 358
|
||||
Store 349 358
|
||||
Branch 351
|
||||
351: Label
|
||||
359: 11(fvec4) Load 346
|
||||
359: 11(fvec4) Load 349
|
||||
Store 345(outColor) 359
|
||||
Return
|
||||
FunctionEnd
|
||||
|
@ -141,7 +141,7 @@ spv.types.frag
|
||||
139(f2): 138(ptr) Variable Function
|
||||
148(f3): 147(ptr) Variable Function
|
||||
157(f4): 156(ptr) Variable Function
|
||||
166: 156(ptr) Variable Function
|
||||
194: 156(ptr) Variable Function
|
||||
11: 6(bool) Load 10(u_b)
|
||||
13: 6(bool) Load 12(i_b)
|
||||
14: 6(bool) LogicalAnd 11 13
|
||||
@ -235,36 +235,36 @@ spv.types.frag
|
||||
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
|
||||
166: 6(bool) Load 8(b)
|
||||
167: 7(ptr) AccessChain 17(b2) 21
|
||||
168: 6(bool) Load 167
|
||||
169: 6(bool) LogicalOr 166 168
|
||||
170: 7(ptr) AccessChain 17(b2) 28
|
||||
171: 6(bool) Load 170
|
||||
172: 6(bool) LogicalOr 169 171
|
||||
173: 7(ptr) AccessChain 38(b3) 21
|
||||
174: 6(bool) Load 173
|
||||
175: 6(bool) LogicalOr 172 174
|
||||
176: 7(ptr) AccessChain 38(b3) 28
|
||||
177: 6(bool) Load 176
|
||||
178: 6(bool) LogicalOr 175 177
|
||||
179: 7(ptr) AccessChain 38(b3) 53
|
||||
180: 6(bool) Load 179
|
||||
181: 6(bool) LogicalOr 178 180
|
||||
182: 7(ptr) AccessChain 63(b4) 21
|
||||
183: 6(bool) Load 182
|
||||
184: 6(bool) LogicalOr 181 183
|
||||
185: 7(ptr) AccessChain 63(b4) 28
|
||||
186: 6(bool) Load 185
|
||||
187: 6(bool) LogicalOr 184 186
|
||||
188: 7(ptr) AccessChain 63(b4) 53
|
||||
189: 6(bool) Load 188
|
||||
190: 6(bool) LogicalOr 187 189
|
||||
191: 7(ptr) AccessChain 63(b4) 84
|
||||
192: 6(bool) Load 191
|
||||
193: 6(bool) LogicalOr 190 192
|
||||
SelectionMerge 196 None
|
||||
BranchConditional 194 195 256
|
||||
BranchConditional 193 195 256
|
||||
195: Label
|
||||
197: 92(int) Load 94(i)
|
||||
198: 93(ptr) AccessChain 103(i2) 21
|
||||
@ -325,13 +325,13 @@ spv.types.frag
|
||||
253: 128(float) Load 252
|
||||
254: 128(float) FAdd 251 253
|
||||
255: 155(fvec4) CompositeConstruct 254 254 254 254
|
||||
Store 166 255
|
||||
Store 194 255
|
||||
Branch 196
|
||||
256: Label
|
||||
Store 166 258
|
||||
Store 194 258
|
||||
Branch 196
|
||||
196: Label
|
||||
259: 155(fvec4) Load 166
|
||||
259: 155(fvec4) Load 194
|
||||
Store 165(gl_FragColor) 259
|
||||
Return
|
||||
FunctionEnd
|
||||
|
@ -1336,9 +1336,11 @@ class TIntermSelection : public TIntermTyped {
|
||||
public:
|
||||
TIntermSelection(TIntermTyped* cond, TIntermNode* trueB, TIntermNode* falseB) :
|
||||
TIntermTyped(EbtVoid), condition(cond), trueBlock(trueB), falseBlock(falseB),
|
||||
shortCircuit(true),
|
||||
flatten(false), dontFlatten(false) {}
|
||||
TIntermSelection(TIntermTyped* cond, TIntermNode* trueB, TIntermNode* falseB, const TType& type) :
|
||||
TIntermTyped(type), condition(cond), trueBlock(trueB), falseBlock(falseB),
|
||||
shortCircuit(true),
|
||||
flatten(false), dontFlatten(false) {}
|
||||
virtual void traverse(TIntermTraverser*);
|
||||
virtual TIntermTyped* getCondition() const { return condition; }
|
||||
@ -1347,6 +1349,9 @@ public:
|
||||
virtual TIntermSelection* getAsSelectionNode() { return this; }
|
||||
virtual const TIntermSelection* getAsSelectionNode() const { return this; }
|
||||
|
||||
void setNoShortCircuit() { shortCircuit = false; }
|
||||
bool getShortCircuit() const { return shortCircuit; }
|
||||
|
||||
void setFlatten() { flatten = true; }
|
||||
void setDontFlatten() { dontFlatten = true; }
|
||||
bool getFlatten() const { return flatten; }
|
||||
@ -1356,8 +1361,9 @@ protected:
|
||||
TIntermTyped* condition;
|
||||
TIntermNode* trueBlock;
|
||||
TIntermNode* falseBlock;
|
||||
bool flatten; // true if flatten requested
|
||||
bool dontFlatten; // true if requested to not flatten
|
||||
bool shortCircuit; // normally all if-then-else and all GLSL ?: short-circuit, but HLSL ?: does not
|
||||
bool flatten; // true if flatten requested
|
||||
bool dontFlatten; // true if requested to not flatten
|
||||
};
|
||||
|
||||
//
|
||||
|
@ -1672,7 +1672,11 @@ TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* true
|
||||
// If it's void, go to the if-then-else selection()
|
||||
if (trueBlock->getBasicType() == EbtVoid && falseBlock->getBasicType() == EbtVoid) {
|
||||
TIntermNodePair pair = { trueBlock, falseBlock };
|
||||
return addSelection(cond, pair, loc);
|
||||
TIntermSelection* selection = addSelection(cond, pair, loc);
|
||||
if (getSource() == EShSourceHlsl)
|
||||
selection->setNoShortCircuit();
|
||||
|
||||
return selection;
|
||||
}
|
||||
|
||||
//
|
||||
@ -1743,6 +1747,9 @@ TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* true
|
||||
else
|
||||
node->getQualifier().makeTemporary();
|
||||
|
||||
if (getSource() == EShSourceHlsl)
|
||||
node->setNoShortCircuit();
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
|
@ -819,6 +819,8 @@ bool TOutputTraverser::visitSelection(TVisit /* visit */, TIntermSelection* node
|
||||
out.debug << "Test condition and select";
|
||||
out.debug << " (" << node->getCompleteString() << ")";
|
||||
|
||||
if (node->getShortCircuit() == false)
|
||||
out.debug << ": no shortcircuit";
|
||||
if (node->getFlatten())
|
||||
out.debug << ": Flatten";
|
||||
if (node->getDontFlatten())
|
||||
|
Loading…
Reference in New Issue
Block a user