Message ID | 1464691994-5704-5-git-send-email-kraxel@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, May 31, 2016 at 12:53:12PM +0200, Gerd Hoffmann wrote: > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> And feel free to include in a virtio pull to Dave with my ack. -Daniel > --- > drivers/gpu/drm/drm_crtc.c | 2 ++ > include/drm/drm_crtc.h | 2 ++ > 2 files changed, 4 insertions(+) > > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c > index d2a6d95..ce5a280 100644 > --- a/drivers/gpu/drm/drm_crtc.c > +++ b/drivers/gpu/drm/drm_crtc.c > @@ -2977,6 +2977,8 @@ static int drm_mode_cursor_universal(struct drm_crtc *crtc, > DRM_DEBUG_KMS("failed to wrap cursor buffer in drm framebuffer\n"); > return PTR_ERR(fb); > } > + fb->hot_x = req->hot_x; > + fb->hot_y = req->hot_y; > } else { > fb = NULL; > } > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h > index d1559cd..1460f66 100644 > --- a/include/drm/drm_crtc.h > +++ b/include/drm/drm_crtc.h > @@ -253,6 +253,8 @@ struct drm_framebuffer { > int bits_per_pixel; > int flags; > uint32_t pixel_format; /* fourcc format */ > + int hot_x; > + int hot_y; > struct list_head filp_head; > }; > > -- > 1.8.3.1 >
On Tue, May 31, 2016 at 12:53:12PM +0200, Gerd Hoffmann wrote: > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> > --- > drivers/gpu/drm/drm_crtc.c | 2 ++ > include/drm/drm_crtc.h | 2 ++ > 2 files changed, 4 insertions(+) > > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c > index d2a6d95..ce5a280 100644 > --- a/drivers/gpu/drm/drm_crtc.c > +++ b/drivers/gpu/drm/drm_crtc.c > @@ -2977,6 +2977,8 @@ static int drm_mode_cursor_universal(struct drm_crtc *crtc, > DRM_DEBUG_KMS("failed to wrap cursor buffer in drm framebuffer\n"); > return PTR_ERR(fb); > } > + fb->hot_x = req->hot_x; > + fb->hot_y = req->hot_y; > } else { > fb = NULL; > } > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h > index d1559cd..1460f66 100644 > --- a/include/drm/drm_crtc.h > +++ b/include/drm/drm_crtc.h > @@ -253,6 +253,8 @@ struct drm_framebuffer { > int bits_per_pixel; > int flags; > uint32_t pixel_format; /* fourcc format */ > + int hot_x; > + int hot_y; > struct list_head filp_head; > }; Why store it in the fb and not eg. the plane state? > > -- > 1.8.3.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel
On Di, 2016-05-31 at 15:36 +0300, Ville Syrjälä wrote:
> Why store it in the fb and not eg. the plane state?
Well, drm_plane_state is allocated by drm_atomic_helper_update_plane.
When sticking the hotspot into the the plane state we have to add hot_x
and hot_y parameters to drm_plane_funcs->update_plane() and cause quite
some churn all over the drm tree.
Or create a separate code path for cursor updates which uses a special
drm_atomic_helper_update_plane version, which doesn't look very
attractive too due to code duplication.
Sticking it into the drm_framebuffer instead looks like a reasonable
alternative.
I'm open to better suggestions.
cheers,
Gerd
On Tue, May 31, 2016 at 03:09:13PM +0200, Gerd Hoffmann wrote: > On Di, 2016-05-31 at 15:36 +0300, Ville Syrjälä wrote: > > > Why store it in the fb and not eg. the plane state? > > Well, drm_plane_state is allocated by drm_atomic_helper_update_plane. > > When sticking the hotspot into the the plane state we have to add hot_x > and hot_y parameters to drm_plane_funcs->update_plane() and cause quite > some churn all over the drm tree. > > Or create a separate code path for cursor updates which uses a special > drm_atomic_helper_update_plane version, which doesn't look very > attractive too due to code duplication. > > Sticking it into the drm_framebuffer instead looks like a reasonable > alternative. > > I'm open to better suggestions. Hmm. Too many layers. I guess this is the easiest solution then. I was hoping to avoid fattening the fb for something so rarely used, but I guess there's no sane way to achieve that.
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index d2a6d95..ce5a280 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -2977,6 +2977,8 @@ static int drm_mode_cursor_universal(struct drm_crtc *crtc, DRM_DEBUG_KMS("failed to wrap cursor buffer in drm framebuffer\n"); return PTR_ERR(fb); } + fb->hot_x = req->hot_x; + fb->hot_y = req->hot_y; } else { fb = NULL; } diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index d1559cd..1460f66 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -253,6 +253,8 @@ struct drm_framebuffer { int bits_per_pixel; int flags; uint32_t pixel_format; /* fourcc format */ + int hot_x; + int hot_y; struct list_head filp_head; };
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- drivers/gpu/drm/drm_crtc.c | 2 ++ include/drm/drm_crtc.h | 2 ++ 2 files changed, 4 insertions(+)