qt5base-lts/tests/manual
Laszlo Agocs df0e98d408 rhi: Pipeline cache load/save
Add QRhi APIs to retrieve and reload the contents of the "pipeline
cache".

The only API where there is a true pipeline cache is object is Vulkan
(VkPipelineCache). For OpenGL, the other backend where we support this,
it is simulated with program binaries. The Qt 5 style OpenGL program
binary disk cache continues to work like before, but one has now the
option to do things in a more modern, graphics API agnostic way, that
leads to generating a single blob instead of a large set of files in
some system location, allowing easier "pre-baking" of the cache content.

It is expected that Qt Quick exposes the two new functions in form
if QSG_RHI_ environment variables, thus allowing easy testing and
cache file generation.

As an example for the performance improvements this can give, consider
Vulkan, where we do not have any existing persistent caching mechanism
in place:

Running BenchmarkDemoQt6.exe --scene flythrough --mode demo creates 18
QRhiGraphicsPipeline objects from Qt Quick and Qt Quick 3D.

The total time spent in QRhiGraphicsPipeline::create() during application
startup for these 18 pipelines is 35-40 ms on a given Windows (NVIDIA)
system.

When exporting the pipeline cache contents to a file, and then, in a
subsequent run, reloading the cache contents, this is reduced to 5-7 ms
on the same system, meaning we get a 6-7x improvement.

The generated data is always specific to a given Qt version, RHI
backend, graphics device, and driver version. Much of the implementation
consists of adding and verifying the appropriate header to the blobs
retrieved from the driver, to allow gracefully ignoring data that was
generated with a device or driver that differs from the one used at
run time. This should provide robustness, even if the Vulkan or OpenGL
implementation is for some reason not prepared to identity and reject
incompatible cache/program blobs.

Fixes: QTBUG-90398
Change-Id: I67b197f393562434f372c7b7377f638abab85cb3
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
2021-01-22 10:26:03 +01:00
..
cocoa Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
corelib/tools Use QList instead of QVector in other qtbase tests 2020-07-07 11:48:45 +02:00
diaglib CMake: Regenerate projects using pro2cmake one last time 2020-12-10 11:52:30 +01:00
dialogs Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
embeddedintoforeignwindow Fix compilation of some manual tests 2020-09-26 19:53:54 +02:00
filetest CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
foreignwindows Fix compilation of some manual tests 2020-09-26 19:53:54 +02:00
gestures Fix deprecations in manual tests 2020-12-01 20:20:11 +01:00
highdpi CMake: Update usage of add_qt_gui_executable 2020-10-29 12:13:34 +01:00
inputmethodhints Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
keypadnavigation Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
lance CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
markdown CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
mkspecs Updated license headers 2016-01-21 18:55:18 +00:00
network_remote_stresstest Replace QtTest headers with QTest 2020-12-22 15:20:30 +01:00
network_stresstest Replace QtTest headers with QTest 2020-12-22 15:20:30 +01:00
qcursor tests: add a shortcut to quit app in allcursors 2020-12-04 16:20:09 +01:00
qdesktopservices Replace QtTest headers with QTest 2020-12-22 15:20:30 +01:00
qgraphicsitem Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
qgraphicsitemgroup Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
qgraphicslayout/flicker CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
qhttpnetworkconnection Replace QtTest headers with QTest 2020-12-22 15:20:30 +01:00
qimagereader CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
qlayout Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
qlocale CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
qmetatype CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
qmimedatabase CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
qnetconmonitor Remove .prev_CMakeLists.txt files 2021-01-12 20:59:13 +01:00
qnetworkaccessmanager/qget CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
qnetworkreply Remove .prev_CMakeLists.txt files 2021-01-12 20:59:13 +01:00
qopenglcontext Rename the new platform APIs from QPlatformInterface to QNativeInterface 2020-10-07 13:03:27 +02:00
qopengltextureblitter Remove .prev_CMakeLists.txt files 2021-01-12 20:59:13 +01:00
qopenglwidget/openglwidget Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
qopenglwindow/multiwindow CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
qprintdevice_dump CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
qscreen Get rid of all usage of QApplication:desktop 2020-10-14 06:38:43 +02:00
qssloptions CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
qsslsocket Replace QtTest headers with QTest 2020-12-22 15:20:30 +01:00
qstorageinfo CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
qsysinfo CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
qt_poll Replace QtTest headers with QTest 2020-12-22 15:20:30 +01:00
qtabbar Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
qtabletevent Remove .prev_CMakeLists.txt files 2021-01-12 20:59:13 +01:00
qtbug-8933 Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
qtbug-52641 CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
qtexteditlist Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
qtexttableborders CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
qtouchevent Replace QtTest headers with QTest 2020-12-22 15:20:30 +01:00
qvulkaninstance CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
qwidget_zorder CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
repaint Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
rhi rhi: Pipeline cache load/save 2021-01-22 10:26:03 +01:00
shortcuts Manual shortcut test: Fix deprecation warnings about key combinations 2020-11-16 12:35:42 +01:00
socketengine Remove .prev_CMakeLists.txt files 2021-01-12 20:59:13 +01:00
startsystemmove Add QWindow::startSystemMove and startSystemResize 2020-01-28 16:52:13 +01:00
textrendering Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
touch Fix deprecations in manual tests 2020-12-01 20:20:11 +01:00
touchGraphicsItem CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
transientwindow Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
triangulator CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
unc CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
wasm wasm: support all cursor shapes 2019-12-30 14:30:22 +03:00
widgetgrab Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
widgets Remove .prev_CMakeLists.txt files 2021-01-12 20:59:13 +01:00
windowchildgeometry Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
windowflags Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
windowgeometry Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
windowmodality Expunge WA_GroupLeader 2020-10-27 02:55:59 +01:00
windowtransparency CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
xcb_gl_integration CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
xembed-raster Another round of replacing 0 with nullptr 2020-10-07 23:02:47 +02:00
xembed-widgets CMake: Regenerate projects to use new qt_internal_ API 2020-09-23 16:59:06 +02:00
CMakeLists.txt CMake: Regenerate manual tests 2020-07-08 11:01:38 +02:00
manual.pro Purge QDesktopWidget 2020-10-16 04:44:13 +02:00