mesa/src/egl
Kenneth Graunke b52fbf7185 egl: Rewrite eglGetMscRateANGLE to avoid probes and handle multi-monitor
RRGetScreenInfo re-probes connector status, which may result in an EDID
transfer for every output, which according to Adam Jackson can be on the
order of 100ms for a single EDID block.  So our previous implementation
of this eglGetMscRateANGLE was blocking for excessive periods of time
instead of being a quick query of the refresh rate like users expect.

This changes our eglGetMscRateANGLE implementation from using
RRGetScreenInfo to RRGetScreenResourcesCurrent and RRGetCrtcInfo.
This obtains the same monitor info without re-probing connectors.

Fixes a severe performance regression in Chromium WebGL performance.

While we're re-implementing the extension, we also implement proper
multi-monitor support: if there are multiple active CRTCs, we determine
which contains the largest portion of the surface, as specified in the
EGL_ANGLE_sync_control_rate extension.

We also now report fractional refresh rates correctly rather than
rounding to the nearest Hz.

Fixes: 4752655649 ("egl/x11: implement ANGLE_sync_control_rate")
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6996
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/7038
Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20665>
(cherry picked from commit 41d5f0ee09)
2023-02-08 20:34:39 +00:00
..
drivers egl: Rewrite eglGetMscRateANGLE to avoid probes and handle multi-monitor 2023-02-08 20:34:39 +00:00
generate
main Revert "egl/glx: add fallback for zink loading" 2022-11-17 14:05:05 +00:00
wayland
egl-entrypoint-check.py
egl-glvnd-symbols.txt
egl-symbols.txt egl/dri2: Implement the new flush method 2022-11-02 18:11:41 +00:00
meson.build meson: Refactoring shared gen_vs_module_defs_normal_command out 2022-11-17 14:05:02 +00:00