Merge remote-tracking branch 'origin/5.12' into 5.13
Change-Id: I9935bacae0d6ba532418fc3d28adbc7ca1463604
This commit is contained in:
commit
0a7302abbc
@ -17,8 +17,8 @@ os_directory = $$(INTEGRITY_DIR)
|
||||
isEmpty(os_directory): \
|
||||
error("This qmakespec requires $INTEGRITY_DIR to be set")
|
||||
|
||||
QMAKE_CC = cxintarm64 -U__ARM_NEON__ -U__ARM_NEON -bsp $$bsp_name -os_dir $$os_directory -non_shared
|
||||
QMAKE_CXX = cxintarm64 -U__ARM_NEON__ -U__ARM_NEON -bsp $$bsp_name -os_dir $$os_directory -non_shared
|
||||
QMAKE_CC = cxintarm64 -bsp $$bsp_name -os_dir $$os_directory -non_shared
|
||||
QMAKE_CXX = cxintarm64 -bsp $$bsp_name -os_dir $$os_directory -non_shared
|
||||
QMAKE_LINK = $$QMAKE_CXX
|
||||
QMAKE_AR = $$QMAKE_CXX -archive -o
|
||||
|
||||
|
@ -254,7 +254,7 @@ void NmakeMakefileGenerator::init()
|
||||
|
||||
ProString tgt = project->first("DESTDIR")
|
||||
+ project->first("TARGET") + project->first("TARGET_VERSION_EXT");
|
||||
if(project->isActiveConfig("shared")) {
|
||||
if (project->first("TEMPLATE") == "lib" && project->isActiveConfig("shared")) {
|
||||
project->values("QMAKE_CLEAN").append(tgt + ".exp");
|
||||
project->values("QMAKE_DISTCLEAN").append(tgt + ".lib");
|
||||
}
|
||||
|
@ -52,65 +52,41 @@ Q_GUI_EXPORT void QT_FASTCALL qt_convert_rgb888_to_rgb32_neon(quint32 *dst, cons
|
||||
|
||||
const quint32 *const end = dst + len;
|
||||
|
||||
// align dst on 64 bits
|
||||
const int offsetToAlignOn8Bytes = (reinterpret_cast<quintptr>(dst) >> 2) & 0x1;
|
||||
for (int i = 0; i < offsetToAlignOn8Bytes; ++i) {
|
||||
// align dst on 128 bits
|
||||
const int offsetToAlignOn16Bytes = (reinterpret_cast<quintptr>(dst) >> 2) & 0x3;
|
||||
for (int i = 0; i < offsetToAlignOn16Bytes; ++i) {
|
||||
*dst++ = qRgb(src[0], src[1], src[2]);
|
||||
src += 3;
|
||||
}
|
||||
|
||||
if ((len - offsetToAlignOn8Bytes) >= 8) {
|
||||
const quint32 *const simdEnd = end - 7;
|
||||
#if !defined(Q_PROCESSOR_ARM_64)
|
||||
register uint8x8_t fullVector asm ("d3") = vdup_n_u8(0xff);
|
||||
do {
|
||||
if ((len - offsetToAlignOn16Bytes) >= 16) {
|
||||
const quint32 *const simdEnd = end - 15;
|
||||
uint8x16x4_t dstVector;
|
||||
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
|
||||
asm volatile (
|
||||
"vld3.8 { d4, d5, d6 }, [%[SRC]] !\n\t"
|
||||
"vst4.8 { d3, d4, d5, d6 }, [%[DST],:64] !\n\t"
|
||||
: [DST]"+r" (dst), [SRC]"+r" (src)
|
||||
: "w"(fullVector)
|
||||
: "memory", "d4", "d5", "d6"
|
||||
);
|
||||
dstVector.val[0] = vdupq_n_u8(0xff);
|
||||
#else
|
||||
asm volatile (
|
||||
"vld3.8 { d0, d1, d2 }, [%[SRC]] !\n\t"
|
||||
"vswp d0, d2\n\t"
|
||||
"vst4.8 { d0, d1, d2, d3 }, [%[DST],:64] !\n\t"
|
||||
: [DST]"+r" (dst), [SRC]"+r" (src)
|
||||
: "w"(fullVector)
|
||||
: "memory", "d0", "d1", "d2"
|
||||
);
|
||||
dstVector.val[3] = vdupq_n_u8(0xff);
|
||||
#endif
|
||||
} while (dst < simdEnd);
|
||||
#else
|
||||
register uint8x8_t fullVector asm ("v3") = vdup_n_u8(0xff);
|
||||
do {
|
||||
uint8x16x3_t srcVector = vld3q_u8(src);
|
||||
src += 3 * 16;
|
||||
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
|
||||
asm volatile (
|
||||
"ld3 { v4.8b, v5.8b, v6.8b }, [%[SRC]], #24 \n\t"
|
||||
"st4 { v3.8b, v4.8b, v5.8b, v6.8b }, [%[DST]], #32 \n\t"
|
||||
: [DST]"+r" (dst), [SRC]"+r" (src)
|
||||
: "w"(fullVector)
|
||||
: "memory", "v4", "v5", "v6"
|
||||
);
|
||||
dstVector.val[1] = srcVector.val[0];
|
||||
dstVector.val[2] = srcVector.val[1];
|
||||
dstVector.val[3] = srcVector.val[2];
|
||||
#else
|
||||
asm volatile (
|
||||
"ld3 { v0.8b, v1.8b, v2.8b }, [%[SRC]], #24 \n\t"
|
||||
"mov v4.8b, v2.8b\n\t"
|
||||
"mov v2.8b, v0.8b\n\t"
|
||||
"mov v0.8b, v4.8b\n\t"
|
||||
"st4 { v0.8b, v1.8b, v2.8b, v3.8b }, [%[DST]], #32 \n\t"
|
||||
: [DST]"+r" (dst), [SRC]"+r" (src)
|
||||
: "w"(fullVector)
|
||||
: "memory", "v0", "v1", "v2", "v4"
|
||||
);
|
||||
dstVector.val[0] = srcVector.val[2];
|
||||
dstVector.val[1] = srcVector.val[1];
|
||||
dstVector.val[2] = srcVector.val[0];
|
||||
#endif
|
||||
vst4q_u8(reinterpret_cast<uint8_t*>(dst), dstVector);
|
||||
dst += 16;
|
||||
} while (dst < simdEnd);
|
||||
#endif
|
||||
}
|
||||
|
||||
while (dst != end) {
|
||||
int i = 0;
|
||||
int length = end - dst;
|
||||
SIMD_EPILOGUE(i, length, 15) {
|
||||
*dst++ = qRgb(src[0], src[1], src[2]);
|
||||
src += 3;
|
||||
}
|
||||
|
@ -131,9 +131,11 @@ ARCH_HASWELL_SOURCES += painting/qdrawhelper_avx2.cpp
|
||||
|
||||
NEON_SOURCES += painting/qdrawhelper_neon.cpp painting/qimagescale_neon.cpp
|
||||
NEON_HEADERS += painting/qdrawhelper_neon_p.h
|
||||
NEON_ASM += ../3rdparty/pixman/pixman-arm-neon-asm.S painting/qdrawhelper_neon_asm.S
|
||||
!uikit:!win32:contains(QT_ARCH, "arm"): CONFIG += no_clang_integrated_as
|
||||
!uikit:!win32:!contains(QT_ARCH, "arm64"): DEFINES += ENABLE_PIXMAN_DRAWHELPERS
|
||||
!uikit:!win32:!integrity:!contains(QT_ARCH, "arm64") {
|
||||
NEON_ASM += ../3rdparty/pixman/pixman-arm-neon-asm.S painting/qdrawhelper_neon_asm.S
|
||||
DEFINES += ENABLE_PIXMAN_DRAWHELPERS
|
||||
}
|
||||
|
||||
MIPS_DSP_SOURCES += painting/qdrawhelper_mips_dsp.cpp
|
||||
MIPS_DSP_HEADERS += painting/qdrawhelper_mips_dsp_p.h painting/qt_mips_asm_dsp_p.h
|
||||
|
@ -50,7 +50,18 @@ QT_BEGIN_NAMESPACE
|
||||
void qt_memfill32(quint32 *dest, quint32 value, qsizetype count)
|
||||
{
|
||||
const int epilogueSize = count % 16;
|
||||
#if !defined(Q_PROCESSOR_ARM_64)
|
||||
#if defined(Q_CC_GHS) || defined(Q_CC_MSVC)
|
||||
// inline assembler free version:
|
||||
if (count >= 16) {
|
||||
quint32 *const neonEnd = dest + count - epilogueSize;
|
||||
const uint32x4_t valueVector1 = vdupq_n_u32(value);
|
||||
const uint32x4x4_t valueVector4 = { valueVector1, valueVector1, valueVector1, valueVector1 };
|
||||
do {
|
||||
vst4q_u32(dest, valueVector4);
|
||||
dest += 16;
|
||||
} while (dest != neonEnd);
|
||||
}
|
||||
#elif !defined(Q_PROCESSOR_ARM_64)
|
||||
if (count >= 16) {
|
||||
quint32 *const neonEnd = dest + count - epilogueSize;
|
||||
register uint32x4_t valueVector1 asm ("q0") = vdupq_n_u32(value);
|
||||
|
@ -198,7 +198,7 @@ QHttp2ProtocolHandler::QHttp2ProtocolHandler(QHttpNetworkConnectionChannel *chan
|
||||
}
|
||||
}
|
||||
|
||||
if (!channel->ssl) {
|
||||
if (!channel->ssl && m_connection->connectionType() != QHttpNetworkConnection::ConnectionTypeHTTP2Direct) {
|
||||
// We upgraded from HTTP/1.1 to HTTP/2. channel->request was already sent
|
||||
// as HTTP/1.1 request. The response with status code 101 triggered
|
||||
// protocol switch and now we are waiting for the real response, sent
|
||||
|
@ -491,9 +491,11 @@ void QCoreTextFontEngine::draw(CGContextRef ctx, qreal x, qreal y, const QTextIt
|
||||
|
||||
struct ConvertPathInfo
|
||||
{
|
||||
ConvertPathInfo(QPainterPath *newPath, const QPointF &newPos) : path(newPath), pos(newPos) {}
|
||||
ConvertPathInfo(QPainterPath *newPath, const QPointF &newPos, qreal newStretch = 1.0) :
|
||||
path(newPath), pos(newPos), stretch(newStretch) {}
|
||||
QPainterPath *path;
|
||||
QPointF pos;
|
||||
qreal stretch;
|
||||
};
|
||||
|
||||
static void convertCGPathToQPainterPath(void *info, const CGPathElement *element)
|
||||
@ -501,25 +503,25 @@ static void convertCGPathToQPainterPath(void *info, const CGPathElement *element
|
||||
ConvertPathInfo *myInfo = static_cast<ConvertPathInfo *>(info);
|
||||
switch(element->type) {
|
||||
case kCGPathElementMoveToPoint:
|
||||
myInfo->path->moveTo(element->points[0].x + myInfo->pos.x(),
|
||||
myInfo->path->moveTo((element->points[0].x * myInfo->stretch) + myInfo->pos.x(),
|
||||
element->points[0].y + myInfo->pos.y());
|
||||
break;
|
||||
case kCGPathElementAddLineToPoint:
|
||||
myInfo->path->lineTo(element->points[0].x + myInfo->pos.x(),
|
||||
myInfo->path->lineTo((element->points[0].x * myInfo->stretch) + myInfo->pos.x(),
|
||||
element->points[0].y + myInfo->pos.y());
|
||||
break;
|
||||
case kCGPathElementAddQuadCurveToPoint:
|
||||
myInfo->path->quadTo(element->points[0].x + myInfo->pos.x(),
|
||||
myInfo->path->quadTo((element->points[0].x * myInfo->stretch) + myInfo->pos.x(),
|
||||
element->points[0].y + myInfo->pos.y(),
|
||||
element->points[1].x + myInfo->pos.x(),
|
||||
(element->points[1].x * myInfo->stretch) + myInfo->pos.x(),
|
||||
element->points[1].y + myInfo->pos.y());
|
||||
break;
|
||||
case kCGPathElementAddCurveToPoint:
|
||||
myInfo->path->cubicTo(element->points[0].x + myInfo->pos.x(),
|
||||
myInfo->path->cubicTo((element->points[0].x * myInfo->stretch) + myInfo->pos.x(),
|
||||
element->points[0].y + myInfo->pos.y(),
|
||||
element->points[1].x + myInfo->pos.x(),
|
||||
(element->points[1].x * myInfo->stretch) + myInfo->pos.x(),
|
||||
element->points[1].y + myInfo->pos.y(),
|
||||
element->points[2].x + myInfo->pos.x(),
|
||||
(element->points[2].x * myInfo->stretch) + myInfo->pos.x(),
|
||||
element->points[2].y + myInfo->pos.y());
|
||||
break;
|
||||
case kCGPathElementCloseSubpath:
|
||||
@ -543,9 +545,10 @@ void QCoreTextFontEngine::addGlyphsToPath(glyph_t *glyphs, QFixedPoint *position
|
||||
if (synthesisFlags & QFontEngine::SynthesizedItalic)
|
||||
cgMatrix = CGAffineTransformConcat(cgMatrix, CGAffineTransformMake(1, 0, -SYNTHETIC_ITALIC_SKEW, 1, 0, 0));
|
||||
|
||||
qreal stretch = fontDef.stretch ? qreal(fontDef.stretch) / 100 : 1.0;
|
||||
for (int i = 0; i < nGlyphs; ++i) {
|
||||
QCFType<CGPathRef> cgpath = CTFontCreatePathForGlyph(ctfont, glyphs[i], &cgMatrix);
|
||||
ConvertPathInfo info(path, positions[i].toPointF());
|
||||
ConvertPathInfo info(path, positions[i].toPointF(), stretch);
|
||||
CGPathApply(cgpath, &info, convertCGPathToQPainterPath);
|
||||
}
|
||||
}
|
||||
|
@ -702,8 +702,8 @@ static inline double qt_fixed_to_double(const FIXED &p) {
|
||||
return ((p.value << 16) + p.fract) / 65536.0;
|
||||
}
|
||||
|
||||
static inline QPointF qt_to_qpointf(const POINTFX &pt, qreal scale) {
|
||||
return QPointF(qt_fixed_to_double(pt.x) * scale, -qt_fixed_to_double(pt.y) * scale);
|
||||
static inline QPointF qt_to_qpointf(const POINTFX &pt, qreal scale, qreal stretch) {
|
||||
return QPointF(qt_fixed_to_double(pt.x) * scale * stretch, -qt_fixed_to_double(pt.y) * scale);
|
||||
}
|
||||
|
||||
#ifndef GGO_UNHINTED
|
||||
@ -711,7 +711,8 @@ static inline QPointF qt_to_qpointf(const POINTFX &pt, qreal scale) {
|
||||
#endif
|
||||
|
||||
static bool addGlyphToPath(glyph_t glyph, const QFixedPoint &position, HDC hdc,
|
||||
QPainterPath *path, bool ttf, glyph_metrics_t *metric = 0, qreal scale = 1)
|
||||
QPainterPath *path, bool ttf, glyph_metrics_t *metric = 0,
|
||||
qreal scale = 1.0, qreal stretch = 1.0)
|
||||
{
|
||||
MAT2 mat;
|
||||
mat.eM11.value = mat.eM22.value = 1;
|
||||
@ -761,7 +762,7 @@ static bool addGlyphToPath(glyph_t glyph, const QFixedPoint &position, HDC hdc,
|
||||
while (headerOffset < bufferSize) {
|
||||
const TTPOLYGONHEADER *ttph = reinterpret_cast<const TTPOLYGONHEADER *>(dataBuffer + headerOffset);
|
||||
|
||||
QPointF lastPoint(qt_to_qpointf(ttph->pfxStart, scale));
|
||||
QPointF lastPoint(qt_to_qpointf(ttph->pfxStart, scale, stretch));
|
||||
path->moveTo(lastPoint + oset);
|
||||
offset += sizeof(TTPOLYGONHEADER);
|
||||
while (offset < headerOffset + ttph->cb) {
|
||||
@ -769,7 +770,7 @@ static bool addGlyphToPath(glyph_t glyph, const QFixedPoint &position, HDC hdc,
|
||||
switch (curve->wType) {
|
||||
case TT_PRIM_LINE: {
|
||||
for (int i=0; i<curve->cpfx; ++i) {
|
||||
QPointF p = qt_to_qpointf(curve->apfx[i], scale) + oset;
|
||||
QPointF p = qt_to_qpointf(curve->apfx[i], scale, stretch) + oset;
|
||||
path->lineTo(p);
|
||||
}
|
||||
break;
|
||||
@ -779,8 +780,8 @@ static bool addGlyphToPath(glyph_t glyph, const QFixedPoint &position, HDC hdc,
|
||||
QPointF prev(elm.x, elm.y);
|
||||
QPointF endPoint;
|
||||
for (int i=0; i<curve->cpfx - 1; ++i) {
|
||||
QPointF p1 = qt_to_qpointf(curve->apfx[i], scale) + oset;
|
||||
QPointF p2 = qt_to_qpointf(curve->apfx[i+1], scale) + oset;
|
||||
QPointF p1 = qt_to_qpointf(curve->apfx[i], scale, stretch) + oset;
|
||||
QPointF p2 = qt_to_qpointf(curve->apfx[i+1], scale, stretch) + oset;
|
||||
if (i < curve->cpfx - 2) {
|
||||
endPoint = QPointF((p1.x() + p2.x()) / 2, (p1.y() + p2.y()) / 2);
|
||||
} else {
|
||||
@ -795,9 +796,9 @@ static bool addGlyphToPath(glyph_t glyph, const QFixedPoint &position, HDC hdc,
|
||||
}
|
||||
case TT_PRIM_CSPLINE: {
|
||||
for (int i=0; i<curve->cpfx; ) {
|
||||
QPointF p2 = qt_to_qpointf(curve->apfx[i++], scale) + oset;
|
||||
QPointF p3 = qt_to_qpointf(curve->apfx[i++], scale) + oset;
|
||||
QPointF p4 = qt_to_qpointf(curve->apfx[i++], scale) + oset;
|
||||
QPointF p2 = qt_to_qpointf(curve->apfx[i++], scale, stretch) + oset;
|
||||
QPointF p3 = qt_to_qpointf(curve->apfx[i++], scale, stretch) + oset;
|
||||
QPointF p4 = qt_to_qpointf(curve->apfx[i++], scale, stretch) + oset;
|
||||
path->cubicTo(p2, p3, p4);
|
||||
}
|
||||
break;
|
||||
@ -829,9 +830,11 @@ void QWindowsFontEngine::addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions
|
||||
HDC hdc = m_fontEngineData->hdc;
|
||||
HGDIOBJ oldfont = SelectObject(hdc, hf);
|
||||
|
||||
qreal scale = qreal(fontDef.pixelSize) / unitsPerEm;
|
||||
qreal stretch = fontDef.stretch ? qreal(fontDef.stretch) / 100 : 1.0;
|
||||
for(int i = 0; i < nglyphs; ++i) {
|
||||
if (!addGlyphToPath(glyphs[i], positions[i], hdc, path, ttf, /*metric*/0,
|
||||
qreal(fontDef.pixelSize) / unitsPerEm)) {
|
||||
scale, stretch)) {
|
||||
// Some windows fonts, like "Modern", are vector stroke
|
||||
// fonts, which are reported as TMPF_VECTOR but do not
|
||||
// support GetGlyphOutline, and thus we set this bit so
|
||||
|
@ -85,7 +85,7 @@ QTsLibMouseHandler::QTsLibMouseHandler(const QString &key,
|
||||
if (fd >= 0) {
|
||||
qCDebug(qLcTsLib) << "tslib device is" << device;
|
||||
m_notify = new QSocketNotifier(fd, QSocketNotifier::Read, this);
|
||||
connect(m_notify, SIGNAL(activated(int)), this, SLOT(readMouseData()));
|
||||
connect(m_notify, &QSocketNotifier::activated, this, &QTsLibMouseHandler::readMouseData);
|
||||
} else {
|
||||
qErrnoWarning(errno, "tslib: Cannot open input device %s", device.constData());
|
||||
}
|
||||
@ -129,7 +129,9 @@ void QTsLibMouseHandler::readMouseData()
|
||||
}
|
||||
QPoint pos(x, y);
|
||||
|
||||
QWindowSystemInterface::handleMouseEvent(0, pos, pos, pressed ? Qt::LeftButton : Qt::NoButton);
|
||||
QWindowSystemInterface::handleMouseEvent(nullptr, pos, pos,
|
||||
pressed ? Qt::LeftButton : Qt::NoButton,
|
||||
Qt::NoButton, QEvent::None);
|
||||
|
||||
m_x = x;
|
||||
m_y = y;
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
defineTest(qtConfLibrary_psqlConfig) {
|
||||
pg_config = $$config.input.psql_config
|
||||
isEmpty(pg_config): \
|
||||
isEmpty(pg_config):!cross_compile: \
|
||||
pg_config = $$qtConfFindInPath("pg_config")
|
||||
!win32:!isEmpty(pg_config) {
|
||||
qtRunLoggedCommand("$$pg_config --libdir", libdir)|return(false)
|
||||
@ -33,7 +33,7 @@ defineTest(qtConfLibrary_psqlEnv) {
|
||||
|
||||
defineTest(qtConfLibrary_mysqlConfig) {
|
||||
mysql_config = $$config.input.mysql_config
|
||||
isEmpty(mysql_config): \
|
||||
isEmpty(mysql_config):!cross_compile: \
|
||||
mysql_config = $$qtConfFindInPath("mysql_config")
|
||||
!isEmpty(mysql_config) {
|
||||
qtRunLoggedCommand("$$mysql_config --version", version)|return(false)
|
||||
|
@ -4,3 +4,5 @@
|
||||
windows ci
|
||||
[blockingLookup:a-plus-aaaa]
|
||||
windows ci
|
||||
[reverseLookup:google-public-dns-a.google.com]
|
||||
ci
|
||||
|
3
tests/auto/widgets/graphicsview/qgraphicsitem/BLACKLIST
Normal file
3
tests/auto/widgets/graphicsview/qgraphicsitem/BLACKLIST
Normal file
@ -0,0 +1,3 @@
|
||||
# QTBUG-74760
|
||||
[sorting]
|
||||
opensuse-42.3
|
Loading…
x
Reference in New Issue
Block a user