diff mbox

[4/5] add cursor hotspot to drm_framebuffer

Message ID 1464691994-5704-5-git-send-email-kraxel@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Gerd Hoffmann May 31, 2016, 10:53 a.m. UTC
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(+)

Comments

Daniel Vetter May 31, 2016, 10:58 a.m. UTC | #1
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
>
Ville Syrjälä May 31, 2016, 12:36 p.m. UTC | #2
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
Gerd Hoffmann May 31, 2016, 1:09 p.m. UTC | #3
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
Ville Syrjälä May 31, 2016, 1:54 p.m. UTC | #4
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 mbox

Patch

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;
 };