glslang/Test/baseResults/hlsl.comparison.vec.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

402 lines
18 KiB
Plaintext

hlsl.comparison.vec.frag
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:4 Function Definition: Bug1(vf4; (temp void)
0:4 Function Parameters:
0:4 'a' (in 4-component vector of float)
0:? Sequence
0:5 Sequence
0:5 move second child to first child (temp 4-component vector of float)
0:5 'v04' (temp 4-component vector of float)
0:? Constant:
0:? 0.000000
0:? 0.000000
0:? 0.000000
0:? 0.000000
0:6 Sequence
0:6 move second child to first child (temp float)
0:6 'v01' (temp float)
0:6 Constant:
0:6 0.000000
0:8 Sequence
0:8 move second child to first child (temp 4-component vector of bool)
0:8 'r00' (temp 4-component vector of bool)
0:8 Equal (temp 4-component vector of bool)
0:8 'a' (in 4-component vector of float)
0:8 'v04' (temp 4-component vector of float)
0:9 Sequence
0:9 move second child to first child (temp 4-component vector of bool)
0:9 'r01' (temp 4-component vector of bool)
0:9 NotEqual (temp 4-component vector of bool)
0:9 'a' (in 4-component vector of float)
0:9 'v04' (temp 4-component vector of float)
0:10 Sequence
0:10 move second child to first child (temp 4-component vector of bool)
0:10 'r02' (temp 4-component vector of bool)
0:10 Compare Less Than (temp 4-component vector of bool)
0:10 'a' (in 4-component vector of float)
0:10 'v04' (temp 4-component vector of float)
0:11 Sequence
0:11 move second child to first child (temp 4-component vector of bool)
0:11 'r03' (temp 4-component vector of bool)
0:11 Compare Greater Than (temp 4-component vector of bool)
0:11 'a' (in 4-component vector of float)
0:11 'v04' (temp 4-component vector of float)
0:13 Sequence
0:13 move second child to first child (temp 4-component vector of bool)
0:13 'r10' (temp 4-component vector of bool)
0:13 Equal (temp 4-component vector of bool)
0:13 'a' (in 4-component vector of float)
0:13 Construct vec4 (in 4-component vector of float)
0:13 'v01' (temp float)
0:14 Sequence
0:14 move second child to first child (temp 4-component vector of bool)
0:14 'r11' (temp 4-component vector of bool)
0:14 NotEqual (temp 4-component vector of bool)
0:14 'a' (in 4-component vector of float)
0:14 Construct vec4 (in 4-component vector of float)
0:14 'v01' (temp float)
0:15 Sequence
0:15 move second child to first child (temp 4-component vector of bool)
0:15 'r12' (temp 4-component vector of bool)
0:15 Compare Less Than (temp 4-component vector of bool)
0:15 'a' (in 4-component vector of float)
0:15 Construct vec4 (in 4-component vector of float)
0:15 'v01' (temp float)
0:16 Sequence
0:16 move second child to first child (temp 4-component vector of bool)
0:16 'r13' (temp 4-component vector of bool)
0:16 Compare Greater Than (temp 4-component vector of bool)
0:16 'a' (in 4-component vector of float)
0:16 Construct vec4 (in 4-component vector of float)
0:16 'v01' (temp float)
0:18 Sequence
0:18 move second child to first child (temp 4-component vector of bool)
0:18 'r20' (temp 4-component vector of bool)
0:18 Equal (temp 4-component vector of bool)
0:18 Construct vec4 (in 4-component vector of float)
0:18 'v01' (temp float)
0:18 'a' (in 4-component vector of float)
0:19 Sequence
0:19 move second child to first child (temp 4-component vector of bool)
0:19 'r21' (temp 4-component vector of bool)
0:19 NotEqual (temp 4-component vector of bool)
0:19 Construct vec4 (in 4-component vector of float)
0:19 'v01' (temp float)
0:19 'a' (in 4-component vector of float)
0:20 Sequence
0:20 move second child to first child (temp 4-component vector of bool)
0:20 'r22' (temp 4-component vector of bool)
0:20 Compare Less Than (temp 4-component vector of bool)
0:20 Construct vec4 (in 4-component vector of float)
0:20 'v01' (temp float)
0:20 'a' (in 4-component vector of float)
0:21 Sequence
0:21 move second child to first child (temp 4-component vector of bool)
0:21 'r23' (temp 4-component vector of bool)
0:21 Compare Greater Than (temp 4-component vector of bool)
0:21 Construct vec4 (in 4-component vector of float)
0:21 'v01' (temp float)
0:21 'a' (in 4-component vector of float)
0:30 Function Definition: main( (temp structure{temp 4-component vector of float Color})
0:30 Function Parameters:
0:? Sequence
0:32 move second child to first child (temp 4-component vector of float)
0:32 Color: direct index for structure (temp 4-component vector of float)
0:32 'psout' (temp structure{temp 4-component vector of float Color})
0:32 Constant:
0:32 0 (const int)
0:32 Constant:
0:32 0.000000
0:32 0.000000
0:32 0.000000
0:32 0.000000
0:33 Sequence
0:33 Sequence
0:33 move second child to first child (temp 4-component vector of float)
0:? 'Color' (layout(location=0 ) out 4-component vector of float)
0:33 Color: direct index for structure (temp 4-component vector of float)
0:33 'psout' (temp structure{temp 4-component vector of float Color})
0:33 Constant:
0:33 0 (const int)
0:33 Branch: Return
0:? Linker Objects
0:? 'anon@0' (uniform block{layout(offset=0 ) uniform 4-component vector of float uf4})
0:? 'Color' (layout(location=0 ) out 4-component vector of float)
Linked fragment stage:
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:4 Function Definition: Bug1(vf4; (temp void)
0:4 Function Parameters:
0:4 'a' (in 4-component vector of float)
0:? Sequence
0:5 Sequence
0:5 move second child to first child (temp 4-component vector of float)
0:5 'v04' (temp 4-component vector of float)
0:? Constant:
0:? 0.000000
0:? 0.000000
0:? 0.000000
0:? 0.000000
0:6 Sequence
0:6 move second child to first child (temp float)
0:6 'v01' (temp float)
0:6 Constant:
0:6 0.000000
0:8 Sequence
0:8 move second child to first child (temp 4-component vector of bool)
0:8 'r00' (temp 4-component vector of bool)
0:8 Equal (temp 4-component vector of bool)
0:8 'a' (in 4-component vector of float)
0:8 'v04' (temp 4-component vector of float)
0:9 Sequence
0:9 move second child to first child (temp 4-component vector of bool)
0:9 'r01' (temp 4-component vector of bool)
0:9 NotEqual (temp 4-component vector of bool)
0:9 'a' (in 4-component vector of float)
0:9 'v04' (temp 4-component vector of float)
0:10 Sequence
0:10 move second child to first child (temp 4-component vector of bool)
0:10 'r02' (temp 4-component vector of bool)
0:10 Compare Less Than (temp 4-component vector of bool)
0:10 'a' (in 4-component vector of float)
0:10 'v04' (temp 4-component vector of float)
0:11 Sequence
0:11 move second child to first child (temp 4-component vector of bool)
0:11 'r03' (temp 4-component vector of bool)
0:11 Compare Greater Than (temp 4-component vector of bool)
0:11 'a' (in 4-component vector of float)
0:11 'v04' (temp 4-component vector of float)
0:13 Sequence
0:13 move second child to first child (temp 4-component vector of bool)
0:13 'r10' (temp 4-component vector of bool)
0:13 Equal (temp 4-component vector of bool)
0:13 'a' (in 4-component vector of float)
0:13 Construct vec4 (in 4-component vector of float)
0:13 'v01' (temp float)
0:14 Sequence
0:14 move second child to first child (temp 4-component vector of bool)
0:14 'r11' (temp 4-component vector of bool)
0:14 NotEqual (temp 4-component vector of bool)
0:14 'a' (in 4-component vector of float)
0:14 Construct vec4 (in 4-component vector of float)
0:14 'v01' (temp float)
0:15 Sequence
0:15 move second child to first child (temp 4-component vector of bool)
0:15 'r12' (temp 4-component vector of bool)
0:15 Compare Less Than (temp 4-component vector of bool)
0:15 'a' (in 4-component vector of float)
0:15 Construct vec4 (in 4-component vector of float)
0:15 'v01' (temp float)
0:16 Sequence
0:16 move second child to first child (temp 4-component vector of bool)
0:16 'r13' (temp 4-component vector of bool)
0:16 Compare Greater Than (temp 4-component vector of bool)
0:16 'a' (in 4-component vector of float)
0:16 Construct vec4 (in 4-component vector of float)
0:16 'v01' (temp float)
0:18 Sequence
0:18 move second child to first child (temp 4-component vector of bool)
0:18 'r20' (temp 4-component vector of bool)
0:18 Equal (temp 4-component vector of bool)
0:18 Construct vec4 (in 4-component vector of float)
0:18 'v01' (temp float)
0:18 'a' (in 4-component vector of float)
0:19 Sequence
0:19 move second child to first child (temp 4-component vector of bool)
0:19 'r21' (temp 4-component vector of bool)
0:19 NotEqual (temp 4-component vector of bool)
0:19 Construct vec4 (in 4-component vector of float)
0:19 'v01' (temp float)
0:19 'a' (in 4-component vector of float)
0:20 Sequence
0:20 move second child to first child (temp 4-component vector of bool)
0:20 'r22' (temp 4-component vector of bool)
0:20 Compare Less Than (temp 4-component vector of bool)
0:20 Construct vec4 (in 4-component vector of float)
0:20 'v01' (temp float)
0:20 'a' (in 4-component vector of float)
0:21 Sequence
0:21 move second child to first child (temp 4-component vector of bool)
0:21 'r23' (temp 4-component vector of bool)
0:21 Compare Greater Than (temp 4-component vector of bool)
0:21 Construct vec4 (in 4-component vector of float)
0:21 'v01' (temp float)
0:21 'a' (in 4-component vector of float)
0:30 Function Definition: main( (temp structure{temp 4-component vector of float Color})
0:30 Function Parameters:
0:? Sequence
0:32 move second child to first child (temp 4-component vector of float)
0:32 Color: direct index for structure (temp 4-component vector of float)
0:32 'psout' (temp structure{temp 4-component vector of float Color})
0:32 Constant:
0:32 0 (const int)
0:32 Constant:
0:32 0.000000
0:32 0.000000
0:32 0.000000
0:32 0.000000
0:33 Sequence
0:33 Sequence
0:33 move second child to first child (temp 4-component vector of float)
0:? 'Color' (layout(location=0 ) out 4-component vector of float)
0:33 Color: direct index for structure (temp 4-component vector of float)
0:33 'psout' (temp structure{temp 4-component vector of float Color})
0:33 Constant:
0:33 0 (const int)
0:33 Branch: Return
0:? Linker Objects
0:? 'anon@0' (uniform block{layout(offset=0 ) uniform 4-component vector of float uf4})
0:? 'Color' (layout(location=0 ) out 4-component vector of float)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 91
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 84
ExecutionMode 4 OriginUpperLeft
Name 4 "main"
Name 11 "Bug1(vf4;"
Name 10 "a"
Name 13 "v04"
Name 17 "v01"
Name 21 "r00"
Name 25 "r01"
Name 29 "r02"
Name 33 "r03"
Name 37 "r10"
Name 42 "r11"
Name 47 "r12"
Name 52 "r13"
Name 57 "r20"
Name 62 "r21"
Name 67 "r22"
Name 72 "r23"
Name 77 "PS_OUTPUT"
MemberName 77(PS_OUTPUT) 0 "Color"
Name 79 "psout"
Name 84 "Color"
Name 88 "$Global"
MemberName 88($Global) 0 "uf4"
Name 90 ""
Decorate 84(Color) Location 0
Decorate 88($Global) Block
Decorate 90 DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Function 7(fvec4)
9: TypeFunction 2 8(ptr)
14: 6(float) Constant 0
15: 7(fvec4) ConstantComposite 14 14 14 14
16: TypePointer Function 6(float)
18: TypeBool
19: TypeVector 18(bool) 4
20: TypePointer Function 19(bvec4)
77(PS_OUTPUT): TypeStruct 7(fvec4)
78: TypePointer Function 77(PS_OUTPUT)
80: TypeInt 32 1
81: 80(int) Constant 0
83: TypePointer Output 7(fvec4)
84(Color): 83(ptr) Variable Output
88($Global): TypeStruct 7(fvec4)
89: TypePointer Uniform 88($Global)
90: 89(ptr) Variable Uniform
4(main): 2 Function None 3
5: Label
79(psout): 78(ptr) Variable Function
82: 8(ptr) AccessChain 79(psout) 81
Store 82 15
85: 8(ptr) AccessChain 79(psout) 81
86: 7(fvec4) Load 85
Store 84(Color) 86
Return
FunctionEnd
11(Bug1(vf4;): 2 Function None 9
10(a): 8(ptr) FunctionParameter
12: Label
13(v04): 8(ptr) Variable Function
17(v01): 16(ptr) Variable Function
21(r00): 20(ptr) Variable Function
25(r01): 20(ptr) Variable Function
29(r02): 20(ptr) Variable Function
33(r03): 20(ptr) Variable Function
37(r10): 20(ptr) Variable Function
42(r11): 20(ptr) Variable Function
47(r12): 20(ptr) Variable Function
52(r13): 20(ptr) Variable Function
57(r20): 20(ptr) Variable Function
62(r21): 20(ptr) Variable Function
67(r22): 20(ptr) Variable Function
72(r23): 20(ptr) Variable Function
Store 13(v04) 15
Store 17(v01) 14
22: 7(fvec4) Load 10(a)
23: 7(fvec4) Load 13(v04)
24: 19(bvec4) FOrdEqual 22 23
Store 21(r00) 24
26: 7(fvec4) Load 10(a)
27: 7(fvec4) Load 13(v04)
28: 19(bvec4) FOrdNotEqual 26 27
Store 25(r01) 28
30: 7(fvec4) Load 10(a)
31: 7(fvec4) Load 13(v04)
32: 19(bvec4) FOrdLessThan 30 31
Store 29(r02) 32
34: 7(fvec4) Load 10(a)
35: 7(fvec4) Load 13(v04)
36: 19(bvec4) FOrdGreaterThan 34 35
Store 33(r03) 36
38: 7(fvec4) Load 10(a)
39: 6(float) Load 17(v01)
40: 7(fvec4) CompositeConstruct 39 39 39 39
41: 19(bvec4) FOrdEqual 38 40
Store 37(r10) 41
43: 7(fvec4) Load 10(a)
44: 6(float) Load 17(v01)
45: 7(fvec4) CompositeConstruct 44 44 44 44
46: 19(bvec4) FOrdNotEqual 43 45
Store 42(r11) 46
48: 7(fvec4) Load 10(a)
49: 6(float) Load 17(v01)
50: 7(fvec4) CompositeConstruct 49 49 49 49
51: 19(bvec4) FOrdLessThan 48 50
Store 47(r12) 51
53: 7(fvec4) Load 10(a)
54: 6(float) Load 17(v01)
55: 7(fvec4) CompositeConstruct 54 54 54 54
56: 19(bvec4) FOrdGreaterThan 53 55
Store 52(r13) 56
58: 6(float) Load 17(v01)
59: 7(fvec4) CompositeConstruct 58 58 58 58
60: 7(fvec4) Load 10(a)
61: 19(bvec4) FOrdEqual 59 60
Store 57(r20) 61
63: 6(float) Load 17(v01)
64: 7(fvec4) CompositeConstruct 63 63 63 63
65: 7(fvec4) Load 10(a)
66: 19(bvec4) FOrdNotEqual 64 65
Store 62(r21) 66
68: 6(float) Load 17(v01)
69: 7(fvec4) CompositeConstruct 68 68 68 68
70: 7(fvec4) Load 10(a)
71: 19(bvec4) FOrdLessThan 69 70
Store 67(r22) 71
73: 6(float) Load 17(v01)
74: 7(fvec4) CompositeConstruct 73 73 73 73
75: 7(fvec4) Load 10(a)
76: 19(bvec4) FOrdGreaterThan 74 75
Store 72(r23) 76
Return
FunctionEnd