Skip to content

Commit d95129e

Browse files
committed
split out 32 bit special value tests as well
1 parent 5a32e2a commit d95129e

File tree

3 files changed

+98
-18
lines changed

3 files changed

+98
-18
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
#--- source.hlsl
2+
3+
StructuredBuffer<float4> X : register(t0);
4+
StructuredBuffer<float4> Y : register(t1);
5+
6+
RWStructuredBuffer<float> Result : register(u2);
7+
8+
[numthreads(1,1,1)]
9+
void main() {
10+
// test special cases
11+
// distance(inf, 1.0) = inf
12+
Result[0] = distance(X[0].x, Y[0].x);
13+
14+
// distance(NaN, 1.0) = NaN
15+
Result[1] = distance(X[0].y, Y[0].x);
16+
17+
// distance(-inf, 1.0) = inf
18+
Result[2] = distance(X[0].z, Y[0].x);
19+
20+
// distance(inf, NaN) = NaN
21+
Result[3] = distance(X[0].w, Y[0].w);
22+
23+
// distance({inf, NaN, -inf, inf}, {1.0, 1.0, 1.0, NaN}) = NaN
24+
Result[4] = distance(X[0].xyzw, Y[0].xyzw);
25+
26+
// distance({denorm}, {1.0}) = denorm
27+
Result[5] = distance(Y[0].z, Y[0].x);
28+
29+
// distance({-denorm}, {1.0}) = denorm
30+
Result[6] = distance(Y[0].y, Y[0].x);
31+
}
32+
33+
//--- pipeline.yaml
34+
35+
---
36+
Shaders:
37+
- Stage: Compute
38+
Entry: main
39+
DispatchSize: [1, 1, 1]
40+
Buffers:
41+
- Name: X
42+
Format: Float32
43+
Stride: 16
44+
Data: [ inf, NaN, -inf, inf ]
45+
- Name: Y
46+
Format: Float32
47+
Stride: 16
48+
Data: [ 1.0, -0x1.e7d42cp-127, 0x1.e7d42cp-127, NaN ]
49+
- Name: Result
50+
Format: Float32
51+
Stride: 4
52+
ZeroInitSize: 32
53+
- Name: ExpectedResult
54+
Format: Float32
55+
Stride: 4
56+
Data: [ inf, NaN, inf, NaN, NaN, 1, 1, 0x0 ]
57+
Results:
58+
- Result: CheckResult
59+
Rule: BufferFloatULP
60+
ULPT: 1
61+
Actual: Result
62+
Expected: ExpectedResult
63+
DescriptorSets:
64+
- Resources:
65+
- Name: X
66+
Kind: StructuredBuffer
67+
DirectXBinding:
68+
Register: 0
69+
Space: 0
70+
VulkanBinding:
71+
Binding: 0
72+
- Name: Y
73+
Kind: StructuredBuffer
74+
DirectXBinding:
75+
Register: 1
76+
Space: 0
77+
VulkanBinding:
78+
Binding: 1
79+
- Name: Result
80+
Kind: RWStructuredBuffer
81+
DirectXBinding:
82+
Register: 2
83+
Space: 0
84+
VulkanBinding:
85+
Binding: 2
86+
...
87+
#--- end
88+
89+
# UNSUPPORTED: Clang-Vulkan
90+
# RUN: split-file %s %t
91+
# RUN: %dxc_target -T cs_6_5 -Fo %t.o %t/source.hlsl
92+
# RUN: %offloader %t/pipeline.yaml %t.o

test/Feature/HLSLLib/distance.32.test

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,7 @@ void main() {
1818
Result[2] = R2;
1919
// distance({0.0, 0.0, 0.0, 0.0}, {3.0, 4.0, 12.0, 84.0}) = 85.0
2020
float R3 = distance(X[0].xyzw, Y[0].xyzw);
21-
Result[3] = R3;
22-
23-
// test denormal cases
24-
// distance(inf, 1.0) = inf
25-
Result[4] = distance(X[1].x, Y[1].x);
26-
// distance(NaN, 1.0) = NaN
27-
Result[5] = distance(X[1].y, Y[1].y);
28-
// distance(-inf, 1.0) = inf
29-
Result[6] = distance(X[1].z, Y[1].z);
30-
// distance(inf, NaN) = NaN
31-
Result[7] = distance(X[1].w, Y[1].w);
32-
// distance({inf, NaN, -inf, inf}, {1.0, 1.0, 1.0, NaN}) = NaN
33-
Result[8] = distance(X[1].xyzw, Y[1].xyzw);
21+
Result[3] = R3;
3422
}
3523

3624
//--- pipeline.yaml
@@ -44,19 +32,19 @@ Buffers:
4432
- Name: X
4533
Format: Float32
4634
Stride: 16
47-
Data: [ 0.0, 0.0, 0.0, 0.0, inf, NaN, -inf, inf ]
35+
Data: [ 0.0, 0.0, 0.0, 0.0 ]
4836
- Name: Y
4937
Format: Float32
5038
Stride: 16
51-
Data: [ 3.0, 4.0, 12.0, 84.0, 1.0, 1.0, 1.0, NaN ]
39+
Data: [ 3.0, 4.0, 12.0, 84.0 ]
5240
- Name: Result
5341
Format: Float32
5442
Stride: 4
55-
ZeroInitSize: 36
43+
ZeroInitSize: 16
5644
- Name: ExpectedResult
5745
Format: Float32
5846
Stride: 4
59-
Data: [ 3.0, 5.0, 13.0, 85.0, inf, NaN, inf, NaN, NaN ]
47+
Data: [ 3.0, 5.0, 13.0, 85.0]
6048
Results:
6149
- Result: CheckResult
6250
Rule: BufferFloatULP

test/Feature/HLSLLib/distance.fp16.denorm.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ RWStructuredBuffer<half> Result : register(u2);
77

88
[numthreads(1,1,1)]
99
void main() {
10-
// test denormal cases
10+
// test special cases
1111
// distance(inf, 1.0) = inf
1212
Result[0] = distance(X[0].x, Y[0].x);
1313

0 commit comments

Comments
 (0)