Added a CMake option to execute GLM performance tests. Made quat and dualquat trivially constructible #263

This commit is contained in:
Christophe Riccio 2014-11-15 00:05:52 +01:00
parent b7b8b18f83
commit 0b8ca1a5b6
14 changed files with 70 additions and 36 deletions

View File

@ -14,6 +14,11 @@ if(NOT GLM_TEST_ENABLE)
message(STATUS "GLM is a header only library, no need to build it. Set the option GLM_TEST_ENABLE with ON to build and run the test bench")
endif()
option(GLM_PERF_ENABLE "GLM perf" OFF)
if(GLM_PERF_ENABLE)
add_definitions(-DGLM_TEST_ENABLE_PERF)
endif()
if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") OR (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") AND UNIX))
option(GLM_TEST_ENABLE_CXX_98 "Enable C++ 98" OFF)
option(GLM_TEST_ENABLE_CXX_0X "Enable C++ 0x" OFF)

View File

@ -82,7 +82,6 @@ namespace glm
// Implicit basic constructors
GLM_FUNC_DECL tquat();
GLM_FUNC_DECL tquat(tquat<T, P> const & q);
template <precision Q>
GLM_FUNC_DECL tquat(tquat<T, Q> const & q);

View File

@ -86,11 +86,6 @@ namespace detail
# endif
{}
template <typename T, precision P>
GLM_FUNC_QUALIFIER tquat<T, P>::tquat(tquat<T, P> const & q)
: x(q.x), y(q.y), z(q.z), w(q.w)
{}
template <typename T, precision P>
template <precision Q>
GLM_FUNC_QUALIFIER tquat<T, P>::tquat(tquat<T, Q> const & q)

View File

@ -75,7 +75,6 @@ namespace glm
// Implicit basic constructors
GLM_FUNC_DECL tdualquat();
GLM_FUNC_DECL tdualquat(tdualquat<T, P> const & d);
template <precision Q>
GLM_FUNC_DECL tdualquat(tdualquat<T, Q> const & d);

View File

@ -53,11 +53,6 @@ namespace glm
# endif
{}
template <typename T, precision P>
GLM_FUNC_QUALIFIER tdualquat<T, P>::tdualquat(tdualquat<T, P> const & d)
: real(d.real), dual(d.dual)
{}
template <typename T, precision P>
template <precision Q>
GLM_FUNC_QUALIFIER tdualquat<T, P>::tdualquat(tdualquat<T, Q> const & d)

View File

@ -58,15 +58,6 @@ Features:
- Added GTC_integer extension, promoted GTX_bit
- Added GTC_round extension, promoted GTX_bit
Deprecation:
- Removed degrees for function parameters
- Removed GLM_FORCE_RADIANS, active by default
- Removed VC 2005 / 8 and 2008 / 9 support
- Removed GCC 3.4 to 4.5 support
- Removed LLVM GCC support
- Removed LLVM 2.6 to 2.9 support
- Removed CUDA 3.0 to 4.0 support
Improvements:
- Rely on C++11 to implement isinf and isnan
- Removed GLM_FORCE_CUDA, Cuda is implicitly detected
@ -79,7 +70,8 @@ Improvements:
- Optimized bitfieldReverse and bitCount functions
- Optimized matrix-vector multiple performance with Cuda #257, #258
- Reduced integer type redifinitions #233
- Rewrite of GTX_fast_trigonometry #264 #265
- Rewrited of GTX_fast_trigonometry #264 #265
- Made types trivially copyable #263
Fixes:
- Fixed std::nextafter not supported with C++11 on Android #217
@ -90,6 +82,15 @@ Fixes:
- Fixed implicit conversion from another tvec2 type to another tvec2 #241
- Fixed lack of consistency of quat and dualquat constructors
Deprecation:
- Removed degrees for function parameters
- Removed GLM_FORCE_RADIANS, active by default
- Removed VC 2005 / 8 and 2008 / 9 support
- Removed GCC 3.4 to 4.5 support
- Removed LLVM GCC support
- Removed LLVM 2.6 to 2.9 support
- Removed CUDA 3.0 to 4.0 support
================================================================================
GLM 0.9.5.4: 2014-06-21
--------------------------------------------------------------------------------

View File

@ -1018,7 +1018,6 @@ int main()
int Error(0);
Error += sign::test();
Error += sign::perf();
Error += test_floor();
Error += test_modf();
Error += test_floatBitsToInt();
@ -1032,6 +1031,10 @@ int main()
Error += test_isnan();
Error += test_isinf();
# ifdef GLM_TEST_ENABLE_PERF
Error += sign::perf();
# endif
return Error;
}

View File

@ -1321,11 +1321,8 @@ int main()
int Error = 0;
Error += ::bitCount::test();
Error += ::bitCount::perf();
Error += ::bitfieldReverse::test();
Error += ::bitfieldReverse::perf();
Error += ::findMSB::test();
Error += ::findMSB::perf();
Error += ::findLSB::test();
Error += ::umulExtended::test();
Error += ::imulExtended::test();
@ -1334,5 +1331,11 @@ int main()
Error += ::bitfieldInsert::test();
Error += ::bitfieldExtract::test();
# ifdef GLM_TEST_ENABLE_PERF
Error += ::bitCount::perf();
Error += ::bitfieldReverse::perf();
Error += ::findMSB::perf();
# endif
return Error;
}

View File

