From ec28a80e00ae6893b1a71c1e0538561df78665e5 Mon Sep 17 00:00:00 2001 From: degasus Date: Thu, 11 Dec 2014 22:39:58 +0100 Subject: VideoLoader: remove VAT_*_FRACBITS They are used to remove the flush amounts, but as we don't flush anymore on vertex loader changes (only on native vertex format right now), this optimization is now unneeded. This will allow us to hard code the frac factors within the vertex loaders. --- Source/UnitTests/VideoCommon/VertexLoaderTest.cpp | 48 +++++++++++++---------- 1 file changed, 27 insertions(+), 21 deletions(-) (limited to 'Source/UnitTests/VideoCommon/VertexLoaderTest.cpp') diff --git a/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp b/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp index 45d8a23ab1..44fb6dc314 100644 --- a/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp +++ b/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp @@ -93,10 +93,10 @@ TEST_F(VertexLoaderTest, PositionDirectFloatXYZ) m_vtx_attr.g0.PosElements = 1; // XYZ m_vtx_attr.g0.PosFormat = 4; // Float - VertexLoader loader(m_vtx_desc, m_vtx_attr); + VertexLoader* loader = new VertexLoader(m_vtx_desc, m_vtx_attr); - ASSERT_EQ(3 * sizeof (float), (u32)loader.GetNativeVertexDeclaration().stride); - ASSERT_EQ(3 * sizeof (float), (u32)loader.GetVertexSize()); + ASSERT_EQ(3 * sizeof (float), (u32)loader->GetNativeVertexDeclaration().stride); + ASSERT_EQ(3 * sizeof (float), (u32)loader->GetVertexSize()); // Write some vertices. Input(0.0f); Input(0.0f); Input(0.0f); @@ -105,9 +105,10 @@ TEST_F(VertexLoaderTest, PositionDirectFloatXYZ) Input(0.0f); Input(0.0f); Input(1.0f); // Convert 4 points. "7" -> primitive are points. - int count = loader.RunVertices(m_vtx_attr, 7, 4, src, dst); - src.Skip(4 * loader.GetVertexSize()); - dst.Skip(count * loader.GetNativeVertexDeclaration().stride); + int count = loader->RunVertices(7, 4, src, dst); + src.Skip(4 * loader->GetVertexSize()); + dst.Skip(count * loader->GetNativeVertexDeclaration().stride); + delete loader; ExpectOut(0.0f); ExpectOut(0.0f); ExpectOut(0.0f); ExpectOut(1.0f); ExpectOut(0.0f); ExpectOut(0.0f); @@ -117,10 +118,12 @@ TEST_F(VertexLoaderTest, PositionDirectFloatXYZ) // Test that scale does nothing for floating point inputs. Input(1.0f); Input(2.0f); Input(4.0f); m_vtx_attr.g0.PosFrac = 1; - count = loader.RunVertices(m_vtx_attr, 7, 1, src, dst); - src.Skip(1 * loader.GetVertexSize()); - dst.Skip(count * loader.GetNativeVertexDeclaration().stride); + loader = new VertexLoader(m_vtx_desc, m_vtx_attr); + count = loader->RunVertices(7, 1, src, dst); + src.Skip(1 * loader->GetVertexSize()); + dst.Skip(count * loader->GetNativeVertexDeclaration().stride); ExpectOut(1.0f); ExpectOut(2.0f); ExpectOut(4.0f); + delete loader; } TEST_F(VertexLoaderTest, PositionDirectU16XY) @@ -129,10 +132,10 @@ TEST_F(VertexLoaderTest, PositionDirectU16XY) m_vtx_attr.g0.PosElements = 0; // XY m_vtx_attr.g0.PosFormat = 2; // U16 - VertexLoader loader(m_vtx_desc, m_vtx_attr); + VertexLoader* loader = new VertexLoader(m_vtx_desc, m_vtx_attr); - ASSERT_EQ(3 * sizeof (float), (u32)loader.GetNativeVertexDeclaration().stride); - ASSERT_EQ(2 * sizeof (u16), (u32)loader.GetVertexSize()); + ASSERT_EQ(3 * sizeof (float), (u32)loader->GetNativeVertexDeclaration().stride); + ASSERT_EQ(2 * sizeof (u16), (u32)loader->GetVertexSize()); // Write some vertices. Input(0); Input(0); @@ -142,9 +145,10 @@ TEST_F(VertexLoaderTest, PositionDirectU16XY) Input(12345); Input(54321); // Convert 5 points. "7" -> primitive are points. - int count = loader.RunVertices(m_vtx_attr, 7, 5, src, dst); - src.Skip(5 * loader.GetVertexSize()); - dst.Skip(count * loader.GetNativeVertexDeclaration().stride); + int count = loader->RunVertices(7, 5, src, dst); + src.Skip(5 * loader->GetVertexSize()); + dst.Skip(count * loader->GetNativeVertexDeclaration().stride); + delete loader; ExpectOut(0.0f); ExpectOut(0.0f); ExpectOut(0.0f); ExpectOut(1.0f); ExpectOut(2.0f); ExpectOut(0.0f); @@ -155,10 +159,12 @@ TEST_F(VertexLoaderTest, PositionDirectU16XY) // Test that scale works on U16 inputs. Input(42); Input(24); m_vtx_attr.g0.PosFrac = 1; - count = loader.RunVertices(m_vtx_attr, 7, 1, src, dst); - src.Skip(1 * loader.GetVertexSize()); - dst.Skip(count * loader.GetNativeVertexDeclaration().stride); + loader = new VertexLoader(m_vtx_desc, m_vtx_attr); + count = loader->RunVertices(7, 1, src, dst); + src.Skip(1 * loader->GetVertexSize()); + dst.Skip(count * loader->GetNativeVertexDeclaration().stride); ExpectOut(21.0f); ExpectOut(12.0f); ExpectOut(0.0f); + delete loader; } TEST_F(VertexLoaderTest, PositionDirectFloatXYZSpeed) @@ -175,7 +181,7 @@ TEST_F(VertexLoaderTest, PositionDirectFloatXYZSpeed) for (int i = 0; i < 1000; ++i) { ResetPointers(); - int count = loader.RunVertices(m_vtx_attr, 7, 100000, src, dst); + int count = loader.RunVertices(7, 100000, src, dst); src.Skip(100000 * loader.GetVertexSize()); dst.Skip(count * loader.GetNativeVertexDeclaration().stride); } @@ -195,7 +201,7 @@ TEST_F(VertexLoaderTest, PositionDirectU16XYSpeed) for (int i = 0; i < 1000; ++i) { ResetPointers(); - int count = loader.RunVertices(m_vtx_attr, 7, 100000, src, dst); + int count = loader.RunVertices(7, 100000, src, dst); src.Skip(100000 * loader.GetVertexSize()); dst.Skip(count * loader.GetNativeVertexDeclaration().stride); } @@ -258,7 +264,7 @@ TEST_F(VertexLoaderTest, LargeFloatVertexSpeed) for (int i = 0; i < 100; ++i) { ResetPointers(); - int count = loader.RunVertices(m_vtx_attr, 7, 100000, src, dst); + int count = loader.RunVertices(7, 100000, src, dst); src.Skip(100000 * loader.GetVertexSize()); dst.Skip(count * loader.GetNativeVertexDeclaration().stride); } -- cgit v1.2.3 From a71c8158d91c7ee0976b9b16eeba5ea3ac18ff99 Mon Sep 17 00:00:00 2001 From: degasus Date: Sat, 13 Dec 2014 00:23:54 +0100 Subject: VertexLoader: remove inlined getters They just blow up the code. --- Source/UnitTests/VideoCommon/VertexLoaderTest.cpp | 48 +++++++++++------------ 1 file changed, 24 insertions(+), 24 deletions(-) (limited to 'Source/UnitTests/VideoCommon/VertexLoaderTest.cpp') diff --git a/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp b/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp index 44fb6dc314..d1032ae6f9 100644 --- a/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp +++ b/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp @@ -1,4 +1,4 @@ -#include +#include #include "Common/Common.h" #include "VideoCommon/DataReader.h" @@ -10,7 +10,7 @@ TEST(VertexLoaderUID, UniqueEnough) { - std::set uids; + std::unordered_set uids; TVtxDesc vtx_desc; memset(&vtx_desc, 0, sizeof (vtx_desc)); @@ -95,8 +95,8 @@ TEST_F(VertexLoaderTest, PositionDirectFloatXYZ) VertexLoader* loader = new VertexLoader(m_vtx_desc, m_vtx_attr); - ASSERT_EQ(3 * sizeof (float), (u32)loader->GetNativeVertexDeclaration().stride); - ASSERT_EQ(3 * sizeof (float), (u32)loader->GetVertexSize()); + ASSERT_EQ(3 * sizeof (float), (u32)loader->m_native_vtx_decl.stride); + ASSERT_EQ(3 * sizeof (float), (u32)loader->m_VertexSize); // Write some vertices. Input(0.0f); Input(0.0f); Input(0.0f); @@ -106,8 +106,8 @@ TEST_F(VertexLoaderTest, PositionDirectFloatXYZ) // Convert 4 points. "7" -> primitive are points. int count = loader->RunVertices(7, 4, src, dst); - src.Skip(4 * loader->GetVertexSize()); - dst.Skip(count * loader->GetNativeVertexDeclaration().stride); + src.Skip(4 * loader->m_VertexSize); + dst.Skip(count * loader->m_native_vtx_decl.stride); delete loader; ExpectOut(0.0f); ExpectOut(0.0f); ExpectOut(0.0f); @@ -120,8 +120,8 @@ TEST_F(VertexLoaderTest, PositionDirectFloatXYZ) m_vtx_attr.g0.PosFrac = 1; loader = new VertexLoader(m_vtx_desc, m_vtx_attr); count = loader->RunVertices(7, 1, src, dst); - src.Skip(1 * loader->GetVertexSize()); - dst.Skip(count * loader->GetNativeVertexDeclaration().stride); + src.Skip(1 * loader->m_VertexSize); + dst.Skip(count * loader->m_native_vtx_decl.stride); ExpectOut(1.0f); ExpectOut(2.0f); ExpectOut(4.0f); delete loader; } @@ -134,8 +134,8 @@ TEST_F(VertexLoaderTest, PositionDirectU16XY) VertexLoader* loader = new VertexLoader(m_vtx_desc, m_vtx_attr); - ASSERT_EQ(3 * sizeof (float), (u32)loader->GetNativeVertexDeclaration().stride); - ASSERT_EQ(2 * sizeof (u16), (u32)loader->GetVertexSize()); + ASSERT_EQ(3 * sizeof (float), (u32)loader->m_native_vtx_decl.stride); + ASSERT_EQ(2 * sizeof (u16), (u32)loader->m_VertexSize); // Write some vertices. Input(0); Input(0); @@ -146,8 +146,8 @@ TEST_F(VertexLoaderTest, PositionDirectU16XY) // Convert 5 points. "7" -> primitive are points. int count = loader->RunVertices(7, 5, src, dst); - src.Skip(5 * loader->GetVertexSize()); - dst.Skip(count * loader->GetNativeVertexDeclaration().stride); + src.Skip(5 * loader->m_VertexSize); + dst.Skip(count * loader->m_native_vtx_decl.stride); delete loader; ExpectOut(0.0f); ExpectOut(0.0f); ExpectOut(0.0f); @@ -161,8 +161,8 @@ TEST_F(VertexLoaderTest, PositionDirectU16XY) m_vtx_attr.g0.PosFrac = 1; loader = new VertexLoader(m_vtx_desc, m_vtx_attr); count = loader->RunVertices(7, 1, src, dst); - src.Skip(1 * loader->GetVertexSize()); - dst.Skip(count * loader->GetNativeVertexDeclaration().stride); + src.Skip(1 * loader->m_VertexSize); + dst.Skip(count * loader->m_native_vtx_decl.stride); ExpectOut(21.0f); ExpectOut(12.0f); ExpectOut(0.0f); delete loader; } @@ -175,15 +175,15 @@ TEST_F(VertexLoaderTest, PositionDirectFloatXYZSpeed) VertexLoader loader(m_vtx_desc, m_vtx_attr); - ASSERT_EQ(3 * sizeof (float), (u32)loader.GetNativeVertexDeclaration().stride); - ASSERT_EQ(3 * sizeof (float), (u32)loader.GetVertexSize()); + ASSERT_EQ(3 * sizeof (float), (u32)loader.m_native_vtx_decl.stride); + ASSERT_EQ(3 * sizeof (float), (u32)loader.m_VertexSize); for (int i = 0; i < 1000; ++i) { ResetPointers(); int count = loader.RunVertices(7, 100000, src, dst); - src.Skip(100000 * loader.GetVertexSize()); - dst.Skip(count * loader.GetNativeVertexDeclaration().stride); + src.Skip(100000 * loader.m_VertexSize); + dst.Skip(count * loader.m_native_vtx_decl.stride); } } @@ -195,15 +195,15 @@ TEST_F(VertexLoaderTest, PositionDirectU16XYSpeed) VertexLoader loader(m_vtx_desc, m_vtx_attr); - ASSERT_EQ(3 * sizeof (float), (u32)loader.GetNativeVertexDeclaration().stride); - ASSERT_EQ(2 * sizeof (u16), (u32)loader.GetVertexSize()); + ASSERT_EQ(3 * sizeof (float), (u32)loader.m_native_vtx_decl.stride); + ASSERT_EQ(2 * sizeof (u16), (u32)loader.m_VertexSize); for (int i = 0; i < 1000; ++i) { ResetPointers(); int count = loader.RunVertices(7, 100000, src, dst); - src.Skip(100000 * loader.GetVertexSize()); - dst.Skip(count * loader.GetNativeVertexDeclaration().stride); + src.Skip(100000 * loader.m_VertexSize); + dst.Skip(count * loader.m_native_vtx_decl.stride); } } @@ -265,7 +265,7 @@ TEST_F(VertexLoaderTest, LargeFloatVertexSpeed) { ResetPointers(); int count = loader.RunVertices(7, 100000, src, dst); - src.Skip(100000 * loader.GetVertexSize()); - dst.Skip(count * loader.GetNativeVertexDeclaration().stride); + src.Skip(100000 * loader.m_VertexSize); + dst.Skip(count * loader.m_native_vtx_decl.stride); } } -- cgit v1.2.3 From 809117102e1c8007345c48aba5eabfec9cff26ee Mon Sep 17 00:00:00 2001 From: degasus Date: Sat, 13 Dec 2014 01:51:14 +0100 Subject: VideoCommon: split VertexLoaderBase from VertexLoader --- Source/UnitTests/VideoCommon/VertexLoaderTest.cpp | 45 ++++++++++++----------- 1 file changed, 24 insertions(+), 21 deletions(-) (limited to 'Source/UnitTests/VideoCommon/VertexLoaderTest.cpp') diff --git a/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp b/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp index d1032ae6f9..601e90dcc2 100644 --- a/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp +++ b/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp @@ -2,7 +2,7 @@ #include "Common/Common.h" #include "VideoCommon/DataReader.h" -#include "VideoCommon/VertexLoader.h" +#include "VideoCommon/VertexLoaderBase.h" // Needs to be included later because it defines a TEST macro that conflicts // with a TEST method definition in x64Emitter.h. @@ -93,7 +93,7 @@ TEST_F(VertexLoaderTest, PositionDirectFloatXYZ) m_vtx_attr.g0.PosElements = 1; // XYZ m_vtx_attr.g0.PosFormat = 4; // Float - VertexLoader* loader = new VertexLoader(m_vtx_desc, m_vtx_attr); + VertexLoaderBase* loader = VertexLoaderBase::CreateVertexLoader(m_vtx_desc, m_vtx_attr); ASSERT_EQ(3 * sizeof (float), (u32)loader->m_native_vtx_decl.stride); ASSERT_EQ(3 * sizeof (float), (u32)loader->m_VertexSize); @@ -118,7 +118,7 @@ TEST_F(VertexLoaderTest, PositionDirectFloatXYZ) // Test that scale does nothing for floating point inputs. Input(1.0f); Input(2.0f); Input(4.0f); m_vtx_attr.g0.PosFrac = 1; - loader = new VertexLoader(m_vtx_desc, m_vtx_attr); + loader = VertexLoaderBase::CreateVertexLoader(m_vtx_desc, m_vtx_attr); count = loader->RunVertices(7, 1, src, dst); src.Skip(1 * loader->m_VertexSize); dst.Skip(count * loader->m_native_vtx_decl.stride); @@ -132,7 +132,7 @@ TEST_F(VertexLoaderTest, PositionDirectU16XY) m_vtx_attr.g0.PosElements = 0; // XY m_vtx_attr.g0.PosFormat = 2; // U16 - VertexLoader* loader = new VertexLoader(m_vtx_desc, m_vtx_attr); + VertexLoaderBase* loader = VertexLoaderBase::CreateVertexLoader(m_vtx_desc, m_vtx_attr); ASSERT_EQ(3 * sizeof (float), (u32)loader->m_native_vtx_decl.stride); ASSERT_EQ(2 * sizeof (u16), (u32)loader->m_VertexSize); @@ -159,7 +159,7 @@ TEST_F(VertexLoaderTest, PositionDirectU16XY) // Test that scale works on U16 inputs. Input(42); Input(24); m_vtx_attr.g0.PosFrac = 1; - loader = new VertexLoader(m_vtx_desc, m_vtx_attr); + loader = VertexLoaderBase::CreateVertexLoader(m_vtx_desc, m_vtx_attr); count = loader->RunVertices(7, 1, src, dst); src.Skip(1 * loader->m_VertexSize); dst.Skip(count * loader->m_native_vtx_decl.stride); @@ -173,18 +173,19 @@ TEST_F(VertexLoaderTest, PositionDirectFloatXYZSpeed) m_vtx_attr.g0.PosElements = 1; // XYZ m_vtx_attr.g0.PosFormat = 4; // Float - VertexLoader loader(m_vtx_desc, m_vtx_attr); + VertexLoaderBase* loader = VertexLoaderBase::CreateVertexLoader(m_vtx_desc, m_vtx_attr); - ASSERT_EQ(3 * sizeof (float), (u32)loader.m_native_vtx_decl.stride); - ASSERT_EQ(3 * sizeof (float), (u32)loader.m_VertexSize); + ASSERT_EQ(3 * sizeof (float), (u32)loader->m_native_vtx_decl.stride); + ASSERT_EQ(3 * sizeof (float), (u32)loader->m_VertexSize); for (int i = 0; i < 1000; ++i) { ResetPointers(); - int count = loader.RunVertices(7, 100000, src, dst); - src.Skip(100000 * loader.m_VertexSize); - dst.Skip(count * loader.m_native_vtx_decl.stride); + int count = loader->RunVertices(7, 100000, src, dst); + src.Skip(100000 * loader->m_VertexSize); + dst.Skip(count * loader->m_native_vtx_decl.stride); } + delete loader; } TEST_F(VertexLoaderTest, PositionDirectU16XYSpeed) @@ -193,18 +194,19 @@ TEST_F(VertexLoaderTest, PositionDirectU16XYSpeed) m_vtx_attr.g0.PosElements = 0; // XY m_vtx_attr.g0.PosFormat = 2; // U16 - VertexLoader loader(m_vtx_desc, m_vtx_attr); + VertexLoaderBase* loader = VertexLoaderBase::CreateVertexLoader(m_vtx_desc, m_vtx_attr); - ASSERT_EQ(3 * sizeof (float), (u32)loader.m_native_vtx_decl.stride); - ASSERT_EQ(2 * sizeof (u16), (u32)loader.m_VertexSize); + ASSERT_EQ(3 * sizeof (float), (u32)loader->m_native_vtx_decl.stride); + ASSERT_EQ(2 * sizeof (u16), (u32)loader->m_VertexSize); for (int i = 0; i < 1000; ++i) { ResetPointers(); - int count = loader.RunVertices(7, 100000, src, dst); - src.Skip(100000 * loader.m_VertexSize); - dst.Skip(count * loader.m_native_vtx_decl.stride); + int count = loader->RunVertices(7, 100000, src, dst); + src.Skip(100000 * loader->m_VertexSize); + dst.Skip(count * loader->m_native_vtx_decl.stride); } + delete loader; } TEST_F(VertexLoaderTest, LargeFloatVertexSpeed) @@ -257,15 +259,16 @@ TEST_F(VertexLoaderTest, LargeFloatVertexSpeed) m_vtx_attr.g2.Tex7CoordElements = 1; // ST m_vtx_attr.g2.Tex7CoordFormat = 4; // Float - VertexLoader loader(m_vtx_desc, m_vtx_attr); + VertexLoaderBase* loader = VertexLoaderBase::CreateVertexLoader(m_vtx_desc, m_vtx_attr); // This test is only done 100x in a row since it's ~20x slower using the // current vertex loader implementation. for (int i = 0; i < 100; ++i) { ResetPointers(); - int count = loader.RunVertices(7, 100000, src, dst); - src.Skip(100000 * loader.m_VertexSize); - dst.Skip(count * loader.m_native_vtx_decl.stride); + int count = loader->RunVertices(7, 100000, src, dst); + src.Skip(100000 * loader->m_VertexSize); + dst.Skip(count * loader->m_native_vtx_decl.stride); } + delete loader; } -- cgit v1.2.3