summaryrefslogtreecommitdiffstats
path: root/tests/benchmarks/gui
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-02-26 16:53:24 +0100
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-02-29 19:39:27 +0000
commit1dd0c4bf1af1c90fde1449a81d41acbc62cf1934 (patch)
treeba289b9d840d327879a8399bb703e64440a96402 /tests/benchmarks/gui
parent31a880f1f37412abf930bb7427c8538e9d09e765 (diff)
SSSE3 optimized store of 24-bit formats
Using shuffle and align storing our quint24 format can be done much faster. This in particular improves conversions to RGB888. Change-Id: I179748706a33a43fd6f60f5c40287317418c8867 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
Diffstat (limited to 'tests/benchmarks/gui')
-rw-r--r--tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp44
1 files changed, 32 insertions, 12 deletions
diff --git a/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp b/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp
index f631688870..31c5520b55 100644
--- a/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp
+++ b/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp
@@ -90,10 +90,8 @@ void tst_QImageConversion::convertRgb888ToRgb32()
QFETCH(QImage, inputImage);
QBENCHMARK {
- volatile QImage output = inputImage.convertToFormat(QImage::Format_RGB32);
- // we need the volatile and the following to make sure the compiler does not do
- // anything stupid :)
- (void)output;
+ QImage output = inputImage.convertToFormat(QImage::Format_RGB32);
+ output.constBits();
}
}
@@ -107,10 +105,8 @@ void tst_QImageConversion::convertRgb888ToRgbx8888()
QFETCH(QImage, inputImage);
QBENCHMARK {
- volatile QImage output = inputImage.convertToFormat(QImage::Format_RGBX8888);
- // we need the volatile and the following to make sure the compiler does not do
- // anything stupid :)
- (void)output;
+ QImage output = inputImage.convertToFormat(QImage::Format_RGBX8888);
+ output.constBits();
}
}
@@ -140,10 +136,8 @@ void tst_QImageConversion::convertRgb32ToRgb888()
QFETCH(QImage, inputImage);
QBENCHMARK {
- volatile QImage output = inputImage.convertToFormat(QImage::Format_RGB888);
- // we need the volatile and the following to make sure the compiler does not do
- // anything stupid :)
- (void)output;
+ QImage output = inputImage.convertToFormat(QImage::Format_RGB888);
+ output.constBits();
}
}
@@ -157,6 +151,8 @@ void tst_QImageConversion::convertRgb16_data()
QTest::newRow("rgb888") << rgb16 << QImage::Format_RGB888;
QTest::newRow("rgb666") << rgb16 << QImage::Format_RGB666;
QTest::newRow("rgb555") << rgb16 << QImage::Format_RGB555;
+ QTest::newRow("argb8565") << rgb16 << QImage::Format_ARGB8565_Premultiplied;
+ QTest::newRow("argb8555") << rgb16 << QImage::Format_ARGB8555_Premultiplied;
}
void tst_QImageConversion::convertRgb16()
@@ -189,6 +185,7 @@ void tst_QImageConversion::convertRgb32_data()
QTest::newRow("rgb32 -> rgb888") << rgb32 << QImage::Format_RGB888;
QTest::newRow("rgb32 -> rgb666") << rgb32 << QImage::Format_RGB666;
QTest::newRow("rgb32 -> rgb555") << rgb32 << QImage::Format_RGB555;
+ QTest::newRow("rgb32 -> argb8565pm") << rgb32 << QImage::Format_ARGB8565_Premultiplied;
QTest::newRow("argb32 -> rgb16") << argb32 << QImage::Format_RGB16;
QTest::newRow("argb32 -> rgb32") << argb32 << QImage::Format_RGB32;
@@ -237,12 +234,14 @@ void tst_QImageConversion::convertGeneric_data()
QImage rgba32 = argb32.convertToFormat(QImage::Format_RGBA8888);
QImage bgr30 = rgb32.convertToFormat(QImage::Format_BGR30);
QImage a2rgb30 = argb32.convertToFormat(QImage::Format_A2RGB30_Premultiplied);
+ QImage rgb666 = rgb32.convertToFormat(QImage::Format_RGB666);
QTest::newRow("rgba8888 -> rgb32") << rgba32 << QImage::Format_RGB32;
QTest::newRow("rgba8888 -> argb32") << rgba32 << QImage::Format_ARGB32;
QTest::newRow("rgba8888 -> argb32pm") << rgba32 << QImage::Format_ARGB32_Premultiplied;
QTest::newRow("rgba8888 -> rgbx8888") << rgba32 << QImage::Format_RGBX8888;
QTest::newRow("rgba8888 -> rgba8888pm") << rgba32 << QImage::Format_RGBA8888_Premultiplied;
+ QTest::newRow("rgba8888 -> rgb888") << rgba32 << QImage::Format_RGB888;
QTest::newRow("rgba8888 -> rgb30") << rgba32 << QImage::Format_RGB30;
QTest::newRow("rgba8888 -> a2bgr30") << rgba32 << QImage::Format_A2BGR30_Premultiplied;
@@ -264,6 +263,14 @@ void tst_QImageConversion::convertGeneric_data()
QTest::newRow("a2rgb30 -> rgb30") << a2rgb30 << QImage::Format_RGB30;
QTest::newRow("a2rgb30 -> bgr30") << a2rgb30 << QImage::Format_BGR30;
QTest::newRow("a2rgb30 -> a2bgr30") << a2rgb30 << QImage::Format_A2BGR30_Premultiplied;
+
+ QTest::newRow("rgb666 -> rgb32") << rgb666 << QImage::Format_RGB32;
+ QTest::newRow("rgb666 -> argb32") << rgb666 << QImage::Format_ARGB32;
+ QTest::newRow("rgb666 -> argb32pm") << rgb666 << QImage::Format_ARGB32_Premultiplied;
+ QTest::newRow("rgb666 -> rgb888") << rgb666 << QImage::Format_RGB888;
+ QTest::newRow("rgb666 -> rgb16") << rgb666 << QImage::Format_RGB16;
+ QTest::newRow("rgb666 -> rgb555") << rgb666 << QImage::Format_RGB555;
+ QTest::newRow("rgb666 -> rgb30") << rgb666 << QImage::Format_RGB30;
}
void tst_QImageConversion::convertGeneric()
@@ -285,6 +292,9 @@ void tst_QImageConversion::convertGenericInplace_data()
QImage argb32 = generateImageArgb32(1000, 1000);
QImage argb32pm = argb32.convertToFormat(QImage::Format_ARGB32_Premultiplied);
QImage rgba8888 = argb32.convertToFormat(QImage::Format_RGBA8888);
+ QImage argb6666 = argb32.convertToFormat(QImage::Format_ARGB6666_Premultiplied);
+ QImage argb4444 = argb32.convertToFormat(QImage::Format_ARGB4444_Premultiplied);
+ QImage rgb16 = argb32.convertToFormat(QImage::Format_RGB16);
QTest::newRow("argb32 -> argb32pm -> argb32") << argb32 << QImage::Format_ARGB32_Premultiplied;
QTest::newRow("argb32 -> rgb32 -> argb32") << argb32 << QImage::Format_RGB32;
@@ -301,6 +311,16 @@ void tst_QImageConversion::convertGenericInplace_data()
QTest::newRow("rgba8888 -> rgb32 -> rgba8888") << rgba8888 << QImage::Format_RGB32;
QTest::newRow("rgba8888 -> argb32pm -> rgba8888") << rgba8888 << QImage::Format_ARGB32_Premultiplied;
QTest::newRow("rgba8888 -> rgba8888pm -> rgba8888") << rgba8888 << QImage::Format_RGBA8888_Premultiplied;
+
+ QTest::newRow("argb6666pm -> argb8565pm -> argb6666pm") << argb6666 << QImage::Format_ARGB8565_Premultiplied;
+ QTest::newRow("argb6666pm -> rgb888 -> argb6666pm") << argb6666 << QImage::Format_RGB888;
+
+ QTest::newRow("argb4444pm -> rgb16 -> argb4444pm") << argb4444 << QImage::Format_RGB16;
+ QTest::newRow("argb4444pm -> rgb444 -> argb4444pm") << argb4444 << QImage::Format_RGB444;
+
+ QTest::newRow("rgb16 -> rgb555 -> rgb16") << rgb16 << QImage::Format_RGB555;
+ QTest::newRow("rgb16 -> rgb444 -> rgb16") << rgb16 << QImage::Format_RGB444;
+ QTest::newRow("rgb16 -> argb4444pm -> rgb16") << rgb16 << QImage::Format_ARGB4444_Premultiplied;
}
void tst_QImageConversion::convertGenericInplace()