SPV: Emit OpSelect when a selection node is simple enough.
Also, ensures it has a type, no disallowed side effects, or performance trade offs.
This commit is contained in:
parent
509177d136
commit
433e9ff896
@ -1748,42 +1748,94 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This path handles both if-then-else and ?:
|
||||||
|
// The if-then-else has a node type of void, while
|
||||||
|
// ?: has either a void or a non-void node type
|
||||||
|
//
|
||||||
|
// Leaving the result, when not void:
|
||||||
|
// 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
|
||||||
bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang::TIntermSelection* node)
|
bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang::TIntermSelection* node)
|
||||||
{
|
{
|
||||||
// This path handles both if-then-else and ?:
|
// See if it simple and safe to generate OpSelect instead of using control flow.
|
||||||
// The if-then-else has a node type of void, while
|
// Crucially, side effects must be avoided, and there are performance trade-offs.
|
||||||
// ?: has a non-void node type
|
// Return true if good idea (and safe) for OpSelect, false otherwise.
|
||||||
spv::Id result = 0;
|
const auto selectPolicy = [&]() -> bool {
|
||||||
if (node->getBasicType() != glslang::EbtVoid) {
|
if (node->getBasicType() == glslang::EbtVoid)
|
||||||
// don't handle this as just on-the-fly temporaries, because there will be two names
|
return false;
|
||||||
// and better to leave SSA to later passes
|
|
||||||
result = builder.createVariable(spv::StorageClassFunction, convertGlslangToSpvType(node->getType()));
|
if (node->getTrueBlock() == nullptr ||
|
||||||
|
node->getFalseBlock() == nullptr)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
assert(node->getType() == node->getTrueBlock() ->getAsTyped()->getType() &&
|
||||||
|
node->getType() == node->getFalseBlock()->getAsTyped()->getType());
|
||||||
|
|
||||||
|
// return true if a single operand to ? : is okay for OpSelect
|
||||||
|
const auto operandOkay = [](glslang::TIntermTyped* node) {
|
||||||
|
return node->getAsSymbolNode() || node->getAsConstantUnion();
|
||||||
|
};
|
||||||
|
|
||||||
|
return operandOkay(node->getTrueBlock() ->getAsTyped()) &&
|
||||||
|
operandOkay(node->getFalseBlock()->getAsTyped());
|
||||||
|
};
|
||||||
|
|
||||||
|
// Emit OpSelect for this selection.
|
||||||
|
const auto handleAsOpSelect = [&]() {
|
||||||
|
node->getCondition()->traverse(this);
|
||||||
|
spv::Id condition = accessChainLoad(node->getCondition()->getType());
|
||||||
|
node->getTrueBlock()->traverse(this);
|
||||||
|
spv::Id trueValue = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType());
|
||||||
|
node->getFalseBlock()->traverse(this);
|
||||||
|
spv::Id falseValue = accessChainLoad(node->getTrueBlock()->getAsTyped()->getType());
|
||||||
|
|
||||||
|
spv::Id select = builder.createTriOp(spv::OpSelect, convertGlslangToSpvType(node->getType()), condition, trueValue, falseValue);
|
||||||
|
builder.clearAccessChain();
|
||||||
|
builder.setAccessChainRValue(select);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Try for OpSelect
|
||||||
|
|
||||||
|
if (selectPolicy()) {
|
||||||
|
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
|
// emit the condition before doing anything with selection
|
||||||
node->getCondition()->traverse(this);
|
node->getCondition()->traverse(this);
|
||||||
|
|
||||||
// make an "if" based on the value created by the condition
|
// make an "if" based on the value created by the condition
|
||||||
spv::Builder::If ifBuilder(accessChainLoad(node->getCondition()->getType()), builder);
|
spv::Builder::If ifBuilder(accessChainLoad(node->getCondition()->getType()), builder);
|
||||||
|
|
||||||
if (node->getTrueBlock()) {
|
|
||||||
// emit the "then" statement
|
// emit the "then" statement
|
||||||
|
if (node->getTrueBlock() != nullptr) {
|
||||||
node->getTrueBlock()->traverse(this);
|
node->getTrueBlock()->traverse(this);
|
||||||
if (result)
|
if (result != spv::NoResult)
|
||||||
builder.createStore(accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()), result);
|
builder.createStore(accessChainLoad(node->getTrueBlock()->getAsTyped()->getType()), result);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (node->getFalseBlock()) {
|
if (node->getFalseBlock() != nullptr) {
|
||||||
ifBuilder.makeBeginElse();
|
ifBuilder.makeBeginElse();
|
||||||
// emit the "else" statement
|
// emit the "else" statement
|
||||||
node->getFalseBlock()->traverse(this);
|
node->getFalseBlock()->traverse(this);
|
||||||
if (result)
|
if (result != spv::NoResult)
|
||||||
builder.createStore(accessChainLoad(node->getFalseBlock()->getAsTyped()->getType()), result);
|
builder.createStore(accessChainLoad(node->getFalseBlock()->getAsTyped()->getType()), result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// finish off the control flow
|
||||||
ifBuilder.makeEndIf();
|
ifBuilder.makeEndIf();
|
||||||
|
|
||||||
if (result) {
|
if (result != spv::NoResult) {
|
||||||
// GLSL only has r-values as the result of a :?, but
|
// 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
|
// 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
|
// become the base of a complex r-value expression, because the
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
spv.140.frag
|
spv.140.frag
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 101
|
// Id's are bound by 96
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
Capability ClipDistance
|
Capability ClipDistance
|
||||||
@ -10,168 +10,157 @@ spv.140.frag
|
|||||||
Capability ImageQuery
|
Capability ImageQuery
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Fragment 4 "main" 16 28 33 43
|
EntryPoint Fragment 4 "main" 14 23 28 38
|
||||||
ExecutionMode 4 OriginUpperLeft
|
ExecutionMode 4 OriginUpperLeft
|
||||||
Source GLSL 140
|
Source GLSL 140
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 8 "foo("
|
Name 8 "foo("
|
||||||
Name 11 "i1"
|
Name 11 "i1"
|
||||||
Name 16 "gl_FrontFacing"
|
Name 14 "gl_FrontFacing"
|
||||||
Name 24 "i2"
|
Name 19 "i2"
|
||||||
Name 28 "o"
|
Name 23 "o"
|
||||||
Name 33 "gl_ClipDistance"
|
Name 28 "gl_ClipDistance"
|
||||||
Name 43 "k"
|
Name 38 "k"
|
||||||
Name 55 "sampR"
|
Name 50 "sampR"
|
||||||
Name 63 "sampB"
|
Name 58 "sampB"
|
||||||
Name 87 "samp2Da"
|
Name 82 "samp2Da"
|
||||||
Name 92 "bn"
|
Name 87 "bn"
|
||||||
MemberName 92(bn) 0 "matra"
|
MemberName 87(bn) 0 "matra"
|
||||||
MemberName 92(bn) 1 "matca"
|
MemberName 87(bn) 1 "matca"
|
||||||
MemberName 92(bn) 2 "matr"
|
MemberName 87(bn) 2 "matr"
|
||||||
MemberName 92(bn) 3 "matc"
|
MemberName 87(bn) 3 "matc"
|
||||||
MemberName 92(bn) 4 "matrdef"
|
MemberName 87(bn) 4 "matrdef"
|
||||||
Name 94 ""
|
Name 89 ""
|
||||||
Name 97 "bi"
|
Name 92 "bi"
|
||||||
MemberName 97(bi) 0 "v"
|
MemberName 92(bi) 0 "v"
|
||||||
Name 100 "bname"
|
Name 95 "bname"
|
||||||
Decorate 16(gl_FrontFacing) BuiltIn FrontFacing
|
Decorate 14(gl_FrontFacing) BuiltIn FrontFacing
|
||||||
Decorate 33(gl_ClipDistance) BuiltIn ClipDistance
|
Decorate 28(gl_ClipDistance) BuiltIn ClipDistance
|
||||||
Decorate 55(sampR) DescriptorSet 0
|
Decorate 50(sampR) DescriptorSet 0
|
||||||
Decorate 63(sampB) DescriptorSet 0
|
Decorate 58(sampB) DescriptorSet 0
|
||||||
Decorate 87(samp2Da) DescriptorSet 0
|
Decorate 82(samp2Da) DescriptorSet 0
|
||||||
Decorate 90 ArrayStride 64
|
Decorate 85 ArrayStride 64
|
||||||
Decorate 91 ArrayStride 64
|
Decorate 86 ArrayStride 64
|
||||||
MemberDecorate 92(bn) 0 RowMajor
|
MemberDecorate 87(bn) 0 RowMajor
|
||||||
MemberDecorate 92(bn) 0 Offset 0
|
MemberDecorate 87(bn) 0 Offset 0
|
||||||
MemberDecorate 92(bn) 0 MatrixStride 16
|
MemberDecorate 87(bn) 0 MatrixStride 16
|
||||||
MemberDecorate 92(bn) 1 ColMajor
|
MemberDecorate 87(bn) 1 ColMajor
|
||||||
MemberDecorate 92(bn) 1 Offset 256
|
MemberDecorate 87(bn) 1 Offset 256
|
||||||
MemberDecorate 92(bn) 1 MatrixStride 16
|
MemberDecorate 87(bn) 1 MatrixStride 16
|
||||||
MemberDecorate 92(bn) 2 RowMajor
|
MemberDecorate 87(bn) 2 RowMajor
|
||||||
MemberDecorate 92(bn) 2 Offset 512
|
MemberDecorate 87(bn) 2 Offset 512
|
||||||
MemberDecorate 92(bn) 2 MatrixStride 16
|
MemberDecorate 87(bn) 2 MatrixStride 16
|
||||||
MemberDecorate 92(bn) 3 ColMajor
|
MemberDecorate 87(bn) 3 ColMajor
|
||||||
MemberDecorate 92(bn) 3 Offset 576
|
MemberDecorate 87(bn) 3 Offset 576
|
||||||
MemberDecorate 92(bn) 3 MatrixStride 16
|
MemberDecorate 87(bn) 3 MatrixStride 16
|
||||||
MemberDecorate 92(bn) 4 RowMajor
|
MemberDecorate 87(bn) 4 RowMajor
|
||||||
MemberDecorate 92(bn) 4 Offset 640
|
MemberDecorate 87(bn) 4 Offset 640
|
||||||
MemberDecorate 92(bn) 4 MatrixStride 16
|
MemberDecorate 87(bn) 4 MatrixStride 16
|
||||||
Decorate 92(bn) Block
|
Decorate 87(bn) Block
|
||||||
Decorate 94 DescriptorSet 0
|
Decorate 89 DescriptorSet 0
|
||||||
Decorate 96 ArrayStride 16
|
Decorate 91 ArrayStride 16
|
||||||
MemberDecorate 97(bi) 0 Offset 0
|
MemberDecorate 92(bi) 0 Offset 0
|
||||||
Decorate 97(bi) Block
|
Decorate 92(bi) Block
|
||||||
Decorate 100(bname) DescriptorSet 0
|
Decorate 95(bname) DescriptorSet 0
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeFloat 32
|
6: TypeFloat 32
|
||||||
7: TypeFunction 6(float)
|
7: TypeFunction 6(float)
|
||||||
10: TypePointer Private 6(float)
|
10: TypePointer Private 6(float)
|
||||||
11(i1): 10(ptr) Variable Private
|
11(i1): 10(ptr) Variable Private
|
||||||
12: TypePointer Function 6(float)
|
12: TypeBool
|
||||||
14: TypeBool
|
13: TypePointer Input 12(bool)
|
||||||
15: TypePointer Input 14(bool)
|
14(gl_FrontFacing): 13(ptr) Variable Input
|
||||||
16(gl_FrontFacing): 15(ptr) Variable Input
|
16: 6(float) Constant 3221225472
|
||||||
20: 6(float) Constant 3221225472
|
17: 6(float) Constant 1073741824
|
||||||
22: 6(float) Constant 1073741824
|
19(i2): 10(ptr) Variable Private
|
||||||
24(i2): 10(ptr) Variable Private
|
20: 6(float) Constant 1120665600
|
||||||
25: 6(float) Constant 1120665600
|
21: TypeVector 6(float) 4
|
||||||
26: TypeVector 6(float) 4
|
22: TypePointer Output 21(fvec4)
|
||||||
27: TypePointer Output 26(fvec4)
|
23(o): 22(ptr) Variable Output
|
||||||
28(o): 27(ptr) Variable Output
|
24: TypeInt 32 0
|
||||||
29: TypeInt 32 0
|
25: 24(int) Constant 5
|
||||||
30: 29(int) Constant 5
|
26: TypeArray 6(float) 25
|
||||||
31: TypeArray 6(float) 30
|
27: TypePointer Input 26
|
||||||
32: TypePointer Input 31
|
28(gl_ClipDistance): 27(ptr) Variable Input
|
||||||
33(gl_ClipDistance): 32(ptr) Variable Input
|
29: TypeInt 32 1
|
||||||
34: TypeInt 32 1
|
30: 29(int) Constant 2
|
||||||
35: 34(int) Constant 2
|
31: TypePointer Input 6(float)
|
||||||
36: TypePointer Input 6(float)
|
34: 24(int) Constant 1
|
||||||
39: 29(int) Constant 1
|
35: TypePointer Output 6(float)
|
||||||
40: TypePointer Output 6(float)
|
37: TypePointer Input 21(fvec4)
|
||||||
42: TypePointer Input 26(fvec4)
|
38(k): 37(ptr) Variable Input
|
||||||
43(k): 42(ptr) Variable Input
|
40: TypeVector 29(int) 4
|
||||||
45: TypeVector 34(int) 4
|
45: 24(int) Constant 2
|
||||||
50: 29(int) Constant 2
|
47: TypeImage 6(float) Rect sampled format:Unknown
|
||||||
52: TypeImage 6(float) Rect sampled format:Unknown
|
48: TypeSampledImage 47
|
||||||
53: TypeSampledImage 52
|
49: TypePointer UniformConstant 48
|
||||||
54: TypePointer UniformConstant 53
|
50(sampR): 49(ptr) Variable UniformConstant
|
||||||
55(sampR): 54(ptr) Variable UniformConstant
|
53: TypeVector 29(int) 2
|
||||||
58: TypeVector 34(int) 2
|
55: TypeImage 29(int) Buffer sampled format:Unknown
|
||||||
60: TypeImage 34(int) Buffer sampled format:Unknown
|
56: TypeSampledImage 55
|
||||||
61: TypeSampledImage 60
|
57: TypePointer UniformConstant 56
|
||||||
62: TypePointer UniformConstant 61
|
58(sampB): 57(ptr) Variable UniformConstant
|
||||||
63(sampB): 62(ptr) Variable UniformConstant
|
64: TypeVector 6(float) 2
|
||||||
69: TypeVector 6(float) 2
|
67: 6(float) Constant 1120403456
|
||||||
72: 6(float) Constant 1120403456
|
69: 24(int) Constant 3
|
||||||
74: 29(int) Constant 3
|
78: TypeImage 6(float) 2D sampled format:Unknown
|
||||||
83: TypeImage 6(float) 2D sampled format:Unknown
|
79: TypeSampledImage 78
|
||||||
84: TypeSampledImage 83
|
80: TypeArray 79 69
|
||||||
85: TypeArray 84 74
|
81: TypePointer UniformConstant 80
|
||||||
86: TypePointer UniformConstant 85
|
82(samp2Da): 81(ptr) Variable UniformConstant
|
||||||
87(samp2Da): 86(ptr) Variable UniformConstant
|
83: TypeMatrix 21(fvec4) 4
|
||||||
88: TypeMatrix 26(fvec4) 4
|
84: 24(int) Constant 4
|
||||||
89: 29(int) Constant 4
|
85: TypeArray 83 84
|
||||||
90: TypeArray 88 89
|
86: TypeArray 83 84
|
||||||
91: TypeArray 88 89
|
87(bn): TypeStruct 85 86 83 83 83
|
||||||
92(bn): TypeStruct 90 91 88 88 88
|
88: TypePointer Uniform 87(bn)
|
||||||
93: TypePointer Uniform 92(bn)
|
89: 88(ptr) Variable Uniform
|
||||||
94: 93(ptr) Variable Uniform
|
90: TypeVector 6(float) 3
|
||||||
95: TypeVector 6(float) 3
|
91: TypeArray 90(fvec3) 45
|
||||||
96: TypeArray 95(fvec3) 50
|
92(bi): TypeStruct 91
|
||||||
97(bi): TypeStruct 96
|
93: TypeArray 92(bi) 84
|
||||||
98: TypeArray 97(bi) 89
|
94: TypePointer Uniform 93
|
||||||
99: TypePointer Uniform 98
|
95(bname): 94(ptr) Variable Uniform
|
||||||
100(bname): 99(ptr) Variable Uniform
|
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
13: 12(ptr) Variable Function
|
15: 12(bool) Load 14(gl_FrontFacing)
|
||||||
17: 14(bool) Load 16(gl_FrontFacing)
|
18: 6(float) Select 15 16 17
|
||||||
SelectionMerge 19 None
|
Store 11(i1) 18
|
||||||
BranchConditional 17 18 21
|
Store 19(i2) 20
|
||||||
18: Label
|
32: 31(ptr) AccessChain 28(gl_ClipDistance) 30
|
||||||
Store 13 20
|
33: 6(float) Load 32
|
||||||
Branch 19
|
36: 35(ptr) AccessChain 23(o) 34
|
||||||
21: Label
|
Store 36 33
|
||||||
Store 13 22
|
39: 21(fvec4) Load 38(k)
|
||||||
Branch 19
|
41: 40(ivec4) ConvertFToS 39
|
||||||
19: Label
|
42: 29(int) CompositeExtract 41 0
|
||||||
23: 6(float) Load 13
|
43: 31(ptr) AccessChain 28(gl_ClipDistance) 42
|
||||||
Store 11(i1) 23
|
44: 6(float) Load 43
|
||||||
Store 24(i2) 25
|
46: 35(ptr) AccessChain 23(o) 45
|
||||||
37: 36(ptr) AccessChain 33(gl_ClipDistance) 35
|
Store 46 44
|
||||||
38: 6(float) Load 37
|
51: 48 Load 50(sampR)
|
||||||
41: 40(ptr) AccessChain 28(o) 39
|
52: 47 Image 51
|
||||||
Store 41 38
|
54: 53(ivec2) ImageQuerySize 52
|
||||||
44: 26(fvec4) Load 43(k)
|
59: 56 Load 58(sampB)
|
||||||
46: 45(ivec4) ConvertFToS 44
|
60: 55 Image 59
|
||||||
47: 34(int) CompositeExtract 46 0
|
61: 29(int) ImageQuerySize 60
|
||||||
48: 36(ptr) AccessChain 33(gl_ClipDistance) 47
|
62: 53(ivec2) CompositeConstruct 61 61
|
||||||
49: 6(float) Load 48
|
63: 53(ivec2) IAdd 54 62
|
||||||
51: 40(ptr) AccessChain 28(o) 50
|
65: 64(fvec2) ConvertSToF 63
|
||||||
Store 51 49
|
66: 6(float) CompositeExtract 65 0
|
||||||
56: 53 Load 55(sampR)
|
68: 6(float) FDiv 66 67
|
||||||
57: 52 Image 56
|
70: 35(ptr) AccessChain 23(o) 69
|
||||||
59: 58(ivec2) ImageQuerySize 57
|
Store 70 68
|
||||||
64: 61 Load 63(sampB)
|
71: 6(float) FunctionCall 8(foo()
|
||||||
65: 60 Image 64
|
72: 35(ptr) AccessChain 23(o) 45
|
||||||
66: 34(int) ImageQuerySize 65
|
Store 72 71
|
||||||
67: 58(ivec2) CompositeConstruct 66 66
|
|
||||||
68: 58(ivec2) IAdd 59 67
|
|
||||||
70: 69(fvec2) ConvertSToF 68
|
|
||||||
71: 6(float) CompositeExtract 70 0
|
|
||||||
73: 6(float) FDiv 71 72
|
|
||||||
75: 40(ptr) AccessChain 28(o) 74
|
|
||||||
Store 75 73
|
|
||||||
76: 6(float) FunctionCall 8(foo()
|
|
||||||
77: 40(ptr) AccessChain 28(o) 50
|
|
||||||
Store 77 76
|
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
8(foo(): 6(float) Function None 7
|
8(foo(): 6(float) Function None 7
|
||||||
9: Label
|
9: Label
|
||||||
78: 6(float) Load 11(i1)
|
73: 6(float) Load 11(i1)
|
||||||
79: 6(float) Load 24(i2)
|
74: 6(float) Load 19(i2)
|
||||||
80: 6(float) FAdd 78 79
|
75: 6(float) FAdd 73 74
|
||||||
ReturnValue 80
|
ReturnValue 75
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
@ -3,7 +3,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 49
|
// Id's are bound by 44
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
@ -19,18 +19,18 @@ Warning, version 450 is not yet complete; most version-specific features are pre
|
|||||||
MemberName 22(gl_PerVertex) 2 "gl_ClipDistance"
|
MemberName 22(gl_PerVertex) 2 "gl_ClipDistance"
|
||||||
MemberName 22(gl_PerVertex) 3 "gl_CullDistance"
|
MemberName 22(gl_PerVertex) 3 "gl_CullDistance"
|
||||||
Name 24 ""
|
Name 24 ""
|
||||||
Name 29 "ubname"
|
Name 27 "ubname"
|
||||||
MemberName 29(ubname) 0 "b"
|
MemberName 27(ubname) 0 "b"
|
||||||
Name 31 "ubinst"
|
Name 29 "ubinst"
|
||||||
Name 32 "param"
|
Name 30 "param"
|
||||||
MemberDecorate 22(gl_PerVertex) 0 BuiltIn Position
|
MemberDecorate 22(gl_PerVertex) 0 BuiltIn Position
|
||||||
MemberDecorate 22(gl_PerVertex) 1 BuiltIn PointSize
|
MemberDecorate 22(gl_PerVertex) 1 BuiltIn PointSize
|
||||||
MemberDecorate 22(gl_PerVertex) 2 BuiltIn ClipDistance
|
MemberDecorate 22(gl_PerVertex) 2 BuiltIn ClipDistance
|
||||||
MemberDecorate 22(gl_PerVertex) 3 BuiltIn CullDistance
|
MemberDecorate 22(gl_PerVertex) 3 BuiltIn CullDistance
|
||||||
Decorate 22(gl_PerVertex) Block
|
Decorate 22(gl_PerVertex) Block
|
||||||
MemberDecorate 29(ubname) 0 Offset 0
|
MemberDecorate 27(ubname) 0 Offset 0
|
||||||
Decorate 29(ubname) Block
|
Decorate 27(ubname) Block
|
||||||
Decorate 31(ubinst) DescriptorSet 0
|
Decorate 29(ubinst) DescriptorSet 0
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeBool
|
6: TypeBool
|
||||||
@ -47,38 +47,27 @@ Warning, version 450 is not yet complete; most version-specific features are pre
|
|||||||
24: 23(ptr) Variable Output
|
24: 23(ptr) Variable Output
|
||||||
25: TypeInt 32 1
|
25: TypeInt 32 1
|
||||||
26: 25(int) Constant 0
|
26: 25(int) Constant 0
|
||||||
27: TypePointer Function 18(fvec4)
|
27(ubname): TypeStruct 19(int)
|
||||||
29(ubname): TypeStruct 19(int)
|
28: TypePointer Uniform 27(ubname)
|
||||||
30: TypePointer Uniform 29(ubname)
|
29(ubinst): 28(ptr) Variable Uniform
|
||||||
31(ubinst): 30(ptr) Variable Uniform
|
31: TypePointer Uniform 19(int)
|
||||||
33: TypePointer Uniform 19(int)
|
34: 19(int) Constant 0
|
||||||
36: 19(int) Constant 0
|
37: 17(float) Constant 0
|
||||||
41: 17(float) Constant 0
|
38: 18(fvec4) ConstantComposite 37 37 37 37
|
||||||
42: 18(fvec4) ConstantComposite 41 41 41 41
|
39: 17(float) Constant 1065353216
|
||||||
44: 17(float) Constant 1065353216
|
40: 18(fvec4) ConstantComposite 39 39 39 39
|
||||||
45: 18(fvec4) ConstantComposite 44 44 44 44
|
42: TypePointer Output 18(fvec4)
|
||||||
47: TypePointer Output 18(fvec4)
|
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
28: 27(ptr) Variable Function
|
30(param): 7(ptr) Variable Function
|
||||||
32(param): 7(ptr) Variable Function
|
32: 31(ptr) AccessChain 29(ubinst) 26
|
||||||
34: 33(ptr) AccessChain 31(ubinst) 26
|
33: 19(int) Load 32
|
||||||
35: 19(int) Load 34
|
35: 6(bool) INotEqual 33 34
|
||||||
37: 6(bool) INotEqual 35 36
|
Store 30(param) 35
|
||||||
Store 32(param) 37
|
36: 6(bool) FunctionCall 10(foo(b1;) 30(param)
|
||||||
38: 6(bool) FunctionCall 10(foo(b1;) 32(param)
|
41: 18(fvec4) Select 36 38 40
|
||||||
SelectionMerge 40 None
|
43: 42(ptr) AccessChain 24 26
|
||||||
BranchConditional 38 39 43
|
Store 43 41
|
||||||
39: Label
|
|
||||||
Store 28 42
|
|
||||||
Branch 40
|
|
||||||
43: Label
|
|
||||||
Store 28 45
|
|
||||||
Branch 40
|
|
||||||
40: Label
|
|
||||||
46: 18(fvec4) Load 28
|
|
||||||
48: 47(ptr) AccessChain 24 26
|
|
||||||
Store 48 46
|
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
10(foo(b1;): 6(bool) Function None 8
|
10(foo(b1;): 6(bool) Function None 8
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
spv.deepRvalue.frag
|
spv.deepRvalue.frag
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 155
|
// Id's are bound by 150
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Fragment 4 "main" 149
|
EntryPoint Fragment 4 "main" 144
|
||||||
ExecutionMode 4 OriginUpperLeft
|
ExecutionMode 4 OriginUpperLeft
|
||||||
Source GLSL 330
|
Source GLSL 330
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
@ -21,12 +21,12 @@ spv.deepRvalue.frag
|
|||||||
Name 106 "h"
|
Name 106 "h"
|
||||||
Name 107 "i"
|
Name 107 "i"
|
||||||
Name 111 "samp2D"
|
Name 111 "samp2D"
|
||||||
Name 134 "str"
|
Name 129 "str"
|
||||||
MemberName 134(str) 0 "a"
|
MemberName 129(str) 0 "a"
|
||||||
MemberName 134(str) 1 "b"
|
MemberName 129(str) 1 "b"
|
||||||
MemberName 134(str) 2 "c"
|
MemberName 129(str) 2 "c"
|
||||||
Name 136 "t"
|
Name 131 "t"
|
||||||
Name 149 "gl_FragColor"
|
Name 144 "gl_FragColor"
|
||||||
Decorate 111(samp2D) DescriptorSet 0
|
Decorate 111(samp2D) DescriptorSet 0
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
@ -75,22 +75,21 @@ spv.deepRvalue.frag
|
|||||||
113: TypeVector 6(float) 2
|
113: TypeVector 6(float) 2
|
||||||
114: 6(float) Constant 1056964608
|
114: 6(float) Constant 1056964608
|
||||||
115: 113(fvec2) ConstantComposite 114 114
|
115: 113(fvec2) ConstantComposite 114 114
|
||||||
118: TypePointer Function 7(fvec4)
|
119: 6(float) Constant 1036831949
|
||||||
121: 6(float) Constant 1036831949
|
120: TypeBool
|
||||||
122: TypeBool
|
128: TypeArray 113(fvec2) 84
|
||||||
133: TypeArray 113(fvec2) 84
|
129(str): TypeStruct 81(int) 128 120(bool)
|
||||||
134(str): TypeStruct 81(int) 133 122(bool)
|
130: TypePointer Function 129(str)
|
||||||
135: TypePointer Function 134(str)
|
132: 113(fvec2) ConstantComposite 10 11
|
||||||
137: 113(fvec2) ConstantComposite 10 11
|
133: 6(float) Constant 1082130432
|
||||||
138: 6(float) Constant 1082130432
|
134: 113(fvec2) ConstantComposite 133 12
|
||||||
139: 113(fvec2) ConstantComposite 138 12
|
135: 6(float) Constant 1086324736
|
||||||
140: 6(float) Constant 1086324736
|
136: 113(fvec2) ConstantComposite 135 13
|
||||||
141: 113(fvec2) ConstantComposite 140 13
|
137: 128 ConstantComposite 132 134 136
|
||||||
142: 133 ConstantComposite 137 139 141
|
138: 120(bool) ConstantTrue
|
||||||
143: 122(bool) ConstantTrue
|
139: 129(str) ConstantComposite 82 137 138
|
||||||
144: 134(str) ConstantComposite 82 142 143
|
143: TypePointer Output 7(fvec4)
|
||||||
148: TypePointer Output 7(fvec4)
|
144(gl_FragColor): 143(ptr) Variable Output
|
||||||
149(gl_FragColor): 148(ptr) Variable Output
|
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
35(m): 34(ptr) Variable Function
|
35(m): 34(ptr) Variable Function
|
||||||
@ -99,8 +98,7 @@ spv.deepRvalue.frag
|
|||||||
87(g): 79(ptr) Variable Function
|
87(g): 79(ptr) Variable Function
|
||||||
106(h): 79(ptr) Variable Function
|
106(h): 79(ptr) Variable Function
|
||||||
107(i): 79(ptr) Variable Function
|
107(i): 79(ptr) Variable Function
|
||||||
119: 118(ptr) Variable Function
|
131(t): 130(ptr) Variable Function
|
||||||
136(t): 135(ptr) Variable Function
|
|
||||||
Store 9(v1) 14
|
Store 9(v1) 14
|
||||||
Store 15(v2) 20
|
Store 15(v2) 20
|
||||||
Store 21(v3) 26
|
Store 21(v3) 26
|
||||||
@ -172,34 +170,25 @@ spv.deepRvalue.frag
|
|||||||
116: 7(fvec4) ImageSampleImplicitLod 112 115
|
116: 7(fvec4) ImageSampleImplicitLod 112 115
|
||||||
117: 6(float) CompositeExtract 116 1
|
117: 6(float) CompositeExtract 116 1
|
||||||
Store 107(i) 117
|
Store 107(i) 117
|
||||||
120: 6(float) Load 107(i)
|
118: 6(float) Load 107(i)
|
||||||
123: 122(bool) FOrdGreaterThan 120 121
|
121: 120(bool) FOrdGreaterThan 118 119
|
||||||
SelectionMerge 125 None
|
122: 7(fvec4) Load 9(v1)
|
||||||
BranchConditional 123 124 127
|
123: 7(fvec4) Load 15(v2)
|
||||||
124: Label
|
124: 7(fvec4) Select 121 122 123
|
||||||
126: 7(fvec4) Load 9(v1)
|
125: 6(float) CompositeExtract 124 3
|
||||||
Store 119 126
|
126: 6(float) Load 107(i)
|
||||||
Branch 125
|
127: 6(float) FAdd 126 125
|
||||||
127: Label
|
Store 107(i) 127
|
||||||
128: 7(fvec4) Load 15(v2)
|
Store 131(t) 139
|
||||||
Store 119 128
|
140: 6(float) CompositeExtract 139 1 2 1
|
||||||
Branch 125
|
141: 6(float) Load 107(i)
|
||||||
125: Label
|
142: 6(float) FAdd 141 140
|
||||||
129: 79(ptr) AccessChain 119 84
|
Store 107(i) 142
|
||||||
130: 6(float) Load 129
|
145: 6(float) Load 80(f)
|
||||||
131: 6(float) Load 107(i)
|
146: 6(float) Load 87(g)
|
||||||
132: 6(float) FAdd 131 130
|
147: 6(float) Load 106(h)
|
||||||
Store 107(i) 132
|
148: 6(float) Load 107(i)
|
||||||
Store 136(t) 144
|
149: 7(fvec4) CompositeConstruct 145 146 147 148
|
||||||
145: 6(float) CompositeExtract 144 1 2 1
|
Store 144(gl_FragColor) 149
|
||||||
146: 6(float) Load 107(i)
|
|
||||||
147: 6(float) FAdd 146 145
|
|
||||||
Store 107(i) 147
|
|
||||||
150: 6(float) Load 80(f)
|
|
||||||
151: 6(float) Load 87(g)
|
|
||||||
152: 6(float) Load 106(h)
|
|
||||||
153: 6(float) Load 107(i)
|
|
||||||
154: 7(fvec4) CompositeConstruct 150 151 152 153
|
|
||||||
Store 149(gl_FragColor) 154
|
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
@ -3,38 +3,37 @@ Warning, version 450 is not yet complete; most version-specific features are pre
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 35
|
// Id's are bound by 31
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Vertex 4 "main" 18 31
|
EntryPoint Vertex 4 "main" 17 27
|
||||||
Source GLSL 450
|
Source GLSL 450
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 8 "i"
|
Name 8 "i"
|
||||||
Name 18 "flag"
|
Name 17 "flag"
|
||||||
Name 31 "r"
|
Name 27 "r"
|
||||||
Decorate 18(flag) RelaxedPrecision
|
Decorate 17(flag) RelaxedPrecision
|
||||||
Decorate 18(flag) Location 0
|
Decorate 17(flag) Location 0
|
||||||
Decorate 19 RelaxedPrecision
|
Decorate 18 RelaxedPrecision
|
||||||
Decorate 31(r) Location 0
|
Decorate 27(r) Location 0
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeInt 32 1
|
6: TypeInt 32 1
|
||||||
7: TypePointer Function 6(int)
|
7: TypePointer Function 6(int)
|
||||||
9: 6(int) Constant 0
|
9: 6(int) Constant 0
|
||||||
17: TypePointer Input 6(int)
|
16: TypePointer Input 6(int)
|
||||||
18(flag): 17(ptr) Variable Input
|
17(flag): 16(ptr) Variable Input
|
||||||
20: 6(int) Constant 1
|
19: 6(int) Constant 1
|
||||||
21: TypeBool
|
20: TypeBool
|
||||||
25: 6(int) Constant 10
|
22: 6(int) Constant 10
|
||||||
27: 6(int) Constant 15
|
23: 6(int) Constant 15
|
||||||
30: TypePointer Output 6(int)
|
26: TypePointer Output 6(int)
|
||||||
31(r): 30(ptr) Variable Output
|
27(r): 26(ptr) Variable Output
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
8(i): 7(ptr) Variable Function
|
8(i): 7(ptr) Variable Function
|
||||||
16: 7(ptr) Variable Function
|
|
||||||
Store 8(i) 9
|
Store 8(i) 9
|
||||||
Branch 10
|
Branch 10
|
||||||
10: Label
|
10: Label
|
||||||
@ -42,28 +41,19 @@ Warning, version 450 is not yet complete; most version-specific features are pre
|
|||||||
Branch 14
|
Branch 14
|
||||||
14: Label
|
14: Label
|
||||||
15: 6(int) Load 8(i)
|
15: 6(int) Load 8(i)
|
||||||
19: 6(int) Load 18(flag)
|
18: 6(int) Load 17(flag)
|
||||||
22: 21(bool) IEqual 19 20
|
21: 20(bool) IEqual 18 19
|
||||||
SelectionMerge 24 None
|
24: 6(int) Select 21 22 23
|
||||||
BranchConditional 22 23 26
|
25: 20(bool) SLessThan 15 24
|
||||||
23: Label
|
BranchConditional 25 11 12
|
||||||
Store 16 25
|
|
||||||
Branch 24
|
|
||||||
26: Label
|
|
||||||
Store 16 27
|
|
||||||
Branch 24
|
|
||||||
24: Label
|
|
||||||
28: 6(int) Load 16
|
|
||||||
29: 21(bool) SLessThan 15 28
|
|
||||||
BranchConditional 29 11 12
|
|
||||||
11: Label
|
11: Label
|
||||||
32: 6(int) Load 8(i)
|
28: 6(int) Load 8(i)
|
||||||
Store 31(r) 32
|
Store 27(r) 28
|
||||||
Branch 13
|
Branch 13
|
||||||
13: Label
|
13: Label
|
||||||
33: 6(int) Load 8(i)
|
29: 6(int) Load 8(i)
|
||||||
34: 6(int) IAdd 33 20
|
30: 6(int) IAdd 29 19
|
||||||
Store 8(i) 34
|
Store 8(i) 30
|
||||||
Branch 10
|
Branch 10
|
||||||
12: Label
|
12: Label
|
||||||
Return
|
Return
|
||||||
|
@ -3,7 +3,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 378
|
// Id's are bound by 374
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
Capability SampledRect
|
Capability SampledRect
|
||||||
@ -16,7 +16,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
|
|||||||
Capability StorageImageWriteWithoutFormat
|
Capability StorageImageWriteWithoutFormat
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Fragment 4 "main" 132 142 152 248 362 377
|
EntryPoint Fragment 4 "main" 132 142 152 248 362 373
|
||||||
ExecutionMode 4 OriginUpperLeft
|
ExecutionMode 4 OriginUpperLeft
|
||||||
Source GLSL 450
|
Source GLSL 450
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
@ -42,7 +42,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
|
|||||||
Name 248 "value"
|
Name 248 "value"
|
||||||
Name 357 "wo2D"
|
Name 357 "wo2D"
|
||||||
Name 362 "fragData"
|
Name 362 "fragData"
|
||||||
Name 377 "ic4D"
|
Name 373 "ic4D"
|
||||||
Decorate 15(i1D) DescriptorSet 0
|
Decorate 15(i1D) DescriptorSet 0
|
||||||
Decorate 15(i1D) Binding 0
|
Decorate 15(i1D) Binding 0
|
||||||
Decorate 27(i2D) DescriptorSet 0
|
Decorate 27(i2D) DescriptorSet 0
|
||||||
@ -76,7 +76,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
|
|||||||
Decorate 357(wo2D) DescriptorSet 0
|
Decorate 357(wo2D) DescriptorSet 0
|
||||||
Decorate 357(wo2D) Binding 1
|
Decorate 357(wo2D) Binding 1
|
||||||
Decorate 357(wo2D) NonReadable
|
Decorate 357(wo2D) NonReadable
|
||||||
Decorate 377(ic4D) Flat
|
Decorate 373(ic4D) Flat
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeInt 32 1
|
6: TypeInt 32 1
|
||||||
@ -163,16 +163,15 @@ Warning, version 450 is not yet complete; most version-specific features are pre
|
|||||||
357(wo2D): 356(ptr) Variable UniformConstant
|
357(wo2D): 356(ptr) Variable UniformConstant
|
||||||
361: TypePointer Output 125(fvec4)
|
361: TypePointer Output 125(fvec4)
|
||||||
362(fragData): 361(ptr) Variable Output
|
362(fragData): 361(ptr) Variable Output
|
||||||
368: TypeBool
|
367: TypeBool
|
||||||
375: TypeVector 6(int) 4
|
371: TypeVector 6(int) 4
|
||||||
376: TypePointer Input 375(ivec4)
|
372: TypePointer Input 371(ivec4)
|
||||||
377(ic4D): 376(ptr) Variable Input
|
373(ic4D): 372(ptr) Variable Input
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
9(iv): 8(ptr) Variable Function
|
9(iv): 8(ptr) Variable Function
|
||||||
127(v): 126(ptr) Variable Function
|
127(v): 126(ptr) Variable Function
|
||||||
229(ui): 228(ptr) Variable Function
|
229(ui): 228(ptr) Variable Function
|
||||||
363: 126(ptr) Variable Function
|
|
||||||
Store 9(iv) 11
|
Store 9(iv) 11
|
||||||
16: 13 Load 15(i1D)
|
16: 13 Load 15(i1D)
|
||||||
17: 6(int) ImageQuerySize 16
|
17: 6(int) ImageQuerySize 16
|
||||||
@ -498,22 +497,13 @@ Warning, version 450 is not yet complete; most version-specific features are pre
|
|||||||
359: 29(ivec2) Load 142(ic2D)
|
359: 29(ivec2) Load 142(ic2D)
|
||||||
360: 125(fvec4) Load 127(v)
|
360: 125(fvec4) Load 127(v)
|
||||||
ImageWrite 358 359 360
|
ImageWrite 358 359 360
|
||||||
364: 18(int) Load 229(ui)
|
363: 18(int) Load 229(ui)
|
||||||
365: 20(ptr) AccessChain 9(iv) 237
|
364: 20(ptr) AccessChain 9(iv) 237
|
||||||
366: 6(int) Load 365
|
365: 6(int) Load 364
|
||||||
367: 18(int) Bitcast 366
|
366: 18(int) Bitcast 365
|
||||||
369: 368(bool) INotEqual 364 367
|
368: 367(bool) INotEqual 363 366
|
||||||
SelectionMerge 371 None
|
369: 125(fvec4) Load 127(v)
|
||||||
BranchConditional 369 370 373
|
370: 125(fvec4) Select 368 369 129
|
||||||
370: Label
|
Store 362(fragData) 370
|
||||||
372: 125(fvec4) Load 127(v)
|
|
||||||
Store 363 372
|
|
||||||
Branch 371
|
|
||||||
373: Label
|
|
||||||
Store 363 129
|
|
||||||
Branch 371
|
|
||||||
371: Label
|
|
||||||
374: 125(fvec4) Load 363
|
|
||||||
Store 362(fragData) 374
|
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
Loading…
x
Reference in New Issue
Block a user