187 if(!isMuchSmallerThan(
src.x,
src.z) || !isMuchSmallerThan(
src.y,
src.z))
215 float max01 = fmaxf( std::abs(mat_pkg[0]), std::abs(mat_pkg[1]) );
216 float max23 = fmaxf( std::abs(mat_pkg[2]), std::abs(mat_pkg[3]) );
217 float max45 = fmaxf( std::abs(mat_pkg[4]), std::abs(mat_pkg[5]) );
221 if (scale <= std::numeric_limits<float>::min())
234 float c0 = m00() * m11() * m22()
235 + 2.f * m01() * m02() * m12()
236 - m00() * m12() * m12()
237 - m11() * m02() * m02()
238 - m22() * m01() * m01();
239 float c1 = m00() * m11() -
245 float c2 = m00() + m11() + m22();
249 if(
evals.z -
evals.x <= std::numeric_limits<float>::epsilon())
251 evecs[0] = make_float3(1.f, 0.f, 0.f);
252 evecs[1] = make_float3(0.f, 1.f, 0.f);
253 evecs[2] = make_float3(0.f, 0.f, 1.f);
255 else if (
evals.y -
evals.x <= std::numeric_limits<float>::epsilon() )
258 tmp[0] = row0();
tmp[1] = row1();
tmp[2] = row2();
285 else if (
evals.z -
evals.y <= std::numeric_limits<float>::epsilon() )
288 tmp[0] = row0();
tmp[1] = row1();
tmp[2] = row2();
318 tmp[0] = row0();
tmp[1] = row1();
tmp[2] = row2();
349 tmp[0] = row0();
tmp[1] = row1();
tmp[2] = row2();
382 tmp[0] = row0();
tmp[1] = row1();
tmp[2] = row2();
424 volatile float* mat_pkg;
428 __device__ __forceinline__
float m02()
const {
return mat_pkg[2]; }
429 __device__ __forceinline__
float m10()
const {
return mat_pkg[1]; }
430 __device__ __forceinline__
float m11()
const {
return mat_pkg[3]; }
431 __device__ __forceinline__
float m12()
const {
return mat_pkg[4]; }
432 __device__ __forceinline__
float m20()
const {
return mat_pkg[2]; }
433 __device__ __forceinline__
float m21()
const {
return mat_pkg[4]; }
434 __device__ __forceinline__
float m22()
const {
return mat_pkg[5]; }
436 __device__ __forceinline__ float3 row0()
const {
return make_float3( m00(), m01(), m02() ); }
437 __device__ __forceinline__ float3 row1()
const {
return make_float3( m10(), m11(), m12() ); }
438 __device__ __forceinline__ float3 row2()
const {
return make_float3( m20(), m21(), m22() ); }
440 __device__ __forceinline__
static bool isMuchSmallerThan (
float x,
float y)
443 constexpr float prec_sqr = std::numeric_limits<float>::epsilon() * std::numeric_limits<float>::epsilon();
444 return x * x <= prec_sqr * y * y;