All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Imre Deak <imre.deak@intel.com>
Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 6/9] drm: Add drm_rotation_simplify()
Date: Mon, 14 Oct 2013 16:50:42 +0300	[thread overview]
Message-ID: <20131014135042.GE13047@intel.com> (raw)
In-Reply-To: <1381758410.12668.60.camel@intelbox>

On Mon, Oct 14, 2013 at 04:46:50PM +0300, Imre Deak wrote:
> On Mon, 2013-09-30 at 17:44 +0300, ville.syrjala@linux.intel.com wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > drm_rotation_simplify() can be used to eliminate unsupported rotation
> > flags. It will check if any unsupported flags are present, and if so
> > it will modify the rotation to an alternate form by adding 180 degrees
> > to rotation angle, and flipping the reflect x and y bits. The hope is
> > that this identity transform will eliminate the unsupported flags.
> > 
> > Of course that might not result in any more supported rotation, so
> > the caller is still responsible for checking the result afterwards.
> > 
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  drivers/gpu/drm/drm_crtc.c | 30 ++++++++++++++++++++++++++++++
> >  include/drm/drm_crtc.h     |  2 ++
> >  2 files changed, 32 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> > index 0218681..665b807 100644
> > --- a/drivers/gpu/drm/drm_crtc.c
> > +++ b/drivers/gpu/drm/drm_crtc.c
> > @@ -3976,6 +3976,36 @@ int drm_format_vert_chroma_subsampling(uint32_t format)
> >  EXPORT_SYMBOL(drm_format_vert_chroma_subsampling);
> >  
> >  /**
> > + * drm_rotation_simplify() - Try to simplify the rotation
> > + * @rotation: Rotation to be simplified
> > + * @supported_rotations: Supported rotations
> > + *
> > + * Attempt to simplify the rotation to a form that is supported.
> > + * Eg. if the hardware supports everything except DRM_REFLECT_X
> > + * one could call this function like this:
> > + *
> > + * drm_rotation_simplify(rotation, BIT(DRM_ROTATE_0) |
> > + *                       BIT(DRM_ROTATE_90) | BIT(DRM_ROTATE_180) |
> > + *                       BIT(DRM_ROTATE_270) | BIT(DRM_REFLECT_Y));
> > + *
> > + * to eliminate the DRM_ROTATE_X flag. Depending on what kind of
>                       ^ DRM_REFLECT_X
> 
> You don't use this function in your patchset, though
> intel_plane_set_property() could use it by accepting REFLECT_X|REFLECT_Y
> too. But it does what it says, so I'm also ok if you leave it unused for
> now.

Yeah I was going back and forth whether I should accept the reflect
flags, but in the end decided against it since we can only support
a limited combination of the flags. But the function could be useful
for someone else.

> 
> --Imre
> 
> > + * transforms the hardware supports, this function may not
> > + * be able to produce a supported transform, so the caller should
> > + * check the result afterwards.
> > + */
> > +unsigned int drm_rotation_simplify(unsigned int rotation,
> > +				   unsigned int supported_rotations)
> > +{
> > +	if (rotation & ~supported_rotations) {
> > +		rotation ^= BIT(DRM_REFLECT_X) | BIT(DRM_REFLECT_Y);
> > +		rotation = (rotation & ~0xf) | BIT((ffs(rotation & 0xf) + 1) % 4);
> > +	}
> > +
> > +	return rotation;
> > +}
> > +EXPORT_SYMBOL(drm_rotation_simplify);
> > +
> > +/**
> >   * drm_mode_config_init - initialize DRM mode_configuration structure
> >   * @dev: DRM device
> >   *
> > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> > index d25ba84..b97b367 100644
> > --- a/include/drm/drm_crtc.h
> > +++ b/include/drm/drm_crtc.h
> > @@ -1154,5 +1154,7 @@ extern int drm_format_vert_chroma_subsampling(uint32_t format);
> >  extern const char *drm_get_format_name(uint32_t format);
> >  extern struct drm_property *drm_mode_create_rotation_property(struct drm_device *dev,
> >  							      unsigned int supported_rotations);
> > +extern unsigned int drm_rotation_simplify(unsigned int rotation,
> > +					  unsigned int supported_rotations);
> >  
> >  #endif /* __DRM_CRTC_H__ */
> 



-- 
Ville Syrjälä
Intel OTC

  reply	other threads:[~2013-10-14 13:50 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-30 14:44 [PATCH 0/9] drm/i915: Plane rotation support ville.syrjala
2013-09-30 14:44 ` [PATCH 1/9] drm: Move DRM_ROTATE bits out of omapdrm into drm_crtc.h ville.syrjala
2013-09-30 14:44 ` [PATCH 2/9] drm: Add support_bits parameter to drm_property_create_bitmask() ville.syrjala
2013-09-30 14:44 ` [PATCH 3/9] drm: Add drm_mode_create_rotation_property() ville.syrjala
2013-09-30 14:44 ` [PATCH 4/9] drm/omap: Switch omapdrm over to drm_mode_create_rotation_property() ville.syrjala
2013-09-30 14:44 ` [PATCH 5/9] drm: Add drm_rect rotation functions ville.syrjala
2013-09-30 14:44 ` [PATCH 6/9] drm: Add drm_rotation_simplify() ville.syrjala
2013-10-14 13:46   ` [Intel-gfx] " Imre Deak
2013-10-14 13:50     ` Ville Syrjälä [this message]
2013-09-30 14:44 ` [PATCH 7/9] drm/i915: Add 180 degree sprite rotation support ville.syrjala
2013-10-01 13:22   ` [PATCH v2 " ville.syrjala
2013-09-30 14:44 ` [PATCH 8/9] drm/i915: Make intel_plane_restore() return an error ville.syrjala
2013-09-30 14:44 ` [PATCH 9/9] drm/i915: Add rotation property for sprites ville.syrjala
2013-10-14 13:59   ` Imre Deak
2013-10-14 14:39     ` Ville Syrjälä
2013-10-14 15:10       ` Imre Deak
2013-09-30 16:15 ` [PATCH 0/9] drm/i915: Plane rotation support Rob Clark
2013-09-30 17:09   ` Ville Syrjälä
2013-09-30 17:46     ` Rob Clark
2013-09-30 18:21       ` Daniel Vetter
2013-09-30 18:36         ` Ville Syrjälä
2013-09-30 18:31       ` Ville Syrjälä

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131014135042.GE13047@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=imre.deak@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.