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.
345 lines
14 KiB
Plaintext
Executable File
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
|