|
|
@@ -11,6 +11,7 @@
|
|
|
#include <glm/core/type_vec3.hpp>
|
|
|
#include <glm/core/type_vec4.hpp>
|
|
|
#include <glm/core/func_vector_relational.hpp>
|
|
|
+#include <ctime>
|
|
|
#include <vector>
|
|
|
|
|
|
template <int Value>
|
|
|
@@ -39,6 +40,10 @@ int test_vec4_ctor()
|
|
|
{
|
|
|
int Error = 0;
|
|
|
|
|
|
+#if(GLM_HAS_INITIALIZER_LISTS)
|
|
|
+ glm::vec4 v{0, 1, 2, 3};
|
|
|
+#endif
|
|
|
+
|
|
|
{
|
|
|
glm::vec4 A(1);
|
|
|
glm::vec4 B(1, 1, 1, 1);
|
|
|
@@ -282,6 +287,74 @@ int test_operator_increment()
|
|
|
return Error;
|
|
|
}
|
|
|
|
|
|
+struct AoS
|
|
|
+{
|
|
|
+ glm::vec4 A;
|
|
|
+ glm::vec3 B;
|
|
|
+ glm::vec3 C;
|
|
|
+ glm::vec2 D;
|
|
|
+};
|
|
|
+
|
|
|
+int test_vec4_perf_AoS(std::size_t Size)
|
|
|
+{
|
|
|
+ int Error(0);
|
|
|
+
|
|
|
+ std::vector<AoS> In;
|
|
|
+ std::vector<AoS> Out;
|
|
|
+ In.resize(Size);
|
|
|
+ Out.resize(Size);
|
|
|
+
|
|
|
+ std::clock_t StartTime = std::clock();
|
|
|
+
|
|
|
+ for(std::size_t i = 0; i < In.size(); ++i)
|
|
|
+ Out[i] = In[i];
|
|
|
+
|
|
|
+ std::clock_t EndTime = std::clock();
|
|
|
+
|
|
|
+ printf("AoS: %d\n", EndTime - StartTime);
|
|
|
+
|
|
|
+ return Error;
|
|
|
+}
|
|
|
+
|
|
|
+int test_vec4_perf_SoA(std::size_t Size)
|
|
|
+{
|
|
|
+ int Error(0);
|
|
|
+
|
|
|
+ std::vector<glm::vec4> InA;
|
|
|
+ std::vector<glm::vec3> InB;
|
|
|
+ std::vector<glm::vec3> InC;
|
|
|
+ std::vector<glm::vec2> InD;
|
|
|
+ std::vector<glm::vec4> OutA;
|
|
|
+ std::vector<glm::vec3> OutB;
|
|
|
+ std::vector<glm::vec3> OutC;
|
|
|
+ std::vector<glm::vec2> OutD;
|
|
|
+
|
|
|
+ InA.resize(Size);
|
|
|
+ InB.resize(Size);
|
|
|
+ InC.resize(Size);
|
|
|
+ InD.resize(Size);
|
|
|
+ OutA.resize(Size);
|
|
|
+ OutB.resize(Size);
|
|
|
+ OutC.resize(Size);
|
|
|
+ OutD.resize(Size);
|
|
|
+
|
|
|
+ std::clock_t StartTime = std::clock();
|
|
|
+
|
|
|
+ for(std::size_t i = 0; i < InA.size(); ++i)
|
|
|
+ {
|
|
|
+ OutA[i] = InA[i];
|
|
|
+ OutB[i] = InB[i];
|
|
|
+ OutC[i] = InC[i];
|
|
|
+ OutD[i] = InD[i];
|
|
|
+ }
|
|
|
+
|
|
|
+ std::clock_t EndTime = std::clock();
|
|
|
+
|
|
|
+ printf("SoA: %d\n", EndTime - StartTime);
|
|
|
+
|
|
|
+ return Error;
|
|
|
+}
|
|
|
+
|
|
|
int main()
|
|
|
{
|
|
|
//__m128 DataA = swizzle<X, Y, Z, W>(glm::vec4(1.0f, 2.0f, 3.0f, 4.0f));
|
|
|
@@ -289,6 +362,10 @@ int main()
|
|
|
|
|
|
int Error(0);
|
|
|
|
|
|
+ std::size_t const Size(100000000);
|
|
|
+
|
|
|
+ Error += test_vec4_perf_AoS(Size);
|
|
|
+ Error += test_vec4_perf_SoA(Size);
|
|
|
Error += test_vec4_ctor();
|
|
|
Error += test_vec4_size();
|
|
|
Error += test_vec4_operators();
|