Add optimized fetch ARGB32 routines for NEON
After convert and fetch were split, only convert was still NEON vectorized, while fetch is the more commonly used version. Change-Id: Iea2af7ccee6589b3d6e9908afeaae2d1ad2753be Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
This commit is contained in:
parent
cfb8d70888
commit
73af8e7553
@ -6499,7 +6499,13 @@ static void qInitDrawhelperFunctions()
|
|||||||
#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
|
#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
|
||||||
extern void QT_FASTCALL convertARGB32ToARGB32PM_neon(uint *buffer, int count, const QVector<QRgb> *);
|
extern void QT_FASTCALL convertARGB32ToARGB32PM_neon(uint *buffer, int count, const QVector<QRgb> *);
|
||||||
extern void QT_FASTCALL convertRGBA8888ToARGB32PM_neon(uint *buffer, int count, const QVector<QRgb> *);
|
extern void QT_FASTCALL convertRGBA8888ToARGB32PM_neon(uint *buffer, int count, const QVector<QRgb> *);
|
||||||
|
extern const uint *QT_FASTCALL fetchARGB32ToARGB32PM_neon(uint *buffer, const uchar *src, int index, int count,
|
||||||
|
const QVector<QRgb> *, QDitherInfo *);
|
||||||
|
extern const uint *QT_FASTCALL fetchRGBA8888ToARGB32PM_neon(uint *buffer, const uchar *src, int index, int count,
|
||||||
|
const QVector<QRgb> *, QDitherInfo *);
|
||||||
|
qPixelLayouts[QImage::Format_ARGB32].fetchToARGB32PM = fetchARGB32ToARGB32PM_neon;
|
||||||
qPixelLayouts[QImage::Format_ARGB32].convertToARGB32PM = convertARGB32ToARGB32PM_neon;
|
qPixelLayouts[QImage::Format_ARGB32].convertToARGB32PM = convertARGB32ToARGB32PM_neon;
|
||||||
|
qPixelLayouts[QImage::Format_RGBA8888].fetchToARGB32PM = fetchRGBA8888ToARGB32PM_neon;
|
||||||
qPixelLayouts[QImage::Format_RGBA8888].convertToARGB32PM = convertRGBA8888ToARGB32PM_neon;
|
qPixelLayouts[QImage::Format_RGBA8888].convertToARGB32PM = convertRGBA8888ToARGB32PM_neon;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1163,6 +1163,20 @@ void QT_FASTCALL convertRGBA8888ToARGB32PM_neon(uint *buffer, int count, const Q
|
|||||||
convertARGBToARGB32PM_neon<true>(buffer, buffer, count);
|
convertARGBToARGB32PM_neon<true>(buffer, buffer, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const uint *QT_FASTCALL fetchARGB32ToARGB32PM_neon(uint *buffer, const uchar *src, int index, int count,
|
||||||
|
const QVector<QRgb> *, QDitherInfo *)
|
||||||
|
{
|
||||||
|
convertARGBToARGB32PM_neon<false>(buffer, reinterpret_cast<const uint *>(src) + index, count);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint *QT_FASTCALL fetchRGBA8888ToARGB32PM_neon(uint *buffer, const uchar *src, int index, int count,
|
||||||
|
const QVector<QRgb> *, QDitherInfo *)
|
||||||
|
{
|
||||||
|
convertARGBToARGB32PM_neon<true>(buffer, reinterpret_cast<const uint *>(src) + index, count);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // Q_BYTE_ORDER == Q_LITTLE_ENDIAN
|
#endif // Q_BYTE_ORDER == Q_LITTLE_ENDIAN
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user