@@ -174,11 +174,11 @@ float fast_intersect_triangle(ray r, float3 v1, float3 v2, float3 v3, float t_ma
174
174
float3 const e2 = v3 - v1 ;
175
175
float3 const s1 = cross (r .d .xyz , e2 );
176
176
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
180
180
float const invd = native_recip (dot (s1 , e1 ));
181
- #endif
181
+ #endif
182
182
183
183
float3 const d = r .o .xyz - v1 ;
184
184
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
199
199
INLINE
200
200
float3 safe_invdir (ray r )
201
201
{
202
- #ifdef USE_SAFE_MATH
203
202
float const dirx = r .d .x ;
204
203
float const diry = r .d .y ;
205
204
float const dirz = r .d .z ;
206
- float const ooeps = exp2 ( -80.0f ); // Avoid div by zero.
205
+ float const ooeps = 1e-8 ;
207
206
float3 invdir ;
208
207
invdir .x = 1.0f / (fabs (dirx ) > ooeps ? dirx : copysign (ooeps , dirx ));
209
208
invdir .y = 1.0f / (fabs (diry ) > ooeps ? diry : copysign (ooeps , diry ));
210
209
invdir .z = 1.0f / (fabs (dirz ) > ooeps ? dirz : copysign (ooeps , dirz ));
211
210
return invdir ;
212
- #else
213
- return native_recip (r .d .xyz );
214
- #endif
215
211
}
216
212
217
213
// Intersect rays vs bbox and return intersection span.
@@ -241,11 +237,11 @@ float2 triangle_calculate_barycentrics(float3 p, float3 v1, float3 v2, float3 v3
241
237
float const d20 = dot (e , e1 );
242
238
float const d21 = dot (e , e2 );
243
239
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
249
245
250
246
float const b1 = (d11 * d20 - d01 * d21 ) * invdenom ;
251
247
float const b2 = (d00 * d21 - d01 * d20 ) * invdenom ;
0 commit comments