Skip to content

Commit 688c66a

Browse files
committed
Fix SAFE_MATH option
1 parent 5640892 commit 688c66a

File tree

1 file changed

+10
-14
lines changed

1 file changed

+10
-14
lines changed

RadeonRays/src/kernels/CL/common.cl

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -174,11 +174,11 @@ float fast_intersect_triangle(ray r, float3 v1, float3 v2, float3 v3, float t_ma
174174
float3 const e2 = v3 - v1;
175175
float3 const s1 = cross(r.d.xyz, e2);
176176

177-
#ifdef USE_SAFE_MATH
178-
float const invd = 1.0/(dot(s1, e1));
179-
#else
177+
#ifdef USE_SAFE_MATH
178+
float const invd = 1.f / dot(s1, e1);
179+
#else
180180
float const invd = native_recip(dot(s1, e1));
181-
#endif
181+
#endif
182182

183183
float3 const d = r.o.xyz - v1;
184184
float const b1 = dot(d, s1) * invd;
@@ -199,19 +199,15 @@ float fast_intersect_triangle(ray r, float3 v1, float3 v2, float3 v3, float t_ma
199199
INLINE
200200
float3 safe_invdir(ray r)
201201
{
202-
#ifdef USE_SAFE_MATH
203202
float const dirx = r.d.x;
204203
float const diry = r.d.y;
205204
float const dirz = r.d.z;
206-
float const ooeps = exp2(-80.0f); // Avoid div by zero.
205+
float const ooeps = 1e-8;
207206
float3 invdir;
208207
invdir.x = 1.0f / (fabs(dirx) > ooeps ? dirx : copysign(ooeps, dirx));
209208
invdir.y = 1.0f / (fabs(diry) > ooeps ? diry : copysign(ooeps, diry));
210209
invdir.z = 1.0f / (fabs(dirz) > ooeps ? dirz : copysign(ooeps, dirz));
211210
return invdir;
212-
#else
213-
return native_recip(r.d.xyz);
214-
#endif
215211
}
216212

217213
// Intersect rays vs bbox and return intersection span.
@@ -241,11 +237,11 @@ float2 triangle_calculate_barycentrics(float3 p, float3 v1, float3 v2, float3 v3
241237
float const d20 = dot(e, e1);
242238
float const d21 = dot(e, e2);
243239

244-
#ifdef USE_SAFE_MATH
245-
float const invdenom = 1.0 / (d00 * d11 - d01 * d01);
246-
#else
247-
float const invdenom = native_recip(d00 * d11 - d01 * d01);
248-
#endif
240+
#ifdef USE_SAFE_MATH
241+
float const invdenom = 1.f / (d00 * d11 - d01 * d01);
242+
#else
243+
float const invdenom = native_recip(d00 * d11 - d01 * d01);
244+
#endif
249245

250246
float const b1 = (d11 * d20 - d01 * d21) * invdenom;
251247
float const b2 = (d00 * d21 - d01 * d20) * invdenom;

0 commit comments

Comments
 (0)