Message ID | f48200af36c3358d549fc451fbc754c2a37b0d47.1521075485.git.digetx@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Mar 15, 2018 at 04:00:25AM +0300, Dmitry Osipenko wrote: > Older Tegra's do not support RGBA format for the cursor, but instead > overlay plane could be used for it. Since there is no much use for the > overlays on a regular desktop and HW-accelerated cursor is much better > than a SW cursor, let's dedicate one overlay plane to the mouse cursor. > > Signed-off-by: Dmitry Osipenko <digetx@gmail.com> > --- > drivers/gpu/drm/tegra/dc.c | 28 +++++++++++++++++++++++----- > 1 file changed, 23 insertions(+), 5 deletions(-) Applied. I'm not entirely happy that we need to sacrifice one of the overlay windows for this, but you're right, it's probably okay given how little planes are used on a regular desktop. We could always provide a module parameter to switch this on and off if that's ever something we want. Applied, thanks. Thierry
On Thu, Mar 15, 2018 at 11:45 AM, Thierry Reding <thierry.reding@gmail.com> wrote: > On Thu, Mar 15, 2018 at 04:00:25AM +0300, Dmitry Osipenko wrote: >> Older Tegra's do not support RGBA format for the cursor, but instead >> overlay plane could be used for it. Since there is no much use for the >> overlays on a regular desktop and HW-accelerated cursor is much better >> than a SW cursor, let's dedicate one overlay plane to the mouse cursor. >> >> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> >> --- >> drivers/gpu/drm/tegra/dc.c | 28 +++++++++++++++++++++++----- >> 1 file changed, 23 insertions(+), 5 deletions(-) > > Applied. I'm not entirely happy that we need to sacrifice one of the > overlay windows for this, but you're right, it's probably okay given > how little planes are used on a regular desktop. > > We could always provide a module parameter to switch this on and off > if that's ever something we want. The idea with universal planes is that you can (at least try to) use the cursor overlay plane as a normal plane. It is only a hint to userspace, there's no requirement anywhere in atomic that you only use it as a cursor. That way desktops get a good hint for what the cursor plane should be, everyone else can still use all the planes. -Daniel
On 16.03.2018 10:36, Daniel Vetter wrote: > On Thu, Mar 15, 2018 at 11:45 AM, Thierry Reding > <thierry.reding@gmail.com> wrote: >> On Thu, Mar 15, 2018 at 04:00:25AM +0300, Dmitry Osipenko wrote: >>> Older Tegra's do not support RGBA format for the cursor, but instead >>> overlay plane could be used for it. Since there is no much use for the >>> overlays on a regular desktop and HW-accelerated cursor is much better >>> than a SW cursor, let's dedicate one overlay plane to the mouse cursor. >>> >>> Signed-off-by: Dmitry Osipenko <digetx@gmail.com> >>> --- >>> drivers/gpu/drm/tegra/dc.c | 28 +++++++++++++++++++++++----- >>> 1 file changed, 23 insertions(+), 5 deletions(-) >> >> Applied. I'm not entirely happy that we need to sacrifice one of the >> overlay windows for this, but you're right, it's probably okay given >> how little planes are used on a regular desktop. >> >> We could always provide a module parameter to switch this on and off >> if that's ever something we want. > > The idea with universal planes is that you can (at least try to) use > the cursor overlay plane as a normal plane. It is only a hint to > userspace, there's no requirement anywhere in atomic that you only use > it as a cursor. That way desktops get a good hint for what the cursor > plane should be, everyone else can still use all the planes. Indeed, thank you for pointing at it. That is a nice feature.
diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c index 22bf513612d1..e4d567ec07cc 100644 --- a/drivers/gpu/drm/tegra/dc.c +++ b/drivers/gpu/drm/tegra/dc.c @@ -857,9 +857,11 @@ static const u32 tegra124_overlay_formats[] = { static struct drm_plane *tegra_dc_overlay_plane_create(struct drm_device *drm, struct tegra_dc *dc, - unsigned int index) + unsigned int index, + bool cursor) { unsigned long possible_crtcs = tegra_plane_get_possible_crtcs(drm); + enum drm_plane_type type = DRM_PLANE_TYPE_OVERLAY; struct tegra_plane *plane; unsigned int num_formats; const u32 *formats; @@ -876,10 +878,12 @@ static struct drm_plane *tegra_dc_overlay_plane_create(struct drm_device *drm, num_formats = dc->soc->num_overlay_formats; formats = dc->soc->overlay_formats; + if (cursor) + type = DRM_PLANE_TYPE_CURSOR; + err = drm_universal_plane_init(drm, &plane->base, possible_crtcs, &tegra_plane_funcs, formats, - num_formats, NULL, - DRM_PLANE_TYPE_OVERLAY, NULL); + num_formats, NULL, type, NULL); if (err < 0) { kfree(plane); return ERR_PTR(err); @@ -931,6 +935,7 @@ static struct drm_plane *tegra_dc_add_planes(struct drm_device *drm, struct tegra_dc *dc) { struct drm_plane *planes[2], *primary; + unsigned int planes_num; unsigned int i; int err; @@ -938,8 +943,14 @@ static struct drm_plane *tegra_dc_add_planes(struct drm_device *drm, if (IS_ERR(primary)) return primary; - for (i = 0; i < 2; i++) { - planes[i] = tegra_dc_overlay_plane_create(drm, dc, 1 + i); + if (dc->soc->supports_cursor) + planes_num = 2; + else + planes_num = 1; + + for (i = 0; i < planes_num; i++) { + planes[i] = tegra_dc_overlay_plane_create(drm, dc, 1 + i, + false); if (IS_ERR(planes[i])) { err = PTR_ERR(planes[i]); @@ -1857,6 +1868,13 @@ static int tegra_dc_init(struct host1x_client *client) err = PTR_ERR(cursor); goto cleanup; } + } else { + /* dedicate one overlay to mouse cursor */ + cursor = tegra_dc_overlay_plane_create(drm, dc, 2, true); + if (IS_ERR(cursor)) { + err = PTR_ERR(cursor); + goto cleanup; + } } err = drm_crtc_init_with_planes(drm, &dc->base, primary, cursor,
Older Tegra's do not support RGBA format for the cursor, but instead overlay plane could be used for it. Since there is no much use for the overlays on a regular desktop and HW-accelerated cursor is much better than a SW cursor, let's dedicate one overlay plane to the mouse cursor. Signed-off-by: Dmitry Osipenko <digetx@gmail.com> --- drivers/gpu/drm/tegra/dc.c | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-)