summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2019-09-03 17:36:07 +0300
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2019-09-12 06:43:23 +0300
commit82574e7d6317898600958c356053cfdaa7321c32 (patch)
treed4d099d426094292a01e81cbb3f389a20a961cfc /tools
parent0d6360909793aab11c66f4b8f7001f71cbacfee7 (diff)
Implement shader caching
Currently loaded shaders can now cached with an API call in either source code or binary format. It is necessary to do it that way as the shader cache can only be created in the target hardware. Task-number: QT3DS-3914 Change-Id: I094e8624943904c311ada2259a84b8c183f792f5 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'tools')
-rw-r--r--tools/viewer/main.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/tools/viewer/main.cpp b/tools/viewer/main.cpp
index 910e457..70da8fa 100644
--- a/tools/viewer/main.cpp
+++ b/tools/viewer/main.cpp
@@ -174,7 +174,7 @@ int main(int argc, char *argv[])
"Output filename base for the image\n"
"sequence.\n"
"The default value is derived from the presentation filename."),
- QCoreApplication::translate("main", "file"), QStringLiteral("")});
+ QCoreApplication::translate("main", "file"), QString()});
parser.addOption({"connect",
QCoreApplication::translate("main",
"If this parameter is specified, the viewer\n"
@@ -192,7 +192,7 @@ int main(int argc, char *argv[])
"Specifies the initial\n"
"window geometry using the X11-syntax.\n"
"For example: 1000x800+50+50"),
- QCoreApplication::translate("main", "geometry"), QStringLiteral("")});
+ QCoreApplication::translate("main", "geometry"), QString()});
parser.addOption({"mattecolor",
QCoreApplication::translate("main",
"Specifies custom matte color\n"
@@ -220,6 +220,10 @@ int main(int argc, char *argv[])
"The default value is 0.4"),
QCoreApplication::translate("main", "separation"),
QString::number(0.4)});
+ parser.addOption({"convert-shader-cache",
+ QCoreApplication::translate("main",
+ "Convert base64 dump to shader cache file."),
+ QCoreApplication::translate("main", "fileName"), QString()});
QCommandLineOption variantListOption({QStringLiteral("v"),
QStringLiteral("variants")},
QObject::tr("Gives list of variant groups and variants\n"
@@ -349,6 +353,24 @@ int main(int argc, char *argv[])
else
appWindow->setProperty("scaleMode", Q3DSViewerSettings::ScaleModeCenter);
}
+ if (parser.isSet(QStringLiteral("convert-shader-cache"))) {
+ QString fileName(parser.value(QStringLiteral("convert-shader-cache")));
+ QString cacheFileName = fileName + QStringLiteral(".shadercache");
+ QFile base64File(fileName);
+ bool success = false;
+ if (base64File.open(QIODevice::ReadOnly)) {
+ QByteArray shaderCache = QByteArray::fromBase64(base64File.readAll());
+ QFile cacheFile(cacheFileName);
+ if (cacheFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
+ cacheFile.write(shaderCache);
+ success = true;
+ }
+ }
+ if (success)
+ qInfo() << "Saved shader cache to file:" << cacheFileName;
+ else
+ qWarning() << "Failed to convert" << base64File << "from base64 to a shader cache file";
+ }
if (parser.isSet(QStringLiteral("stereomode"))) {
QString stereoStr(parser.value("stereomode"));
if (stereoStr == QStringLiteral("topbottom"))