Currently, we rely on implicit synchronization to ensure that client's rendering commands have finished executing on GPU before reading data. There is a discussion [1] upstream to make explicit synchronization a thing. The main advantage of explicit synchronization is that if it is implemented the right way, we won't stall the pipeline, which is nice.
[1] https://lists.freedesktop.org/archives/mesa-dev/2020-March/224228.html