[vlc-devel] [PATCH v2 2/3] vulkan: force swapchain resize on display size change
Rémi Denis-Courmont
remi at remlab.net
Thu May 7 20:59:21 CEST 2020
Le torstaina 7. toukokuuta 2020, 20.42.33 EEST Alexandre Janniaux a écrit :
> On Windows the swapchain might not be re-created automatically, which
> result in glitches when using the vk output. This enforce the creation
> of the swapchain as soon as the display size is changed.
>
> On Wayland, the size of the window is the size of the content so there
> is no automatic swapchain sizing and this call is mandatory.
> ---
> modules/video_output/vulkan/display.c | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/modules/video_output/vulkan/display.c
> b/modules/video_output/vulkan/display.c index 174627d67da..b65a654cb16
> 100644
> --- a/modules/video_output/vulkan/display.c
> +++ b/modules/video_output/vulkan/display.c
> @@ -351,6 +351,26 @@ static int Control(vout_display_t *vd, int query,
> va_list ap) case VOUT_DISPLAY_CHANGE_ZOOM: {
> vout_display_cfg_t cfg = *va_arg (ap, const vout_display_cfg_t *);
> vout_display_PlacePicture(&sys->place, &vd->source, &cfg);
> +
> + /* The following resize should be automatic on most platforms but
> can + * trigger bugs on some platform with some drivers, that have
> been seen + * on Windows in particular. Doing it right now enforce
> the correct + * behavior and prevent these bugs.
> + * In addition, platforms like Wayland need the call as the size of
> the + * window is defined by the size of the content, and not the
> opposite. + * The swapchain creation won't be done twice with this
> call. */ +#if PL_API_VER >= 18
> + if (query == VOUT_DISPLAY_CHANGE_DISPLAY_SIZE)
> + {
> + int width = (int) cfg.display.width;
> + int height = (int) cfg.display.height;
> + pl_swapchain_resize(sys->vk->swapchain, &width, &height);
> +
> + if (width != (int) cfg.display.width
> + || height != (int) cfg.display.height)
> + return VLC_EGENERIC;
Failing this call has not been allowed for a year or two as it breaks push-
buffers.
> + }
> +#endif
> return VLC_SUCCESS;
> }
--
Реми Дёни-Курмон
http://www.remlab.net/
More information about the vlc-devel
mailing list