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

338 lines
15 KiB
Plaintext
Executable File

hlsl.if.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:3 Test condition and select (temp void)
0:3 Condition
0:3 all (global bool)
0:3 Equal (temp 4-component vector of bool)
0:3 'input' (layout(location=0 ) in 4-component vector of float)
0:3 'input' (layout(location=0 ) in 4-component vector of float)
0:3 true case
0:4 Sequence
0:4 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:4 'input' (layout(location=0 ) in 4-component vector of float)
0:4 Branch: Return
0:6 Test condition and select (temp void)
0:6 Condition
0:6 all (global bool)
0:6 Equal (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 true case
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 'input' (layout(location=0 ) in 4-component vector of float)
0:7 Branch: Return
0:6 false case
0:9 Sequence
0:9 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:9 Negate value (temp 4-component vector of float)
0:9 'input' (layout(location=0 ) in 4-component vector of float)
0:9 Branch: Return
0:11 Test condition and select (temp void)
0:11 Condition
0:11 all (global bool)
0:11 Equal (temp 4-component vector of bool)
0:11 'input' (layout(location=0 ) in 4-component vector of float)
0:11 'input' (layout(location=0 ) in 4-component vector of float)
0:11 true case is null
0:14 Test condition and select (temp void)
0:14 Condition
0:14 all (global bool)
0:14 Equal (temp 4-component vector of bool)
0:14 'input' (layout(location=0 ) in 4-component vector of float)
0:14 'input' (layout(location=0 ) in 4-component vector of float)
0:14 true case is null
0:19 Test condition and select (temp void)
0:19 Condition
0:19 all (global bool)
0:19 Equal (temp 4-component vector of bool)
0:19 'input' (layout(location=0 ) in 4-component vector of float)
0:19 'input' (layout(location=0 ) in 4-component vector of float)
0:19 true case
0:? Sequence
0:20 Sequence
0:20 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:20 'input' (layout(location=0 ) in 4-component vector of float)
0:20 Branch: Return
0:23 Test condition and select (temp void)
0:23 Condition
0:23 all (global bool)
0:23 Equal (temp 4-component vector of bool)
0:23 'input' (layout(location=0 ) in 4-component vector of float)
0:23 'input' (layout(location=0 ) in 4-component vector of float)
0:23 true case
0:? Sequence
0:24 Sequence
0:24 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:24 'input' (layout(location=0 ) in 4-component vector of float)
0:24 Branch: Return
0:23 false case
0:? Sequence
0:26 Sequence
0:26 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:26 Negate value (temp 4-component vector of float)
0:26 'input' (layout(location=0 ) in 4-component vector of float)
0:26 Branch: Return
0:30 Test condition and select (temp void)
0:30 Condition
0:30 move second child to first child (temp float)
0:30 'ii' (temp float)
0:30 direct index (temp float)
0:30 'input' (layout(location=0 ) in 4-component vector of float)
0:30 Constant:
0:30 2 (const int)
0:30 true case
0:31 Pre-Increment (temp float)
0:31 'ii' (temp float)
0:32 Pre-Increment (temp int)
0:32 'ii' (temp int)
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:3 Test condition and select (temp void)
0:3 Condition
0:3 all (global bool)
0:3 Equal (temp 4-component vector of bool)
0:3 'input' (layout(location=0 ) in 4-component vector of float)
0:3 'input' (layout(location=0 ) in 4-component vector of float)
0:3 true case
0:4 Sequence
0:4 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:4 'input' (layout(location=0 ) in 4-component vector of float)
0:4 Branch: Return
0:6 Test condition and select (temp void)
0:6 Condition
0:6 all (global bool)
0:6 Equal (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 true case
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 'input' (layout(location=0 ) in 4-component vector of float)
0:7 Branch: Return
0:6 false case
0:9 Sequence
0:9 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:9 Negate value (temp 4-component vector of float)
0:9 'input' (layout(location=0 ) in 4-component vector of float)
0:9 Branch: Return
0:11 Test condition and select (temp void)
0:11 Condition
0:11 all (global bool)
0:11 Equal (temp 4-component vector of bool)
0:11 'input' (layout(location=0 ) in 4-component vector of float)
0:11 'input' (layout(location=0 ) in 4-component vector of float)
0:11 true case is null
0:14 Test condition and select (temp void)
0:14 Condition
0:14 all (global bool)
0:14 Equal (temp 4-component vector of bool)
0:14 'input' (layout(location=0 ) in 4-component vector of float)
0:14 'input' (layout(location=0 ) in 4-component vector of float)
0:14 true case is null
0:19 Test condition and select (temp void)
0:19 Condition
0:19 all (global bool)
0:19 Equal (temp 4-component vector of bool)
0:19 'input' (layout(location=0 ) in 4-component vector of float)
0:19 'input' (layout(location=0 ) in 4-component vector of float)
0:19 true case
0:? Sequence
0:20 Sequence
0:20 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:20 'input' (layout(location=0 ) in 4-component vector of float)
0:20 Branch: Return
0:23 Test condition and select (temp void)
0:23 Condition
0:23 all (global bool)
0:23 Equal (temp 4-component vector of bool)
0:23 'input' (layout(location=0 ) in 4-component vector of float)
0:23 'input' (layout(location=0 ) in 4-component vector of float)
0:23 true case
0:? Sequence
0:24 Sequence
0:24 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:24 'input' (layout(location=0 ) in 4-component vector of float)
0:24 Branch: Return
0:23 false case
0:? Sequence
0:26 Sequence
0:26 move second child to first child (temp 4-component vector of float)
0:? '@entryPointOutput' (layout(location=0 ) out 4-component vector of float)
0:26 Negate value (temp 4-component vector of float)
0:26 'input' (layout(location=0 ) in 4-component vector of float)
0:26 Branch: Return
0:30 Test condition and select (temp void)
0:30 Condition
0:30 move second child to first child (temp float)
0:30 'ii' (temp float)
0:30 direct index (temp float)
0:30 'input' (layout(location=0 ) in 4-component vector of float)
0:30 Constant:
0:30 2 (const int)
0:30 true case
0:31 Pre-Increment (temp float)
0:31 'ii' (temp float)
0:32 Pre-Increment (temp int)
0:32 'ii' (temp int)
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 84
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "PixelShaderFunction" 9 19
ExecutionMode 4 OriginUpperLeft
Name 4 "PixelShaderFunction"
Name 9 "input"
Name 19 "@entryPointOutput"
Name 67 "ii"
Name 80 "ii"
Decorate 9(input) Location 0
Decorate 19(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Input 7(fvec4)
9(input): 8(ptr) Variable Input
12: TypeBool
13: TypeVector 12(bool) 4
18: TypePointer Output 7(fvec4)
19(@entryPointOutput): 18(ptr) Variable Output
66: TypePointer Function 6(float)
68: TypeInt 32 0
69: 68(int) Constant 2
70: TypePointer Input 6(float)
76: 6(float) Constant 1065353216
78: TypeInt 32 1
79: TypePointer Function 78(int)
82: 78(int) Constant 1
4(PixelShaderFunction): 2 Function None 3
5: Label
67(ii): 66(ptr) Variable Function
80(ii): 79(ptr) Variable Function
10: 7(fvec4) Load 9(input)
11: 7(fvec4) Load 9(input)
14: 13(bvec4) FOrdEqual 10 11
15: 12(bool) All 14
SelectionMerge 17 None
BranchConditional 15 16 17
16: Label
20: 7(fvec4) Load 9(input)
Store 19(@entryPointOutput) 20
Return
17: Label
22: 7(fvec4) Load 9(input)
23: 7(fvec4) Load 9(input)
24: 13(bvec4) FOrdEqual 22 23
25: 12(bool) All 24
SelectionMerge 27 None
BranchConditional 25 26 30
26: Label
28: 7(fvec4) Load 9(input)
Store 19(@entryPointOutput) 28
Return
30: Label
31: 7(fvec4) Load 9(input)
32: 7(fvec4) FNegate 31
Store 19(@entryPointOutput) 32
Return
27: Label
34: 7(fvec4) Load 9(input)
35: 7(fvec4) Load 9(input)
36: 13(bvec4) FOrdEqual 34 35
37: 12(bool) All 36
SelectionMerge 39 None
BranchConditional 37 38 39
38: Label
Branch 39
39: Label
40: 7(fvec4) Load 9(input)
41: 7(fvec4) Load 9(input)
42: 13(bvec4) FOrdEqual 40 41
43: 12(bool) All 42
SelectionMerge 45 None
BranchConditional 43 44 45
44: Label
Branch 45
45: Label
46: 7(fvec4) Load 9(input)
47: 7(fvec4) Load 9(input)
48: 13(bvec4) FOrdEqual 46 47
49: 12(bool) All 48
SelectionMerge 51 None
BranchConditional 49 50 51
50: Label
52: 7(fvec4) Load 9(input)
Store 19(@entryPointOutput) 52
Return
51: Label
54: 7(fvec4) Load 9(input)
55: 7(fvec4) Load 9(input)
56: 13(bvec4) FOrdEqual 54 55
57: 12(bool) All 56
SelectionMerge 59 None
BranchConditional 57 58 62
58: Label
60: 7(fvec4) Load 9(input)
Store 19(@entryPointOutput) 60
Return
62: Label
63: 7(fvec4) Load 9(input)
64: 7(fvec4) FNegate 63
Store 19(@entryPointOutput) 64
Return
59: Label
71: 70(ptr) AccessChain 9(input) 69
72: 6(float) Load 71
Store 67(ii) 72
SelectionMerge 74 None
BranchConditional 72 73 74
73: Label
75: 6(float) Load 67(ii)
77: 6(float) FAdd 75 76
Store 67(ii) 77
Branch 74
74: Label
81: 78(int) Load 80(ii)
83: 78(int) IAdd 81 82
Store 80(ii) 83
Return
FunctionEnd