Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
glslang
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
glslang
Commits
bbbd9a2a
Commit
bbbd9a2a
authored
Mar 03, 2020
by
John Kessenich
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix #1843: Handle built-in function output parameters to a swizzled arg
In GLSL/HLSL/AST, v.zyx is an l-value, but not in SPIR-V, which cannot represent it. So, a temporary is used instead.
parent
56364b6b
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
481 additions
and
442 deletions
+481
-442
GlslangToSpv.cpp
SPIRV/GlslangToSpv.cpp
+25
-3
SpvBuilder.h
SPIRV/SpvBuilder.h
+5
-0
spv.Operations.frag.out
Test/baseResults/spv.Operations.frag.out
+449
-438
spv.Operations.frag
Test/spv.Operations.frag
+2
-1
No files found.
SPIRV/GlslangToSpv.cpp
View file @
bbbd9a2a
...
@@ -2277,7 +2277,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
...
@@ -2277,7 +2277,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
spec_constant_op_mode_setter
.
turnOnSpecConstantOpMode
();
spec_constant_op_mode_setter
.
turnOnSpecConstantOpMode
();
spv
::
Id
result
=
spv
::
NoResult
;
spv
::
Id
result
=
spv
::
NoResult
;
spv
::
Id
invertedType
=
spv
::
NoType
;
// to use to override the natural type of the node
spv
::
Id
invertedType
=
spv
::
NoType
;
// to use to override the natural type of the node
spv
::
Builder
::
AccessChain
complexLvalue
;
// for holding swizzling l-values too complex for SPIR-V, for at out parameter
spv
::
Id
temporaryLvalue
=
spv
::
NoResult
;
// temporary to pass, as proxy for complexLValue
auto
resultType
=
[
&
invertedType
,
&
node
,
this
](){
return
invertedType
!=
spv
::
NoType
?
invertedType
:
convertGlslangToSpvType
(
node
->
getType
());
};
auto
resultType
=
[
&
invertedType
,
&
node
,
this
](){
return
invertedType
!=
spv
::
NoType
?
invertedType
:
convertGlslangToSpvType
(
node
->
getType
());
};
// try texturing
// try texturing
...
@@ -2727,6 +2730,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
...
@@ -2727,6 +2730,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
// Does it need a swizzle inversion? If so, evaluation is inverted;
// Does it need a swizzle inversion? If so, evaluation is inverted;
// operate first on the swizzle base, then apply the swizzle.
// operate first on the swizzle base, then apply the swizzle.
// That is, we transform
//
// interpolate(v.zy) -> interpolate(v).zy
//
if
(
glslangOperands
[
0
]
->
getAsOperator
()
&&
if
(
glslangOperands
[
0
]
->
getAsOperator
()
&&
glslangOperands
[
0
]
->
getAsOperator
()
->
getOp
()
==
glslang
::
EOpVectorSwizzle
)
glslangOperands
[
0
]
->
getAsOperator
()
->
getOp
()
==
glslang
::
EOpVectorSwizzle
)
invertedType
=
convertGlslangToSpvType
(
glslangOperands
[
0
]
->
getAsBinaryNode
()
->
getLeft
()
->
getType
());
invertedType
=
convertGlslangToSpvType
(
glslangOperands
[
0
]
->
getAsBinaryNode
()
->
getLeft
()
->
getType
());
...
@@ -2819,8 +2826,19 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
...
@@ -2819,8 +2826,19 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
}
}
#endif
#endif
// for l-values, pass the address, for r-values, pass the value
if
(
lvalue
)
{
if
(
lvalue
)
{
operands
.
push_back
(
builder
.
accessChainGetLValue
());
if
(
invertedType
==
spv
::
NoType
&&
!
builder
.
isSpvLvalue
())
{
// SPIR-V cannot represent an l-value containing a swizzle that doesn't
// reduce to a simple access chain. So, we need a temporary vector to
// receive the result, and must later swizzle that into the original
// l-value.
complexLvalue
=
builder
.
getAccessChain
();
temporaryLvalue
=
builder
.
createVariable
(
spv
::
StorageClassFunction
,
builder
.
accessChainGetInferredType
(),
"swizzleTemp"
);
operands
.
push_back
(
temporaryLvalue
);
}
else
{
operands
.
push_back
(
builder
.
accessChainGetLValue
());
}
lvalueCoherentFlags
=
builder
.
getAccessChain
().
coherentFlags
;
lvalueCoherentFlags
=
builder
.
getAccessChain
().
coherentFlags
;
lvalueCoherentFlags
|=
TranslateCoherent
(
glslangOperands
[
arg
]
->
getAsTyped
()
->
getType
());
lvalueCoherentFlags
|=
TranslateCoherent
(
glslangOperands
[
arg
]
->
getAsTyped
()
->
getType
());
}
else
{
}
else
{
...
@@ -2883,8 +2901,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
...
@@ -2883,8 +2901,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
result
=
createMiscOperation
(
node
->
getOp
(),
precision
,
resultType
(),
operands
,
node
->
getBasicType
());
result
=
createMiscOperation
(
node
->
getOp
(),
precision
,
resultType
(),
operands
,
node
->
getBasicType
());
break
;
break
;
}
}
if
(
invertedType
)
if
(
invertedType
!=
spv
::
NoResult
)
result
=
createInvertedSwizzle
(
precision
,
*
glslangOperands
[
0
]
->
getAsBinaryNode
(),
result
);
result
=
createInvertedSwizzle
(
precision
,
*
glslangOperands
[
0
]
->
getAsBinaryNode
(),
result
);
else
if
(
temporaryLvalue
!=
spv
::
NoResult
)
{
builder
.
setAccessChain
(
complexLvalue
);
builder
.
accessChainStore
(
builder
.
createLoad
(
temporaryLvalue
));
}
}
}
if
(
noReturnValue
)
if
(
noReturnValue
)
...
...
SPIRV/SpvBuilder.h
View file @
bbbd9a2a
...
@@ -676,6 +676,11 @@ public:
...
@@ -676,6 +676,11 @@ public:
// use accessChain and swizzle to load an r-value
// use accessChain and swizzle to load an r-value
Id
accessChainLoad
(
Decoration
precision
,
Decoration
nonUniform
,
Id
ResultType
,
spv
::
MemoryAccessMask
memoryAccess
=
spv
::
MemoryAccessMaskNone
,
spv
::
Scope
scope
=
spv
::
ScopeMax
,
unsigned
int
alignment
=
0
);
Id
accessChainLoad
(
Decoration
precision
,
Decoration
nonUniform
,
Id
ResultType
,
spv
::
MemoryAccessMask
memoryAccess
=
spv
::
MemoryAccessMaskNone
,
spv
::
Scope
scope
=
spv
::
ScopeMax
,
unsigned
int
alignment
=
0
);
// Return whether or not the access chain can be represented in SPIR-V
// as an l-value.
// E.g., a[3].yx cannot be, while a[3].y and a[3].y[x] can be.
bool
isSpvLvalue
()
const
{
return
accessChain
.
swizzle
.
size
()
<=
1
;
}
// get the direct pointer for an l-value
// get the direct pointer for an l-value
Id
accessChainGetLValue
();
Id
accessChainGetLValue
();
...
...
Test/baseResults/spv.Operations.frag.out
View file @
bbbd9a2a
spv.Operations.frag
spv.Operations.frag
// Module Version 10000
// Module Version 10000
// Generated by (magic number): 80008
// Generated by (magic number): 80008
// Id's are bound by 5
32
// Id's are bound by 5
40
Capability Shader
Capability Shader
1: ExtInstImport "GLSL.std.450"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 11 22 2
12 288 485 526 531
EntryPoint Fragment 4 "main" 11 22 2
20 296 493 534 539
ExecutionMode 4 OriginUpperLeft
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
Source GLSL 450
Name 4 "main"
Name 4 "main"
...
@@ -14,23 +14,24 @@ spv.Operations.frag
...
@@ -14,23 +14,24 @@ spv.Operations.frag
Name 11 "uv4"
Name 11 "uv4"
Name 20 "i"
Name 20 "i"
Name 22 "ui"
Name 22 "ui"
Name 181 "ub41"
Name 155 "swizzleTemp"
Name 188 "f"
Name 189 "ub41"
Name 212 "uf"
Name 196 "f"
Name 285 "u"
Name 220 "uf"
Name 288 "uui"
Name 293 "u"
Name 305 "b"
Name 296 "uui"
Name 342 "ub42"
Name 313 "b"
Name 485 "FragColor"
Name 350 "ub42"
Name 503 "m1"
Name 493 "FragColor"
Name 510 "m2"
Name 511 "m1"
Name 526 "uiv4"
Name 518 "m2"
Name 528 "ub"
Name 534 "uiv4"
Name 531 "uuv4"
Name 536 "ub"
Name 539 "uuv4"
Decorate 22(ui) Flat
Decorate 22(ui) Flat
Decorate 2
88
(uui) Flat
Decorate 2
96
(uui) Flat
Decorate 5
26
(uiv4) Flat
Decorate 5
34
(uiv4) Flat
Decorate 53
1
(uuv4) Flat
Decorate 53
9
(uuv4) Flat
2: TypeVoid
2: TypeVoid
3: TypeFunction 2
3: TypeFunction 2
6: TypeFloat 32
6: TypeFloat 32
...
@@ -45,55 +46,56 @@ spv.Operations.frag
...
@@ -45,55 +46,56 @@ spv.Operations.frag
141: TypeInt 32 0
141: TypeInt 32 0
142: 141(int) Constant 0
142: 141(int) Constant 0
143: TypePointer Function 6(float)
143: TypePointer Function 6(float)
1
78
: TypeBool
1
86
: TypeBool
1
79: TypeVector 178
(bool) 4
1
87: TypeVector 186
(bool) 4
18
0: TypePointer Private 179
(bvec4)
18
8: TypePointer Private 187
(bvec4)
18
1(ub41): 180
(ptr) Variable Private
18
9(ub41): 188
(ptr) Variable Private
21
1
: TypePointer Input 6(float)
21
9
: TypePointer Input 6(float)
2
12(uf): 211
(ptr) Variable Input
2
20(uf): 219
(ptr) Variable Input
2
84
: TypePointer Function 141(int)
2
92
: TypePointer Function 141(int)
2
87
: TypePointer Input 141(int)
2
95
: TypePointer Input 141(int)
2
88(uui): 287
(ptr) Variable Input
2
96(uui): 295
(ptr) Variable Input
3
04: TypePointer Function 178
(bool)
3
12: TypePointer Function 186
(bool)
3
42(ub42): 180
(ptr) Variable Private
3
50(ub42): 188
(ptr) Variable Private
398
: 18(int) Constant 2
406
: 18(int) Constant 2
4
05
: 18(int) Constant 1
4
13
: 18(int) Constant 1
4
35
: TypeVector 6(float) 3
4
43
: TypeVector 6(float) 3
4
54
: 6(float) Constant 1073741824
4
62
: 6(float) Constant 1073741824
46
1
: 6(float) Constant 1065353216
46
9
: 6(float) Constant 1065353216
4
66
: 18(int) Constant 66
4
74
: 18(int) Constant 66
4
72
: 18(int) Constant 17
4
80
: 18(int) Constant 17
4
84
: TypePointer Output 7(fvec4)
4
92
: TypePointer Output 7(fvec4)
4
85(FragColor): 484
(ptr) Variable Output
4
93(FragColor): 492
(ptr) Variable Output
50
1
: TypeMatrix 7(fvec4) 4
50
9
: TypeMatrix 7(fvec4) 4
5
02: TypePointer Function 501
5
10: TypePointer Function 509
5
04
: 6(float) Constant 0
5
12
: 6(float) Constant 0
5
05: 7(fvec4) ConstantComposite 461 504 504 504
5
13: 7(fvec4) ConstantComposite 469 512 512 512
5
06: 7(fvec4) ConstantComposite 504 461 504 504
5
14: 7(fvec4) ConstantComposite 512 469 512 512
5
07: 7(fvec4) ConstantComposite 504 504 461 504
5
15: 7(fvec4) ConstantComposite 512 512 469 512
5
08: 7(fvec4) ConstantComposite 504 504 504 461
5
16: 7(fvec4) ConstantComposite 512 512 512 469
5
09: 501 ConstantComposite 505 506 507 508
5
17: 509 ConstantComposite 513 514 515 516
51
1: 7(fvec4) ConstantComposite 504 504 504 504
51
9: 7(fvec4) ConstantComposite 512 512 512 512
5
12: 501 ConstantComposite 511 511 511 511
5
20: 509 ConstantComposite 519 519 519 519
5
24
: TypeVector 18(int) 4
5
32
: TypeVector 18(int) 4
5
25: TypePointer Input 524
(ivec4)
5
33: TypePointer Input 532
(ivec4)
5
26(uiv4): 525
(ptr) Variable Input
5
34(uiv4): 533
(ptr) Variable Input
5
27: TypePointer Private 178
(bool)
5
35: TypePointer Private 186
(bool)
5
28(ub): 527
(ptr) Variable Private
5
36(ub): 535
(ptr) Variable Private
5
29
: TypeVector 141(int) 4
5
37
: TypeVector 141(int) 4
53
0: TypePointer Input 529
(ivec4)
53
8: TypePointer Input 537
(ivec4)
53
1(uuv4): 530
(ptr) Variable Input
53
9(uuv4): 538
(ptr) Variable Input
4(main): 2 Function None 3
4(main): 2 Function None 3
5: Label
5: Label
9(v): 8(ptr) Variable Function
9(v): 8(ptr) Variable Function
20(i): 19(ptr) Variable Function
20(i): 19(ptr) Variable Function
188(f): 143(ptr) Variable Function
155(swizzleTemp): 8(ptr) Variable Function
285(u): 284(ptr) Variable Function
196(f): 143(ptr) Variable Function
305(b): 304(ptr) Variable Function
293(u): 292(ptr) Variable Function
487: 8(ptr) Variable Function
313(b): 312(ptr) Variable Function
503(m1): 502(ptr) Variable Function
495: 8(ptr) Variable Function
510(m2): 502(ptr) Variable Function
511(m1): 510(ptr) Variable Function
514: 502(ptr) Variable Function
518(m2): 510(ptr) Variable Function
522: 510(ptr) Variable Function
12: 7(fvec4) Load 11(uv4)
12: 7(fvec4) Load 11(uv4)
13: 7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12
13: 7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12
Store 9(v) 13
Store 9(v) 13
...
@@ -262,441 +264,450 @@ spv.Operations.frag
...
@@ -262,441 +264,450 @@ spv.Operations.frag
153: 7(fvec4) FAdd 152 151
153: 7(fvec4) FAdd 152 151
Store 9(v) 153
Store 9(v) 153
154: 7(fvec4) Load 9(v)
154: 7(fvec4) Load 9(v)
15
5: 7(fvec4) Load 11(uv4
)
15
6: 7(fvec4) ExtInst 1(GLSL.std.450) 35(Modf) 154 155(swizzleTemp
)
15
6: 7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 154 155
15
7: 7(fvec4) Load 155(swizzleTemp)
15
7
: 7(fvec4) Load 9(v)
15
8
: 7(fvec4) Load 9(v)
15
8: 7(fvec4) FAdd 157 156
15
9: 7(fvec4) VectorShuffle 158 157 6 4 5 7
Store 9(v) 15
8
Store 9(v) 15
9
1
59
: 7(fvec4) Load 9(v)
1
60
: 7(fvec4) Load 9(v)
16
0: 7(fvec4) Load 11(uv4)
16
1: 7(fvec4) FAdd 160 156
161: 7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 159 160
Store 9(v) 161
162: 7(fvec4) Load 9(v)
162: 7(fvec4) Load 9(v)
163: 7(fvec4) FAdd 162 161
163: 7(fvec4) Load 11(uv4)
Store 9(v) 163
164: 7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 162 163
164: 7(fvec4) Load 9(v)
165: 7(fvec4) Load 9(v)
165: 7(fvec4) Load 11(uv4)
166: 7(fvec4) FAdd 165 164
166: 7(fvec4) Load 11(uv4)
Store 9(v) 166
167: 7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 164 165 166
167: 7(fvec4) Load 9(v)
168: 7(fvec4) Load 9(v)
168: 7(fvec4) Load 11(uv4)
169: 7(fvec4) FAdd 168 167
169: 7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 167 168
Store 9(v) 169
170: 7(fvec4) Load 9(v)
170: 7(fvec4) Load 9(v)
171: 7(fvec4) Load 9(v)
171: 7(fvec4) FAdd 170 169
Store 9(v) 171
172: 7(fvec4) Load 9(v)
172: 7(fvec4) Load 9(v)
173: 7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 170 171 172
173: 7(fvec4) Load 11(uv4)
174: 7(fvec4) Load 9(v)
174: 7(fvec4) Load 11(uv4)
175: 7(fvec4) FAdd 174 173
175: 7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 172 173 174
Store 9(v) 175
176: 7(fvec4) Load 9(v)
176: 7(fvec4) Load 9(v)
177: 7(fvec4) Load 9(v)
177: 7(fvec4) FAdd 176 175
182: 179(bvec4) Load 181(ub41)
Store 9(v) 177
183: 7(fvec4) Select 182 177 176
178: 7(fvec4) Load 9(v)
179: 7(fvec4) Load 9(v)
180: 7(fvec4) Load 9(v)
181: 7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 178 179 180
182: 7(fvec4) Load 9(v)
183: 7(fvec4) FAdd 182 181
Store 9(v) 183
184: 7(fvec4) Load 9(v)
184: 7(fvec4) Load 9(v)
185: 7(fvec4) FAdd 184 183
185: 7(fvec4) Load 9(v)
Store 9(v) 185
190: 187(bvec4) Load 189(ub41)
186: 7(fvec4) Load 9(v)
191: 7(fvec4) Select 190 185 184
187: 7(fvec4) Load 9(v)
189: 6(float) Load 188(f)
190: 7(fvec4) CompositeConstruct 189 189 189 189
191: 7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 186 187 190
192: 7(fvec4) Load 9(v)
192: 7(fvec4) Load 9(v)
193: 7(fvec4) FAdd 192 191
193: 7(fvec4) FAdd 192 191
Store 9(v) 193
Store 9(v) 193
194: 7(fvec4) Load 9(v)
194: 7(fvec4) Load 9(v)
195: 7(fvec4) Load 11(uv4)
195: 7(fvec4) Load 9(v)
196: 7(fvec4) Load 9(v)
197: 6(float) Load 196(f)
197: 7(fvec4) ExtInst 1(GLSL.std.450) 50(Fma) 194 195 196
198: 7(fvec4) CompositeConstruct 197 197 197 197
198: 7(fvec4) Load 9(v)
199: 7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 194 195 198
199: 7(fvec4) FAdd 198 197
Store 9(v) 199
200: 7(fvec4) Load 9(v)
200: 7(fvec4) Load 9(v)
201: 7(fvec4)
Load 9(v)
201: 7(fvec4)
FAdd 200 199
202: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 200
201
Store 9(v)
201
20
3
: 7(fvec4) Load 9(v)
20
2
: 7(fvec4) Load 9(v)
20
4: 7(fvec4) FAdd 203 202
20
3: 7(fvec4) Load 11(uv4)
Store 9(v) 204
204: 7(fvec4) Load 9(v)
205: 7(fvec4)
Load 9(v)
205: 7(fvec4)
ExtInst 1(GLSL.std.450) 50(Fma) 202 203 204
206: 7(fvec4) Load 9(v)
206: 7(fvec4) Load 9(v)
207: 7(fvec4) Load 9(v)
207: 7(fvec4) FAdd 206 205
208: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 205 206 207
Store 9(v) 207
208: 7(fvec4) Load 9(v)
209: 7(fvec4) Load 9(v)
209: 7(fvec4) Load 9(v)
210: 7(fvec4) FAdd 209 208
210: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 208 209
Store 9(v) 210
211: 7(fvec4) Load 9(v)
213: 6(float) Load 212(uf)
212: 7(fvec4) FAdd 211 210
Store 9(v) 212
213: 7(fvec4) Load 9(v)
214: 7(fvec4) Load 9(v)
214: 7(fvec4) Load 9(v)
215: 7(fvec4)
CompositeConstruct 213 213 213 213
215: 7(fvec4)
Load 9(v)
216: 7(fvec4) ExtInst 1(GLSL.std.450) 4
8(Step) 215 214
216: 7(fvec4) ExtInst 1(GLSL.std.450) 4
9(SmoothStep) 213 214 215
217: 7(fvec4) Load 9(v)
217: 7(fvec4) Load 9(v)
218: 7(fvec4) FAdd 217 216
218: 7(fvec4) FAdd 217 216
Store 9(v) 218
Store 9(v) 218
219: 6(float) Load 212(uf)
221: 6(float) Load 220(uf)
220: 6(float) Load 212(uf)
222: 7(fvec4) Load 9(v)
221: 7(fvec4) Load 9(v)
223: 7(fvec4) CompositeConstruct 221 221 221 221
222: 7(fvec4) CompositeConstruct 219 219 219 219
224: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 223 222
223: 7(fvec4) CompositeConstruct 220 220 220 220
224: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 222 223 221
225: 7(fvec4) Load 9(v)
225: 7(fvec4) Load 9(v)
226: 7(fvec4) FAdd 225 224
226: 7(fvec4) FAdd 225 224
Store 9(v) 226
Store 9(v) 226
227:
7(fvec4) Load 9(v
)
227:
6(float) Load 220(uf
)
228:
7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 227
228:
6(float) Load 220(uf)
229: 7(fvec4) Load 9(v)
229: 7(fvec4) Load 9(v)
230: 7(fvec4) FAdd 229 228
230: 7(fvec4) CompositeConstruct 227 227 227 227
Store 9(v) 230
231: 7(fvec4) CompositeConstruct 228 228 228 228
231: 7(fvec4) Load 9(v)
232: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 230 231 229
232: 7(fvec4) Load 9(v)
233: 7(fvec4) Load 9(v)
233: 7(fvec4) Load 9(v)
234: 7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 231 232 233
234: 7(fvec4) FAdd 233 232
Store 9(v) 234
235: 7(fvec4) Load 9(v)
235: 7(fvec4) Load 9(v)
236: 7(fvec4) FAdd 235 234
236: 7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 235
Store 9(v) 236
237: 7(fvec4) Load 9(v)
237: 7(fvec4) Load 9(v)
238: 7(fvec4) Load 9(v)
238: 7(fvec4) FAdd 237 236
239: 7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 237 238
Store 9(v) 238
239: 7(fvec4) Load 9(v)
240: 7(fvec4) Load 9(v)
240: 7(fvec4) Load 9(v)
241: 7(fvec4) FAdd 240 239
241: 7(fvec4) Load 9(v)
Store 9(v) 241
242: 7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 239 240 241
242: 7(fvec4) Load 9(v)
243: 7(fvec4) Load 9(v)
243: 7(fvec4) Load 9(v)
244: 6(float) Load 212(uf)
244: 7(fvec4) FAdd 243 242
245: 7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 242 243 244
Store 9(v) 244
245: 7(fvec4) Load 9(v)
246: 7(fvec4) Load 9(v)
246: 7(fvec4) Load 9(v)
247: 7(fvec4) FAdd 246 245
247: 7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 245 246
Store 9(v) 247
248: 7(fvec4) Load 9(v)
248: 7(fvec4) Load 9(v)
249: 7(fvec4) DPdx 248
249: 7(fvec4) FAdd 248 247
Store 9(v) 249
250: 7(fvec4) Load 9(v)
250: 7(fvec4) Load 9(v)
251: 7(fvec4) FAdd 250 249
251: 7(fvec4) Load 9(v)
Store 9(v) 251
252: 6(float) Load 220(uf)
252: 7(fvec4) Load 9(v)
253: 7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 250 251 252
253: 7(fvec4) DPdy 252
254: 7(fvec4) Load 9(v)
254: 7(fvec4) Load 9(v)
255: 7(fvec4) FAdd 254 253
255: 7(fvec4) FAdd 254 253
Store 9(v) 255
Store 9(v) 255
256: 7(fvec4) Load 9(v)
256: 7(fvec4) Load 9(v)
257: 7(fvec4)
Fwidth
256
257: 7(fvec4)
DPdx
256
258: 7(fvec4) Load 9(v)
258: 7(fvec4) Load 9(v)
259: 7(fvec4) FAdd 258 257
259: 7(fvec4) FAdd 258 257
Store 9(v) 259
Store 9(v) 259
260: 18(int) Load 22(ui)
260: 7(fvec4) Load 9(v)
261: 18(int) ExtInst 1(GLSL.std.450) 5(SAbs) 260
261: 7(fvec4) DPdy 260
262: 18(int) Load 20(i)
262: 7(fvec4) Load 9(v)
263: 18(int) IAdd 262 261
263: 7(fvec4) FAdd 262 261
Store 20(i) 263
Store 9(v) 263
264: 18(int) Load 20(i)
264: 7(fvec4) Load 9(v)
265: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 264
265: 7(fvec4) Fwidth 264
266: 18(int) Load 20(i)
266: 7(fvec4) Load 9(v)
267: 18(int) IAdd 266 265
267: 7(fvec4) FAdd 266 265
Store 20(i) 267
Store 9(v) 267
268: 18(int) Load 20(i)
268: 18(int) Load 22(ui)
269: 18(int) Load 22(ui)
269: 18(int) ExtInst 1(GLSL.std.450) 5(SAbs) 268
270: 18(int) ExtInst 1(GLSL.std.450) 39(SMin) 268 269
270: 18(int) Load 20(i)
271: 18(int) Load 20(i)
271: 18(int) IAdd 270 269
272: 18(int) IAdd 271 270
Store 20(i) 271
Store 20(i) 272
272: 18(int) Load 20(i)
273: 18(int) Load 20(i)
273: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 272
274: 18(int) Load 22(ui)
274: 18(int) Load 20(i)
275: 18(int) ExtInst 1(GLSL.std.450) 42(SMax) 273 274
275: 18(int) IAdd 274 273
Store 20(i) 275
276: 18(int) Load 20(i)
276: 18(int) Load 20(i)
277: 18(int) IAdd 276 275
277: 18(int) Load 22(ui)
Store 20(i) 277
278: 18(int) ExtInst 1(GLSL.std.450) 39(SMin) 276 277
278: 18(int) Load 20(i)
279: 18(int) Load 20(i)
279: 18(int) Load 22(ui)
280: 18(int) IAdd 279 278
280: 18(int) Load 22(ui)
Store 20(i) 280
281: 18(int) ExtInst 1(GLSL.std.450) 45(SClamp) 278 279 280
281: 18(int) Load 20(i)
282: 18(int) Load 20(i)
282: 18(int) Load 22(ui)
283: 18(int) IAdd 282 281
283: 18(int) ExtInst 1(GLSL.std.450) 42(SMax) 281 282
Store 20(i) 283
284: 18(int) Load 20(i)
286: 141(int) Load 285(u)
285: 18(int) IAdd 284 283
289: 141(int) Load 288(uui)
Store 20(i) 285
290: 141(int) ExtInst 1(GLSL.std.450) 38(UMin) 286 289
286: 18(int) Load 20(i)
291: 141(int) Load 285(u)
287: 18(int) Load 22(ui)
292: 141(int) IAdd 291 290
288: 18(int) Load 22(ui)
Store 285(u) 292
289: 18(int) ExtInst 1(GLSL.std.450) 45(SClamp) 286 287 288
293: 141(int) Load 285(u)
290: 18(int) Load 20(i)
294: 141(int) Load 288(uui)
291: 18(int) IAdd 290 289
295: 141(int) ExtInst 1(GLSL.std.450) 41(UMax) 293 294
Store 20(i) 291
296: 141(int) Load 285(u)
294: 141(int) Load 293(u)
297: 141(int) IAdd 296 295
297: 141(int) Load 296(uui)
Store 285(u) 297
298: 141(int) ExtInst 1(GLSL.std.450) 38(UMin) 294 297
298: 141(int) Load 285(u)
299: 141(int) Load 293(u)
299: 141(int) Load 288(uui)
300: 141(int) IAdd 299 298
300: 141(int) Load 288(uui)
Store 293(u) 300
301: 141(int) ExtInst 1(GLSL.std.450) 44(UClamp) 298 299 300
301: 141(int) Load 293(u)
302: 141(int) Load 285(u)
302: 141(int) Load 296(uui)
303: 141(int) IAdd 302 301
303: 141(int) ExtInst 1(GLSL.std.450) 41(UMax) 301 302
Store 285(u) 303
304: 141(int) Load 293(u)
306: 6(float) Load 212(uf)
305: 141(int) IAdd 304 303
307: 178(bool) IsNan 306
Store 293(u) 305
Store 305(b) 307
306: 141(int) Load 293(u)
308: 6(float) Load 188(f)
307: 141(int) Load 296(uui)
309: 178(bool) IsInf 308
308: 141(int) Load 296(uui)
Store 305(b) 309
309: 141(int) ExtInst 1(GLSL.std.450) 44(UClamp) 306 307 308
310: 7(fvec4) Load 9(v)
310: 141(int) Load 293(u)
311: 7(fvec4) Load 11(uv4)
311: 141(int) IAdd 310 309
312: 179(bvec4) FOrdLessThan 310 311
Store 293(u) 311
313: 178(bool) Any 312
314: 6(float) Load 220(uf)
Store 305(b) 313
315: 186(bool) IsNan 314
314: 178(bool) Load 305(b)
Store 313(b) 315
SelectionMerge 316 None
316: 6(float) Load 196(f)
BranchConditional 314 315 316
317: 186(bool) IsInf 316
315: Label
Store 313(b) 317
317: 7(fvec4) Load 9(v)
318: 7(fvec4) Load 9(v)
318: 7(fvec4) Load 11(uv4)
319: 7(fvec4) Load 11(uv4)
319: 179(bvec4) FOrdLessThanEqual 317 318
320: 187(bvec4) FOrdLessThan 318 319
320: 178(bool) Any 319
321: 186(bool) Any 320
Branch 316
Store 313(b) 321
316: Label
322: 186(bool) Load 313(b)
321: 178(bool) Phi 314 5 320 315
Store 305(b) 321
322: 178(bool) Load 305(b)
SelectionMerge 324 None
SelectionMerge 324 None
BranchConditional 322 323 324
BranchConditional 322 323 324
323: Label
323: Label
325: 7(fvec4) Load 9(v)
325: 7(fvec4) Load 9(v)
326: 7(fvec4) Load 11(uv4)
326: 7(fvec4) Load 11(uv4)
327: 1
79(bvec4) FOrdGreaterThan
325 326
327: 1
87(bvec4) FOrdLessThanEqual
325 326
328: 1
78
(bool) Any 327
328: 1
86
(bool) Any 327
Branch 324
Branch 324
324: Label
324: Label
329: 1
78(bool) Phi 322 316
328 323
329: 1
86(bool) Phi 322 5
328 323
Store 3
05
(b) 329
Store 3
13
(b) 329
330: 1
78(bool) Load 305
(b)
330: 1
86(bool) Load 313
(b)
SelectionMerge 332 None
SelectionMerge 332 None
BranchConditional 330 331 332
BranchConditional 330 331 332
331: Label
331: Label
333: 7(fvec4) Load 9(v)
333: 7(fvec4) Load 9(v)
334: 7(fvec4) Load 11(uv4)
334: 7(fvec4) Load 11(uv4)
335: 1
79(bvec4) FOrdGreaterThanEqual
333 334
335: 1
87(bvec4) FOrdGreaterThan
333 334
336: 1
78
(bool) Any 335
336: 1
86
(bool) Any 335
Branch 332
Branch 332
332: Label
332: Label
337: 1
78
(bool) Phi 330 324 336 331
337: 1
86
(bool) Phi 330 324 336 331
Store 3
05
(b) 337
Store 3
13
(b) 337
338: 1
78(bool) Load 305
(b)
338: 1
86(bool) Load 313
(b)
SelectionMerge 340 None
SelectionMerge 340 None
BranchConditional 338 339 340
BranchConditional 338 339 340
339: Label
339: Label
341:
179(bvec4) Load 181(ub41
)
341:
7(fvec4) Load 9(v
)
34
3: 179(bvec4) Load 342(ub42
)
34
2: 7(fvec4) Load 11(uv4
)
34
4: 179(bvec4) LogicalEqual 341 343
34
3: 187(bvec4) FOrdGreaterThanEqual 341 342
34
5: 178(bool) Any 344
34
4: 186(bool) Any 343
Branch 340
Branch 340
340: Label
340: Label
346: 178(bool) Phi 338 332 345 339
345: 186(bool) Phi 338 332 344 339
Store 305(b) 346
Store 313(b) 345
347: 178(bool) Load 305(b)
346: 186(bool) Load 313(b)
SelectionMerge 349 None
SelectionMerge 348 None
BranchConditional 347 348 349
BranchConditional 346 347 348
348: Label
347: Label
350: 179(bvec4) Load 181(ub41)
349: 187(bvec4) Load 189(ub41)
351: 179(bvec4) Load 342(ub42)
351: 187(bvec4) Load 350(ub42)
352: 179(bvec4) LogicalNotEqual 350 351
352: 187(bvec4) LogicalEqual 349 351
353: 178(bool) Any 352
353: 186(bool) Any 352
Branch 349
Branch 348
349: Label
348: Label
354: 178(bool) Phi 347 340 353 348
354: 186(bool) Phi 346 340 353 347
Store 305(b) 354
Store 313(b) 354
355: 178(bool) Load 305(b)
355: 186(bool) Load 313(b)
356: 179(bvec4) Load 181(ub41)
SelectionMerge 357 None
357: 178(bool) Any 356
BranchConditional 355 356 357
358: 178(bool) LogicalAnd 355 357
356: Label
Store 305(b) 358
358: 187(bvec4) Load 189(ub41)
359: 178(bool) Load 305(b)
359: 187(bvec4) Load 350(ub42)
360: 179(bvec4) Load 181(ub41)
360: 187(bvec4) LogicalNotEqual 358 359
361: 178(bool) All 360
361: 186(bool) Any 360
362: 178(bool) LogicalAnd 359 361
Branch 357
Store 305(b) 362
357: Label
363: 178(bool) Load 305(b)
362: 186(bool) Phi 355 348 361 356
SelectionMerge 365 None
Store 313(b) 362
BranchConditional 363 364 365
363: 186(bool) Load 313(b)
364: Label
364: 187(bvec4) Load 189(ub41)
366: 179(bvec4) Load 181(ub41)
365: 186(bool) Any 364
367: 179(bvec4) LogicalNot 366
366: 186(bool) LogicalAnd 363 365
368: 178(bool) Any 367
Store 313(b) 366
Branch 365
367: 186(bool) Load 313(b)
365: Label
368: 187(bvec4) Load 189(ub41)
369: 178(bool) Phi 363 349 368 364
369: 186(bool) All 368
Store 305(b) 369
370: 186(bool) LogicalAnd 367 369
370: 18(int) Load 20(i)
Store 313(b) 370
371: 18(int) Load 22(ui)
371: 186(bool) Load 313(b)
372: 18(int) IAdd 370 371
SelectionMerge 373 None
373: 18(int) Load 20(i)
BranchConditional 371 372 373
374: 18(int) IMul 372 373
372: Label
375: 18(int) Load 22(ui)
374: 187(bvec4) Load 189(ub41)
376: 18(int) ISub 374 375
375: 187(bvec4) LogicalNot 374
377: 18(int) Load 20(i)
376: 186(bool) Any 375
378: 18(int) SDiv 376 377
Branch 373
Store 20(i) 378
373: Label
379: 18(int) Load 20(i)
377: 186(bool) Phi 371 357 376 372
380: 18(int) Load 22(ui)
Store 313(b) 377
381: 18(int) SMod 379 380
378: 18(int) Load 20(i)
Store 20(i) 381
379: 18(int) Load 22(ui)
382: 18(int) Load 20(i)
380: 18(int) IAdd 378 379
381: 18(int) Load 20(i)
382: 18(int) IMul 380 381
383: 18(int) Load 22(ui)
383: 18(int) Load 22(ui)
384:
178(bool) IEqual
382 383
384:
18(int) ISub
382 383
385:
178(bool) LogicalNot 384
385:
18(int) Load 20(i)
SelectionMerge 387 None
386: 18(int) SDiv 384 385
BranchConditional 385 386 387
Store 20(i) 386
38
6: Label
38
7: 18(int) Load 20(i)
388: 18(int)
Load 20(
i)
388: 18(int)
Load 22(u
i)
389: 18(int)
Load 22(ui)
389: 18(int)
SMod 387 388
390: 178(bool) INotEqual 388
389
Store 20(i)
389
SelectionMerge 392 None
390: 18(int) Load 20(i)
BranchConditional 390 391 392
391: 18(int) Load 22(ui)
39
1: Label
39
2: 186(bool) IEqual 390 391
393:
18(int) Load 20(i)
393:
186(bool) LogicalNot 392
394: 18(int) Load 22(ui)
SelectionMerge 395 None
395: 178(bool) IEqual 393 394
BranchConditional 393 394 395
Branch 392
394: Label
39
2: Label
39
6: 18(int) Load 20(i)
39
6: 178(bool) Phi 390 386 395 391
39
7: 18(int) Load 22(ui)
39
7: 18(int) Load 20(i)
39
8: 186(bool) INotEqual 396 397
399: 178(bool) INotEqual 397 398
SelectionMerge 400 None
400: 178(bool) LogicalNotEqual 396 399
BranchConditional 398 399 400
Branch 387
399: Label
387: Label
401: 18(int) Load 20(i)
40
1: 178(bool) Phi 384 365 400 392
40
2: 18(int) Load 22(ui)
SelectionMerge 403 None
403: 186(bool) IEqual 401 402
BranchConditional 401 402 403
Branch 400
40
2
: Label
40
0
: Label
404:
18(int) Load 20(i)
404:
186(bool) Phi 398 394 403 399
40
6: 18(int) IAdd 404 405
40
5: 18(int) Load 20(i)
Store 20(i)
406
407: 186(bool) INotEqual 405
406
Branch 403
408: 186(bool) LogicalNotEqual 404 407
403: Label
Branch 395
407: 6(float) Load 212(uf)
395: Label
40
8: 6(float) Load 212(uf)
40
9: 186(bool) Phi 392 373 408 400
409: 6(float) FAdd 407 408
SelectionMerge 411 None
410: 6(float) Load 212(uf)
BranchConditional 409 410 411
41
1: 6(float) FMul 409 410
41
0: Label
412:
6(float) Load 212(uf
)
412:
18(int) Load 20(i
)
41
3: 6(float) FSub 411 412
41
4: 18(int) IAdd 412 413
414: 6(float) Load 212(uf)
Store 20(i) 414
415: 6(float) FDiv 413 414
Branch 411
Store 188(f) 415
411: Label
41
6: 7(fvec4) Load 9(v
)
41
5: 6(float) Load 220(uf
)
41
7: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 416
41
6: 6(float) Load 220(uf)
41
8: 6(float) Load 188(f)
41
7: 6(float) FAdd 415 416
41
9: 6(float) FAdd 418 417
41
8: 6(float) Load 220(uf)
Store 188(f) 419
419: 6(float) FMul 417 418
420:
7(fvec4) Load 9(v
)
420:
6(float) Load 220(uf
)
421:
7(fvec4) Load 9(v)
421:
6(float) FSub 419 420
422: 6(float)
ExtInst 1(GLSL.std.450) 67(Distance) 420 421
422: 6(float)
Load 220(uf)
423: 6(float)
Load 188(f)
423: 6(float)
FDiv 421 422
424: 6(float) FAdd 423 422
Store 196(f) 423
Store 188(f) 424
424: 7(fvec4) Load 9(v)
425:
7(fvec4) Load 9(v)
425:
6(float) ExtInst 1(GLSL.std.450) 66(Length) 424
426:
7(fvec4) Load 9(v
)
426:
6(float) Load 196(f
)
427: 6(float)
Dot 425 426
427: 6(float)
FAdd 426 425
428: 6(float) Load 188(f)
Store 196(f) 427
42
9: 6(float) FAdd 428 427
42
8: 7(fvec4) Load 9(v)
Store 188(f) 429
429: 7(fvec4) Load 9(v)
430: 6(float)
Load 188(f)
430: 6(float)
ExtInst 1(GLSL.std.450) 67(Distance) 428 429
431: 6(float) Load
212(u
f)
431: 6(float) Load
196(
f)
432: 6(float) F
Mul 430 431
432: 6(float) F
Add 431 430
433: 6(float) Load 188(f)
Store 196(f) 432
43
4: 6(float) FAdd 433 432
43
3: 7(fvec4) Load 9(v)
Store 188(f) 434
434: 7(fvec4) Load 9(v)
43
6: 7(fvec4) Load 9(v)
43
5: 6(float) Dot 433 434
43
7: 435(fvec3) VectorShuffle 436 436 0 1 2
43
6: 6(float) Load 196(f)
43
8: 7(fvec4) Load 9(v)
43
7: 6(float) FAdd 436 435
439: 435(fvec3) VectorShuffle 438 438 0 1 2
Store 196(f) 437
4
40: 435(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 437 439
4
38: 6(float) Load 196(f)
4
41: 6(float) CompositeExtract 440 0
4
39: 6(float) Load 220(uf)
44
2: 6(float) Load 188(f)
44
0: 6(float) FMul 438 439
44
3: 6(float) FAdd 442 441
44
1: 6(float) Load 196(f)
Store 188(f) 443
442: 6(float) FAdd 441 440
444: 6(float) Load 188(f)
Store 196(f) 442
44
5: 6(float) Load 212(uf
)
44
4: 7(fvec4) Load 9(v
)
44
6: 178(bool) FOrdEqual 444 445
44
5: 443(fvec3) VectorShuffle 444 444 0 1 2
44
7: 178(bool) LogicalNot 446
44
6: 7(fvec4) Load 9(v)
SelectionMerge 449 None
447: 443(fvec3) VectorShuffle 446 446 0 1 2
BranchConditional 447 448 449
448: 443(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 445 447
44
8: Label
44
9: 6(float) CompositeExtract 448 0
450: 6(float)
Load 188
(f)
450: 6(float)
Load 196
(f)
451: 6(float)
Load 212(uf)
451: 6(float)
FAdd 450 449
452: 178(bool) FOrdNotEqual 450
451
Store 196(f)
451
45
3: 6(float) Load 188
(f)
45
2: 6(float) Load 196
(f)
45
5: 178(bool) FOrdNotEqual 453 454
45
3: 6(float) Load 220(uf)
45
6: 178(bool) LogicalAnd 452 455
45
4: 186(bool) FOrdEqual 452 453
Branch 449
455: 186(bool) LogicalNot 454
449: Label
SelectionMerge 457 None
457: 178(bool) Phi 446 403 456 448
BranchConditional 455 456 457
SelectionMerge 459 None
456: Label
BranchConditional 457 458 459
458: 6(float) Load 196(f)
45
8: Label
45
9: 6(float) Load 220(uf)
460:
6(float) Load 188(f)
460:
186(bool) FOrdNotEqual 458 459
46
2: 6(float) FAdd 460 461
46
1: 6(float) Load 196(f)
Store 188(f)
462
463: 186(bool) FOrdNotEqual 461
462
Branch 459
464: 186(bool) LogicalAnd 460 463
459: Label
Branch 457
4
63: 18(int) Load 22(ui)
4
57: Label
46
4: 18(int) Load 20(i)
46
5: 186(bool) Phi 454 411 464 456
465: 18(int) BitwiseAnd 464 463
SelectionMerge 467 None
Store 20(i) 465
BranchConditional 465 466 467
46
7: 18(int) Load 20(i)
46
6: Label
468:
18(int) BitwiseOr 467 466
468:
6(float) Load 196(f)
Store 20(i) 468
470: 6(float) FAdd 468 469
469: 18(int) Load 22(ui)
Store 196(f) 470
470: 18(int) Load 20(i)
Branch 467
4
71: 18(int) BitwiseXor 470 469
4
67: Label
Store 20(i) 471
471: 18(int) Load 22(ui)
47
3
: 18(int) Load 20(i)
47
2
: 18(int) Load 20(i)
47
4: 18(int) SMod 473 472
47
3: 18(int) BitwiseAnd 472 471
Store 20(i) 47
4
Store 20(i) 47
3
475: 18(int) Load 20(i)
475: 18(int) Load 20(i)
476: 18(int)
ShiftRightArithmetic 475 398
476: 18(int)
BitwiseOr 475 474
Store 20(i) 476
Store 20(i) 476
477: 18(int) Load 22(ui)
477: 18(int) Load 22(ui)
478: 18(int) Load 20(i)
478: 18(int) Load 20(i)
479: 18(int)
ShiftLeftLogical
478 477
479: 18(int)
BitwiseXor
478 477
Store 20(i) 479
Store 20(i) 479
480: 18(int) Load 20(i)
481: 18(int) Load 20(i)
481: 18(int) Not 480
482: 18(int) SMod 481 480
Store 20(i) 481
Store 20(i) 482
482: 178(bool) Load 305(b)
483: 18(int) Load 20(i)
483: 178(bool) LogicalNot 482
484: 18(int) ShiftRightArithmetic 483 406
Store 305(b) 483
Store 20(i) 484
486: 178(bool) Load 305(b)
485: 18(int) Load 22(ui)
SelectionMerge 489 None
486: 18(int) Load 20(i)
BranchConditional 486 488 498
487: 18(int) ShiftLeftLogical 486 485
488: Label
Store 20(i) 487
490: 18(int) Load 20(i)
488: 18(int) Load 20(i)
491: 6(float) ConvertSToF 490
489: 18(int) Not 488
492: 7(fvec4) CompositeConstruct 491 491 491 491
Store 20(i) 489
493: 6(float) Load 188(f)
490: 186(bool) Load 313(b)
494: 7(fvec4) CompositeConstruct 493 493 493 493
491: 186(bool) LogicalNot 490
495: 7(fvec4) FAdd 492 494
Store 313(b) 491
496: 7(fvec4) Load 9(v)
494: 186(bool) Load 313(b)
497: 7(fvec4) FAdd 495 496
SelectionMerge 497 None
Store 487 497
BranchConditional 494 496 506
Branch 489
496: Label
498: Label
498: 18(int) Load 20(i)
499: 7(fvec4) Load 9(v)
499: 6(float) ConvertSToF 498
Store 487 499
500: 7(fvec4) CompositeConstruct 499 499 499 499
Branch 489
501: 6(float) Load 196(f)
489: Label
502: 7(fvec4) CompositeConstruct 501 501 501 501
500: 7(fvec4) Load 487
503: 7(fvec4) FAdd 500 502
Store 485(FragColor) 500
504: 7(fvec4) Load 9(v)
Store 503(m1) 509
505: 7(fvec4) FAdd 503 504
Store 510(m2) 512
Store 495 505
513: 178(bool) Load 305(b)
Branch 497
SelectionMerge 516 None
506: Label
BranchConditional 513 515 518
507: 7(fvec4) Load 9(v)
515: Label
Store 495 507
517: 501 Load 503(m1)
Branch 497
Store 514 517
497: Label
Branch 516
508: 7(fvec4) Load 495
518: Label
Store 493(FragColor) 508
519: 501 Load 510(m2)
Store 511(m1) 517
Store 514 519
Store 518(m2) 520
Branch 516
521: 186(bool) Load 313(b)
516: Label
SelectionMerge 524 None
520: 8(ptr) AccessChain 514 405
BranchConditional 521 523 526
521: 7(fvec4) Load 520
523: Label
522: 7(fvec4) Load 485(FragColor)
525: 509 Load 511(m1)
523: 7(fvec4) FAdd 522 521
Store 522 525
Store 485(FragColor) 523
Branch 524
526: Label
527: 509 Load 518(m2)
Store 522 527
Branch 524
524: Label
528: 8(ptr) AccessChain 522 413
529: 7(fvec4) Load 528
530: 7(fvec4) Load 493(FragColor)
531: 7(fvec4) FAdd 530 529
Store 493(FragColor) 531
Return
Return
FunctionEnd
FunctionEnd
Test/spv.Operations.frag
View file @
bbbd9a2a
...
@@ -55,9 +55,10 @@ void main()
...
@@ -55,9 +55,10 @@ void main()
v
+=
ceil
(
v
);
v
+=
ceil
(
v
);
v
+=
fract
(
v
);
v
+=
fract
(
v
);
v
+=
mod
(
v
,
v
);
v
+=
mod
(
v
,
v
);
v
+=
mod
(
v
,
v
.
x
);
v
+=
mod
(
v
,
v
.
x
);
v
+=
modf
(
v
,
v
);
v
+=
modf
(
v
,
v
);
v
+=
modf
(
v
,
v
.
yzxw
);
v
+=
min
(
v
,
uv4
);
v
+=
min
(
v
,
uv4
);
v
+=
max
(
v
,
uv4
);
v
+=
max
(
v
,
uv4
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment