[Intel-gfx] [PATCH i-g-t 1/3] igt_kms: Don't assume we have cursor planes if we have primary ones
Tomeu Vizoso
tomeu at tomeuvizoso.net
Wed Dec 7 07:34:15 UTC 2016
On 21 November 2016 at 23:32, Lyude <lyude at redhat.com> wrote:
> 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 <lyude at redhat.com>
> ---
> 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;
Looks good to me, but Daniel Vetter voiced support the other day for
dropping support for !has_universal_planes so it may not be a good
idea to complicate this further.
But if we go this way, the has_cursor_plane name could be misleading
in the !universal_plane case if there's a cursor plane.
Regards,
Tomeu
> 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
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
More information about the Intel-gfx
mailing list