qt5base-lts/tests/manual/rhi
Laszlo Agocs f814cc6a79 rhi: metal: Switch back to presentDrawable
This convenience should be, according to the Apple docs, equivalent to
calling present from a scheduled handler. (which on its own makes it
unclear why we switched in the first place)

In practice it seems the two approaches are not identical. It looks
like that once a frame is submitted earlier than the next display link
callback, the throttling behavior we implement in beginFrame()
(waiting on the semaphore for the completion of the appropriate
command list etc.) starts exhibiting unexpected behavior, not
correctly throttling the thread to the refresh rate. Changing back to
presentDrawable does not exhibit this at all.

The suspicion is that presentDrawable is probably doing more than what
the docs suggest, and so is not fully equivalent to calling present
manually from a scheduled handler.

Therefore, switch to presentDrawable now, which restores the expected
cross-platform behavior, but make a note of the oddity, and also
prepare the hellominimalcrossgfxtriangle manual test to provide an
easy, self-contained application to allow experimenting in the future,
if needed.

This allows Qt Quick render thread animations to advance at the
expected speed (because the render thread is correctly throttled to
the refresh rate), even if the render thread decides to generate a new
frame right away, without waiting for the next display link update.

Without this patch, attempting to get updates not via requestUpdate(),
but by other means (timer etc.) leads to incorrect throttling, and so
the triangle in the test app is rotating faster than expected - but
only with Metal. Running with OpenGL on macOS or with any API on any
other platform the behavior will be correct. Even if scheduling
updates without display link is not efficient, and should be
discouraged, not doing so cannot break the core contract of vsync
throttling, i.e. the thread cannot run faster just because it renders
a frame not in response to an UpdateRequest.

Amends 98b60450f7 (effectively reverts
but keeps the code and the notes because we might want to clear this
up some day)

Pick-to: 6.4 6.3 6.2
Fixes: QTBUG-103415
Change-Id: Id3bd43e94785384142337564ce4b2644bf257100
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
2022-06-28 10:47:41 +02:00
..
compressedtexture_bc1 Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
compressedtexture_bc1_subupload Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
computebuffer Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
computeimage Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
cubemap Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
cubemap_render Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
cubemap_scissor Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
float16texture_with_compute Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
floattexture Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
geometryshader Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
hellominimalcrossgfxtriangle rhi: metal: Switch back to presentDrawable 2022-06-28 10:47:41 +02:00
instancing Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
mrt Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
msaarenderbuffer Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
msaatexture Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
multiwindow Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
multiwindow_threaded Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
noninstanced Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
offscreen Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
polygonmode Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
rhiwidget Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
shadowmap Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
shared Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
tessellation Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
tex3d Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
texturearray Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
texuploads Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
triquadcube Use SPDX license identifiers 2022-05-16 16:37:38 +02:00
CMakeLists.txt Compose render-to-texture widgets through QRhi 2022-03-11 21:25:00 +01:00
rhi.pro rhi: Add support for 3D textures 2021-05-31 17:16:57 +02:00