diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2019-09-03 17:36:07 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2019-09-12 06:43:23 +0300 |
commit | 82574e7d6317898600958c356053cfdaa7321c32 (patch) | |
tree | d4d099d426094292a01e81cbb3f389a20a961cfc /tools | |
parent | 0d6360909793aab11c66f4b8f7001f71cbacfee7 (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.cpp | 26 |
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")) |