summaryrefslogtreecommitdiffstats
path: root/tests/auto/gui
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2021-05-04 13:03:50 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2021-05-27 00:18:04 +0200
commitda30e402f38a434f856fa8670a8813c3cffe6440 (patch)
tree80a50d2a5e232fdde6c20f8181558e00d3533aff /tests/auto/gui
parentf3e7073f938ead15d8651623a23fe402186cb709 (diff)
Add SIMD optimizations for color-transform writes
Add NEON for RGB32 and RGBA64 writeback, and SSE2 for RGBA64 writeback. Change-Id: Id9ee803267a78f5bdff5beaa719e7a59c1dbb9fb Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'tests/auto/gui')
-rw-r--r--tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp b/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp
index 0c8536d385..913fe55364 100644
--- a/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp
+++ b/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp
@@ -61,6 +61,8 @@ private slots:
void imageConversion();
void imageConversion64_data();
void imageConversion64();
+ void imageConversion64PM_data();
+ void imageConversion64PM();
void imageConversionOverLargerGamut_data();
void imageConversionOverLargerGamut();
@@ -353,6 +355,76 @@ void tst_QColorSpace::imageConversion64()
}
}
+void tst_QColorSpace::imageConversion64PM_data()
+{
+ imageConversion64_data();
+}
+
+void tst_QColorSpace::imageConversion64PM()
+{
+ QFETCH(QColorSpace::NamedColorSpace, fromColorSpace);
+ QFETCH(QColorSpace::NamedColorSpace, toColorSpace);
+
+ QImage testImage(256, 16, QImage::Format_RGBA64_Premultiplied);
+
+ for (int j = 0; j < 16; ++j) {
+ int a = j * 15;
+ for (int i = 0; i < 256; ++i)
+ testImage.setPixel(i, j, qPremultiply(qRgba(i, i, i, a)));
+ }
+
+ testImage.setColorSpace(fromColorSpace);
+ QCOMPARE(testImage.colorSpace(), QColorSpace(fromColorSpace));
+
+ testImage.convertToColorSpace(toColorSpace);
+ QCOMPARE(testImage.colorSpace(), QColorSpace(toColorSpace));
+
+ int lastRed = 0;
+ int lastGreen = 0;
+ int lastBlue = 0;
+ for (int j = 0; j < 16; ++j) {
+ for (int i = 0; i < 256; ++i) {
+ QRgb p = testImage.pixel(i, j);
+ QVERIFY(qRed(p) >= lastRed);
+ QVERIFY(qGreen(p) >= lastGreen);
+ QVERIFY(qBlue(p) >= lastBlue);
+ QCOMPARE(qAlpha(p), j * 15);
+ lastRed = qRed(p);
+ lastGreen = qGreen(p);
+ lastBlue = qBlue(p);
+ }
+ QVERIFY(lastRed <= j * 15);
+ QVERIFY(lastGreen <= j * 15);
+ QVERIFY(lastBlue <= j * 15);
+ lastRed = 0;
+ lastGreen = 0;
+ lastBlue = 0;
+ }
+
+ testImage.convertToColorSpace(fromColorSpace);
+ QCOMPARE(testImage.colorSpace(), QColorSpace(fromColorSpace));
+ for (int j = 0; j < 16; ++j) {
+ for (int i = 0; i < 256; ++i) {
+ QRgb p = testImage.pixel(i, j);
+ QCOMPARE(qRed(p), qGreen(p));
+ QCOMPARE(qRed(p), qBlue(p));
+ QCOMPARE(qAlpha(p), j * 15);
+ QVERIFY((lastRed - qRed(p)) <= 0);
+ QVERIFY((lastGreen - qGreen(p)) <= 0);
+ QVERIFY((lastBlue - qBlue(p)) <= 0);
+ lastRed = qRed(p);
+ lastGreen = qGreen(p);
+ lastBlue = qBlue(p);
+ }
+ QVERIFY(lastRed <= j * 15);
+ QVERIFY(lastGreen <= j * 15);
+ QVERIFY(lastBlue <= j * 15);
+ lastRed = 0;
+ lastGreen = 0;
+ lastBlue = 0;
+ }
+}
+
void tst_QColorSpace::imageConversionOverLargerGamut_data()
{
QTest::addColumn<QColorSpace::NamedColorSpace>("fromColorSpace");