drm/vkms: add support for multiple overlay planes
authorJosé Expósito <jose.exposito89@gmail.com>
Fri, 7 Jan 2022 18:28:08 +0000 (19:28 +0100)
committerMelissa Wen <melissa.srw@gmail.com>
Sun, 9 Jan 2022 17:14:35 +0000 (16:14 -0100)
Create 8 overlay planes instead of 1 when the "enable_overlay" module
parameter is set.

The following igt-gpu-tools tests were executed without finding
regressions. Notice than the numbers are identical:

                    |     master branch     |      this  patch      |
                    | SUCCESS | SKIP | FAIL | SUCCESS | SKIP | FAIL |
 kms_atomic         |      10 |   02 |   00 |      10 |   02 |   00 |
 kms_plane_cursor   |      09 |   45 |   00 |      09 |   45 |   00 |
 kms_plane_multiple |      01 |   23 |   00 |      01 |   23 |   00 |
 kms_writeback      |      04 |   00 |   00 |      04 |   00 |   00 |

Signed-off-by: José Expósito <jose.exposito89@gmail.com>
Reviewed-by: Melissa Wen <mwen@igalia.com>
Signed-off-by: Melissa Wen <melissa.srw@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220107182809.141003-2-jose.exposito89@gmail.com
drivers/gpu/drm/vkms/vkms_drv.h
drivers/gpu/drm/vkms/vkms_output.c

index d48c23d40ce5f6bcab5fd885f948ab6e9aad24a7..9496fdc900b8cf4c31531f5dde3b0a046e250734 100644 (file)
@@ -20,6 +20,8 @@
 #define XRES_MAX  8192
 #define YRES_MAX  8192
 
+#define NUM_OVERLAY_PLANES 8
+
 struct vkms_writeback_job {
        struct dma_buf_map map[DRM_FORMAT_MAX_PLANES];
        struct dma_buf_map data[DRM_FORMAT_MAX_PLANES];
index 2e805b2d36aed0b0d8600394589c03fb5bfdb460..ba0e82ae549a6a23ab9e1014613a86d9046d710f 100644 (file)
@@ -57,15 +57,18 @@ int vkms_output_init(struct vkms_device *vkmsdev, int index)
        struct vkms_plane *primary, *cursor = NULL;
        int ret;
        int writeback;
+       unsigned int n;
 
        primary = vkms_plane_init(vkmsdev, DRM_PLANE_TYPE_PRIMARY, index);
        if (IS_ERR(primary))
                return PTR_ERR(primary);
 
        if (vkmsdev->config->overlay) {
-               ret = vkms_add_overlay_plane(vkmsdev, index, crtc);
-               if (ret)
-                       return ret;
+               for (n = 0; n < NUM_OVERLAY_PLANES; n++) {
+                       ret = vkms_add_overlay_plane(vkmsdev, index, crtc);
+                       if (ret)
+                               return ret;
+               }
        }
 
        if (vkmsdev->config->cursor) {