From 0c6f61ccdf24259d9dc64ae0d0bcd004a957cd46 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Tue, 3 Aug 2010 12:07:10 +0200 Subject: Fixed: QT_DEPRECATED_WARNINGS defines QT3_SUPPORT Task-number: QTBUG-1043 Reviewed-by: Thorbjorn --- src/corelib/global/qglobal.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 7b915cd..8f27b03 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -981,9 +981,11 @@ redefine to built-in booleans to make autotests work properly */ # undef QT_DEPRECATED_VARIABLE # undef QT_DEPRECATED_CONSTRUCTOR #elif defined(QT_DEPRECATED_WARNINGS) +# ifdef QT3_SUPPORT /* enable Qt3 support warnings as well */ -# undef QT3_SUPPORT_WARNINGS -# define QT3_SUPPORT_WARNINGS +# undef QT3_SUPPORT_WARNINGS +# define QT3_SUPPORT_WARNINGS +# endif # undef QT_DEPRECATED # define QT_DEPRECATED Q_DECL_DEPRECATED # undef QT_DEPRECATED_VARIABLE -- cgit v0.12 From b86691f854adb24060cec61e4954c986fc350821 Mon Sep 17 00:00:00 2001 From: Benjamin Poulain Date: Tue, 3 Aug 2010 12:04:35 +0200 Subject: Move the SIMD defines to the common declaration of Qt symbols Move the #defines for the SIMD extension to the common code in order to be able to use them from any module without copying their definition. Reviewed-by: Andreas Kling --- mkspecs/features/qt.prf | 13 +++++++++++++ src/corelib/corelib.pro | 37 ++----------------------------------- src/gui/gui.pro | 11 ----------- 3 files changed, 15 insertions(+), 46 deletions(-) diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf index e8946de..aa0f06e 100644 --- a/mkspecs/features/qt.prf +++ b/mkspecs/features/qt.prf @@ -209,3 +209,16 @@ wince*:static:gui { mac { !isEmpty(QT_NAMESPACE_MAC_CRC):DEFINES *= QT_NAMESPACE_MAC_CRC=$$QT_NAMESPACE_MAC_CRC } + +#SIMD defines: +neon: DEFINES += QT_HAVE_NEON +mmx:DEFINES += QT_HAVE_MMX +3dnow:DEFINES += QT_HAVE_3DNOW +sse:DEFINES += QT_HAVE_SSE QT_HAVE_MMXEXT +sse2:DEFINES += QT_HAVE_SSE2 +sse3:DEFINES += QT_HAVE_SSE3 +ssse3:DEFINES += QT_HAVE_SSSE3 +sse4_1:DEFINES += QT_HAVE_SSE4_1 +sse4_2:DEFINES += QT_HAVE_SSE4_2 +avx:DEFINES += QT_HAVE_AVX +iwmmxt:DEFINES += QT_HAVE_IWMMXT diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro index bbf445f..bc8ef9f 100644 --- a/src/corelib/corelib.pro +++ b/src/corelib/corelib.pro @@ -53,39 +53,6 @@ symbian: { DEPLOYMENT = partial_upgrade $$DEPLOYMENT } -mmx { - DEFINES += QT_HAVE_MMX -} -3dnow { - DEFINES += QT_HAVE_3DNOW -} -sse { - DEFINES += QT_HAVE_SSE - DEFINES += QT_HAVE_MMXEXT -} -sse2 { - DEFINES += QT_HAVE_SSE2 -} -sse3 { - DEFINES += QT_HAVE_SSE3 -} -ssse3 { - DEFINES += QT_HAVE_SSSE3 -} -sse4_1 { - DEFINES += QT_HAVE_SSE4_1 -} -sse4_2 { - DEFINES += QT_HAVE_SSE4_2 -} -avx { - DEFINES += QT_HAVE_AVX -} -iwmmxt { - DEFINES += QT_HAVE_IWMMXT -} -neon { - DEFINES += QT_HAVE_NEON - QMAKE_CXXFLAGS *= -mfpu=neon -} +neon: QMAKE_CXXFLAGS *= -mfpu=neon + diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 1b43ef2..28440cc 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -80,17 +80,6 @@ symbian { contains(QMAKE_MAC_XARCH, no) { DEFINES += QT_NO_MAC_XARCH } else { - mmx:DEFINES += QT_HAVE_MMX - 3dnow:DEFINES += QT_HAVE_3DNOW - sse:DEFINES += QT_HAVE_SSE QT_HAVE_MMXEXT - sse2:DEFINES += QT_HAVE_SSE2 - sse3:DEFINES += QT_HAVE_SSE3 - ssse3:DEFINES += QT_HAVE_SSSE3 - sse4_1:DEFINES += QT_HAVE_SSE4_1 - sse4_2:DEFINES += QT_HAVE_SSE4_2 - avx:DEFINES += QT_HAVE_AVX - iwmmxt:DEFINES += QT_HAVE_IWMMXT - win32-g++*|!win32:!*-icc* { mmx { mmx_compiler.commands = $$QMAKE_CXX -c -Winline -- cgit v0.12 From 57d4e5aae33d27f4989c76269f23e837b8dff451 Mon Sep 17 00:00:00 2001 From: Benjamin Poulain Date: Tue, 3 Aug 2010 12:06:34 +0200 Subject: Use the fast conversion from RGB888 to RGB32 for Jpeg images The commit 90642dd2b6b14c39cc6178f1161331895809b342 introduce a fast way to convert from RGB888 to RGB32 with SSSE3. This patch uses that function to do the color conversion when decoding jpeg images. The #defines for the SIMD extension have been moved to the common code in order to be able to compile the jpeg handler directly in QtGui or as a plugin. Reviewed-by: Andreas Kling --- src/gui/image/qimage_ssse3.cpp | 3 +-- src/gui/image/qjpeghandler.cpp | 29 ++++++++++++++++++++++++----- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/gui/image/qimage_ssse3.cpp b/src/gui/image/qimage_ssse3.cpp index 1c664f2..cc4ac5e 100644 --- a/src/gui/image/qimage_ssse3.cpp +++ b/src/gui/image/qimage_ssse3.cpp @@ -45,13 +45,12 @@ #ifdef QT_HAVE_SSSE3 -#include QT_BEGIN_NAMESPACE // Convert a scanline of RGB888 (src) to RGB32 (dst) // src must be at least len * 3 bytes // dst must be at least len * 4 bytes -inline void convert_rgb888_to_rgb32_ssse3(quint32 *dst, const uchar *src, int len) +Q_GUI_EXPORT void QT_FASTCALL convert_rgb888_to_rgb32_ssse3(quint32 *dst, const uchar *src, int len) { quint32 *const end = dst + len; diff --git a/src/gui/image/qjpeghandler.cpp b/src/gui/image/qjpeghandler.cpp index 972dd65..0b731cb 100644 --- a/src/gui/image/qjpeghandler.cpp +++ b/src/gui/image/qjpeghandler.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include // jpeglib needs this to be pre-included #include @@ -75,6 +76,19 @@ extern "C" { QT_BEGIN_NAMESPACE +void QT_FASTCALL convert_rgb888_to_rgb32_C(quint32 *dst, const uchar *src, int len) +{ + // Expand 24->32 bpp. + for (int i = 0; i < len; ++i) { + *dst++ = qRgb(src[0], src[1], src[2]); + src += 3; + } +} + +typedef void (QT_FASTCALL *Rgb888ToRgb32Converter)(quint32 *dst, const uchar *src, int len); + +static Rgb888ToRgb32Converter rgb888ToRgb32ConverterPtr = convert_rgb888_to_rgb32_C; + struct my_error_mgr : public jpeg_error_mgr { jmp_buf setjmp_buffer; }; @@ -393,13 +407,9 @@ static bool read_jpeg_image(QImage *outImage, continue; // Haven't reached the starting line yet. if (info->output_components == 3) { - // Expand 24->32 bpp. uchar *in = rows[0] + clip.x() * 3; QRgb *out = (QRgb*)outImage->scanLine(y); - for (int i = 0; i < clip.width(); ++i) { - *out++ = qRgb(in[0], in[1], in[2]); - in += 3; - } + rgb888ToRgb32ConverterPtr(out, in, clip.width()); } else if (info->out_color_space == JCS_CMYK) { // Convert CMYK->RGB. uchar *in = rows[0] + clip.x() * 4; @@ -793,6 +803,15 @@ bool QJpegHandlerPrivate::read(QImage *image) QJpegHandler::QJpegHandler() : d(new QJpegHandlerPrivate(this)) { +#if defined(QT_HAVE_SSSE3) + const uint features = qDetectCPUFeatures(); + + // from qimage_ssse3.cpp + Q_GUI_EXPORT void QT_FASTCALL convert_rgb888_to_rgb32_ssse3(quint32 *dst, const uchar *src, int len); + + if (features & SSSE3) + rgb888ToRgb32ConverterPtr = convert_rgb888_to_rgb32_ssse3; +#endif // QT_HAVE_SSSE3 } QJpegHandler::~QJpegHandler() -- cgit v0.12 From 29f3ff7e8e4ecf1fcae1fb35434bd744cec97389 Mon Sep 17 00:00:00 2001 From: Pierre Rossi Date: Tue, 3 Aug 2010 14:57:05 +0200 Subject: Update changes-4.7.0 Reviewed-by: Simon Hausmann --- dist/changes-4.7.0 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dist/changes-4.7.0 b/dist/changes-4.7.0 index 518d362..790aabc 100644 --- a/dist/changes-4.7.0 +++ b/dist/changes-4.7.0 @@ -474,6 +474,9 @@ QtCore: ABIs, but it also allowed for unaligned access. Qt never generates or uses unaligned access and the new EABI aligns as expected, so the flag was removed. + - QTextBoundaryFinder is now consistent with ICU when it comes to + line breaking, reporting the index of the boundary at which the line + break should occur rather than the index of the character. QtNetwork: - Qt does no longer provide its own CA bundle, but uses system APIs for -- cgit v0.12 From 2a671ee511a62fe04d53e9994b99e2cf8d525cb9 Mon Sep 17 00:00:00 2001 From: Benjamin Poulain Date: Tue, 3 Aug 2010 17:28:05 +0200 Subject: Add the qt_ prefix to convert_rgb888_to_rgb32_ssse3 Exported function needs to have the qt_ prefix. Beviewed-by: Olivier Goffart Reviewed-by: Andreas Kling --- src/gui/image/qimage_ssse3.cpp | 4 ++-- src/gui/image/qjpeghandler.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/image/qimage_ssse3.cpp b/src/gui/image/qimage_ssse3.cpp index cc4ac5e..9aed011 100644 --- a/src/gui/image/qimage_ssse3.cpp +++ b/src/gui/image/qimage_ssse3.cpp @@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE // Convert a scanline of RGB888 (src) to RGB32 (dst) // src must be at least len * 3 bytes // dst must be at least len * 4 bytes -Q_GUI_EXPORT void QT_FASTCALL convert_rgb888_to_rgb32_ssse3(quint32 *dst, const uchar *src, int len) +Q_GUI_EXPORT void QT_FASTCALL qt_convert_rgb888_to_rgb32_ssse3(quint32 *dst, const uchar *src, int len) { quint32 *const end = dst + len; @@ -138,7 +138,7 @@ void convert_RGB888_to_RGB32_ssse3(QImageData *dest, const QImageData *src, Qt:: quint32 *dest_data = (quint32 *) dest->data; for (int i = 0; i < src->height; ++i) { - convert_rgb888_to_rgb32_ssse3(dest_data, src_data, src->width); + qt_convert_rgb888_to_rgb32_ssse3(dest_data, src_data, src->width); src_data += src->bytes_per_line; dest_data = (quint32 *)((uchar*)dest_data + dest->bytes_per_line); } diff --git a/src/gui/image/qjpeghandler.cpp b/src/gui/image/qjpeghandler.cpp index 0b731cb..d358a5e 100644 --- a/src/gui/image/qjpeghandler.cpp +++ b/src/gui/image/qjpeghandler.cpp @@ -807,10 +807,10 @@ QJpegHandler::QJpegHandler() const uint features = qDetectCPUFeatures(); // from qimage_ssse3.cpp - Q_GUI_EXPORT void QT_FASTCALL convert_rgb888_to_rgb32_ssse3(quint32 *dst, const uchar *src, int len); + Q_GUI_EXPORT void QT_FASTCALL qt_convert_rgb888_to_rgb32_ssse3(quint32 *dst, const uchar *src, int len); if (features & SSSE3) - rgb888ToRgb32ConverterPtr = convert_rgb888_to_rgb32_ssse3; + rgb888ToRgb32ConverterPtr = qt_convert_rgb888_to_rgb32_ssse3; #endif // QT_HAVE_SSSE3 } -- cgit v0.12