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
spec_constant_op_mode_setter
.
turnOnSpecConstantOpMode
();
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
());
};
// try texturing
...
...
@@ -2727,6 +2730,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
// Does it need a swizzle inversion? If so, evaluation is inverted;
// operate first on the swizzle base, then apply the swizzle.
// That is, we transform
//
// interpolate(v.zy) -> interpolate(v).zy
//
if
(
glslangOperands
[
0
]
->
getAsOperator
()
&&
glslangOperands
[
0
]
->
getAsOperator
()
->
getOp
()
==
glslang
::
EOpVectorSwizzle
)
invertedType
=
convertGlslangToSpvType
(
glslangOperands
[
0
]
->
getAsBinaryNode
()
->
getLeft
()
->
getType
());
...
...
@@ -2819,8 +2826,19 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
}
#endif
// for l-values, pass the address, for r-values, pass the value
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
|=
TranslateCoherent
(
glslangOperands
[
arg
]
->
getAsTyped
()
->
getType
());
}
else
{
...
...
@@ -2883,8 +2901,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
result
=
createMiscOperation
(
node
->
getOp
(),
precision
,
resultType
(),
operands
,
node
->
getBasicType
());
break
;
}
if
(
invertedType
)
if
(
invertedType
!=
spv
::
NoResult
)
result
=
createInvertedSwizzle
(
precision
,
*
glslangOperands
[
0
]
->
getAsBinaryNode
(),
result
);
else
if
(
temporaryLvalue
!=
spv
::
NoResult
)
{
builder
.
setAccessChain
(
complexLvalue
);
builder
.
accessChainStore
(
builder
.
createLoad
(
temporaryLvalue
));
}
}
if
(
noReturnValue
)
...
...
SPIRV/SpvBuilder.h
View file @
bbbd9a2a
...
...
@@ -676,6 +676,11 @@ public:
// 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
);
// 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
Id
accessChainGetLValue
();
...
...
Test/baseResults/spv.Operations.frag.out
View file @
bbbd9a2a
spv.Operations.frag
// Module Version 10000
// Generated by (magic number): 80008
// Id's are bound by 5
32
// Id's are bound by 5
40
Capability Shader
1: ExtInstImport "GLSL.std.450"
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
Source GLSL 450
Name 4 "main"
...
...
@@ -14,23 +14,24 @@ spv.Operations.frag
Name 11 "uv4"
Name 20 "i"
Name 22 "ui"
Name 181 "ub41"
Name 188 "f"
Name 212 "uf"
Name 285 "u"
Name 288 "uui"
Name 305 "b"
Name 342 "ub42"
Name 485 "FragColor"
Name 503 "m1"
Name 510 "m2"
Name 526 "uiv4"
Name 528 "ub"
Name 531 "uuv4"
Name 155 "swizzleTemp"
Name 189 "ub41"
Name 196 "f"
Name 220 "uf"
Name 293 "u"
Name 296 "uui"
Name 313 "b"
Name 350 "ub42"
Name 493 "FragColor"
Name 511 "m1"
Name 518 "m2"
Name 534 "uiv4"
Name 536 "ub"
Name 539 "uuv4"
Decorate 22(ui) Flat
Decorate 2
88
(uui) Flat
Decorate 5
26
(uiv4) Flat
Decorate 53
1
(uuv4) Flat
Decorate 2
96
(uui) Flat
Decorate 5
34
(uiv4) Flat
Decorate 53
9
(uuv4) Flat
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
...
...
@@ -45,55 +46,56 @@ spv.Operations.frag
141: TypeInt 32 0
142: 141(int) Constant 0
143: TypePointer Function 6(float)
1
78
: TypeBool
1
79: TypeVector 178
(bool) 4
18
0: TypePointer Private 179
(bvec4)
18
1(ub41): 180
(ptr) Variable Private
21
1
: TypePointer Input 6(float)
2
12(uf): 211
(ptr) Variable Input
2
84
: TypePointer Function 141(int)
2
87
: TypePointer Input 141(int)
2
88(uui): 287
(ptr) Variable Input
3
04: TypePointer Function 178
(bool)
3
42(ub42): 180
(ptr) Variable Private
398
: 18(int) Constant 2
4
05
: 18(int) Constant 1
4
35
: TypeVector 6(float) 3
4
54
: 6(float) Constant 1073741824
46
1
: 6(float) Constant 1065353216
4
66
: 18(int) Constant 66
4
72
: 18(int) Constant 17
4
84
: TypePointer Output 7(fvec4)
4
85(FragColor): 484
(ptr) Variable Output
50
1
: TypeMatrix 7(fvec4) 4
5
02: TypePointer Function 501
5
04
: 6(float) Constant 0
5
05: 7(fvec4) ConstantComposite 461 504 504 504
5
06: 7(fvec4) ConstantComposite 504 461 504 504
5
07: 7(fvec4) ConstantComposite 504 504 461 504
5
08: 7(fvec4) ConstantComposite 504 504 504 461
5
09: 501 ConstantComposite 505 506 507 508
51
1: 7(fvec4) ConstantComposite 504 504 504 504
5
12: 501 ConstantComposite 511 511 511 511
5
24
: TypeVector 18(int) 4
5
25: TypePointer Input 524
(ivec4)
5
26(uiv4): 525
(ptr) Variable Input
5
27: TypePointer Private 178
(bool)
5
28(ub): 527
(ptr) Variable Private
5
29
: TypeVector 141(int) 4
53
0: TypePointer Input 529
(ivec4)
53
1(uuv4): 530
(ptr) Variable Input
1
86
: TypeBool
1
87: TypeVector 186
(bool) 4
18
8: TypePointer Private 187
(bvec4)
18
9(ub41): 188
(ptr) Variable Private
21
9
: TypePointer Input 6(float)
2
20(uf): 219
(ptr) Variable Input
2
92
: TypePointer Function 141(int)
2
95
: TypePointer Input 141(int)
2
96(uui): 295
(ptr) Variable Input
3
12: TypePointer Function 186
(bool)
3
50(ub42): 188
(ptr) Variable Private
406
: 18(int) Constant 2
4
13
: 18(int) Constant 1
4
43
: TypeVector 6(float) 3
4
62
: 6(float) Constant 1073741824
46
9
: 6(float) Constant 1065353216
4
74
: 18(int) Constant 66
4
80
: 18(int) Constant 17
4
92
: TypePointer Output 7(fvec4)
4
93(FragColor): 492
(ptr) Variable Output
50
9
: TypeMatrix 7(fvec4) 4
5
10: TypePointer Function 509
5
12
: 6(float) Constant 0
5
13: 7(fvec4) ConstantComposite 469 512 512 512
5
14: 7(fvec4) ConstantComposite 512 469 512 512
5
15: 7(fvec4) ConstantComposite 512 512 469 512
5
16: 7(fvec4) ConstantComposite 512 512 512 469
5
17: 509 ConstantComposite 513 514 515 516
51
9: 7(fvec4) ConstantComposite 512 512 512 512
5
20: 509 ConstantComposite 519 519 519 519
5
32
: TypeVector 18(int) 4
5
33: TypePointer Input 532
(ivec4)
5
34(uiv4): 533
(ptr) Variable Input
5
35: TypePointer Private 186
(bool)
5
36(ub): 535
(ptr) Variable Private
5
37
: TypeVector 141(int) 4
53
8: TypePointer Input 537
(ivec4)
53
9(uuv4): 538
(ptr) Variable Input
4(main): 2 Function None 3
5: Label
9(v): 8(ptr) Variable Function
20(i): 19(ptr) Variable Function
188(f): 143(ptr) Variable Function
285(u): 284(ptr) Variable Function
305(b): 304(ptr) Variable Function
487: 8(ptr) Variable Function
503(m1): 502(ptr) Variable Function
510(m2): 502(ptr) Variable Function
514: 502(ptr) Variable Function
155(swizzleTemp): 8(ptr) Variable Function
196(f): 143(ptr) Variable Function
293(u): 292(ptr) Variable Function
313(b): 312(ptr) Variable Function
495: 8(ptr) Variable Function
511(m1): 510(ptr) Variable Function
518(m2): 510(ptr) Variable Function
522: 510(ptr) Variable Function
12: 7(fvec4) Load 11(uv4)
13: 7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12
Store 9(v) 13
...
...
@@ -262,441 +264,450 @@ spv.Operations.frag
153: 7(fvec4) FAdd 152 151
Store 9(v) 153
154: 7(fvec4) Load 9(v)
15
5: 7(fvec4) Load 11(uv4
)
15
6: 7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 154 155
15
7
: 7(fvec4) Load 9(v)
15
8: 7(fvec4) FAdd 157 156
Store 9(v) 15
8
1
59
: 7(fvec4) Load 9(v)
16
0: 7(fvec4) Load 11(uv4)
161: 7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 159 160
15
6: 7(fvec4) ExtInst 1(GLSL.std.450) 35(Modf) 154 155(swizzleTemp
)
15
7: 7(fvec4) Load 155(swizzleTemp)
15
8
: 7(fvec4) Load 9(v)
15
9: 7(fvec4) VectorShuffle 158 157 6 4 5 7
Store 9(v) 15
9
1
60
: 7(fvec4) Load 9(v)
16
1: 7(fvec4) FAdd 160 156
Store 9(v) 161
162: 7(fvec4) Load 9(v)
163: 7(fvec4) FAdd 162 161
Store 9(v) 163
164: 7(fvec4) Load 9(v)
165: 7(fvec4) Load 11(uv4)
166: 7(fvec4) Load 11(uv4)
167: 7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 164 165 166
168: 7(fvec4) Load 9(v)
169: 7(fvec4) FAdd 168 167
Store 9(v) 169
163: 7(fvec4) Load 11(uv4)
164: 7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 162 163
165: 7(fvec4) Load 9(v)
166: 7(fvec4) FAdd 165 164
Store 9(v) 166
167: 7(fvec4) Load 9(v)
168: 7(fvec4) Load 11(uv4)
169: 7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 167 168
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)
173: 7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 170 171 172
174: 7(fvec4) Load 9(v)
175: 7(fvec4) FAdd 174 173
Store 9(v) 175
173: 7(fvec4) Load 11(uv4)
174: 7(fvec4) Load 11(uv4)
175: 7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 172 173 174
176: 7(fvec4) Load 9(v)
177: 7(fvec4) Load 9(v)
182: 179(bvec4) Load 181(ub41)
183: 7(fvec4) Select 182 177 176
177: 7(fvec4) FAdd 176 175
Store 9(v) 177
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)
185: 7(fvec4) FAdd 184 183
Store 9(v) 185
186: 7(fvec4) Load 9(v)
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
185: 7(fvec4) Load 9(v)
190: 187(bvec4) Load 189(ub41)
191: 7(fvec4) Select 190 185 184
192: 7(fvec4) Load 9(v)
193: 7(fvec4) FAdd 192 191
Store 9(v) 193
194: 7(fvec4) Load 9(v)
195: 7(fvec4) Load 11(uv4)
196: 7(fvec4) Load 9(v)
197: 7(fvec4) ExtInst 1(GLSL.std.450) 50(Fma) 194 195 196
198: 7(fvec4) Load 9(v)
199: 7(fvec4) FAdd 198 197
Store 9(v) 199
195: 7(fvec4) Load 9(v)
197: 6(float) Load 196(f)
198: 7(fvec4) CompositeConstruct 197 197 197 197
199: 7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 194 195 198
200: 7(fvec4) Load 9(v)
201: 7(fvec4)
Load 9(v)
202: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 200
201
20
3
: 7(fvec4) Load 9(v)
20
4: 7(fvec4) FAdd 203 202
Store 9(v) 204
205: 7(fvec4)
Load 9(v)
201: 7(fvec4)
FAdd 200 199
Store 9(v)
201
20
2
: 7(fvec4) Load 9(v)
20
3: 7(fvec4) Load 11(uv4)
204: 7(fvec4) Load 9(v)
205: 7(fvec4)
ExtInst 1(GLSL.std.450) 50(Fma) 202 203 204
206: 7(fvec4) Load 9(v)
207: 7(fvec4) Load 9(v)
208: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 205 206 207
207: 7(fvec4) FAdd 206 205
Store 9(v) 207
208: 7(fvec4) Load 9(v)
209: 7(fvec4) Load 9(v)
210: 7(fvec4) FAdd 209 208
Store 9(v) 210
213: 6(float) Load 212(uf)
210: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 208 209
211: 7(fvec4) Load 9(v)
212: 7(fvec4) FAdd 211 210
Store 9(v) 212
213: 7(fvec4) Load 9(v)
214: 7(fvec4) Load 9(v)
215: 7(fvec4)
CompositeConstruct 213 213 213 213
216: 7(fvec4) ExtInst 1(GLSL.std.450) 4
8(Step) 215 214
215: 7(fvec4)
Load 9(v)
216: 7(fvec4) ExtInst 1(GLSL.std.450) 4
9(SmoothStep) 213 214 215
217: 7(fvec4) Load 9(v)
218: 7(fvec4) FAdd 217 216
Store 9(v) 218
219: 6(float) Load 212(uf)
220: 6(float) Load 212(uf)
221: 7(fvec4) Load 9(v)
222: 7(fvec4) CompositeConstruct 219 219 219 219
223: 7(fvec4) CompositeConstruct 220 220 220 220
224: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 222 223 221
221: 6(float) Load 220(uf)
222: 7(fvec4) Load 9(v)
223: 7(fvec4) CompositeConstruct 221 221 221 221
224: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 223 222
225: 7(fvec4) Load 9(v)
226: 7(fvec4) FAdd 225 224
Store 9(v) 226
227:
7(fvec4) Load 9(v
)
228:
7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 227
227:
6(float) Load 220(uf
)
228:
6(float) Load 220(uf)
229: 7(fvec4) Load 9(v)
230: 7(fvec4) FAdd 229 228
Store 9(v) 230
231: 7(fvec4) Load 9(v)
232: 7(fvec4) Load 9(v)
230: 7(fvec4) CompositeConstruct 227 227 227 227
231: 7(fvec4) CompositeConstruct 228 228 228 228
232: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 230 231 229
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)
236: 7(fvec4) FAdd 235 234
Store 9(v) 236
236: 7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 235
237: 7(fvec4) Load 9(v)
238: 7(fvec4) Load 9(v)
239: 7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 237 238
238: 7(fvec4) FAdd 237 236
Store 9(v) 238
239: 7(fvec4) Load 9(v)
240: 7(fvec4) Load 9(v)
241: 7(fvec4) FAdd 240 239
Store 9(v) 241
242: 7(fvec4) Load 9(v)
241: 7(fvec4) Load 9(v)
242: 7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 239 240 241
243: 7(fvec4) Load 9(v)
244: 6(float) Load 212(uf)
245: 7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 242 243 244
244: 7(fvec4) FAdd 243 242
Store 9(v) 244
245: 7(fvec4) Load 9(v)
246: 7(fvec4) Load 9(v)
247: 7(fvec4) FAdd 246 245
Store 9(v) 247
247: 7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 245 246
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)
251: 7(fvec4) FAdd 250 249
Store 9(v) 251
252: 7(fvec4) Load 9(v)
253: 7(fvec4) DPdy 252
251: 7(fvec4) Load 9(v)
252: 6(float) Load 220(uf)
253: 7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 250 251 252
254: 7(fvec4) Load 9(v)
255: 7(fvec4) FAdd 254 253
Store 9(v) 255
256: 7(fvec4) Load 9(v)
257: 7(fvec4)
Fwidth
256
257: 7(fvec4)
DPdx
256
258: 7(fvec4) Load 9(v)
259: 7(fvec4) FAdd 258 257
Store 9(v) 259
260: 18(int) Load 22(ui)
261: 18(int) ExtInst 1(GLSL.std.450) 5(SAbs) 260
262: 18(int) Load 20(i)
263: 18(int) IAdd 262 261
Store 20(i) 263
264: 18(int) Load 20(i)
265: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 264
266: 18(int) Load 20(i)
267: 18(int) IAdd 266 265
Store 20(i) 267
268: 18(int) Load 20(i)
269: 18(int) Load 22(ui)
270: 18(int) ExtInst 1(GLSL.std.450) 39(SMin) 268 269
271: 18(int) Load 20(i)
272: 18(int) IAdd 271 270
Store 20(i) 272
273: 18(int) Load 20(i)
274: 18(int) Load 22(ui)
275: 18(int) ExtInst 1(GLSL.std.450) 42(SMax) 273 274
260: 7(fvec4) Load 9(v)
261: 7(fvec4) DPdy 260
262: 7(fvec4) Load 9(v)
263: 7(fvec4) FAdd 262 261
Store 9(v) 263
264: 7(fvec4) Load 9(v)
265: 7(fvec4) Fwidth 264
266: 7(fvec4) Load 9(v)
267: 7(fvec4) FAdd 266 265
Store 9(v) 267
268: 18(int) Load 22(ui)
269: 18(int) ExtInst 1(GLSL.std.450) 5(SAbs) 268
270: 18(int) Load 20(i)
271: 18(int) IAdd 270 269
Store 20(i) 271
272: 18(int) Load 20(i)
273: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 272
274: 18(int) Load 20(i)
275: 18(int) IAdd 274 273
Store 20(i) 275
276: 18(int) Load 20(i)
277: 18(int) IAdd 276 275
Store 20(i) 277
278: 18(int) Load 20(i)
279: 18(int) Load 22(ui)
280: 18(int) Load 22(ui)
281: 18(int) ExtInst 1(GLSL.std.450) 45(SClamp) 278 279 280
282: 18(int) Load 20(i)
283: 18(int) IAdd 282 281
Store 20(i) 283
286: 141(int) Load 285(u)
289: 141(int) Load 288(uui)
290: 141(int) ExtInst 1(GLSL.std.450) 38(UMin) 286 289
291: 141(int) Load 285(u)
292: 141(int) IAdd 291 290
Store 285(u) 292
293: 141(int) Load 285(u)
294: 141(int) Load 288(uui)
295: 141(int) ExtInst 1(GLSL.std.450) 41(UMax) 293 294
296: 141(int) Load 285(u)
297: 141(int) IAdd 296 295
Store 285(u) 297
298: 141(int) Load 285(u)
299: 141(int) Load 288(uui)
300: 141(int) Load 288(uui)
301: 141(int) ExtInst 1(GLSL.std.450) 44(UClamp) 298 299 300
302: 141(int) Load 285(u)
303: 141(int) IAdd 302 301
Store 285(u) 303
306: 6(float) Load 212(uf)
307: 178(bool) IsNan 306
Store 305(b) 307
308: 6(float) Load 188(f)
309: 178(bool) IsInf 308
Store 305(b) 309
310: 7(fvec4) Load 9(v)
311: 7(fvec4) Load 11(uv4)
312: 179(bvec4) FOrdLessThan 310 311
313: 178(bool) Any 312
Store 305(b) 313
314: 178(bool) Load 305(b)
SelectionMerge 316 None
BranchConditional 314 315 316
315: Label
317: 7(fvec4) Load 9(v)
318: 7(fvec4) Load 11(uv4)
319: 179(bvec4) FOrdLessThanEqual 317 318
320: 178(bool) Any 319
Branch 316
316: Label
321: 178(bool) Phi 314 5 320 315
Store 305(b) 321
322: 178(bool) Load 305(b)
277: 18(int) Load 22(ui)
278: 18(int) ExtInst 1(GLSL.std.450) 39(SMin) 276 277
279: 18(int) Load 20(i)
280: 18(int) IAdd 279 278
Store 20(i) 280
281: 18(int) Load 20(i)
282: 18(int) Load 22(ui)
283: 18(int) ExtInst 1(GLSL.std.450) 42(SMax) 281 282
284: 18(int) Load 20(i)
285: 18(int) IAdd 284 283
Store 20(i) 285
286: 18(int) Load 20(i)
287: 18(int) Load 22(ui)
288: 18(int) Load 22(ui)
289: 18(int) ExtInst 1(GLSL.std.450) 45(SClamp) 286 287 288
290: 18(int) Load 20(i)
291: 18(int) IAdd 290 289
Store 20(i) 291
294: 141(int) Load 293(u)
297: 141(int) Load 296(uui)
298: 141(int) ExtInst 1(GLSL.std.450) 38(UMin) 294 297
299: 141(int) Load 293(u)
300: 141(int) IAdd 299 298
Store 293(u) 300
301: 141(int) Load 293(u)
302: 141(int) Load 296(uui)
303: 141(int) ExtInst 1(GLSL.std.450) 41(UMax) 301 302
304: 141(int) Load 293(u)
305: 141(int) IAdd 304 303
Store 293(u) 305
306: 141(int) Load 293(u)
307: 141(int) Load 296(uui)
308: 141(int) Load 296(uui)
309: 141(int) ExtInst 1(GLSL.std.450) 44(UClamp) 306 307 308
310: 141(int) Load 293(u)
311: 141(int) IAdd 310 309
Store 293(u) 311
314: 6(float) Load 220(uf)
315: 186(bool) IsNan 314
Store 313(b) 315
316: 6(float) Load 196(f)
317: 186(bool) IsInf 316
Store 313(b) 317
318: 7(fvec4) Load 9(v)
319: 7(fvec4) Load 11(uv4)
320: 187(bvec4) FOrdLessThan 318 319
321: 186(bool) Any 320
Store 313(b) 321
322: 186(bool) Load 313(b)
SelectionMerge 324 None
BranchConditional 322 323 324
323: Label
325: 7(fvec4) Load 9(v)
326: 7(fvec4) Load 11(uv4)
327: 1
79(bvec4) FOrdGreaterThan
325 326
328: 1
78
(bool) Any 327
327: 1
87(bvec4) FOrdLessThanEqual
325 326
328: 1
86
(bool) Any 327
Branch 324
324: Label
329: 1
78(bool) Phi 322 316
328 323
Store 3
05
(b) 329
330: 1
78(bool) Load 305
(b)
329: 1
86(bool) Phi 322 5
328 323
Store 3
13
(b) 329
330: 1
86(bool) Load 313
(b)
SelectionMerge 332 None
BranchConditional 330 331 332
331: Label
333: 7(fvec4) Load 9(v)
334: 7(fvec4) Load 11(uv4)
335: 1
79(bvec4) FOrdGreaterThanEqual
333 334
336: 1
78
(bool) Any 335
335: 1
87(bvec4) FOrdGreaterThan
333 334
336: 1
86
(bool) Any 335
Branch 332
332: Label
337: 1
78
(bool) Phi 330 324 336 331
Store 3
05
(b) 337
338: 1
78(bool) Load 305
(b)
337: 1
86
(bool) Phi 330 324 336 331
Store 3
13
(b) 337
338: 1
86(bool) Load 313
(b)
SelectionMerge 340 None
BranchConditional 338 339 340
339: Label
341:
179(bvec4) Load 181(ub41
)
34
3: 179(bvec4) Load 342(ub42
)
34
4: 179(bvec4) LogicalEqual 341 343
34
5: 178(bool) Any 344
341:
7(fvec4) Load 9(v
)
34
2: 7(fvec4) Load 11(uv4
)
34
3: 187(bvec4) FOrdGreaterThanEqual 341 342
34
4: 186(bool) Any 343
Branch 340
340: Label
346: 178(bool) Phi 338 332 345 339
Store 305(b) 346
347: 178(bool) Load 305(b)
SelectionMerge 349 None
BranchConditional 347 348 349
348: Label
350: 179(bvec4) Load 181(ub41)
351: 179(bvec4) Load 342(ub42)
352: 179(bvec4) LogicalNotEqual 350 351
353: 178(bool) Any 352
Branch 349
349: Label
354: 178(bool) Phi 347 340 353 348
Store 305(b) 354
355: 178(bool) Load 305(b)
356: 179(bvec4) Load 181(ub41)
357: 178(bool) Any 356
358: 178(bool) LogicalAnd 355 357
Store 305(b) 358
359: 178(bool) Load 305(b)
360: 179(bvec4) Load 181(ub41)
361: 178(bool) All 360
362: 178(bool) LogicalAnd 359 361
Store 305(b) 362
363: 178(bool) Load 305(b)
SelectionMerge 365 None
BranchConditional 363 364 365
364: Label
366: 179(bvec4) Load 181(ub41)
367: 179(bvec4) LogicalNot 366
368: 178(bool) Any 367
Branch 365
365: Label
369: 178(bool) Phi 363 349 368 364
Store 305(b) 369
370: 18(int) Load 20(i)
371: 18(int) Load 22(ui)
372: 18(int) IAdd 370 371
373: 18(int) Load 20(i)
374: 18(int) IMul 372 373
375: 18(int) Load 22(ui)
376: 18(int) ISub 374 375
377: 18(int) Load 20(i)
378: 18(int) SDiv 376 377
Store 20(i) 378
379: 18(int) Load 20(i)
380: 18(int) Load 22(ui)
381: 18(int) SMod 379 380
Store 20(i) 381
382: 18(int) Load 20(i)
345: 186(bool) Phi 338 332 344 339
Store 313(b) 345
346: 186(bool) Load 313(b)
SelectionMerge 348 None
BranchConditional 346 347 348
347: Label
349: 187(bvec4) Load 189(ub41)
351: 187(bvec4) Load 350(ub42)
352: 187(bvec4) LogicalEqual 349 351
353: 186(bool) Any 352
Branch 348
348: Label
354: 186(bool) Phi 346 340 353 347
Store 313(b) 354
355: 186(bool) Load 313(b)
SelectionMerge 357 None
BranchConditional 355 356 357
356: Label
358: 187(bvec4) Load 189(ub41)
359: 187(bvec4) Load 350(ub42)
360: 187(bvec4) LogicalNotEqual 358 359
361: 186(bool) Any 360
Branch 357
357: Label
362: 186(bool) Phi 355 348 361 356
Store 313(b) 362
363: 186(bool) Load 313(b)
364: 187(bvec4) Load 189(ub41)
365: 186(bool) Any 364
366: 186(bool) LogicalAnd 363 365
Store 313(b) 366
367: 186(bool) Load 313(b)
368: 187(bvec4) Load 189(ub41)
369: 186(bool) All 368
370: 186(bool) LogicalAnd 367 369
Store 313(b) 370
371: 186(bool) Load 313(b)
SelectionMerge 373 None
BranchConditional 371 372 373
372: Label
374: 187(bvec4) Load 189(ub41)
375: 187(bvec4) LogicalNot 374
376: 186(bool) Any 375
Branch 373
373: Label
377: 186(bool) Phi 371 357 376 372
Store 313(b) 377
378: 18(int) Load 20(i)
379: 18(int) Load 22(ui)
380: 18(int) IAdd 378 379
381: 18(int) Load 20(i)
382: 18(int) IMul 380 381
383: 18(int) Load 22(ui)
384:
178(bool) IEqual
382 383
385:
178(bool) LogicalNot 384
SelectionMerge 387 None
BranchConditional 385 386 387
38
6: Label
388: 18(int)
Load 20(
i)
389: 18(int)
Load 22(ui)
390: 178(bool) INotEqual 388
389
SelectionMerge 392 None
BranchConditional 390 391 392
39
1: Label
393:
18(int) Load 20(i)
394: 18(int) Load 22(ui)
395: 178(bool) IEqual 393 394
Branch 392
39
2: Label
39
6: 178(bool) Phi 390 386 395 391
39
7: 18(int) Load 20(i)
399: 178(bool) INotEqual 397 398
400: 178(bool) LogicalNotEqual 396 399
Branch 387
387: Label
40
1: 178(bool) Phi 384 365 400 392
SelectionMerge 403 None
BranchConditional 401 402 403
40
2
: Label
404:
18(int) Load 20(i)
40
6: 18(int) IAdd 404 405
Store 20(i)
406
Branch 403
403: Label
407: 6(float) Load 212(uf)
40
8: 6(float) Load 212(uf)
409: 6(float) FAdd 407 408
410: 6(float) Load 212(uf)
41
1: 6(float) FMul 409 410
412:
6(float) Load 212(uf
)
41
3: 6(float) FSub 411 412
414: 6(float) Load 212(uf)
415: 6(float) FDiv 413 414
Store 188(f) 415
41
6: 7(fvec4) Load 9(v
)
41
7: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 416
41
8: 6(float) Load 188(f)
41
9: 6(float) FAdd 418 417
Store 188(f) 419
420:
7(fvec4) Load 9(v
)
421:
7(fvec4) Load 9(v)
422: 6(float)
ExtInst 1(GLSL.std.450) 67(Distance) 420 421
423: 6(float)
Load 188(f)
424: 6(float) FAdd 423 422
Store 188(f) 424
425:
7(fvec4) Load 9(v)
426:
7(fvec4) Load 9(v
)
427: 6(float)
Dot 425 426
428: 6(float) Load 188(f)
42
9: 6(float) FAdd 428 427
Store 188(f) 429
430: 6(float)
Load 188(f)
431: 6(float) Load
212(u
f)
432: 6(float) F
Mul 430 431
433: 6(float) Load 188(f)
43
4: 6(float) FAdd 433 432
Store 188(f) 434
43
6: 7(fvec4) Load 9(v)
43
7: 435(fvec3) VectorShuffle 436 436 0 1 2
43
8: 7(fvec4) Load 9(v)
439: 435(fvec3) VectorShuffle 438 438 0 1 2
4
40: 435(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 437 439
4
41: 6(float) CompositeExtract 440 0
44
2: 6(float) Load 188(f)
44
3: 6(float) FAdd 442 441
Store 188(f) 443
444: 6(float) Load 188(f)
44
5: 6(float) Load 212(uf
)
44
6: 178(bool) FOrdEqual 444 445
44
7: 178(bool) LogicalNot 446
SelectionMerge 449 None
BranchConditional 447 448 449
44
8: Label
450: 6(float)
Load 188
(f)
451: 6(float)
Load 212(uf)
452: 178(bool) FOrdNotEqual 450
451
45
3: 6(float) Load 188
(f)
45
5: 178(bool) FOrdNotEqual 453 454
45
6: 178(bool) LogicalAnd 452 455
Branch 449
449: Label
457: 178(bool) Phi 446 403 456 448
SelectionMerge 459 None
BranchConditional 457 458 459
45
8: Label
460:
6(float) Load 188(f)
46
2: 6(float) FAdd 460 461
Store 188(f)
462
Branch 459
459: Label
4
63: 18(int) Load 22(ui)
46
4: 18(int) Load 20(i)
465: 18(int) BitwiseAnd 464 463
Store 20(i) 465
46
7: 18(int) Load 20(i)
468:
18(int) BitwiseOr 467 466
Store 20(i) 468
469: 18(int) Load 22(ui)
470: 18(int) Load 20(i)
4
71: 18(int) BitwiseXor 470 469
Store 20(i) 471
47
3
: 18(int) Load 20(i)
47
4: 18(int) SMod 473 472
Store 20(i) 47
4
384:
18(int) ISub
382 383
385:
18(int) Load 20(i)
386: 18(int) SDiv 384 385
Store 20(i) 386
38
7: 18(int) Load 20(i)
388: 18(int)
Load 22(u
i)
389: 18(int)
SMod 387 388
Store 20(i)
389
390: 18(int) Load 20(i)
391: 18(int) Load 22(ui)
39
2: 186(bool) IEqual 390 391
393:
186(bool) LogicalNot 392
SelectionMerge 395 None
BranchConditional 393 394 395
394: Label
39
6: 18(int) Load 20(i)
39
7: 18(int) Load 22(ui)
39
8: 186(bool) INotEqual 396 397
SelectionMerge 400 None
BranchConditional 398 399 400
399: Label
401: 18(int) Load 20(i)
40
2: 18(int) Load 22(ui)
403: 186(bool) IEqual 401 402
Branch 400
40
0
: Label
404:
186(bool) Phi 398 394 403 399
40
5: 18(int) Load 20(i)
407: 186(bool) INotEqual 405
406
408: 186(bool) LogicalNotEqual 404 407
Branch 395
395: Label
40
9: 186(bool) Phi 392 373 408 400
SelectionMerge 411 None
BranchConditional 409 410 411
41
0: Label
412:
18(int) Load 20(i
)
41
4: 18(int) IAdd 412 413
Store 20(i) 414
Branch 411
411: Label
41
5: 6(float) Load 220(uf
)
41
6: 6(float) Load 220(uf)
41
7: 6(float) FAdd 415 416
41
8: 6(float) Load 220(uf)
419: 6(float) FMul 417 418
420:
6(float) Load 220(uf
)
421:
6(float) FSub 419 420
422: 6(float)
Load 220(uf)
423: 6(float)
FDiv 421 422
Store 196(f) 423
424: 7(fvec4) Load 9(v)
425:
6(float) ExtInst 1(GLSL.std.450) 66(Length) 424
426:
6(float) Load 196(f
)
427: 6(float)
FAdd 426 425
Store 196(f) 427
42
8: 7(fvec4) Load 9(v)
429: 7(fvec4) Load 9(v)
430: 6(float)
ExtInst 1(GLSL.std.450) 67(Distance) 428 429
431: 6(float) Load
196(
f)
432: 6(float) F
Add 431 430
Store 196(f) 432
43
3: 7(fvec4) Load 9(v)
434: 7(fvec4) Load 9(v)
43
5: 6(float) Dot 433 434
43
6: 6(float) Load 196(f)
43
7: 6(float) FAdd 436 435
Store 196(f) 437
4
38: 6(float) Load 196(f)
4
39: 6(float) Load 220(uf)
44
0: 6(float) FMul 438 439
44
1: 6(float) Load 196(f)
442: 6(float) FAdd 441 440
Store 196(f) 442
44
4: 7(fvec4) Load 9(v
)
44
5: 443(fvec3) VectorShuffle 444 444 0 1 2
44
6: 7(fvec4) Load 9(v)
447: 443(fvec3) VectorShuffle 446 446 0 1 2
448: 443(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 445 447
44
9: 6(float) CompositeExtract 448 0
450: 6(float)
Load 196
(f)
451: 6(float)
FAdd 450 449
Store 196(f)
451
45
2: 6(float) Load 196
(f)
45
3: 6(float) Load 220(uf)
45
4: 186(bool) FOrdEqual 452 453
455: 186(bool) LogicalNot 454
SelectionMerge 457 None
BranchConditional 455 456 457
456: Label
458: 6(float) Load 196(f)
45
9: 6(float) Load 220(uf)
460:
186(bool) FOrdNotEqual 458 459
46
1: 6(float) Load 196(f)
463: 186(bool) FOrdNotEqual 461
462
464: 186(bool) LogicalAnd 460 463
Branch 457
4
57: Label
46
5: 186(bool) Phi 454 411 464 456
SelectionMerge 467 None
BranchConditional 465 466 467
46
6: Label
468:
6(float) Load 196(f)
470: 6(float) FAdd 468 469
Store 196(f) 470
Branch 467
4
67: Label
471: 18(int) Load 22(ui)
47
2
: 18(int) Load 20(i)
47
3: 18(int) BitwiseAnd 472 471
Store 20(i) 47
3
475: 18(int) Load 20(i)
476: 18(int)
ShiftRightArithmetic 475 398
476: 18(int)
BitwiseOr 475 474
Store 20(i) 476
477: 18(int) Load 22(ui)
478: 18(int) Load 20(i)
479: 18(int)
ShiftLeftLogical
478 477
479: 18(int)
BitwiseXor
478 477
Store 20(i) 479
480: 18(int) Load 20(i)
481: 18(int) Not 480
Store 20(i) 481
482: 178(bool) Load 305(b)
483: 178(bool) LogicalNot 482
Store 305(b) 483
486: 178(bool) Load 305(b)
SelectionMerge 489 None
BranchConditional 486 488 498
488: Label
490: 18(int) Load 20(i)
491: 6(float) ConvertSToF 490
492: 7(fvec4) CompositeConstruct 491 491 491 491
493: 6(float) Load 188(f)
494: 7(fvec4) CompositeConstruct 493 493 493 493
495: 7(fvec4) FAdd 492 494
496: 7(fvec4) Load 9(v)
497: 7(fvec4) FAdd 495 496
Store 487 497
Branch 489
498: Label
499: 7(fvec4) Load 9(v)
Store 487 499
Branch 489
489: Label
500: 7(fvec4) Load 487
Store 485(FragColor) 500
Store 503(m1) 509
Store 510(m2) 512
513: 178(bool) Load 305(b)
SelectionMerge 516 None
BranchConditional 513 515 518
515: Label
517: 501 Load 503(m1)
Store 514 517
Branch 516
518: Label
519: 501 Load 510(m2)
Store 514 519
Branch 516
516: Label
520: 8(ptr) AccessChain 514 405
521: 7(fvec4) Load 520
522: 7(fvec4) Load 485(FragColor)
523: 7(fvec4) FAdd 522 521
Store 485(FragColor) 523
481: 18(int) Load 20(i)
482: 18(int) SMod 481 480
Store 20(i) 482
483: 18(int) Load 20(i)
484: 18(int) ShiftRightArithmetic 483 406
Store 20(i) 484
485: 18(int) Load 22(ui)
486: 18(int) Load 20(i)
487: 18(int) ShiftLeftLogical 486 485
Store 20(i) 487
488: 18(int) Load 20(i)
489: 18(int) Not 488
Store 20(i) 489
490: 186(bool) Load 313(b)
491: 186(bool) LogicalNot 490
Store 313(b) 491
494: 186(bool) Load 313(b)
SelectionMerge 497 None
BranchConditional 494 496 506
496: Label
498: 18(int) Load 20(i)
499: 6(float) ConvertSToF 498
500: 7(fvec4) CompositeConstruct 499 499 499 499
501: 6(float) Load 196(f)
502: 7(fvec4) CompositeConstruct 501 501 501 501
503: 7(fvec4) FAdd 500 502
504: 7(fvec4) Load 9(v)
505: 7(fvec4) FAdd 503 504
Store 495 505
Branch 497
506: Label
507: 7(fvec4) Load 9(v)
Store 495 507
Branch 497
497: Label
508: 7(fvec4) Load 495
Store 493(FragColor) 508
Store 511(m1) 517
Store 518(m2) 520
521: 186(bool) Load 313(b)
SelectionMerge 524 None
BranchConditional 521 523 526
523: Label
525: 509 Load 511(m1)
Store 522 525
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
FunctionEnd
Test/spv.Operations.frag
View file @
bbbd9a2a
...
...
@@ -55,9 +55,10 @@ void main()
v
+=
ceil
(
v
);
v
+=
fract
(
v
);
v
+=
mod
(
v
,
v
);
v
+=
mod
(
v
,
v
.
x
);
v
+=
mod
(
v
,
v
.
x
);
v
+=
modf
(
v
,
v
);
v
+=
modf
(
v
,
v
.
yzxw
);
v
+=
min
(
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