Add generic optimized rectfill methods

Also makes the qt_rectfill_quint16 actually work with any uint16 format

Change-Id: Ibb3deed54ee1a0a86b14d5349c95f106ced057f7
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
This commit is contained in:
Allan Sandfeld Jensen 2018-03-13 11:23:19 +01:00
parent 21435e7d04
commit b64ec6687e
2 changed files with 28 additions and 9 deletions

View File

@ -5755,8 +5755,26 @@ static void qt_rectfill_quint16(QRasterBuffer *rasterBuffer,
int x, int y, int width, int height,
const QRgba64 &color)
{
const QPixelLayout &layout = qPixelLayouts[rasterBuffer->format];
quint32 c32 = color.toArgb32();
layout.convertFromARGB32PM(&c32, &c32, 1, nullptr, nullptr);
quint16 c16;
storePixel<QPixelLayout::BPP16>(reinterpret_cast<uchar *>(&c16), 0, c32);
qt_rectfill<quint16>(reinterpret_cast<quint16 *>(rasterBuffer->buffer()),
color.toRgb16(), x, y, width, height, rasterBuffer->bytesPerLine());
c16, x, y, width, height, rasterBuffer->bytesPerLine());
}
static void qt_rectfill_quint24(QRasterBuffer *rasterBuffer,
int x, int y, int width, int height,
const QRgba64 &color)
{
const QPixelLayout &layout = qPixelLayouts[rasterBuffer->format];
quint32 c32 = color.toArgb32();
layout.convertFromARGB32PM(&c32, &c32, 1, nullptr, nullptr);
quint24 c24;
storePixel<QPixelLayout::BPP24>(reinterpret_cast<uchar *>(&c24), 0, c32);
qt_rectfill<quint24>(reinterpret_cast<quint24 *>(rasterBuffer->buffer()),
c24, x, y, width, height, rasterBuffer->bytesPerLine());
}
static void qt_rectfill_nonpremul_argb32(QRasterBuffer *rasterBuffer,
@ -5876,7 +5894,7 @@ DrawHelper qDrawHelper[QImage::NImageFormats] =
0,
qt_alphamapblit_generic,
qt_alphargbblit_generic,
0
qt_rectfill_quint24
},
// Format_RGB666
{
@ -5885,7 +5903,7 @@ DrawHelper qDrawHelper[QImage::NImageFormats] =
0,
qt_alphamapblit_generic,
qt_alphargbblit_generic,
0
qt_rectfill_quint24
},
// Format_ARGB6666_Premultiplied
{
@ -5894,7 +5912,7 @@ DrawHelper qDrawHelper[QImage::NImageFormats] =
0,
qt_alphamapblit_generic,
qt_alphargbblit_generic,
0
qt_rectfill_quint24
},
// Format_RGB555
{
@ -5903,7 +5921,7 @@ DrawHelper qDrawHelper[QImage::NImageFormats] =
0,
qt_alphamapblit_generic,
qt_alphargbblit_generic,
0
qt_rectfill_quint16
},
// Format_ARGB8555_Premultiplied
{
@ -5912,7 +5930,7 @@ DrawHelper qDrawHelper[QImage::NImageFormats] =
0,
qt_alphamapblit_generic,
qt_alphargbblit_generic,
0
qt_rectfill_quint24
},
// Format_RGB888
{
@ -5921,7 +5939,7 @@ DrawHelper qDrawHelper[QImage::NImageFormats] =
0,
qt_alphamapblit_generic,
qt_alphargbblit_generic,
0
qt_rectfill_quint24
},
// Format_RGB444
{
@ -5930,7 +5948,7 @@ DrawHelper qDrawHelper[QImage::NImageFormats] =
0,
qt_alphamapblit_generic,
qt_alphargbblit_generic,
0
qt_rectfill_quint16
},
// Format_ARGB4444_Premultiplied
{
@ -5939,7 +5957,7 @@ DrawHelper qDrawHelper[QImage::NImageFormats] =
0,
qt_alphamapblit_generic,
qt_alphargbblit_generic,
0
qt_rectfill_quint16
},
// Format_RGBX8888
{

View File

@ -784,6 +784,7 @@ static Q_ALWAYS_INLINE uint qAlphaRgb30(uint c)
}
struct quint24 {
quint24() = default;
quint24(uint value);
operator uint() const;
uchar data[3];