@@ -61,7 +61,7 @@ struct lp_norm<T,1,true NBL_PARTIAL_REQ_BOT(concepts::FloatingPointLikeVectorial
6161};
6262
6363template<typename T> NBL_PARTIAL_REQ_TOP (concepts::FloatingPointLikeVectorial<T>)
64- struct lp_norm<T,2 ,false NBL_PARTIAL_REQ_BOT (conceptsconcepts ::FloatingPointLikeVectorial<T>) >
64+ struct lp_norm<T,2 ,false NBL_PARTIAL_REQ_BOT (concepts ::FloatingPointLikeVectorial<T>) >
6565{
6666 using scalar_type = typename vector_traits<T>::scalar_type;
6767
@@ -91,7 +91,7 @@ scalar_type_t<T> lpNorm(NBL_CONST_REF_ARG(T) v)
9191 return impl::lp_norm<T,LP>::__call (v);
9292}
9393
94- template <typename T NBL_FUNC_REQUIRES (concepts::Vectorial<T> && vector_traits<T>::Dimension == 3 )
94+ template <typename T NBL_FUNC_REQUIRES (concepts::Vectorial<T>)
9595T reflect (T I, T N, typename vector_traits<T>::scalar_type NdotI)
9696{
9797 return N * 2.0f * NdotI - I;
@@ -284,21 +284,21 @@ T reflectRefract(bool _refract, T I, T N, typename vector_traits<T>::scalar_type
284284}
285285
286286// valid only for `theta` in [-PI,PI]
287- template <typename T NBL_FUNC_REQUIRES (is_scalar_v <T>)
287+ template <typename T NBL_FUNC_REQUIRES (concepts::FloatingPointLikeScalar <T>)
288288void sincos (T theta, NBL_REF_ARG (T) s, NBL_REF_ARG (T) c)
289289{
290290 c = cos<T>(theta);
291- s = sqrt<T>(NBL_FP64_LITERAL (1.0 )-c*c);
292- s = ieee754::flipSign (s, theta < NBL_FP64_LITERAL (0.0 ));
291+ s = sqrt<T>(T ( NBL_FP64_LITERAL (1.0 ) )-c*c);
292+ s = ieee754::flipSign (s, theta < T ( NBL_FP64_LITERAL (0.0 ) ));
293293}
294294
295295template <typename T NBL_FUNC_REQUIRES (is_scalar_v<T>)
296296matrix <T, 2 , 3 > frisvad (vector <T, 3 > n)
297297{
298- const T a = NBL_FP64_LITERAL (1.0 ) / (NBL_FP64_LITERAL (1.0 ) + n.z);
298+ const T a = T ( NBL_FP64_LITERAL (1.0 )) / (T ( NBL_FP64_LITERAL (1.0 ) ) + n.z);
299299 const T b = -n.x * n.y * a;
300- return (n.z < -NBL_FP64_LITERAL (0.9999999 )) ? matrix <T, 2 , 3 >(vector <T, 3 >(0.0 ,-1.0 ,0.0 ), vector <T, 3 >(-1.0 ,0.0 ,0.0 )) :
301- matrix <T, 2 , 3 >(vector <T, 3 >(NBL_FP64_LITERAL (1.0 )-n.x*n.x*a, b, -n.x), vector <T, 3 >(b, NBL_FP64_LITERAL (1.0 )-n.y*n.y*a, -n.y));
300+ return (n.z < -T ( NBL_FP64_LITERAL (0.9999999 ) )) ? matrix <T, 2 , 3 >(vector <T, 3 >(0.0 ,-1.0 ,0.0 ), vector <T, 3 >(-1.0 ,0.0 ,0.0 )) :
301+ matrix <T, 2 , 3 >(vector <T, 3 >(T ( NBL_FP64_LITERAL (1.0 )) -n.x*n.x*a, b, -n.x), vector <T, 3 >(b, T ( NBL_FP64_LITERAL (1.0 ) )-n.y*n.y*a, -n.y));
302302}
303303
304304bool partitionRandVariable (float leftProb, NBL_REF_ARG (float ) xi, NBL_REF_ARG (float ) rcpChoiceProb)
@@ -311,9 +311,9 @@ bool partitionRandVariable(float leftProb, NBL_REF_ARG(float) xi, NBL_REF_ARG(fl
311311 const bool pickRight = xi >= leftProb * NEXT_ULP_AFTER_UNITY;
312312
313313 // This is all 100% correct taking into account the above NEXT_ULP_AFTER_UNITY
314- xi -= pickRight ? leftProb : 0.0 ;
314+ xi -= pickRight ? leftProb : 0.0f ;
315315
316- rcpChoiceProb = NBL_FP64_LITERAL ( 1.0 ) / (pickRight ? (NBL_FP64_LITERAL ( 1.0 ) - leftProb) : leftProb);
316+ rcpChoiceProb = 1.0f / (pickRight ? (1.0f - leftProb) : leftProb);
317317 xi *= rcpChoiceProb;
318318
319319 return pickRight;
@@ -332,9 +332,9 @@ struct conditionalAbsOrMax_helper<T NBL_PARTIAL_REQ_BOT(concepts::FloatingPointL
332332 static T __call (bool cond, NBL_CONST_REF_ARG (T) x, NBL_CONST_REF_ARG (T) limit)
333333 {
334334 using UintOfTSize = unsigned_integer_of_size_t<sizeof (T)>;
335- const T condAbs = bit_cast<T>(bit_cast<UintOfTSize>(x) & (cond ? 0x7fFFffFFu : 0xffFFffFFu ));
335+ const T condAbs = bit_cast<T>(bit_cast<UintOfTSize>(x) & (cond ? (numeric_limits<UintOfTSize>:: max >> 1 ) : numeric_limits<UintOfTSize>:: max ));
336336
337- return max (condAbs, limit);
337+ return max <T> (condAbs, limit);
338338 }
339339};
340340
@@ -348,28 +348,13 @@ struct conditionalAbsOrMax_helper<T NBL_PARTIAL_REQ_BOT(concepts::FloatingPointL
348348 using Uint32VectorWithDimensionOfT = vector <uint32_t, dimensionOfT>;
349349 using scalar_type = typename vector_traits<T>::scalar_type;
350350
351- Uint32VectorWithDimensionOfT xAsUintVec;
352- {
353- array_get<T, scalar_type> getter;
354- array_set<Uint32VectorWithDimensionOfT, UintOfTSize> setter;
355-
356- for (int i = 0 ; i < dimensionOfT; ++i)
357- setter (xAsUintVec, i, bit_cast<UintOfTSize>(getter (x, i)));
358- }
351+ Uint32VectorWithDimensionOfT xAsUintVec = bit_cast<Uint32VectorWithDimensionOfT, T>(x);
359352
360- const Uint32VectorWithDimensionOfT mask = cond ? _static_cast<Uint32VectorWithDimensionOfT>(0x7fFFffFFu ) : _static_cast<Uint32VectorWithDimensionOfT>(0xffFFffFFu );
353+ const Uint32VectorWithDimensionOfT mask = cond ? _static_cast<Uint32VectorWithDimensionOfT>(numeric_limits<UintOfTSize>:: max >> 1 ) : _static_cast<Uint32VectorWithDimensionOfT>(numeric_limits<UintOfTSize>:: max );
361354 const Uint32VectorWithDimensionOfT condAbsAsUint = xAsUintVec & mask;
355+ T condAbs = bit_cast<T, Uint32VectorWithDimensionOfT>(condAbsAsUint);
362356
363- T condAbs;
364- {
365- array_get<Uint32VectorWithDimensionOfT, UintOfTSize> getter;
366- array_set<T, scalar_type> setter;
367-
368- for (int i = 0 ; i < dimensionOfT; ++i)
369- setter (condAbs, i, bit_cast<scalar_type>(getter (condAbsAsUint, i)));
370- }
371-
372- return max (condAbs, limit);
357+ return max <T>(condAbs, limit);
373358 }
374359};
375360
0 commit comments