Skip to content

Commit ad02195

Browse files
authored
Add refract tests (#306)
This PR adds tests for the refract function. Adds float16 and float32 test files. Fixes #191
1 parent 2a388d0 commit ad02195

File tree

2 files changed

+375
-0
lines changed

2 files changed

+375
-0
lines changed

test/Feature/HLSLLib/refract.16.test

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

test/Feature/HLSLLib/refract.32.test

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

0 commit comments

Comments
 (0)