glslang/Test/baseResults/hlsl.forLoop.frag.out
steve-lunarg 85244d7486 HLSL: Enable component-wise vector comparisons from operators
This PR only changes a few lines of code, but is subtle.

In HLSL, comparison operators (<,>,<=,>=,==,!=) operate component-wise
when given a vector operand.  If a whole vector equality or inequality is
desired, then all() or any() can be used on the resulting bool vector.

This PR enables this change.  Existing shape conversion is used when
one of the two arguments is a vector and one is a scalar.

Some existing HLSL tests had assumed == and != meant vector-wise
instead of component-wise comparisons.  These tests have been changed
to add an explicit any() or all() to the test source.  This verifably
does not change the final SPIR-V binary relative to the old behavior
for == and !=.  The AST does change for the (now explicit, formerly
implicit) any() and all().  Also, a few tests changes where they
previously had the return type wrong, e.g, from a vec < vec comparison
in hlsl.shapeConv.frag.

Promotion of comparison opcodes to vector forms
(EOpEqual->EOpVectorEqual) is handled in promoteBinary(), as is setting
the proper vector type of the result.

EOpVectorEqual and EOpVectorNotEqual are now accepted as either
aggregate or binary nodes, similar to how the other operators are
handled.  Partial support already existed for this: it has been
fleshed out in the printing functions in intermOut.cpp.

There is an existing defect around shape conversion with 1-vectors, but
that is orthogonal to this PR and not addressed by it.
2016-10-26 08:50:10 -06:00

434 lines
18 KiB
Plaintext
Executable File

