From fb5691b6cc42cab42d0f15e8fbb25b2e1ff4ad0d Mon Sep 17 00:00:00 2001 From: Ilia Bozhinov Date: Fri, 23 Nov 2018 21:20:57 +0100 Subject: output: add wlr_output_preferred_read_format() The read format is dependent on the output, so we first need to make it current. This fixes a race condition in wlr-screencopy-v1 where a dmabuf client would cause EGL_NO_SURFACE to be bound at the time when screencopy needs to query for the preferred format, causing GL errors. --- include/wlr/render/wlr_renderer.h | 5 ----- include/wlr/types/wlr_output.h | 6 ++++++ 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'include') diff --git a/include/wlr/render/wlr_renderer.h b/include/wlr/render/wlr_renderer.h index 02b4a11e..9c031b7f 100644 --- a/include/wlr/render/wlr_renderer.h +++ b/include/wlr/render/wlr_renderer.h @@ -96,11 +96,6 @@ int wlr_renderer_get_dmabuf_formats(struct wlr_renderer *renderer, */ int wlr_renderer_get_dmabuf_modifiers(struct wlr_renderer *renderer, int format, uint64_t **modifiers); -/** - * Get the preferred format for reading pixels. - */ -bool wlr_renderer_preferred_read_format(struct wlr_renderer *renderer, - enum wl_shm_format *fmt); /** * Reads out of pixels of the currently bound surface into data. `stride` is in * bytes. diff --git a/include/wlr/types/wlr_output.h b/include/wlr/types/wlr_output.h index 557a3895..6d38152a 100644 --- a/include/wlr/types/wlr_output.h +++ b/include/wlr/types/wlr_output.h @@ -192,6 +192,12 @@ void wlr_output_effective_resolution(struct wlr_output *output, * unknown. This is useful for damage tracking. */ bool wlr_output_make_current(struct wlr_output *output, int *buffer_age); +/** + * Get the preferred format for reading pixels. + * This function might change the current rendering context. + */ +bool wlr_output_preferred_read_format(struct wlr_output *output, + enum wl_shm_format *fmt); /** * Swaps the output buffers. If the time of the frame isn't known, set `when` to * NULL. If the compositor doesn't support damage tracking, set `damage` to -- cgit v1.2.3