@ -240,11 +240,15 @@ int main()
Error += test_transpose();
Error += test_determinant();
Error += test_inverse();
# ifdef GLM_TEST_ENABLE_PERF
for(std::size_t i = 0; i < 1; ++i)
{
Error += test_inverse_perf<glm::vec3, glm::mat4>(i, "mat4");
Error += test_inverse_perf<glm::dvec3, glm::dmat4>(i, "dmat4");
}
# endif
return Error;
}

View File

@ -425,8 +425,11 @@ int main()
std::size_t const Size(1000000);
Error += test_vec4_perf_AoS(Size);
Error += test_vec4_perf_SoA(Size);
# ifdef GLM_TEST_ENABLE_PERF
Error += test_vec4_perf_AoS(Size);
Error += test_vec4_perf_SoA(Size);
# endif
Error += test_vec4_ctor();
Error += test_vec4_size();
Error += test_vec4_operators();

View File

@ -637,7 +637,9 @@ int main()
Error += ::bitfieldInterleave::test();
//Error += ::bitRevert::test();
Error += ::mask::perf();
# ifdef GLM_TEST_ENABLE_PERF
Error += ::mask::perf();
# endif
return Error;
}

View File

@ -273,6 +273,20 @@ int test_quat_ctr()
{
int Error(0);
#if (GLM_LANG & GLM_LANG_CXX11_FLAG) || (GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)
// Error += std::is_trivially_default_constructible<glm::quat>::value ? 0 : 1;
// Error += std::is_trivially_default_constructible<glm::dquat>::value ? 0 : 1;
// Error += std::is_trivially_copy_assignable<glm::quat>::value ? 0 : 1;
// Error += std::is_trivially_copy_assignable<glm::dquat>::value ? 0 : 1;
Error += std::is_trivially_copyable<glm::quat>::value ? 0 : 1;
Error += std::is_trivially_copyable<glm::dquat>::value ? 0 : 1;
Error += std::has_trivial_copy_constructor<glm::quat>::value ? 0 : 1;
Error += std::has_trivial_copy_constructor<glm::dquat>::value ? 0 : 1;
Error += std::is_copy_constructible<glm::quat>::value ? 0 : 1;
Error += std::is_copy_constructible<glm::dquat>::value ? 0 : 1;
#endif
# if GLM_HAS_INITIALIZER_LISTS
{
glm::quat A{0, 1, 2, 3};

View File

@ -299,7 +299,10 @@ int main()
Error += isPowerOfTwo::test();
Error += ceilPowerOfTwo::test();
Error += ceilPowerOfTwo::perf();
# ifdef GLM_TEST_ENABLE_PERF
Error += ceilPowerOfTwo::perf();
# endif
return Error;
}

View File

@ -31,6 +31,7 @@ namespace fastCos
const std::clock_t time_default = timestamp3 - timestamp2;
std::printf("fastCos Time %d clocks\n", static_cast<unsigned int>(time_fast));
std::printf("cos Time %d clocks\n", static_cast<unsigned int>(time_default));
return time_fast < time_default ? 0 : 1;
}
}//namespace fastCos
@ -53,6 +54,7 @@ namespace fastSin
const std::clock_t time_default = timestamp3 - timestamp2;
std::printf("fastSin Time %d clocks\n", static_cast<unsigned int>(time_fast));
std::printf("sin Time %d clocks\n", static_cast<unsigned int>(time_default));
return time_fast < time_default ? 0 : 1;
}
}//namespace fastSin
@ -75,6 +77,7 @@ namespace fastTan
const std::clock_t time_default = timestamp3 - timestamp2;
std::printf("fastTan Time %d clocks\n", static_cast<unsigned int>(time_fast));
std::printf("tan Time %d clocks\n", static_cast<unsigned int>(time_default));
return time_fast < time_default ? 0 : 1;
}
}//namespace fastTan
@ -97,6 +100,7 @@ namespace fastAcos
const std::clock_t time_default = timestamp3 - timestamp2;
std::printf("fastAcos Time %d clocks\n", static_cast<unsigned int>(time_fast));
std::printf("acos Time %d clocks\n", static_cast<unsigned int>(time_default));
return time_fast < time_default ? 0 : 1;
}
}//namespace fastAcos
@ -119,6 +123,7 @@ namespace fastAsin
const std::clock_t time_default = timestamp3 - timestamp2;
std::printf("fastAsin Time %d clocks\n", static_cast<unsigned int>(time_fast));
std::printf("asin Time %d clocks\n", static_cast<unsigned int>(time_default));
return time_fast < time_default ? 0 : 1;
}
}//namespace fastAsin
@ -141,6 +146,7 @@ namespace fastAtan
const std::clock_t time_default = timestamp3 - timestamp2;
std::printf("fastAtan Time %d clocks\n", static_cast<unsigned int>(time_fast));
std::printf("atan Time %d clocks\n", static_cast<unsigned int>(time_default));
return time_fast < time_default ? 0 : 1;
}
}//namespace fastAtan
@ -149,12 +155,14 @@ int main()
{
int Error(0);
Error += ::fastCos::perf();
Error += ::fastSin::perf();
Error += ::fastTan::perf();
Error += ::fastAcos::perf();
Error += ::fastAsin::perf();
Error += ::fastAtan::perf();
# ifdef GLM_TEST_ENABLE_PERF
Error += ::fastCos::perf();
Error += ::fastSin::perf();
Error += ::fastTan::perf();
Error += ::fastAcos::perf();
Error += ::fastAsin::perf();
Error += ::fastAtan::perf();
# endif
return Error;
}