On certain models of nvidia and AMD GPUs, we can have a primary plane
without any DRM plane for the cursor plane. Check for this so we don't
segfault on non-intel hardware.

Signed-off-by: Lyude <[email protected]>
---
 lib/igt_kms.c | 27 +++++++++++++++------------
 lib/igt_kms.h |  1 +
 2 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 433a721..13d323e 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -1419,7 +1419,7 @@ void igt_display_init(igt_display_t *display, int drm_fd)
                                plane = &pipe->planes[IGT_PLANE_CURSOR];
                                plane->is_cursor = 1;
                                plane->index = IGT_PLANE_CURSOR;
-                               display->has_universal_planes = 1;
+                               display->has_cursor_plane = 1;
                                break;
                        default:
                                plane = &pipe->planes[p];
@@ -1444,9 +1444,20 @@ void igt_display_init(igt_display_t *display, int drm_fd)
                        plane->rotation = (igt_rotation_t)prop_value;
                }
 
-               if (display->has_universal_planes) {
+               if (!display->has_universal_planes) {
+                       /*
+                        * No universal plane support.  Add drm_plane-less
+                        * primary and cursor planes.
+                        */
+                       plane = &pipe->planes[IGT_PLANE_PRIMARY];
+                       plane->pipe = pipe;
+                       plane->index = IGT_PLANE_PRIMARY;
+                       plane->is_primary = true;
+               }
+
+               if (display->has_cursor_plane) {
                        /*
-                        * If we have universal planes, we should have both
+                        * If we have a cursor plane, we should have both
                         * primary and cursor planes setup now.
                         */
                        igt_assert(pipe->planes[IGT_PLANE_PRIMARY].drm_plane &&
@@ -1464,15 +1475,7 @@ void igt_display_init(igt_display_t *display, int drm_fd)
                                       sizeof *plane);
                        }
                } else {
-                       /*
-                        * No universal plane support.  Add drm_plane-less
-                        * primary and cursor planes.
-                        */
-                       plane = &pipe->planes[IGT_PLANE_PRIMARY];
-                       plane->pipe = pipe;
-                       plane->index = IGT_PLANE_PRIMARY;
-                       plane->is_primary = true;
-
+                       /* Add drm_plane-less cursor */
                        plane = &pipe->planes[p];
                        plane->pipe = pipe;
                        plane->index = p;
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 95395cd..95d81c3 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -312,6 +312,7 @@ struct igt_display {
        igt_output_t *outputs;
        igt_pipe_t pipes[I915_MAX_PIPES];
        bool has_universal_planes;
+       bool has_cursor_plane;
        bool is_atomic;
 };
 
-- 
2.7.4

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to