renderer-native: Accept frames without ever blocking

CRTCs now hold references to front buffer objects for the duration
they are required for scanouts. This allows for automatic release of
a front buffer object at exactly the right time without needing to
block on explicit synchronization. So `wait_for_pending_flips` is
now removed. In modern Vulkan terminology this new algorithm is the
*mailbox* presentation mode and the old algorithm was *FIFO* mode.

Multi-monitor performance benefits the most from this change. Previously
for identical monitors mutter would be blocked around 50% of the time on
average (worst case 100%, best case 0%). For monitors of different
frequencies the average could easily be higher than 50%. However this
patch makes that figure 0% in all cases, never blocking. CPU/GPU
frequency scaling should also behave better (go higher when required)
now as we're no longer blocking accidentally in the wrong place and
fooling the kernel into thinking we're intentionally idle.

Where previously mutter could only render at the frequency of the slowest
monitor, it now renders at the frequency of the fastest. For the slower
monitors they just get whatever the latest frame was according to the
rate of the fastest. So we no longer starve any monitor of new frames
and they are all able to update at their maximum frequencies.

Fixes: GNOME/mutter#3
3 jobs for !73 with crtc-holds-reference in 2 minutes and 4 seconds (queued for 1 second)
latest detached
Status Job ID Name Coverage
  Review
passed #229227
check-commit-log

00:00:35

 
  Build
failed #229228
build-mutter

00:01:29

 
  Test
skipped #229229
test-mutter
 
Name Stage Failure
failed
build-mutter Build
[798/887] Compiling C object 'src/25a6634@@mutter@exe/meson-generated_.._meta-dbus-login1.c.o'.
[799/887] Compiling C object 'src/25a6634@@mutter@exe/core_mutter.c.o'.
[800/887] Compiling C object 'src/25a6634@@mutter@exe/meson-generated_.._meta_meta-enum-types.c.o'.
[801/887] Compiling C object 'src/tests/a4ccf2d@@mutter-test-runner@exe/meson-generated_.._.._meta-dbus-login1.c.o'.
[802/887] Compiling C object 'src/tests/a4ccf2d@@mutter-test-runner@exe/meson-generated_.._.._meta-dbus-remote-desktop.c.o'.
[803/887] Compiling C object 'src/25a6634@@mutter@exe/meson-generated_.._meta-dbus-screen-cast.c.o'.
[804/887] Generating Clutter-4.gir with a custom command.
ninja: build stopped: subcommand failed.
ERROR: Job failed: exit code 1