blob: 70a252cb12c9d8924cff51be08740e77e00ff213 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
//TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj -output-using-type -compute
// Test IEEE 754 NaN comparison behavior
// According to IEEE 754 standard:
// - Any comparison with NaN (except !=) should return false
// - The != comparison with NaN should return true
static const float fNAN = 0.0f / 0.0f;
static const float fPOSITIVE_INFINITY = 1.0f / 0.0f;
static const float fNEGATIVE_INFINITY = -1.0f / 0.0f;
static const float fZERO = 0.0f;
static const float fONE = 1.0f;
static const float fNEG_ONE = -1.0f;
//TEST_INPUT:ubuffer(data=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0], stride=4):out,name=outputBuffer
RWStructuredBuffer<uint> outputBuffer;
[numthreads(1, 1, 1)]
void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
{
uint testIndex = 0;
// Test 1: NaN == NaN should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN == fNAN) ? 1u : 0u;
// Test 2: NaN != NaN should be true
// CHECK: 1
outputBuffer[testIndex++] = (fNAN != fNAN) ? 1u : 0u;
// Test 3: NaN > NaN should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN > fNAN) ? 1u : 0u;
// Test 4: NaN < NaN should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN < fNAN) ? 1u : 0u;
// Test 5: NaN >= NaN should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN >= fNAN) ? 1u : 0u;
// Test 6: NaN <= NaN should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN <= fNAN) ? 1u : 0u;
// Test 7: NaN == 0.0 should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN == fZERO) ? 1u : 0u;
// Test 8: NaN != 0.0 should be true
// CHECK: 1
outputBuffer[testIndex++] = (fNAN != fZERO) ? 1u : 0u;
// Test 9: NaN > 0.0 should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN > fZERO) ? 1u : 0u;
// Test 10: NaN < 0.0 should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN < fZERO) ? 1u : 0u;
// Test 11: NaN >= 0.0 should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN >= fZERO) ? 1u : 0u;
// Test 12: NaN <= 0.0 should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN <= fZERO) ? 1u : 0u;
// Test 13: 0.0 == NaN should be false
// CHECK: 0
outputBuffer[testIndex++] = (fZERO == fNAN) ? 1u : 0u;
// Test 14: 0.0 != NaN should be true
// CHECK: 1
outputBuffer[testIndex++] = (fZERO != fNAN) ? 1u : 0u;
// Test 15: 0.0 > NaN should be false
// CHECK: 0
outputBuffer[testIndex++] = (fZERO > fNAN) ? 1u : 0u;
// Test 16: 0.0 < NaN should be false
// CHECK: 0
outputBuffer[testIndex++] = (fZERO < fNAN) ? 1u : 0u;
// Test 17: 0.0 >= NaN should be false
// CHECK: 0
outputBuffer[testIndex++] = (fZERO >= fNAN) ? 1u : 0u;
// Test 18: 0.0 <= NaN should be false
// CHECK: 0
outputBuffer[testIndex++] = (fZERO <= fNAN) ? 1u : 0u;
// Test 19: NaN == +infinity should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN == fPOSITIVE_INFINITY) ? 1u : 0u;
// Test 20: NaN != +infinity should be true
// CHECK: 1
outputBuffer[testIndex++] = (fNAN != fPOSITIVE_INFINITY) ? 1u : 0u;
// Test 21: NaN > +infinity should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN > fPOSITIVE_INFINITY) ? 1u : 0u;
// Test 22: NaN < +infinity should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN < fPOSITIVE_INFINITY) ? 1u : 0u;
// Test 23: NaN >= +infinity should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN >= fPOSITIVE_INFINITY) ? 1u : 0u;
// Test 24: NaN <= +infinity should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN <= fPOSITIVE_INFINITY) ? 1u : 0u;
// Test 25: NaN == -infinity should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN == fNEGATIVE_INFINITY) ? 1u : 0u;
// Test 26: NaN != -infinity should be true
// CHECK: 1
outputBuffer[testIndex++] = (fNAN != fNEGATIVE_INFINITY) ? 1u : 0u;
// Test 27: NaN > -infinity should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN > fNEGATIVE_INFINITY) ? 1u : 0u;
// Test 28: NaN < -infinity should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN < fNEGATIVE_INFINITY) ? 1u : 0u;
// Test 29: NaN >= -infinity should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN >= fNEGATIVE_INFINITY) ? 1u : 0u;
// Test 30: NaN <= -infinity should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN <= fNEGATIVE_INFINITY) ? 1u : 0u;
// Test 31: NaN == 1.0 should be false
// CHECK: 0
outputBuffer[testIndex++] = (fNAN == fONE) ? 1u : 0u;
// Test 32: NaN != 1.0 should be true
// CHECK: 1
outputBuffer[testIndex++] = (fNAN != fONE) ? 1u : 0u;
}
|