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

345 lines
14 KiB
Plaintext
Executable File

hlsl.shapeConv.frag
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunction(vf4;f1; (temp 4-component vector of float)
0:2 Function Parameters:
0:2 'input' (in 4-component vector of float)
0:2 'f' (in float)
0:? Sequence
0:4 move second child to first child (temp 4-component vector of float)
0:4 'v' (temp 4-component vector of float)
0:4 Constant:
0:4 1.000000
0:4 1.000000
0:4 1.000000
0:4 1.000000
0:5 move second child to first child (temp 4-component vector of float)
0:5 'v' (temp 4-component vector of float)
0:5 Constant:
0:5 2.000000
0:5 2.000000
0:5 2.000000
0:5 2.000000
0:6 move second child to first child (temp 4-component vector of float)
0:6 'v' (temp 4-component vector of float)
0:6 Construct vec4 (temp 4-component vector of float)
0:6 'f' (in float)
0:8 move second child to first child (temp 3-component vector of float)
0:8 'u' (temp 3-component vector of float)
0:8 Constant:
0:8 1.000000
0:8 1.000000
0:8 1.000000
0:9 move second child to first child (temp 3-component vector of float)
0:9 'u' (temp 3-component vector of float)
0:9 Constant:
0:9 2.000000
0:9 2.000000
0:9 2.000000
0:10 move second child to first child (temp 3-component vector of float)
0:10 'u' (temp 3-component vector of float)
0:10 Construct vec3 (temp 3-component vector of float)
0:10 Construct float (temp float)
0:10 'f' (in float)
0:11 Sequence
0:11 move second child to first child (temp 2-component vector of float)
0:11 'w' (temp 2-component vector of float)
0:11 Constant:
0:11 2.000000
0:11 2.000000
0:12 Sequence
0:12 move second child to first child (temp float)
0:12 'V' (temp float)
0:12 Constant:
0:12 1.000000
0:13 Sequence
0:13 move second child to first child (temp 3-component vector of float)
0:13 'MyVal' (temp 3-component vector of float)
0:13 Construct vec3 (temp 3-component vector of float)
0:13 'V' (temp float)
0:16 Compare Greater Than (temp 3-component vector of bool)
0:16 'foo' (temp 3-component vector of float)
0:16 Constant:
0:16 4.000000
0:16 4.000000
0:16 4.000000
0:17 Compare Greater Than or Equal (temp 3-component vector of bool)
0:17 'foo' (temp 3-component vector of float)
0:17 Constant:
0:17 5.000000
0:17 5.000000
0:17 5.000000
0:18 Compare Less Than (temp 3-component vector of bool)
0:18 Constant:
0:18 6.000000
0:18 6.000000
0:18 6.000000
0:18 'foo' (temp 3-component vector of float)
0:19 Compare Less Than or Equal (temp 3-component vector of bool)
0:19 Constant:
0:19 7.000000
0:19 7.000000
0:19 7.000000
0:19 'foo' (temp 3-component vector of float)
0:21 all (global bool)
0:21 Equal (temp 4-component vector of bool)
0:21 Construct vec4 (temp 4-component vector of float)
0:21 direct index (temp float)
0:21 'v' (temp 4-component vector of float)
0:21 Constant:
0:21 0 (const int)
0:21 'v' (temp 4-component vector of float)
0:22 any (global bool)
0:22 NotEqual (temp 4-component vector of bool)
0:22 Construct vec4 (temp 4-component vector of float)
0:22 'f' (in float)
0:22 'v' (temp 4-component vector of float)
0:26 Compare Equal (temp bool)
0:26 'f1' (temp 1-component vector of float)
0:26 Construct float (temp 1-component vector of float)
0:26 'v' (temp 4-component vector of float)
0:27 Compare Less Than (temp bool)
0:27 Construct float (temp 1-component vector of float)
0:27 'v' (temp 4-component vector of float)
0:27 'f1' (temp 1-component vector of float)
0:28 Construct float (temp float)
0:28 'f1' (temp 1-component vector of float)
0:29 Construct vec3 (temp 3-component vector of float)
0:29 Construct float (temp float)
0:29 'f1' (temp 1-component vector of float)
0:31 Branch: Return with expression
0:31 'input' (in 4-component vector of float)
0:? Linker Objects
Linked fragment stage:
Shader version: 450
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: PixelShaderFunction(vf4;f1; (temp 4-component vector of float)
0:2 Function Parameters:
0:2 'input' (in 4-component vector of float)
0:2 'f' (in float)
0:? Sequence
0:4 move second child to first child (temp 4-component vector of float)
0:4 'v' (temp 4-component vector of float)
0:4 Constant:
0:4 1.000000
0:4 1.000000
0:4 1.000000
0:4 1.000000
0:5 move second child to first child (temp 4-component vector of float)
0:5 'v' (temp 4-component vector of float)
0:5 Constant:
0:5 2.000000
0:5 2.000000
0:5 2.000000
0:5 2.000000
0:6 move second child to first child (temp 4-component vector of float)
0:6 'v' (temp 4-component vector of float)
0:6 Construct vec4 (temp 4-component vector of float)
0:6 'f' (in float)
0:8 move second child to first child (temp 3-component vector of float)
0:8 'u' (temp 3-component vector of float)
0:8 Constant:
0:8 1.000000
0:8 1.000000
0:8 1.000000
0:9 move second child to first child (temp 3-component vector of float)
0:9 'u' (temp 3-component vector of float)
0:9 Constant:
0:9 2.000000
0:9 2.000000
0:9 2.000000
0:10 move second child to first child (temp 3-component vector of float)
0:10 'u' (temp 3-component vector of float)
0:10 Construct vec3 (temp 3-component vector of float)
0:10 Construct float (temp float)
0:10 'f' (in float)
0:11 Sequence
0:11 move second child to first child (temp 2-component vector of float)
0:11 'w' (temp 2-component vector of float)
0:11 Constant:
0:11 2.000000
0:11 2.000000
0:12 Sequence
0:12 move second child to first child (temp float)
0:12 'V' (temp float)
0:12 Constant:
0:12 1.000000
0:13 Sequence
0:13 move second child to first child (temp 3-component vector of float)
0:13 'MyVal' (temp 3-component vector of float)
0:13 Construct vec3 (temp 3-component vector of float)
0:13 'V' (temp float)
0:16 Compare Greater Than (temp 3-component vector of bool)
0:16 'foo' (temp 3-component vector of float)
0:16 Constant:
0:16 4.000000
0:16 4.000000
0:16 4.000000
0:17 Compare Greater Than or Equal (temp 3-component vector of bool)
0:17 'foo' (temp 3-component vector of float)
0:17 Constant:
0:17 5.000000
0:17 5.000000
0:17 5.000000
0:18 Compare Less Than (temp 3-component vector of bool)
0:18 Constant:
0:18 6.000000
0:18 6.000000
0:18 6.000000
0:18 'foo' (temp 3-component vector of float)
0:19 Compare Less Than or Equal (temp 3-component vector of bool)
0:19 Constant:
0:19 7.000000
0:19 7.000000
0:19 7.000000
0:19 'foo' (temp 3-component vector of float)
0:21 all (global bool)
0:21 Equal (temp 4-component vector of bool)
0:21 Construct vec4 (temp 4-component vector of float)
0:21 direct index (temp float)
0:21 'v' (temp 4-component vector of float)
0:21 Constant:
0:21 0 (const int)
0:21 'v' (temp 4-component vector of float)
0:22 any (global bool)
0:22 NotEqual (temp 4-component vector of bool)
0:22 Construct vec4 (temp 4-component vector of float)
0:22 'f' (in float)
0:22 'v' (temp 4-component vector of float)
0:26 Compare Equal (temp bool)
0:26 'f1' (temp 1-component vector of float)
0:26 Construct float (temp 1-component vector of float)
0:26 'v' (temp 4-component vector of float)
0:27 Compare Less Than (temp bool)
0:27 Construct float (temp 1-component vector of float)
0:27 'v' (temp 4-component vector of float)
0:27 'f1' (temp 1-component vector of float)
0:28 Construct float (temp float)
0:28 'f1' (temp 1-component vector of float)
0:29 Construct vec3 (temp 3-component vector of float)
0:29 Construct float (temp float)
0:29 'f1' (temp 1-component vector of float)
0:31 Branch: Return with expression
0:31 'input' (in 4-component vector of float)
0:? Linker Objects
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 85
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Name 4 "main"
Name 13 "PixelShaderFunction(vf4;f1;"
Name 11 "input"
Name 12 "f"
Name 15 "v"
Name 24 "u"
Name 31 "w"
Name 33 "V"
Name 34 "MyVal"
Name 37 "foo"
Name 70 "f1"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Function 7(fvec4)
9: TypePointer Function 6(float)
10: TypeFunction 7(fvec4) 8(ptr) 9(ptr)
16: 6(float) Constant 1065353216
17: 7(fvec4) ConstantComposite 16 16 16 16
18: 6(float) Constant 1073741824
19: 7(fvec4) ConstantComposite 18 18 18 18
22: TypeVector 6(float) 3
23: TypePointer Function 22(fvec3)
25: 22(fvec3) ConstantComposite 16 16 16
26: 22(fvec3) ConstantComposite 18 18 18
29: TypeVector 6(float) 2
30: TypePointer Function 29(fvec2)
32: 29(fvec2) ConstantComposite 18 18
39: 6(float) Constant 1082130432
40: 22(fvec3) ConstantComposite 39 39 39
41: TypeBool
42: TypeVector 41(bool) 3
45: 6(float) Constant 1084227584
46: 22(fvec3) ConstantComposite 45 45 45
48: 6(float) Constant 1086324736
49: 22(fvec3) ConstantComposite 48 48 48
52: 6(float) Constant 1088421888
53: 22(fvec3) ConstantComposite 52 52 52
56: TypeInt 32 0
57: 56(int) Constant 0
62: TypeVector 41(bool) 4
4(main): 2 Function None 3
5: Label
FunctionEnd
13(PixelShaderFunction(vf4;f1;): 7(fvec4) Function None 10
11(input): 8(ptr) FunctionParameter
12(f): 9(ptr) FunctionParameter
14: Label
15(v): 8(ptr) Variable Function
24(u): 23(ptr) Variable Function
31(w): 30(ptr) Variable Function
33(V): 9(ptr) Variable Function
34(MyVal): 23(ptr) Variable Function
37(foo): 23(ptr) Variable Function
70(f1): 9(ptr) Variable Function
Store 15(v) 17
Store 15(v) 19
20: 6(float) Load 12(f)
21: 7(fvec4) CompositeConstruct 20 20 20 20
Store 15(v) 21
Store 24(u) 25
Store 24(u) 26
27: 6(float) Load 12(f)
28: 22(fvec3) CompositeConstruct 27 27 27
Store 24(u) 28
Store 31(w) 32
Store 33(V) 16
35: 6(float) Load 33(V)
36: 22(fvec3) CompositeConstruct 35 35 35
Store 34(MyVal) 36
38: 22(fvec3) Load 37(foo)
43: 42(bvec3) FOrdGreaterThan 38 40
44: 22(fvec3) Load 37(foo)
47: 42(bvec3) FOrdGreaterThanEqual 44 46
50: 22(fvec3) Load 37(foo)
51: 42(bvec3) FOrdLessThan 49 50
54: 22(fvec3) Load 37(foo)
55: 42(bvec3) FOrdLessThanEqual 53 54
58: 9(ptr) AccessChain 15(v) 57
59: 6(float) Load 58
60: 7(fvec4) CompositeConstruct 59 59 59 59
61: 7(fvec4) Load 15(v)
63: 62(bvec4) FOrdEqual 60 61
64: 41(bool) All 63
65: 6(float) Load 12(f)
66: 7(fvec4) CompositeConstruct 65 65 65 65
67: 7(fvec4) Load 15(v)
68: 62(bvec4) FOrdNotEqual 66 67
69: 41(bool) Any 68
71: 6(float) Load 70(f1)
72: 7(fvec4) Load 15(v)
73: 6(float) CompositeExtract 72 0
74: 41(bool) FOrdEqual 71 73
75: 7(fvec4) Load 15(v)
76: 6(float) CompositeExtract 75 0
77: 6(float) Load 70(f1)
78: 41(bool) FOrdLessThan 76 77
79: 6(float) Load 70(f1)
80: 6(float) Load 70(f1)
81: 22(fvec3) CompositeConstruct 80 80 80
82: 7(fvec4) Load 11(input)
ReturnValue 82
FunctionEnd