Skip to content

Commit dd0dce0

Browse files
authored
Add reflect tests (#287)
This PR adds tests for the `reflect` function. Adds float16 and float32 test files. Fixes #170
1 parent 5b2eba7 commit dd0dce0

File tree

2 files changed

+378
-0
lines changed

2 files changed

+378
-0
lines changed

test/Feature/HLSLLib/reflect.16.test

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
#--- source.hlsl
2+
3+
// This test tests three different reflection scenarios
4+
// One in 2D, 3D, and 4D
5+
6+
StructuredBuffer<half2> IncidentRay2D : register(t0);
7+
StructuredBuffer<half4> IncidentRay3D : register(t1);
8+
StructuredBuffer<half4> IncidentRay4D : register(t2);
9+
StructuredBuffer<half2> Wall2D : register(t3);
10+
StructuredBuffer<half4> Wall3D : register(t4);
11+
StructuredBuffer<half4> Wall4D : register(t5);
12+
RWStructuredBuffer<half2> Result2D : register(u6);
13+
RWStructuredBuffer<half4> Result3D : register(u7);
14+
RWStructuredBuffer<half4> Result4D : register(u8);
15+
16+
[numthreads(1,1,1)]
17+
void main() {
18+
// 2D case
19+
half2 result2D = reflect(IncidentRay2D[0].xy, normalize(Wall2D[0].xy));
20+
Result2D[0] = result2D;
21+
half2 result2D_constant = reflect(half2(0.75, -0.5), half2(0.70710677, 0.70710677));
22+
Result2D[1] = result2D_constant;
23+
24+
// 3D case, using half4 for alignment
25+
half4 result3D = half4(reflect(IncidentRay3D[0].xyz, normalize(Wall3D[0].xyz)), 0.0);
26+
Result3D[0] = result3D;
27+
half4 result3D_constant = half4(reflect(half3(0.5, -0.25, 0.75), half3(0.5, 0.5, 0.70710677)), 0.0);
28+
Result3D[1] = result3D_constant;
29+
30+
// 4D case
31+
half4 result4D = reflect(IncidentRay4D[0].xyzw, normalize(Wall4D[0].xyzw));
32+
Result4D[0] = result4D;
33+
half4 result4D_constant = reflect(half4(0.5, -0.25, 0.75, -0.5), half4(0.5, 0.5, 0.5, 0.5));
34+
Result4D[1] = result4D_constant;
35+
}
36+
37+
//--- pipeline.yaml
38+
39+
---
40+
Shaders:
41+
- Stage: Compute
42+
Entry: main
43+
DispatchSize: [1, 1, 1]
44+
Buffers:
45+
46+
- Name: IncidentRay2D
47+
Format: Float16
48+
Stride: 4
49+
Data: [ 0x3a00, 0xb800 ]
50+
# 0.75, -0.5
51+
- Name: IncidentRay3D
52+
Format: Float16
53+
Stride: 8
54+
Data: [ 0x3800, 0xb400, 0x3a00, 0x0000 ]
55+
# 0.5, -0.25, 0.75, 0.0
56+
- Name: IncidentRay4D
57+
Format: Float16
58+
Stride: 8
59+
Data: [ 0x3800, 0xb400, 0x3a00, 0xb800 ]
60+
# 0.5, -0.25, 0.75, 0.0
61+
- Name: Wall2D
62+
Format: Float16
63+
Stride: 4
64+
Data: [ 0x39a8, 0x39a8 ]
65+
# 0.70703125, 0.70703125
66+
- Name: Wall3D
67+
Format: Float16
68+
Stride: 8
69+
Data: [ 0x3800, 0x3800, 0x39a8, 0x0000 ]
70+
# 0.5, 0.5, 0.70703125, 0.0
71+
- Name: Wall4D
72+
Format: Float16
73+
Stride: 8
74+
Data: [ 0x3800, 0x3800, 0x3800, 0x3800 ]
75+
# 0.5, 0.5, 0.5, 0.5
76+
- Name: Result2D
77+
Format: Float16
78+
Stride: 4
79+
ZeroInitSize: 8
80+
- Name: ExpectedResult2D
81+
Format: Float16
82+
Stride: 4
83+
Data: [ 0x3800, 0xba00, 0x3800, 0xba00 ]
84+
# 0.5, -0.75, 0.5, -0.75
85+
- Name: Result3D
86+
Format: Float16
87+
Stride: 8
88+
ZeroInitSize: 16
89+
- Name: ExpectedResult3D
90+
Format: Float16
91+
Stride: 8
92+
Data: [ 0xb0f8, 0xbb3e, 0xb1a8, 0x0000, 0xb0f8, 0xbb3e, 0xb1a8, 0x0000 ]
93+
# -0.15527344, -0.90527344, -0.17675781, 0.0, -0.15527344, -0.90527344, -0.17675781, 0.0
94+
- Name: Result4D
95+
Format: Float16
96+
Stride: 8
97+
ZeroInitSize: 16
98+
- Name: ExpectedResult4D
99+
Format: Float16
100+
Stride: 8
101+
Data: [ 0x3400, 0xb800, 0x3800, 0xba00, 0x3400, 0xb800, 0x3800, 0xba00 ]
102+
# 0.25, -0.5, 0.5, -0.75, 0.25, -0.5, 0.5, -0.75
103+
Results:
104+
- Result: CheckResult2D
105+
Rule: BufferFloatULP
106+
ULPT: 1
107+
Actual: Result2D
108+
Expected: ExpectedResult2D
109+
- Result: CheckResult3D
110+
Rule: BufferFloatULP
111+
ULPT: 1
112+
Actual: Result3D
113+
Expected: ExpectedResult3D
114+
- Result: CheckResult4D
115+
Rule: BufferFloatULP
116+
ULPT: 1
117+
Actual: Result4D
118+
Expected: ExpectedResult4D
119+
120+
DescriptorSets:
121+
- Resources:
122+
- Name: IncidentRay2D
123+
Kind: StructuredBuffer
124+
DirectXBinding:
125+
Register: 0
126+
Space: 0
127+
VulkanBinding:
128+
Binding: 0
129+
- Name: IncidentRay3D
130+
Kind: StructuredBuffer
131+
DirectXBinding:
132+
Register: 1
133+
Space: 0
134+
VulkanBinding:
135+
Binding: 1
136+
- Name: IncidentRay4D
137+
Kind: StructuredBuffer
138+
DirectXBinding:
139+
Register: 2
140+
Space: 0
141+
VulkanBinding:
142+
Binding: 2
143+
- Name: Wall2D
144+
Kind: StructuredBuffer
145+
DirectXBinding:
146+
Register: 3
147+
Space: 0
148+
VulkanBinding:
149+
Binding: 3
150+
- Name: Wall3D
151+
Kind: StructuredBuffer
152+
DirectXBinding:
153+
Register: 4
154+
Space: 0
155+
VulkanBinding:
156+
Binding: 4
157+
- Name: Wall4D
158+
Kind: StructuredBuffer
159+
DirectXBinding:
160+
Register: 5
161+
Space: 0
162+
VulkanBinding:
163+
Binding: 5
164+
- Name: Result2D
165+
Kind: RWStructuredBuffer
166+
DirectXBinding:
167+
Register: 6
168+
Space: 0
169+
VulkanBinding:
170+
Binding: 6
171+
- Name: Result3D
172+
Kind: RWStructuredBuffer
173+
DirectXBinding:
174+
Register: 7
175+
Space: 0
176+
VulkanBinding:
177+
Binding: 7
178+
- Name: Result4D
179+
Kind: RWStructuredBuffer
180+
DirectXBinding:
181+
Register: 8
182+
Space: 0
183+
VulkanBinding:
184+
Binding: 8
185+
...
186+
#--- end
187+
# UNSUPPORTED: Clang-Vulkan
188+
189+
# RUN: split-file %s %t
190+
# RUN: %dxc_target -T cs_6_5 -enable-16bit-types -Fo %t.o %t/source.hlsl
191+
# RUN: %offloader %t/pipeline.yaml %t.o

test/Feature/HLSLLib/reflect.32.test

Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
#--- source.hlsl
2+
3+
// This test tests three different reflection scenarios
4+
// One in 2D, 3D, and 4D
5+
6+
StructuredBuffer<float2> IncidentRay2D : register(t0);
7+
StructuredBuffer<float4> IncidentRay3D : register(t1);
8+
StructuredBuffer<float4> IncidentRay4D : register(t2);
9+
StructuredBuffer<float2> Wall2D : register(t3);
10+
StructuredBuffer<float4> Wall3D : register(t4);
11+
StructuredBuffer<float4> Wall4D : register(t5);
12+
RWStructuredBuffer<float2> Result2D : register(u6);
13+
RWStructuredBuffer<float4> Result3D : register(u7);
14+
RWStructuredBuffer<float4> Result4D : register(u8);
15+
16+
[numthreads(1,1,1)]
17+
void main() {
18+
// 2D case
19+
float2 result2D = reflect(IncidentRay2D[0].xy, normalize(Wall2D[0].xy));
20+
Result2D[0] = result2D;
21+
float2 result2D_constant = reflect(float2(0.75, -0.5), float2(0.70710677, 0.70710677));
22+
Result2D[1] = result2D_constant;
23+
24+
// 3D case, using float4 for alignment
25+
float4 result3D = float4(reflect(IncidentRay3D[0].xyz, normalize(Wall3D[0].xyz)), 0.0);
26+
Result3D[0] = result3D;
27+
float4 result3D_constant = float4(reflect(float3(0.5, -0.25, 0.75), float3(0.5, 0.5, 0.70710677)), 0.0);
28+
Result3D[1] = result3D_constant;
29+
30+
// 4D case
31+
float4 result4D = reflect(IncidentRay4D[0].xyzw, normalize(Wall4D[0].xyzw));
32+
Result4D[0] = result4D;
33+
float4 result4D_constant = reflect(float4(0.5, -0.25, 0.75, -0.5), float4(0.5, 0.5, 0.5, 0.5));
34+
Result4D[1] = result4D_constant;
35+
}
36+
37+
//--- pipeline.yaml
38+
39+
---
40+
Shaders:
41+
- Stage: Compute
42+
Entry: main
43+
DispatchSize: [1, 1, 1]
44+
Buffers:
45+
46+
- Name: IncidentRay2D
47+
Format: Float32
48+
Stride: 8
49+
Data: [ 0.75, -0.5 ]
50+
- Name: IncidentRay3D
51+
Format: Float32
52+
Stride: 16
53+
Data: [ 0.5, -0.25, 0.75, 0.0 ]
54+
- Name: IncidentRay4D
55+
Format: Float32
56+
Stride: 16
57+
Data: [ 0.5, -0.25, 0.75, -0.5 ]
58+
59+
- Name: Wall2D
60+
Format: Float32
61+
Stride: 8
62+
Data: [ 0.70710677, 0.70710677 ]
63+
- Name: Wall3D
64+
Format: Float32
65+
Stride: 16
66+
Data: [ 0.5, 0.5, 0.70710677, 0.0 ]
67+
- Name: Wall4D
68+
Format: Float32
69+
Stride: 16
70+
Data: [ 0.5, 0.5, 0.5, 0.5 ]
71+
72+
- Name: Result2D
73+
Format: Float32
74+
Stride: 8
75+
ZeroInitSize: 16
76+
- Name: ExpectedResult2D
77+
Format: Float32
78+
Stride: 8
79+
Data: [ 0.5, -0.75, 0.5, -0.75 ]
80+
81+
- Name: Result3D
82+
Format: Float32
83+
Stride: 16
84+
ZeroInitSize: 32
85+
- Name: ExpectedResult3D
86+
Format: Float32
87+
Stride: 16
88+
Data: [ -0.15533, -0.90533, -0.176777, 0.0, -0.15533, -0.90533, -0.176777, 0.0 ]
89+
90+
- Name: Result4D
91+
Format: Float32
92+
Stride: 16
93+
ZeroInitSize: 32
94+
- Name: ExpectedResult4D
95+
Format: Float32
96+
Stride: 16
97+
Data: [ 0.25, -0.5, 0.5, -0.75, 0.25, -0.5, 0.5, -0.75 ]
98+
99+
Results:
100+
- Result: CheckResult2D
101+
Rule: BufferFloatEpsilon
102+
Epsilon: 0.000002
103+
Actual: Result2D
104+
Expected: ExpectedResult2D
105+
- Result: CheckResult3D
106+
Rule: BufferFloatEpsilon
107+
Epsilon: 0.000002
108+
Actual: Result3D
109+
Expected: ExpectedResult3D
110+
- Result: CheckResult4D
111+
Rule: BufferFloatEpsilon
112+
Epsilon: 0.000002
113+
Actual: Result4D
114+
Expected: ExpectedResult4D
115+
116+
DescriptorSets:
117+
- Resources:
118+
- Name: IncidentRay2D
119+
Kind: StructuredBuffer
120+
DirectXBinding:
121+
Register: 0
122+
Space: 0
123+
VulkanBinding:
124+
Binding: 0
125+
- Name: IncidentRay3D
126+
Kind: StructuredBuffer
127+
DirectXBinding:
128+
Register: 1
129+
Space: 0
130+
VulkanBinding:
131+
Binding: 1
132+
- Name: IncidentRay4D
133+
Kind: StructuredBuffer
134+
DirectXBinding:
135+
Register: 2
136+
Space: 0
137+
VulkanBinding:
138+
Binding: 2
139+
- Name: Wall2D
140+
Kind: StructuredBuffer
141+
DirectXBinding:
142+
Register: 3
143+
Space: 0
144+
VulkanBinding:
145+
Binding: 3
146+
- Name: Wall3D
147+
Kind: StructuredBuffer
148+
DirectXBinding:
149+
Register: 4
150+
Space: 0
151+
VulkanBinding:
152+
Binding: 4
153+
- Name: Wall4D
154+
Kind: StructuredBuffer
155+
DirectXBinding:
156+
Register: 5
157+
Space: 0
158+
VulkanBinding:
159+
Binding: 5
160+
- Name: Result2D
161+
Kind: RWStructuredBuffer
162+
DirectXBinding:
163+
Register: 6
164+
Space: 0
165+
VulkanBinding:
166+
Binding: 6
167+
- Name: Result3D
168+
Kind: RWStructuredBuffer
169+
DirectXBinding:
170+
Register: 7
171+
Space: 0
172+
VulkanBinding:
173+
Binding: 7
174+
- Name: Result4D
175+
Kind: RWStructuredBuffer
176+
DirectXBinding:
177+
Register: 8
178+
Space: 0
179+
VulkanBinding:
180+
Binding: 8
181+
...
182+
#--- end
183+
# UNSUPPORTED: Clang-Vulkan
184+
185+
# RUN: split-file %s %t
186+
# RUN: %dxc_target -T cs_6_5 -Fo %t.o %t/source.hlsl
187+
# RUN: %offloader %t/pipeline.yaml %t.o

0 commit comments

Comments
 (0)