From 729498ab41c75240909611e4d002c86e488f9465 Mon Sep 17 00:00:00 2001 From: Pokechu22 Date: Thu, 14 Jul 2022 15:54:32 -0700 Subject: [PATCH] VertexLoaderTest: Add DirectAllComponents We have one that does a similar thing, but only to measure speed and uses indices. This one verifies accuracy (and uses the largest possible input size by using direct components). --- .../VideoCommon/VertexLoaderTest.cpp | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) diff --git a/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp b/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp index b12dad1661..13a20df3e2 100644 --- a/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp +++ b/Source/UnitTests/VideoCommon/VertexLoaderTest.cpp @@ -366,3 +366,167 @@ TEST_F(VertexLoaderTest, LargeFloatVertexSpeed) for (int i = 0; i < 100; ++i) RunVertices(100000); } + +TEST_F(VertexLoaderTest, DirectAllComponents) +{ + m_vtx_desc.low.PosMatIdx = 1; + m_vtx_desc.low.Tex0MatIdx = 1; + m_vtx_desc.low.Tex1MatIdx = 1; + m_vtx_desc.low.Tex2MatIdx = 1; + m_vtx_desc.low.Tex3MatIdx = 1; + m_vtx_desc.low.Tex4MatIdx = 1; + m_vtx_desc.low.Tex5MatIdx = 1; + m_vtx_desc.low.Tex6MatIdx = 1; + m_vtx_desc.low.Tex7MatIdx = 1; + m_vtx_desc.low.Position = VertexComponentFormat::Direct; + m_vtx_desc.low.Normal = VertexComponentFormat::Direct; + m_vtx_desc.low.Color0 = VertexComponentFormat::Direct; + m_vtx_desc.low.Color1 = VertexComponentFormat::Direct; + m_vtx_desc.high.Tex0Coord = VertexComponentFormat::Direct; + m_vtx_desc.high.Tex1Coord = VertexComponentFormat::Direct; + m_vtx_desc.high.Tex2Coord = VertexComponentFormat::Direct; + m_vtx_desc.high.Tex3Coord = VertexComponentFormat::Direct; + m_vtx_desc.high.Tex4Coord = VertexComponentFormat::Direct; + m_vtx_desc.high.Tex5Coord = VertexComponentFormat::Direct; + m_vtx_desc.high.Tex6Coord = VertexComponentFormat::Direct; + m_vtx_desc.high.Tex7Coord = VertexComponentFormat::Direct; + + m_vtx_attr.g0.PosElements = CoordComponentCount::XYZ; + m_vtx_attr.g0.PosFormat = ComponentFormat::Float; + m_vtx_attr.g0.NormalElements = NormalComponentCount::NTB; + m_vtx_attr.g0.NormalFormat = ComponentFormat::Float; + m_vtx_attr.g0.Color0Elements = ColorComponentCount::RGBA; + m_vtx_attr.g0.Color0Comp = ColorFormat::RGBA8888; + m_vtx_attr.g0.Color1Elements = ColorComponentCount::RGBA; + m_vtx_attr.g0.Color1Comp = ColorFormat::RGBA8888; + m_vtx_attr.g0.Tex0CoordElements = TexComponentCount::ST; + m_vtx_attr.g0.Tex0CoordFormat = ComponentFormat::Float; + m_vtx_attr.g1.Tex1CoordElements = TexComponentCount::ST; + m_vtx_attr.g1.Tex1CoordFormat = ComponentFormat::Float; + m_vtx_attr.g1.Tex2CoordElements = TexComponentCount::ST; + m_vtx_attr.g1.Tex2CoordFormat = ComponentFormat::Float; + m_vtx_attr.g1.Tex3CoordElements = TexComponentCount::ST; + m_vtx_attr.g1.Tex3CoordFormat = ComponentFormat::Float; + m_vtx_attr.g1.Tex4CoordElements = TexComponentCount::ST; + m_vtx_attr.g1.Tex4CoordFormat = ComponentFormat::Float; + m_vtx_attr.g2.Tex5CoordElements = TexComponentCount::ST; + m_vtx_attr.g2.Tex5CoordFormat = ComponentFormat::Float; + m_vtx_attr.g2.Tex6CoordElements = TexComponentCount::ST; + m_vtx_attr.g2.Tex6CoordFormat = ComponentFormat::Float; + m_vtx_attr.g2.Tex7CoordElements = TexComponentCount::ST; + m_vtx_attr.g2.Tex7CoordFormat = ComponentFormat::Float; + + CreateAndCheckSizes(129, 39 * sizeof(float)); + + // Pos matrix idx + Input(20); + // Tex matrix idx + Input(0); + Input(1); + Input(2); + Input(3); + Input(4); + Input(5); + Input(6); + Input(7); + // Position + Input(-1.0f); + Input(-2.0f); + Input(-3.0f); + // Normal + Input(-4.0f); + Input(-5.0f); + Input(-6.0f); + // Tangent + Input(-7.0f); + Input(-8.0f); + Input(-9.0f); + // Binormal + Input(-10.0f); + Input(-11.0f); + Input(-12.0f); + // Colors + Input(0x01234567); + Input(0x89abcdef); + // Texture coordinates + Input(0.1f); + Input(-0.9f); + Input(1.1f); + Input(-1.9f); + Input(2.1f); + Input(-2.9f); + Input(3.1f); + Input(-3.9f); + Input(4.1f); + Input(-4.9f); + Input(5.1f); + Input(-5.9f); + Input(6.1f); + Input(-6.9f); + Input(7.1f); + Input(-7.9f); + + RunVertices(1); + + // Position matrix + ASSERT_EQ(m_loader->m_native_vtx_decl.posmtx.offset, 0 * sizeof(float)); + EXPECT_EQ((m_dst.Read()), 20u); + // Position + ASSERT_EQ(m_loader->m_native_vtx_decl.position.offset, 1 * sizeof(float)); + ExpectOut(-1.0f); + ExpectOut(-2.0f); + ExpectOut(-3.0f); + // Normal + ASSERT_EQ(m_loader->m_native_vtx_decl.normals[0].offset, 4 * sizeof(float)); + ExpectOut(-4.0f); + ExpectOut(-5.0f); + ExpectOut(-6.0f); + // Tangent + ASSERT_EQ(m_loader->m_native_vtx_decl.normals[1].offset, 7 * sizeof(float)); + ExpectOut(-7.0f); + ExpectOut(-8.0f); + ExpectOut(-9.0f); + // Binormal + ASSERT_EQ(m_loader->m_native_vtx_decl.normals[2].offset, 10 * sizeof(float)); + ExpectOut(-10.0f); + ExpectOut(-11.0f); + ExpectOut(-12.0f); + // Colors + ASSERT_EQ(m_loader->m_native_vtx_decl.colors[0].offset, 13 * sizeof(float)); + EXPECT_EQ((m_dst.Read()), 0x01234567u); + ASSERT_EQ(m_loader->m_native_vtx_decl.colors[1].offset, 14 * sizeof(float)); + EXPECT_EQ((m_dst.Read()), 0x89abcdefu); + // Texture coordinates and matrices (interleaved) + ASSERT_EQ(m_loader->m_native_vtx_decl.texcoords[0].offset, 15 * sizeof(float)); + ExpectOut(0.1f); // S + ExpectOut(-0.9f); // T + ExpectOut(0.0f); // matrix (yes, a float) + ASSERT_EQ(m_loader->m_native_vtx_decl.texcoords[1].offset, 18 * sizeof(float)); + ExpectOut(1.1f); + ExpectOut(-1.9f); + ExpectOut(1.0f); + ASSERT_EQ(m_loader->m_native_vtx_decl.texcoords[2].offset, 21 * sizeof(float)); + ExpectOut(2.1f); + ExpectOut(-2.9f); + ExpectOut(2.0f); + ASSERT_EQ(m_loader->m_native_vtx_decl.texcoords[3].offset, 24 * sizeof(float)); + ExpectOut(3.1f); + ExpectOut(-3.9f); + ExpectOut(3.0f); + ASSERT_EQ(m_loader->m_native_vtx_decl.texcoords[4].offset, 27 * sizeof(float)); + ExpectOut(4.1f); + ExpectOut(-4.9f); + ExpectOut(4.0f); + ASSERT_EQ(m_loader->m_native_vtx_decl.texcoords[5].offset, 30 * sizeof(float)); + ExpectOut(5.1f); + ExpectOut(-5.9f); + ExpectOut(5.0f); + ASSERT_EQ(m_loader->m_native_vtx_decl.texcoords[6].offset, 33 * sizeof(float)); + ExpectOut(6.1f); + ExpectOut(-6.9f); + ExpectOut(6.0f); + ASSERT_EQ(m_loader->m_native_vtx_decl.texcoords[7].offset, 36 * sizeof(float)); + ExpectOut(7.1f); + ExpectOut(-7.9f); + ExpectOut(7.0f); +}