[vlc-devel] [PATCH 09/17] vulkan: force swapchain resize on display size change

Alexandre Janniaux ajanni at videolabs.io
Mon Apr 12 13:32:25 UTC 2021


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 afeede820e..dc6cb2726c 100644
--- a/modules/video_output/vulkan/display.c
+++ b/modules/video_output/vulkan/display.c
@@ -402,6 +402,26 @@ static int Control(vout_display_t *vd, int query)
     case VOUT_DISPLAY_CHANGE_SOURCE_CROP:
     case VOUT_DISPLAY_CHANGE_ZOOM: {
         vout_display_PlacePicture(&sys->place, vd->source, vd->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) vd->cfg->display.width;
+            int height = (int) vd->cfg->display.height;
+            pl_swapchain_resize(sys->swapchain, &width, &height);
+
+            if (width != (int) vd->cfg->display.width
+             || height != (int) vd->cfg->display.height)
+                return VLC_EGENERIC;
+        }
+#endif
         return VLC_SUCCESS;
     }
 
-- 
2.31.1



More information about the vlc-devel mailing list