hlsl.forLoop.frag
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
0:2 Function Parameters:
0:2 'input' (layout(location=0 ) in 4-component vector of float)
0:? Sequence
0:? Sequence
0:3 Loop with condition tested first
0:3 No loop condition
0:3 No loop body
0:4 Sequence
0:4 Pre-Increment (temp 4-component vector of float)
0:4 'input' (layout(location=0 ) in 4-component vector of float)
0:4 Loop with condition tested first
0:4 No loop condition
0:4 No loop body
0:? Sequence
0:5 Loop with condition tested first
0:5 Loop Condition
0:5 any (global bool)
0:5 NotEqual (temp 4-component vector of bool)
0:5 'input' (layout(location=0 ) in 4-component vector of float)
0:5 'input' (layout(location=0 ) in 4-component vector of float)
0:5 No loop body
0:? Sequence
0:6 Loop with condition tested first
0:6 Loop Condition
0:6 any (global bool)
0:6 NotEqual (temp 4-component vector of bool)
0:6 'input' (layout(location=0 ) in 4-component vector of float)
0:6 'input' (layout(location=0 ) in 4-component vector of float)
0:6 Loop Body
0:? Sequence
0:6 Sequence
0:6 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:6 Negate value (temp 4-component vector of float)
0:6 'input' (layout(location=0 ) in 4-component vector of float)
0:6 Branch: Return
0:7 Sequence
0:7 Pre-Decrement (temp 4-component vector of float)
0:7 'input' (layout(location=0 ) in 4-component vector of float)
0:7 Loop with condition tested first
0:7 Loop Condition
0:7 any (global bool)
0:7 NotEqual (temp 4-component vector of bool)
0:7 'input' (layout(location=0 ) in 4-component vector of float)
0:7 'input' (layout(location=0 ) in 4-component vector of float)
0:7 Loop Body
0:? Sequence
0:7 Sequence
0:7 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:7 Negate value (temp 4-component vector of float)
0:7 'input' (layout(location=0 ) in 4-component vector of float)
0:7 Branch: Return
0:7 Loop Terminal Expression
0:7 add second child into first child (temp 4-component vector of float)
0:7 'input' (layout(location=0 ) in 4-component vector of float)
0:7 Constant:
0:7 2.000000
0:? Sequence
0:8 Loop with condition tested first
0:8 No loop condition
0:8 Loop Body
0:8 Test condition and select (temp void)
0:8 Condition
0:8 Compare Greater Than (temp bool)
0:8 direct index (temp float)
0:8 'input' (layout(location=0 ) in 4-component vector of float)
0:8 Constant:
0:8 0 (const int)
0:8 Constant:
0:8 2.000000
0:8 true case
0:8 Branch: Break
0:? Sequence
0:9 Loop with condition tested first
0:9 No loop condition
0:9 Loop Body
0:9 Test condition and select (temp void)
0:9 Condition
0:9 Compare Greater Than (temp bool)
0:9 direct index (temp float)
0:9 'input' (layout(location=0 ) in 4-component vector of float)
0:9 Constant:
0:9 0 (const int)
0:9 Constant:
0:9 2.000000
0:9 true case
0:9 Branch: Continue
0:11 Sequence
0:11 move second child to first child (temp int)
0:11 'ii' (temp int)
0:11 Constant:
0:11 -1 (const int)
0:11 Loop with condition tested first
0:11 Loop Condition
0:11 Compare Less Than (temp bool)
0:11 'ii' (temp int)
0:11 Constant:
0:11 3 (const int)
0:11 Loop Body
0:11 Test condition and select (temp void)
0:11 Condition
0:11 Compare Equal (temp bool)
0:11 'ii' (temp int)
0:11 Constant:
0:11 2 (const int)
0:11 true case
0:11 Branch: Continue
0:11 Loop Terminal Expression
0:11 Pre-Increment (temp int)
0:11 'ii' (temp int)
0:12 Pre-Decrement (temp float)
0:12 'ii' (temp float)
0:? Linker Objects
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:? 'input' (layout(location=0 ) in 4-component vector of float)
Linked fragment stage:
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
0:2 Function Parameters:
0:2 'input' (layout(location=0 ) in 4-component vector of float)
0:? Sequence
0:? Sequence
0:3 Loop with condition tested first
0:3 No loop condition
0:3 No loop body
0:4 Sequence
0:4 Pre-Increment (temp 4-component vector of float)
0:4 'input' (layout(location=0 ) in 4-component vector of float)
0:4 Loop with condition tested first
0:4 No loop condition
0:4 No loop body
0:? Sequence
0:5 Loop with condition tested first
0:5 Loop Condition
0:5 any (global bool)
0:5 NotEqual (temp 4-component vector of bool)
0:5 'input' (layout(location=0 ) in 4-component vector of float)
0:5 'input' (layout(location=0 ) in 4-component vector of float)
0:5 No loop body
0:? Sequence
0:6 Loop with condition tested first
0:6 Loop Condition
0:6 any (global bool)
0:6 NotEqual (temp 4-component vector of bool)
0:6 'input' (layout(location=0 ) in 4-component vector of float)
0:6 'input' (layout(location=0 ) in 4-component vector of float)
0:6 Loop Body
0:? Sequence
0:6 Sequence
0:6 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:6 Negate value (temp 4-component vector of float)
0:6 'input' (layout(location=0 ) in 4-component vector of float)
0:6 Branch: Return
0:7 Sequence
0:7 Pre-Decrement (temp 4-component vector of float)
0:7 'input' (layout(location=0 ) in 4-component vector of float)
0:7 Loop with condition tested first
0:7 Loop Condition
0:7 any (global bool)
0:7 NotEqual (temp 4-component vector of bool)
0:7 'input' (layout(location=0 ) in 4-component vector of float)
0:7 'input' (layout(location=0 ) in 4-component vector of float)
0:7 Loop Body
0:? Sequence
0:7 Sequence
0:7 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:7 Negate value (temp 4-component vector of float)
0:7 'input' (layout(location=0 ) in 4-component vector of float)
0:7 Branch: Return
0:7 Loop Terminal Expression
0:7 add second child into first child (temp 4-component vector of float)
0:7 'input' (layout(location=0 ) in 4-component vector of float)
0:7 Constant:
0:7 2.000000
0:? Sequence
0:8 Loop with condition tested first
0:8 No loop condition
0:8 Loop Body
0:8 Test condition and select (temp void)
0:8 Condition
0:8 Compare Greater Than (temp bool)
0:8 direct index (temp float)
0:8 'input' (layout(location=0 ) in 4-component vector of float)
0:8 Constant:
0:8 0 (const int)
0:8 Constant:
0:8 2.000000
0:8 true case
0:8 Branch: Break
0:? Sequence
0:9 Loop with condition tested first
0:9 No loop condition
0:9 Loop Body
0:9 Test condition and select (temp void)
0:9 Condition
0:9 Compare Greater Than (temp bool)
0:9 direct index (temp float)
0:9 'input' (layout(location=0 ) in 4-component vector of float)
0:9 Constant:
0:9 0 (const int)
0:9 Constant:
0:9 2.000000
0:9 true case
0:9 Branch: Continue
0:11 Sequence
0:11 move second child to first child (temp int)
0:11 'ii' (temp int)
0:11 Constant:
0:11 -1 (const int)
0:11 Loop with condition tested first
0:11 Loop Condition
0:11 Compare Less Than (temp bool)
0:11 'ii' (temp int)
0:11 Constant:
0:11 3 (const int)
0:11 Loop Body
0:11 Test condition and select (temp void)
0:11 Condition
0:11 Compare Equal (temp bool)
0:11 'ii' (temp int)
0:11 Constant:
0:11 2 (const int)
0:11 true case
0:11 Branch: Continue
0:11 Loop Terminal Expression
0:11 Pre-Increment (temp int)
0:11 'ii' (temp int)
0:12 Pre-Decrement (temp float)
0:12 'ii' (temp float)
0:? Linker Objects
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:? 'input' (layout(location=0 ) in 4-component vector of float)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 114
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 13 43
ExecutionMode 4 OriginUpperLeft
Name 4 "PixelShaderFunction"
Name 13 "input"
Name 43 "@entryPointOutput"
Name 91 "ii"
Name 111 "ii"
Decorate 13(input) Location 0
Decorate 43(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
10: TypeFloat 32
11: TypeVector 10(float) 4
12: TypePointer Input 11(fvec4)
13(input): 12(ptr) Variable Input
15: 10(float) Constant 1065353216
29: TypeBool
30: TypeVector 29(bool) 4
42: TypePointer Output 11(fvec4)
43(@entryPointOutput): 42(ptr) Variable Output
62: 10(float) Constant 1073741824
70: TypeInt 32 0
71: 70(int) Constant 0
72: TypePointer Input 10(float)
89: TypeInt 32 1
90: TypePointer Function 89(int)
92: 89(int) Constant 4294967295
99: 89(int) Constant 3
102: 89(int) Constant 2
108: 89(int) Constant 1
110: TypePointer Function 10(float)
4(PixelShaderFunction): 2 Function None 3
5: Label
91(ii): 90(ptr) Variable Function
111(ii): 110(ptr) Variable Function
Branch 6
6: Label
LoopMerge 8 9 None
Branch 7
7: Label
Branch 9
9: Label
Branch 6
8: Label
14: 11(fvec4) Load 13(input)
16: 11(fvec4) CompositeConstruct 15 15 15 15
17: 11(fvec4) FAdd 14 16
Store 13(input) 17
Branch 18
18: Label
LoopMerge 20 21 None
Branch 19
19: Label
Branch 21
21: Label
Branch 18
20: Label
Branch 22
22: Label
LoopMerge 24 25 None
Branch 26
26: Label
27: 11(fvec4) Load 13(input)
28: 11(fvec4) Load 13(input)
31: 30(bvec4) FOrdNotEqual 27 28
32: 29(bool) Any 31
BranchConditional 32 23 24
23: Label
Branch 25
25: Label
Branch 22
24: Label
Branch 33
33: Label
LoopMerge 35 36 None
Branch 37
37: Label
38: 11(fvec4) Load 13(input)
39: 11(fvec4) Load 13(input)
40: 30(bvec4) FOrdNotEqual 38 39
41: 29(bool) Any 40
BranchConditional 41 34 35
34: Label
44: 11(fvec4) Load 13(input)
45: 11(fvec4) FNegate 44
Store 43(@entryPointOutput) 45
Return
36: Label
Branch 33
35: Label
47: 11(fvec4) Load 13(input)
48: 11(fvec4) CompositeConstruct 15 15 15 15
49: 11(fvec4) FSub 47 48
Store 13(input) 49
Branch 50
50: Label
LoopMerge 52 53 None
Branch 54
54: Label
55: 11(fvec4) Load 13(input)
56: 11(fvec4) Load 13(input)
57: 30(bvec4) FOrdNotEqual 55 56
58: 29(bool) Any 57
BranchConditional 58 51 52
51: Label
59: 11(fvec4) Load 13(input)
60: 11(fvec4) FNegate 59
Store 43(@entryPointOutput) 60
Return
53: Label
63: 11(fvec4) Load 13(input)
64: 11(fvec4) CompositeConstruct 62 62 62 62
65: 11(fvec4) FAdd 63 64
Store 13(input) 65
Branch 50
52: Label
Branch 66
66: Label
LoopMerge 68 69 None
Branch 67
67: Label
73: 72(ptr) AccessChain 13(input) 71
74: 10(float) Load 73
75: 29(bool) FOrdGreaterThan 74 62
SelectionMerge 77 None
BranchConditional 75 76 77
76: Label
Branch 68
77: Label
Branch 69
69: Label
Branch 66
68: Label
Branch 79
79: Label
LoopMerge 81 82 None
Branch 80
80: Label
83: 72(ptr) AccessChain 13(input) 71
84: 10(float) Load 83
85: 29(bool) FOrdGreaterThan 84 62
SelectionMerge 87 None
BranchConditional 85 86 87
86: Label
Branch 82
87: Label
Branch 82
82: Label
Branch 79
81: Label
Store 91(ii) 92
Branch 93
93: Label
LoopMerge 95 96 None
Branch 97
97: Label
98: 89(int) Load 91(ii)
100: 29(bool) SLessThan 98 99
BranchConditional 100 94 95
94: Label
101: 89(int) Load 91(ii)
103: 29(bool) IEqual 101 102
SelectionMerge 105 None
BranchConditional 103 104 105
104: Label
Branch 96
105: Label
Branch 96
96: Label
107: 89(int) Load 91(ii)
109: 89(int) IAdd 107 108
Store 91(ii) 109
Branch 93
95: Label
112: 10(float) Load 111(ii)
113: 10(float) FSub 112 15
Store 111(ii) 113
Return
FunctionEnd