summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-12-23 02:57:50 +0300
committerAndrei Karas <akaras@inbox.ru>2016-12-23 02:57:50 +0300
commit99f285c3b2dd15f2167b540c6027c7be2d73f639 (patch)
treed23de60b2dcd6cd7cc7886b50f8311566506eec1
parent4dcf9c8633315ce7ee16a23d165861de7e319922 (diff)
downloadplus-99f285c3b2dd15f2167b540c6027c7be2d73f639.tar.gz
plus-99f285c3b2dd15f2167b540c6027c7be2d73f639.tar.bz2
plus-99f285c3b2dd15f2167b540c6027c7be2d73f639.tar.xz
plus-99f285c3b2dd15f2167b540c6027c7be2d73f639.zip
Add unit tests for separate sse2 and avx2 dyes.
Fix sse2 dyes.
-rw-r--r--src/resources/dye/dye_unittest.cc808
-rw-r--r--src/resources/dye/dyepalette_replaceaoglcolor_sse2.hpp2
-rw-r--r--src/resources/dye/dyepalette_replacescolor_sse2.hpp2
-rw-r--r--src/resources/dye/dyepalette_replacesoglcolor_sse2.hpp2
4 files changed, 811 insertions, 3 deletions
diff --git a/src/resources/dye/dye_unittest.cc b/src/resources/dye/dye_unittest.cc
index c06d0aacb..0218c0e9a 100644
--- a/src/resources/dye/dye_unittest.cc
+++ b/src/resources/dye/dye_unittest.cc
@@ -227,6 +227,52 @@ TEST_CASE("Dye replaceSOGLColor 8 1 simd")
REQUIRE(data[7] == buildHex(0x60, 0x02, 0xff, 0x02));
}
+TEST_CASE("Dye replaceSOGLColor 8 1 sse2")
+{
+ DyePalette palette("#01ff02,030411,01ee02,010203", 6);
+ uint32_t data[8];
+ data[0] = buildHex(0x20, 0x02, 0xff, 0x01);
+ data[1] = buildHex(0x30, 0x02, 0xff, 0x01);
+ data[2] = buildHex(0x40, 0x02, 0xff, 0x01);
+ data[3] = buildHex(0x50, 0x02, 0xff, 0x02);
+ data[4] = buildHex(0x20, 0x02, 0xff, 0x01);
+ data[5] = buildHex(0x30, 0x02, 0xff, 0x01);
+ data[6] = buildHex(0x40, 0x02, 0xff, 0x01);
+ data[7] = buildHex(0x60, 0x02, 0xff, 0x02);
+ palette.replaceSOGLColorSse2(&data[0], 8);
+ REQUIRE(data[0] == buildHex(0x20, 0x11, 0x04, 0x03));
+ REQUIRE(data[1] == buildHex(0x30, 0x11, 0x04, 0x03));
+ REQUIRE(data[2] == buildHex(0x40, 0x11, 0x04, 0x03));
+ REQUIRE(data[3] == buildHex(0x50, 0x02, 0xff, 0x02));
+ REQUIRE(data[4] == buildHex(0x20, 0x11, 0x04, 0x03));
+ REQUIRE(data[5] == buildHex(0x30, 0x11, 0x04, 0x03));
+ REQUIRE(data[6] == buildHex(0x40, 0x11, 0x04, 0x03));
+ REQUIRE(data[7] == buildHex(0x60, 0x02, 0xff, 0x02));
+}
+
+TEST_CASE("Dye replaceSOGLColor 8 1 avx2")
+{
+ DyePalette palette("#01ff02,030411,01ee02,010203", 6);
+ uint32_t data[8];
+ data[0] = buildHex(0x20, 0x02, 0xff, 0x01);
+ data[1] = buildHex(0x30, 0x02, 0xff, 0x01);
+ data[2] = buildHex(0x40, 0x02, 0xff, 0x01);
+ data[3] = buildHex(0x50, 0x02, 0xff, 0x02);
+ data[4] = buildHex(0x20, 0x02, 0xff, 0x01);
+ data[5] = buildHex(0x30, 0x02, 0xff, 0x01);
+ data[6] = buildHex(0x40, 0x02, 0xff, 0x01);
+ data[7] = buildHex(0x60, 0x02, 0xff, 0x02);
+ palette.replaceSOGLColorAvx2(&data[0], 8);
+ REQUIRE(data[0] == buildHex(0x20, 0x11, 0x04, 0x03));
+ REQUIRE(data[1] == buildHex(0x30, 0x11, 0x04, 0x03));
+ REQUIRE(data[2] == buildHex(0x40, 0x11, 0x04, 0x03));
+ REQUIRE(data[3] == buildHex(0x50, 0x02, 0xff, 0x02));
+ REQUIRE(data[4] == buildHex(0x20, 0x11, 0x04, 0x03));
+ REQUIRE(data[5] == buildHex(0x30, 0x11, 0x04, 0x03));
+ REQUIRE(data[6] == buildHex(0x40, 0x11, 0x04, 0x03));
+ REQUIRE(data[7] == buildHex(0x60, 0x02, 0xff, 0x02));
+}
+
TEST_CASE("Dye replaceAOGLColor 1 1")
{
@@ -402,6 +448,52 @@ TEST_CASE("Dye replaceAOGLColor 8 1 simd")
REQUIRE(data[6] == buildHex(0x41, 0xe0, 0x00, 0x01));
REQUIRE(data[7] == buildHex(0xff, 0x30, 0x20, 0x10));
}
+
+TEST_CASE("Dye replaceAOGLColor 8 1 sse2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[8];
+ data[0] = buildHex(0x40, 0xee, 0x00, 0x01);
+ data[1] = buildHex(0x40, 0xee, 0x00, 0x01);
+ data[2] = buildHex(0x41, 0xee, 0x00, 0x01);
+ data[3] = buildHex(0x40, 0xee, 0x00, 0x01);
+ data[4] = buildHex(0x40, 0xee, 0x00, 0x01);
+ data[5] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[6] = buildHex(0x41, 0xe0, 0x00, 0x01);
+ data[7] = buildHex(0x40, 0xee, 0x00, 0x01);
+ palette.replaceAOGLColorSse2(&data[0], 8);
+ REQUIRE(data[0] == buildHex(0xff, 0x30, 0x20, 0x10));
+ REQUIRE(data[1] == buildHex(0xff, 0x30, 0x20, 0x10));
+ REQUIRE(data[2] == buildHex(0x41, 0xee, 0x00, 0x01));
+ REQUIRE(data[3] == buildHex(0xff, 0x30, 0x20, 0x10));
+ REQUIRE(data[4] == buildHex(0xff, 0x30, 0x20, 0x10));
+ REQUIRE(data[5] == buildHex(0x00, 0x00, 0x00, 0x20));
+ REQUIRE(data[6] == buildHex(0x41, 0xe0, 0x00, 0x01));
+ REQUIRE(data[7] == buildHex(0xff, 0x30, 0x20, 0x10));
+}
+
+TEST_CASE("Dye replaceAOGLColor 8 1 avx2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[8];
+ data[0] = buildHex(0x40, 0xee, 0x00, 0x01);
+ data[1] = buildHex(0x40, 0xee, 0x00, 0x01);
+ data[2] = buildHex(0x41, 0xee, 0x00, 0x01);
+ data[3] = buildHex(0x40, 0xee, 0x00, 0x01);
+ data[4] = buildHex(0x40, 0xee, 0x00, 0x01);
+ data[5] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[6] = buildHex(0x41, 0xe0, 0x00, 0x01);
+ data[7] = buildHex(0x40, 0xee, 0x00, 0x01);
+ palette.replaceAOGLColorAvx2(&data[0], 8);
+ REQUIRE(data[0] == buildHex(0xff, 0x30, 0x20, 0x10));
+ REQUIRE(data[1] == buildHex(0xff, 0x30, 0x20, 0x10));
+ REQUIRE(data[2] == buildHex(0x41, 0xee, 0x00, 0x01));
+ REQUIRE(data[3] == buildHex(0xff, 0x30, 0x20, 0x10));
+ REQUIRE(data[4] == buildHex(0xff, 0x30, 0x20, 0x10));
+ REQUIRE(data[5] == buildHex(0x00, 0x00, 0x00, 0x20));
+ REQUIRE(data[6] == buildHex(0x41, 0xe0, 0x00, 0x01));
+ REQUIRE(data[7] == buildHex(0xff, 0x30, 0x20, 0x10));
+}
#endif // USE_OPENGL
@@ -942,6 +1034,364 @@ TEST_CASE("Dye replaceSColor 10 1 simd")
REQUIRE(data[9] == buildHex(0x70, 0x60, 0x50, 0x80));
}
+TEST_CASE("Dye replaceSColor 1 1 sse2")
+{
+ DyePalette palette("#00ff00,000011", 6);
+ uint32_t data[1];
+ data[0] = buildHex(0x10, 0x03, 0x02, 0x01);
+ palette.replaceSColorSse2(&data[0], 1);
+ REQUIRE(data[0] == buildHex(0x10, 0x03, 0x02, 0x01));
+}
+
+TEST_CASE("Dye replaceSColor 1 2 sse2")
+{
+ DyePalette palette("#403020,706050", 6);
+ uint32_t data[1];
+ data[0] = buildHex(0x40, 0x30, 0x20, 0x10);
+ palette.replaceSColorSse2(&data[0], 1);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+}
+
+TEST_CASE("Dye replaceSColor 1 3 sse2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[1];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ palette.replaceSColorSse2(&data[0], 1);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+}
+
+TEST_CASE("Dye replaceSColor 2 1 sse2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[2];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ palette.replaceSColorSse2(&data[0], 2);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+}
+
+TEST_CASE("Dye replaceSColor 3 1 sse2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[3];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[2] = buildHex(0xff, 0x30, 0x20, 0x30);
+ palette.replaceSColorSse2(&data[0], 3);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[2] == buildHex(0x70, 0x60, 0x50, 0x30));
+}
+
+TEST_CASE("Dye replaceSColor 4 1 sse2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[4];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[2] = buildHex(0xff, 0x40, 0x20, 0x10);
+ data[3] = buildHex(0xff, 0x30, 0x20, 0x20);
+ palette.replaceSColorSse2(&data[0], 4);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[2] == buildHex(0xff, 0x40, 0x20, 0x10));
+ REQUIRE(data[3] == buildHex(0x70, 0x60, 0x50, 0x20));
+}
+
+TEST_CASE("Dye replaceSColor 5 1 sse2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[5];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[2] = buildHex(0xff, 0x40, 0x20, 0x10);
+ data[3] = buildHex(0xff, 0x30, 0x20, 0x30);
+ data[4] = buildHex(0xff, 0x30, 0x20, 0x20);
+ palette.replaceSColorSse2(&data[0], 5);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[2] == buildHex(0xff, 0x40, 0x20, 0x10));
+ REQUIRE(data[3] == buildHex(0x70, 0x60, 0x50, 0x30));
+ REQUIRE(data[4] == buildHex(0x70, 0x60, 0x50, 0x20));
+}
+
+TEST_CASE("Dye replaceSColor 7 1 sse2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[7];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[2] = buildHex(0xff, 0x40, 0x20, 0x10);
+ data[3] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[4] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[5] = buildHex(0xff, 0x30, 0x20, 0x40);
+ data[6] = buildHex(0xff, 0x40, 0x20, 0x50);
+ palette.replaceSColorSse2(&data[0], 7);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[2] == buildHex(0xff, 0x40, 0x20, 0x10));
+ REQUIRE(data[3] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[4] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[5] == buildHex(0x70, 0x60, 0x50, 0x40));
+ REQUIRE(data[6] == buildHex(0xff, 0x40, 0x20, 0x50));
+}
+
+TEST_CASE("Dye replaceSColor 8 1 sse2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[8];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[2] = buildHex(0xff, 0x40, 0x20, 0x10);
+ data[3] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[4] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[5] = buildHex(0xff, 0x30, 0x20, 0x40);
+ data[6] = buildHex(0xff, 0x40, 0x20, 0x50);
+ data[7] = buildHex(0xff, 0x30, 0x20, 0x60);
+ palette.replaceSColorSse2(&data[0], 8);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[2] == buildHex(0xff, 0x40, 0x20, 0x10));
+ REQUIRE(data[3] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[4] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[5] == buildHex(0x70, 0x60, 0x50, 0x40));
+ REQUIRE(data[6] == buildHex(0xff, 0x40, 0x20, 0x50));
+ REQUIRE(data[7] == buildHex(0x70, 0x60, 0x50, 0x60));
+}
+
+TEST_CASE("Dye replaceSColor 9 1 sse2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[9];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[2] = buildHex(0xff, 0x40, 0x20, 0x10);
+ data[3] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[4] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[5] = buildHex(0xff, 0x30, 0x20, 0x40);
+ data[6] = buildHex(0xff, 0x40, 0x20, 0x50);
+ data[7] = buildHex(0xff, 0x30, 0x20, 0x60);
+ data[8] = buildHex(0xff, 0x30, 0x20, 0x70);
+ palette.replaceSColorSse2(&data[0], 9);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[2] == buildHex(0xff, 0x40, 0x20, 0x10));
+ REQUIRE(data[3] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[4] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[5] == buildHex(0x70, 0x60, 0x50, 0x40));
+ REQUIRE(data[6] == buildHex(0xff, 0x40, 0x20, 0x50));
+ REQUIRE(data[7] == buildHex(0x70, 0x60, 0x50, 0x60));
+ REQUIRE(data[8] == buildHex(0x70, 0x60, 0x50, 0x70));
+}
+
+TEST_CASE("Dye replaceSColor 10 1 sse2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[10];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[2] = buildHex(0xff, 0x40, 0x20, 0x10);
+ data[3] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[4] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[5] = buildHex(0xff, 0x30, 0x20, 0x40);
+ data[6] = buildHex(0xff, 0x40, 0x20, 0x50);
+ data[7] = buildHex(0xff, 0x30, 0x20, 0x60);
+ data[8] = buildHex(0x12, 0x34, 0x56, 0x70);
+ data[9] = buildHex(0xff, 0x30, 0x20, 0x80);
+ palette.replaceSColorSse2(&data[0], 10);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[2] == buildHex(0xff, 0x40, 0x20, 0x10));
+ REQUIRE(data[3] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[4] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[5] == buildHex(0x70, 0x60, 0x50, 0x40));
+ REQUIRE(data[6] == buildHex(0xff, 0x40, 0x20, 0x50));
+ REQUIRE(data[7] == buildHex(0x70, 0x60, 0x50, 0x60));
+ REQUIRE(data[8] == buildHex(0x00, 0x00, 0x00, 0x70));
+ REQUIRE(data[9] == buildHex(0x70, 0x60, 0x50, 0x80));
+}
+
+TEST_CASE("Dye replaceSColor 1 1 avx2")
+{
+ DyePalette palette("#00ff00,000011", 6);
+ uint32_t data[1];
+ data[0] = buildHex(0x10, 0x03, 0x02, 0x01);
+ palette.replaceSColorAvx2(&data[0], 1);
+ REQUIRE(data[0] == buildHex(0x10, 0x03, 0x02, 0x01));
+}
+
+TEST_CASE("Dye replaceSColor 1 2 avx2")
+{
+ DyePalette palette("#403020,706050", 6);
+ uint32_t data[1];
+ data[0] = buildHex(0x40, 0x30, 0x20, 0x10);
+ palette.replaceSColorAvx2(&data[0], 1);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+}
+
+TEST_CASE("Dye replaceSColor 1 3 avx2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[1];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ palette.replaceSColorAvx2(&data[0], 1);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+}
+
+TEST_CASE("Dye replaceSColor 2 1 avx2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[2];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ palette.replaceSColorAvx2(&data[0], 2);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+}
+
+TEST_CASE("Dye replaceSColor 3 1 avx2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[3];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[2] = buildHex(0xff, 0x30, 0x20, 0x30);
+ palette.replaceSColorAvx2(&data[0], 3);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[2] == buildHex(0x70, 0x60, 0x50, 0x30));
+}
+
+TEST_CASE("Dye replaceSColor 4 1 avx2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[4];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[2] = buildHex(0xff, 0x40, 0x20, 0x10);
+ data[3] = buildHex(0xff, 0x30, 0x20, 0x20);
+ palette.replaceSColorAvx2(&data[0], 4);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[2] == buildHex(0xff, 0x40, 0x20, 0x10));
+ REQUIRE(data[3] == buildHex(0x70, 0x60, 0x50, 0x20));
+}
+
+TEST_CASE("Dye replaceSColor 5 1 avx2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[5];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[2] = buildHex(0xff, 0x40, 0x20, 0x10);
+ data[3] = buildHex(0xff, 0x30, 0x20, 0x30);
+ data[4] = buildHex(0xff, 0x30, 0x20, 0x20);
+ palette.replaceSColorAvx2(&data[0], 5);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[2] == buildHex(0xff, 0x40, 0x20, 0x10));
+ REQUIRE(data[3] == buildHex(0x70, 0x60, 0x50, 0x30));
+ REQUIRE(data[4] == buildHex(0x70, 0x60, 0x50, 0x20));
+}
+
+TEST_CASE("Dye replaceSColor 7 1 avx2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[7];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[2] = buildHex(0xff, 0x40, 0x20, 0x10);
+ data[3] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[4] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[5] = buildHex(0xff, 0x30, 0x20, 0x40);
+ data[6] = buildHex(0xff, 0x40, 0x20, 0x50);
+ palette.replaceSColorAvx2(&data[0], 7);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[2] == buildHex(0xff, 0x40, 0x20, 0x10));
+ REQUIRE(data[3] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[4] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[5] == buildHex(0x70, 0x60, 0x50, 0x40));
+ REQUIRE(data[6] == buildHex(0xff, 0x40, 0x20, 0x50));
+}
+
+TEST_CASE("Dye replaceSColor 8 1 avx2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[8];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[2] = buildHex(0xff, 0x40, 0x20, 0x10);
+ data[3] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[4] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[5] = buildHex(0xff, 0x30, 0x20, 0x40);
+ data[6] = buildHex(0xff, 0x40, 0x20, 0x50);
+ data[7] = buildHex(0xff, 0x30, 0x20, 0x60);
+ palette.replaceSColorAvx2(&data[0], 8);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[2] == buildHex(0xff, 0x40, 0x20, 0x10));
+ REQUIRE(data[3] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[4] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[5] == buildHex(0x70, 0x60, 0x50, 0x40));
+ REQUIRE(data[6] == buildHex(0xff, 0x40, 0x20, 0x50));
+ REQUIRE(data[7] == buildHex(0x70, 0x60, 0x50, 0x60));
+}
+
+TEST_CASE("Dye replaceSColor 9 1 avx2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[9];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[2] = buildHex(0xff, 0x40, 0x20, 0x10);
+ data[3] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[4] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[5] = buildHex(0xff, 0x30, 0x20, 0x40);
+ data[6] = buildHex(0xff, 0x40, 0x20, 0x50);
+ data[7] = buildHex(0xff, 0x30, 0x20, 0x60);
+ data[8] = buildHex(0xff, 0x30, 0x20, 0x70);
+ palette.replaceSColorAvx2(&data[0], 9);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[2] == buildHex(0xff, 0x40, 0x20, 0x10));
+ REQUIRE(data[3] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[4] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[5] == buildHex(0x70, 0x60, 0x50, 0x40));
+ REQUIRE(data[6] == buildHex(0xff, 0x40, 0x20, 0x50));
+ REQUIRE(data[7] == buildHex(0x70, 0x60, 0x50, 0x60));
+ REQUIRE(data[8] == buildHex(0x70, 0x60, 0x50, 0x70));
+}
+
+TEST_CASE("Dye replaceSColor 10 1 avx2")
+{
+ DyePalette palette("#123456,000000,ff3020,706050", 6);
+ uint32_t data[10];
+ data[0] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[1] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[2] = buildHex(0xff, 0x40, 0x20, 0x10);
+ data[3] = buildHex(0xff, 0x30, 0x20, 0x20);
+ data[4] = buildHex(0xff, 0x30, 0x20, 0x10);
+ data[5] = buildHex(0xff, 0x30, 0x20, 0x40);
+ data[6] = buildHex(0xff, 0x40, 0x20, 0x50);
+ data[7] = buildHex(0xff, 0x30, 0x20, 0x60);
+ data[8] = buildHex(0x12, 0x34, 0x56, 0x70);
+ data[9] = buildHex(0xff, 0x30, 0x20, 0x80);
+ palette.replaceSColorAvx2(&data[0], 10);
+ REQUIRE(data[0] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[1] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[2] == buildHex(0xff, 0x40, 0x20, 0x10));
+ REQUIRE(data[3] == buildHex(0x70, 0x60, 0x50, 0x20));
+ REQUIRE(data[4] == buildHex(0x70, 0x60, 0x50, 0x10));
+ REQUIRE(data[5] == buildHex(0x70, 0x60, 0x50, 0x40));
+ REQUIRE(data[6] == buildHex(0xff, 0x40, 0x20, 0x50));
+ REQUIRE(data[7] == buildHex(0x70, 0x60, 0x50, 0x60));
+ REQUIRE(data[8] == buildHex(0x00, 0x00, 0x00, 0x70));
+ REQUIRE(data[9] == buildHex(0x70, 0x60, 0x50, 0x80));
+}
+
TEST_CASE("Dye replaceAColor 1 1")
{
@@ -1480,6 +1930,364 @@ TEST_CASE("Dye replaceAColor 10 1 simd")
REQUIRE(data[9] == buildHex(0x10, 0x20, 0x30, 0xff));
}
+TEST_CASE("Dye replaceAColor 1 1 sse2")
+{
+ DyePalette palette("#00ff0010,00001120", 8);
+ uint32_t data[1];
+ data[0] = buildHex(0x10, 0x03, 0x02, 0x01);
+ palette.replaceAColorSse2(&data[0], 1);
+ REQUIRE(data[0] == buildHex(0x10, 0x03, 0x02, 0x01));
+}
+
+TEST_CASE("Dye replaceAColor 1 2 sse2")
+{
+ DyePalette palette("#02ff0120,040311ff", 8);
+ uint32_t data[1];
+ data[0] = buildHex(0x02, 0xff, 0x01, 0x20);
+ palette.replaceAColorSse2(&data[0], 1);
+ REQUIRE(data[0] == buildHex(0x04, 0x03, 0x11, 0xff));
+}
+
+TEST_CASE("Dye replaceAColor 1 3 sse2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[1];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ palette.replaceAColorSse2(&data[0], 1);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+}
+
+TEST_CASE("Dye replaceAColor 2 1 sse2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[2];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x40, 0x40, 0x40, 0x40);
+ palette.replaceAColorSse2(&data[0], 2);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x20, 0x00, 0x00, 0x00));
+}
+
+TEST_CASE("Dye replaceAColor 3 1 sse2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[3];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x50, 0x40, 0x40, 0x30);
+ data[2] = buildHex(0x40, 0x40, 0x40, 0x40);
+ palette.replaceAColorSse2(&data[0], 3);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x50, 0x40, 0x40, 0x30));
+ REQUIRE(data[2] == buildHex(0x20, 0x00, 0x00, 0x00));
+}
+
+TEST_CASE("Dye replaceAColor 4 1 sse2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[4];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[2] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[3] = buildHex(0x40, 0x40, 0x40, 0x40);
+ palette.replaceAColorSse2(&data[0], 4);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[2] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[3] == buildHex(0x20, 0x00, 0x00, 0x00));
+}
+
+TEST_CASE("Dye replaceAColor 5 1 sse2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[5];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[2] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[3] = buildHex(0x50, 0x40, 0x40, 0x60);
+ data[4] = buildHex(0x40, 0x40, 0x40, 0x40);
+ palette.replaceAColorSse2(&data[0], 5);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[2] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[3] == buildHex(0x50, 0x40, 0x40, 0x60));
+ REQUIRE(data[4] == buildHex(0x20, 0x00, 0x00, 0x00));
+}
+
+TEST_CASE("Dye replaceAColor 7 1 sse2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[7];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[2] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[3] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[4] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[5] = buildHex(0x40, 0x40, 0x41, 0x40);
+ data[6] = buildHex(0x01, 0x00, 0xee, 0x50);
+ palette.replaceAColorSse2(&data[0], 7);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[2] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[3] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[4] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[5] == buildHex(0x40, 0x40, 0x41, 0x40));
+ REQUIRE(data[6] == buildHex(0x01, 0x00, 0xee, 0x50));
+}
+
+TEST_CASE("Dye replaceAColor 8 1 sse2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[8];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[2] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[3] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[4] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[5] = buildHex(0x40, 0x40, 0x41, 0x40);
+ data[6] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[7] = buildHex(0x40, 0x40, 0x40, 0x40);
+ palette.replaceAColorSse2(&data[0], 8);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[2] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[3] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[4] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[5] == buildHex(0x40, 0x40, 0x41, 0x40));
+ REQUIRE(data[6] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[7] == buildHex(0x20, 0x00, 0x00, 0x00));
+}
+
+TEST_CASE("Dye replaceAColor 9 1 sse2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[9];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[2] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[3] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[4] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[5] = buildHex(0x40, 0x40, 0x41, 0x40);
+ data[6] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[7] = buildHex(0x02, 0x40, 0x40, 0x40);
+ data[8] = buildHex(0x40, 0x40, 0x40, 0x40);
+ palette.replaceAColorSse2(&data[0], 9);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[2] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[3] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[4] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[5] == buildHex(0x40, 0x40, 0x41, 0x40));
+ REQUIRE(data[6] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[7] == buildHex(0x02, 0x40, 0x40, 0x40));
+ REQUIRE(data[8] == buildHex(0x20, 0x00, 0x00, 0x00));
+}
+
+TEST_CASE("Dye replaceAColor 10 1 sse2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[10];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[2] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[3] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[4] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[5] = buildHex(0x40, 0x40, 0x41, 0x40);
+ data[6] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[7] = buildHex(0x02, 0x40, 0x40, 0x40);
+ data[8] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[9] = buildHex(0x01, 0x00, 0xee, 0x40);
+ palette.replaceAColorSse2(&data[0], 10);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[2] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[3] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[4] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[5] == buildHex(0x40, 0x40, 0x41, 0x40));
+ REQUIRE(data[6] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[7] == buildHex(0x02, 0x40, 0x40, 0x40));
+ REQUIRE(data[8] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[9] == buildHex(0x10, 0x20, 0x30, 0xff));
+}
+
+TEST_CASE("Dye replaceAColor 1 1 avx2")
+{
+ DyePalette palette("#00ff0010,00001120", 8);
+ uint32_t data[1];
+ data[0] = buildHex(0x10, 0x03, 0x02, 0x01);
+ palette.replaceAColorAvx2(&data[0], 1);
+ REQUIRE(data[0] == buildHex(0x10, 0x03, 0x02, 0x01));
+}
+
+TEST_CASE("Dye replaceAColor 1 2 avx2")
+{
+ DyePalette palette("#02ff0120,040311ff", 8);
+ uint32_t data[1];
+ data[0] = buildHex(0x02, 0xff, 0x01, 0x20);
+ palette.replaceAColorAvx2(&data[0], 1);
+ REQUIRE(data[0] == buildHex(0x04, 0x03, 0x11, 0xff));
+}
+
+TEST_CASE("Dye replaceAColor 1 3 avx2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[1];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ palette.replaceAColorAvx2(&data[0], 1);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+}
+
+TEST_CASE("Dye replaceAColor 2 1 avx2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[2];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x40, 0x40, 0x40, 0x40);
+ palette.replaceAColorAvx2(&data[0], 2);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x20, 0x00, 0x00, 0x00));
+}
+
+TEST_CASE("Dye replaceAColor 3 1 avx2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[3];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x50, 0x40, 0x40, 0x30);
+ data[2] = buildHex(0x40, 0x40, 0x40, 0x40);
+ palette.replaceAColorAvx2(&data[0], 3);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x50, 0x40, 0x40, 0x30));
+ REQUIRE(data[2] == buildHex(0x20, 0x00, 0x00, 0x00));
+}
+
+TEST_CASE("Dye replaceAColor 4 1 avx2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[4];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[2] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[3] = buildHex(0x40, 0x40, 0x40, 0x40);
+ palette.replaceAColorAvx2(&data[0], 4);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[2] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[3] == buildHex(0x20, 0x00, 0x00, 0x00));
+}
+
+TEST_CASE("Dye replaceAColor 5 1 avx2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[5];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[2] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[3] = buildHex(0x50, 0x40, 0x40, 0x60);
+ data[4] = buildHex(0x40, 0x40, 0x40, 0x40);
+ palette.replaceAColorAvx2(&data[0], 5);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[2] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[3] == buildHex(0x50, 0x40, 0x40, 0x60));
+ REQUIRE(data[4] == buildHex(0x20, 0x00, 0x00, 0x00));
+}
+
+TEST_CASE("Dye replaceAColor 7 1 avx2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[7];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[2] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[3] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[4] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[5] = buildHex(0x40, 0x40, 0x41, 0x40);
+ data[6] = buildHex(0x01, 0x00, 0xee, 0x50);
+ palette.replaceAColorAvx2(&data[0], 7);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[2] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[3] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[4] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[5] == buildHex(0x40, 0x40, 0x41, 0x40));
+ REQUIRE(data[6] == buildHex(0x01, 0x00, 0xee, 0x50));
+}
+
+TEST_CASE("Dye replaceAColor 8 1 avx2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[8];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[2] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[3] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[4] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[5] = buildHex(0x40, 0x40, 0x41, 0x40);
+ data[6] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[7] = buildHex(0x40, 0x40, 0x40, 0x40);
+ palette.replaceAColorAvx2(&data[0], 8);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[2] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[3] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[4] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[5] == buildHex(0x40, 0x40, 0x41, 0x40));
+ REQUIRE(data[6] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[7] == buildHex(0x20, 0x00, 0x00, 0x00));
+}
+
+TEST_CASE("Dye replaceAColor 9 1 avx2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[9];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[2] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[3] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[4] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[5] = buildHex(0x40, 0x40, 0x41, 0x40);
+ data[6] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[7] = buildHex(0x02, 0x40, 0x40, 0x40);
+ data[8] = buildHex(0x40, 0x40, 0x40, 0x40);
+ palette.replaceAColorAvx2(&data[0], 9);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[2] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[3] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[4] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[5] == buildHex(0x40, 0x40, 0x41, 0x40));
+ REQUIRE(data[6] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[7] == buildHex(0x02, 0x40, 0x40, 0x40));
+ REQUIRE(data[8] == buildHex(0x20, 0x00, 0x00, 0x00));
+}
+
+TEST_CASE("Dye replaceAColor 10 1 avx2")
+{
+ DyePalette palette("#40404040,20000000,0100ee40,102030ff", 8);
+ uint32_t data[10];
+ data[0] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[1] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[2] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[3] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[4] = buildHex(0x01, 0x00, 0xee, 0x40);
+ data[5] = buildHex(0x40, 0x40, 0x41, 0x40);
+ data[6] = buildHex(0x01, 0x00, 0xee, 0x50);
+ data[7] = buildHex(0x02, 0x40, 0x40, 0x40);
+ data[8] = buildHex(0x40, 0x40, 0x40, 0x40);
+ data[9] = buildHex(0x01, 0x00, 0xee, 0x40);
+ palette.replaceAColorAvx2(&data[0], 10);
+ REQUIRE(data[0] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[1] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[2] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[3] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[4] == buildHex(0x10, 0x20, 0x30, 0xff));
+ REQUIRE(data[5] == buildHex(0x40, 0x40, 0x41, 0x40));
+ REQUIRE(data[6] == buildHex(0x01, 0x00, 0xee, 0x50));
+ REQUIRE(data[7] == buildHex(0x02, 0x40, 0x40, 0x40));
+ REQUIRE(data[8] == buildHex(0x20, 0x00, 0x00, 0x00));
+ REQUIRE(data[9] == buildHex(0x10, 0x20, 0x30, 0xff));
+}
+
TEST_CASE("Dye normalDye 1")
{
diff --git a/src/resources/dye/dyepalette_replaceaoglcolor_sse2.hpp b/src/resources/dye/dyepalette_replaceaoglcolor_sse2.hpp
index 44485093d..24c15b506 100644
--- a/src/resources/dye/dyepalette_replaceaoglcolor_sse2.hpp
+++ b/src/resources/dye/dyepalette_replaceaoglcolor_sse2.hpp
@@ -27,7 +27,7 @@
if (sz % 2)
-- it_end;
- for (int ptr = 0; ptr < bufSize; ptr += 8)
+ for (int ptr = 0; ptr < bufSize; ptr += 4)
{
// __m128i base = _mm_load_si128(reinterpret_cast<__m128i*>(
// &pixels[ptr]));
diff --git a/src/resources/dye/dyepalette_replacescolor_sse2.hpp b/src/resources/dye/dyepalette_replacescolor_sse2.hpp
index 2a232d3ef..437a05ff3 100644
--- a/src/resources/dye/dyepalette_replacescolor_sse2.hpp
+++ b/src/resources/dye/dyepalette_replacescolor_sse2.hpp
@@ -27,7 +27,7 @@
const int mod = bufSize % 8;
const int bufEnd = bufSize - mod;
- for (int ptr = 0; ptr < bufEnd; ptr += 8)
+ for (int ptr = 0; ptr < bufEnd; ptr += 4)
{
__m128i mask = _mm_set1_epi32(0xffffff00);
// __m128i base = _mm_load_si128(reinterpret_cast<__m128i*>(pixels));
diff --git a/src/resources/dye/dyepalette_replacesoglcolor_sse2.hpp b/src/resources/dye/dyepalette_replacesoglcolor_sse2.hpp
index 7228ed37c..27be27c16 100644
--- a/src/resources/dye/dyepalette_replacesoglcolor_sse2.hpp
+++ b/src/resources/dye/dyepalette_replacesoglcolor_sse2.hpp
@@ -25,7 +25,7 @@
if (sz % 2)
-- it_end;
- for (int ptr = 0; ptr < bufSize; ptr += 8)
+ for (int ptr = 0; ptr < bufSize; ptr += 4)
{
__m128i mask = _mm_set1_epi32(0x00ffffff);
// __m128i base = _mm_load_si128(reinterpret_cast<__m128i*>(