mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: sagar.a.kamble@intel.com
To: intel-gfx@lists.freedesktop.org
Cc: vijay.a.purushothaman@intel.com, airlied@linux.ie,
	daniel.vetter@ffwll.ch, jani.nikula@linux.intel.com,
	tomi.valkeinen@ti.com, airlied@redhat.com, robdclark@gmail.com,
	archit@ti.com, gregkh@linuxfoundation.org, joe@perches.com,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	"Ville Syrjälä" <ville.syrjala@linux.intel.com>
Subject: [PATCH v4 06/11] drm: Add drm_rotation_simplify()
Date: Fri,  7 Feb 2014 19:15:11 +0530	[thread overview]
Message-ID: <1391780716-21896-7-git-send-email-sagar.a.kamble@intel.com> (raw)
In-Reply-To: <1391780716-21896-1-git-send-email-sagar.a.kamble@intel.com>

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 e7bbbad..30e0008 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -4006,6 +4006,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
+ * 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 4b3ac70..18f2eed 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -1185,6 +1185,8 @@ 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);
 
 /* Helpers */
 static inline struct drm_crtc *drm_crtc_find(struct drm_device *dev,
-- 
1.8.5


  parent reply	other threads:[~2014-02-07 13:47 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-07 13:45 [PATCH v4 00/11] Enabling 180 degree rotation for sprite and crtc planes sagar.a.kamble
2014-02-07 13:45 ` [PATCH v4 01/11] drm: Move DRM_ROTATE bits out of omapdrm into drm_crtc.h sagar.a.kamble
2014-02-07 13:45 ` [PATCH v4 02/11] drm: Add support_bits parameter to drm_property_create_bitmask() sagar.a.kamble
2014-02-09 13:37   ` Rob Clark
2014-02-07 13:45 ` [PATCH v4 03/11] drm: Add drm_mode_create_rotation_property() sagar.a.kamble
2014-02-07 13:45 ` [PATCH v4 04/11] drm/omap: Switch omapdrm over to drm_mode_create_rotation_property() sagar.a.kamble
2014-02-09 13:34   ` Rob Clark
2014-02-07 13:45 ` [PATCH v4 05/11] drm: Add drm_rect rotation functions sagar.a.kamble
2014-02-07 13:45 ` sagar.a.kamble [this message]
2014-02-07 13:45 ` [PATCH v4 07/11] drm/i915: Add 180 degree sprite rotation support sagar.a.kamble
2014-02-07 13:45 ` [PATCH v4 08/11] drm/i915: Make intel_plane_restore() return an error sagar.a.kamble
2014-02-07 13:45 ` [PATCH v4 09/11] drm/i915: Add rotation property for sprites sagar.a.kamble
2014-02-07 13:45 ` [PATCH v4 10/11] drm/i915: Add 180 degree primary plane rotation support sagar.a.kamble
2014-02-07 13:45 ` [PATCH v4 11/11] drm/i915: Calling rotate and inverse rotate transformations after clipping sagar.a.kamble
2014-02-07 15:04 ` [PATCH v4 00/11] Enabling 180 degree rotation for sprite and crtc planes Daniel Vetter
2014-02-10 10:41 ` One Thousand Gnomes
2014-02-10 13:52   ` Ville Syrjälä
2014-02-10 14:14     ` One Thousand Gnomes
2014-02-10 14:29       ` Ville Syrjälä
2014-02-10 17:31         ` Daniel Vetter

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=1391780716-21896-7-git-send-email-sagar.a.kamble@intel.com \
    --to=sagar.a.kamble@intel.com \
    --cc=airlied@linux.ie \
    --cc=airlied@redhat.com \
    --cc=archit@ti.com \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=joe@perches.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robdclark@gmail.com \
    --cc=tomi.valkeinen@ti.com \
    --cc=vijay.a.purushothaman@intel.com \
    --cc=ville.syrjala@linux.intel.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®