aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2019-07-08 11:36:14 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2019-07-08 11:36:14 +0200
commit9c5af084a9c2665d0d6c1f55f39170ac6ae8e335 (patch)
tree7729e55e1b1d88f9cf601b3b3ab0cc5aee6a8cd8 /tools
parent1c5c5f7aadc2dcc73a21eeb818e95c4e1b7de70f (diff)
parentef8a27544ac47b0ec2fc8c058d32c5b22650b359 (diff)
Merge remote-tracking branch 'origin/dev' into wip/qt6
Diffstat (limited to 'tools')
-rw-r--r--tools/qml/main.cpp14
-rw-r--r--tools/qmlcachegen/qmlcachegen.cpp25
-rw-r--r--tools/qmlcachegen/resourcefilemapper.cpp4
-rw-r--r--tools/qmlimportscanner/main.cpp7
-rw-r--r--tools/qmlplugindump/main.cpp6
-rw-r--r--tools/qmlscene/main.cpp41
6 files changed, 68 insertions, 29 deletions
diff --git a/tools/qml/main.cpp b/tools/qml/main.cpp
index 1e367d91bf..9edc90e050 100644
--- a/tools/qml/main.cpp
+++ b/tools/qml/main.cpp
@@ -494,6 +494,12 @@ int main(int argc, char *argv[])
QCommandLineOption fixedAnimationsOption(QStringLiteral("fixed-animations"),
QCoreApplication::translate("main", "Run animations off animation tick rather than wall time."));
parser.addOption(fixedAnimationsOption);
+ QCommandLineOption rhiOption(QStringList() << QStringLiteral("r") << QStringLiteral("rhi"),
+ QCoreApplication::translate("main", "Use the Qt graphics abstraction (RHI) instead of OpenGL directly. "
+ "Backend is one of: default, vulkan, metal, d3d11, gl"),
+ QStringLiteral("backend"));
+ parser.addOption(rhiOption);
+
// Positional arguments
parser.addPositionalArgument("files",
QCoreApplication::translate("main", "Any number of QML files can be loaded. They will share the same engine."), "[files...]");
@@ -549,6 +555,14 @@ int main(int argc, char *argv[])
translationFile = parser.value(translationOption);
if (parser.isSet(dummyDataOption))
dummyDir = parser.value(dummyDataOption);
+ if (parser.isSet(rhiOption)) {
+ qputenv("QSG_RHI", "1");
+ const QString rhiBackend = parser.value(rhiOption);
+ if (rhiBackend == QLatin1String("default"))
+ qunsetenv("QSG_RHI_BACKEND");
+ else
+ qputenv("QSG_RHI_BACKEND", rhiBackend.toLatin1());
+ }
for (QString posArg : parser.positionalArguments()) {
if (posArg == QLatin1String("--"))
break;
diff --git a/tools/qmlcachegen/qmlcachegen.cpp b/tools/qmlcachegen/qmlcachegen.cpp
index b5abe568aa..abad2435dc 100644
--- a/tools/qmlcachegen/qmlcachegen.cpp
+++ b/tools/qmlcachegen/qmlcachegen.cpp
@@ -65,6 +65,7 @@ struct Error
void print();
Error augment(const QString &contextErrorMessage) const;
void appendDiagnostics(const QString &inputFileName, const QList<QQmlJS::DiagnosticMessage> &diagnostics);
+ void appendDiagnostic(const QString &inputFileName, const DiagnosticMessage &diagnostic);
};
void Error::print()
@@ -94,13 +95,17 @@ QString diagnosticErrorMessage(const QString &fileName, const QQmlJS::Diagnostic
return message;
}
+void Error::appendDiagnostic(const QString &inputFileName, const DiagnosticMessage &diagnostic)
+{
+ if (!message.isEmpty())
+ message += QLatin1Char('\n');
+ message += diagnosticErrorMessage(inputFileName, diagnostic);
+}
+
void Error::appendDiagnostics(const QString &inputFileName, const QList<DiagnosticMessage> &diagnostics)
{
- for (const QQmlJS::DiagnosticMessage &parseError: diagnostics) {
- if (!message.isEmpty())
- message += QLatin1Char('\n');
- message += diagnosticErrorMessage(inputFileName, parseError);
- }
+ for (const QQmlJS::DiagnosticMessage &diagnostic: diagnostics)
+ appendDiagnostic(inputFileName, diagnostic);
}
// Ensure that ListElement objects keep all property assignments in their string form
@@ -211,9 +216,8 @@ static bool compileQmlFile(const QString &inputFileName, SaveFunction saveFuncti
for (QmlIR::CompiledFunctionOrExpression *foe = object->functionsAndExpressions->first; foe; foe = foe->next)
functionsToCompile << *foe;
const QVector<int> runtimeFunctionIndices = v4CodeGen.generateJSCodeForFunctionsAndBindings(functionsToCompile);
- QList<QQmlJS::DiagnosticMessage> jsErrors = v4CodeGen.errors();
- if (!jsErrors.isEmpty()) {
- error->appendDiagnostics(inputFileName, jsErrors);
+ if (v4CodeGen.hasError()) {
+ error->appendDiagnostic(inputFileName, v4CodeGen.error());
return false;
}
@@ -310,9 +314,8 @@ static bool compileJSFile(const QString &inputFileName, const QString &inputFile
irDocument.program, &irDocument.jsGenerator.stringTable, illegalNames);
v4CodeGen.generateFromProgram(inputFileName, inputFileUrl, sourceCode, program,
&irDocument.jsModule, QV4::Compiler::ContextType::ScriptImportedByQML);
- QList<QQmlJS::DiagnosticMessage> jsErrors = v4CodeGen.errors();
- if (!jsErrors.isEmpty()) {
- error->appendDiagnostics(inputFileName, jsErrors);
+ if (v4CodeGen.hasError()) {
+ error->appendDiagnostic(inputFileName, v4CodeGen.error());
return false;
}
diff --git a/tools/qmlcachegen/resourcefilemapper.cpp b/tools/qmlcachegen/resourcefilemapper.cpp
index 6a00b39f2e..244874717f 100644
--- a/tools/qmlcachegen/resourcefilemapper.cpp
+++ b/tools/qmlcachegen/resourcefilemapper.cpp
@@ -50,10 +50,8 @@ bool ResourceFileMapper::isEmpty() const
QStringList ResourceFileMapper::resourcePaths(const QString &fileName)
{
const QString absPath = QDir::cleanPath(QDir::current().absoluteFilePath(fileName));
- QHashIterator<QString, QString> it(qrcPathToFileSystemPath);
QStringList resourcePaths;
- while (it.hasNext()) {
- it.next();
+ for (auto it = qrcPathToFileSystemPath.cbegin(), end = qrcPathToFileSystemPath.cend(); it != end; ++it) {
if (QFileInfo(it.value()) == QFileInfo(absPath))
resourcePaths.append(it.key());
}
diff --git a/tools/qmlimportscanner/main.cpp b/tools/qmlimportscanner/main.cpp
index ee69a0ed42..05d1f7fdc0 100644
--- a/tools/qmlimportscanner/main.cpp
+++ b/tools/qmlimportscanner/main.cpp
@@ -86,7 +86,7 @@ void printUsage(const QString &appNameIn)
<< '\n';
}
-QVariantList findImportsInAst(QQmlJS::AST::UiHeaderItemList *headerItemList, const QString &code, const QString &path)
+QVariantList findImportsInAst(QQmlJS::AST::UiHeaderItemList *headerItemList, const QString &path)
{
QVariantList imports;
@@ -120,7 +120,8 @@ QVariantList findImportsInAst(QQmlJS::AST::UiHeaderItemList *headerItemList, con
if (!name.isEmpty())
import[nameLiteral()] = name;
import[typeLiteral()] = moduleLiteral();
- import[versionLiteral()] = code.mid(importNode->versionToken.offset, importNode->versionToken.length);
+ auto versionString = importNode->version ? QString::number(importNode->version->majorVersion) + QLatin1Char('.') + QString::number(importNode->version->minorVersion) : QString();
+ import[versionLiteral()] = versionString;
}
imports.append(import);
@@ -277,7 +278,7 @@ QVariantList findQmlImportsInQmlCode(const QString &filePath, const QString &cod
}
return QVariantList();
}
- return findImportsInAst(parser.ast()->headers, code, filePath);
+ return findImportsInAst(parser.ast()->headers, filePath);
}
// Scan a single qml file for import statements
diff --git a/tools/qmlplugindump/main.cpp b/tools/qmlplugindump/main.cpp
index ccdab57cfc..464f3e8a6b 100644
--- a/tools/qmlplugindump/main.cpp
+++ b/tools/qmlplugindump/main.cpp
@@ -478,8 +478,12 @@ public:
}
}
- for (const QMetaObject *meta : qAsConst(objectsToMerge))
+ for (const QMetaObject *meta : qAsConst(objectsToMerge)) {
+ for (int index = meta->enumeratorOffset(); index < meta->enumeratorCount(); ++index)
+ dump(meta->enumerator(index));
+
writeMetaContent(meta, &knownAttributes);
+ }
qml->writeEndObject();
}
diff --git a/tools/qmlscene/main.cpp b/tools/qmlscene/main.cpp
index d3b8b9ba99..260c5bb7d1 100644
--- a/tools/qmlscene/main.cpp
+++ b/tools/qmlscene/main.cpp
@@ -169,10 +169,13 @@ struct Options
bool multisample = false;
bool coreProfile = false;
bool verbose = false;
+ bool rhi = false;
+ bool rhiBackendSet = false;
QVector<Qt::ApplicationAttribute> applicationAttributes;
QString translationFile;
QmlApplicationType applicationType = DefaultQmlApplicationType;
QQuickWindow::TextRenderType textRenderType;
+ QString rhiBackend;
};
#if defined(QMLSCENE_BUNDLE)
@@ -349,24 +352,26 @@ static void usage()
puts(" --transparent .................... Make the window transparent");
puts(" --multisample .................... Enable multisampling (OpenGL anti-aliasing)");
puts(" --core-profile ................... Request a core profile OpenGL context");
+ puts(" --rhi [vulkan|metal|d3d11|gl] .... Use the Qt graphics abstraction (RHI) instead of OpenGL directly.\n"
+ " .... Backend has platform specific defaults. Specify to override.");
puts(" --no-version-detection ........... Do not try to detect the version of the .qml file");
puts(" --slow-animations ................ Run all animations in slow motion");
puts(" --resize-to-root ................. Resize the window to the size of the root item");
puts(" --quit ........................... Quit immediately after starting");
puts(" --disable-context-sharing ........ Disable the use of a shared GL context for QtQuick Windows\n"
- " .........(remove AA_ShareOpenGLContexts)");
- puts(" --desktop..........................Force use of desktop GL (AA_UseDesktopOpenGL)");
- puts(" --gles.............................Force use of GLES (AA_UseOpenGLES)");
- puts(" --software.........................Force use of software rendering (AA_UseOpenGLES)");
- puts(" --scaling..........................Enable High DPI scaling (AA_EnableHighDpiScaling)");
- puts(" --no-scaling.......................Disable High DPI scaling (AA_DisableHighDpiScaling)");
- puts(" --verbose..........................Print version and graphical diagnostics for the run-time");
+ " ........ (remove AA_ShareOpenGLContexts)");
+ puts(" --desktop......................... Force use of desktop GL (AA_UseDesktopOpenGL)");
+ puts(" --gles............................ Force use of GLES (AA_UseOpenGLES)");
+ puts(" --software........................ Force use of software rendering (AA_UseOpenGLES)");
+ puts(" --scaling......................... Enable High DPI scaling (AA_EnableHighDpiScaling)");
+ puts(" --no-scaling...................... Disable High DPI scaling (AA_DisableHighDpiScaling)");
+ puts(" --verbose......................... Print version and graphical diagnostics for the run-time");
#ifdef QT_WIDGETS_LIB
- puts(" --apptype [gui|widgets] ...........Select which application class to use. Default is widgets.");
+ puts(" --apptype [gui|widgets] .......... Select which application class to use. Default is widgets.");
#endif
- puts(" --textrendertype [qt|native].......Select the default render type for text-like elements.");
+ puts(" --textrendertype [qt|native]...... Select the default render type for text-like elements.");
puts(" -I <path> ........................ Add <path> to the list of import paths");
- puts(" -S <selector> .....................Add <selector> to the list of QQmlFileSelector selectors");
+ puts(" -S <selector> .................... Add <selector> to the list of QQmlFileSelector selectors");
puts(" -P <path> ........................ Add <path> to the list of plugin paths");
puts(" -translation <translationfile> ... Set the language to run in");
@@ -550,7 +555,13 @@ int main(int argc, char ** argv)
options.resizeViewToRootItem = true;
else if (lowerArgument == QLatin1String("--verbose"))
options.verbose = true;
- else if (lowerArgument == QLatin1String("-i") && i + 1 < size)
+ else if (lowerArgument == QLatin1String("--rhi")) {
+ options.rhi = true;
+ if (i + 1 < size && !arguments.at(i + 1).startsWith(QLatin1Char('-'))) {
+ options.rhiBackendSet = true;
+ options.rhiBackend = arguments.at(++i);
+ }
+ } else if (lowerArgument == QLatin1String("-i") && i + 1 < size)
imports.append(arguments.at(++i));
else if (lowerArgument == QLatin1String("-s") && i + 1 < size)
customSelectors.append(arguments.at(++i));
@@ -592,6 +603,14 @@ int main(int argc, char ** argv)
QUnifiedTimer::instance()->setSlowModeEnabled(options.slowAnimations);
+ if (options.rhi) {
+ qputenv("QSG_RHI", "1");
+ if (options.rhiBackendSet)
+ qputenv("QSG_RHI_BACKEND", options.rhiBackend.toLatin1());
+ else
+ qunsetenv("QSG_RHI_BACKEND");
+ }
+
if (options.url.isEmpty())
#if defined(QMLSCENE_BUNDLE)
displayOptionsDialog(&options);