From: Deepak Rawat <drawat@vmware.com>
To: dri-devel@lists.freedesktop.org,
linux-graphics-maintainer@vmware.com, thellstrom@vmware.com,
syeh@vmware.com
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>, Deepak Rawat <drawat@vmware.com>
Subject: [PATCH v3 02/18] drm: Add a new helper to validate damage during atomic_check
Date: Wed, 10 Oct 2018 17:16:41 -0700 [thread overview]
Message-ID: <20181011001657.1715-2-drawat@vmware.com> (raw)
In-Reply-To: <20181011001657.1715-1-drawat@vmware.com>
This helper function makes sure that damage from plane state is
discarded for full modeset cycle. For some reason, which makes damage
irrelevant, driver might want to do a full plane update for e.g. full
modeset. Such cases must be checked here.
Cc: ville.syrjala@linux.intel.com
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Pekka Paalanen <ppaalanen@gmail.com>
Cc: Daniel Stone <daniel@fooishbar.org>
Signed-off-by: Deepak Rawat <drawat@vmware.com>
---
drivers/gpu/drm/drm_atomic_helper.c | 3 +++
drivers/gpu/drm/drm_damage_helper.c | 38 +++++++++++++++++++++++++++++
include/drm/drm_damage_helper.h | 2 ++
3 files changed, 43 insertions(+)
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 35395577ca86..41dabb817c57 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -32,6 +32,7 @@
#include <drm/drm_crtc_helper.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_writeback.h>
+#include <drm/drm_damage_helper.h>
#include <linux/dma-fence.h>
#include "drm_crtc_helper_internal.h"
@@ -828,6 +829,8 @@ drm_atomic_helper_check_planes(struct drm_device *dev,
drm_atomic_helper_plane_changed(state, old_plane_state, new_plane_state, plane);
+ drm_atomic_helper_check_plane_damage(state, new_plane_state);
+
if (!funcs || !funcs->atomic_check)
continue;
diff --git a/drivers/gpu/drm/drm_damage_helper.c b/drivers/gpu/drm/drm_damage_helper.c
index 8dc906a489a9..c130514bbb21 100644
--- a/drivers/gpu/drm/drm_damage_helper.c
+++ b/drivers/gpu/drm/drm_damage_helper.c
@@ -29,6 +29,7 @@
*
**************************************************************************/
+#include <drm/drm_atomic.h>
#include <drm/drm_damage_helper.h>
/**
@@ -81,3 +82,40 @@ void drm_plane_enable_fb_damage_clips(struct drm_plane *plane)
0);
}
EXPORT_SYMBOL(drm_plane_enable_fb_damage_clips);
+
+/**
+ * drm_atomic_helper_check_plane_damage - Verify plane damage on atomic_check.
+ * @state: The driver state object.
+ * @plane_state: Plane state for which to verify damage.
+ *
+ * This helper function makes sure that damage from plane state is discarded
+ * for full modeset cycle. For some reason, which makes damage irrelevant,
+ * driver might want to do a full plane update for e.g. full modeset. Such
+ * cases must be checked here. Note that NULL &drm_plane_state.fb_damage_clips
+ * in plane state means that full update should happen. It also ensue helper
+ * iterator to return &drm_plane_state.src as damage.
+ *
+ * Currently this helper discard damage during full modeset only. This is
+ * because, presently only vmwgfx exposes damage interface, which need full
+ * plane update during full modeset only. As more driver add damage support,
+ * should any state change need full plane update, must be added here.
+ */
+void drm_atomic_helper_check_plane_damage(struct drm_atomic_state *state,
+ struct drm_plane_state *plane_state)
+{
+ struct drm_crtc_state *crtc_state;
+
+ if (plane_state->crtc) {
+ crtc_state = drm_atomic_get_new_crtc_state(state,
+ plane_state->crtc);
+
+ if (WARN_ON(!crtc_state))
+ return;
+
+ if (drm_atomic_crtc_needs_modeset(crtc_state)) {
+ drm_property_blob_put(plane_state->fb_damage_clips);
+ plane_state->fb_damage_clips = NULL;
+ }
+ }
+}
+EXPORT_SYMBOL(drm_atomic_helper_check_plane_damage);
diff --git a/include/drm/drm_damage_helper.h b/include/drm/drm_damage_helper.h
index 4947c614fff9..59584cbf3d40 100644
--- a/include/drm/drm_damage_helper.h
+++ b/include/drm/drm_damage_helper.h
@@ -35,5 +35,7 @@
#include <drm/drm_atomic_helper.h>
void drm_plane_enable_fb_damage_clips(struct drm_plane *plane);
+void drm_atomic_helper_check_plane_damage(struct drm_atomic_state *state,
+ struct drm_plane_state *plane_state);
#endif
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2018-10-11 0:17 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-11 0:16 [PATCH v3 01/18] drm: Add a new plane property to send damage during plane update Deepak Rawat
2018-10-11 0:16 ` Deepak Rawat [this message]
2018-10-15 22:01 ` [PATCH v3 02/18] drm: Add a new helper to validate damage during atomic_check Sinclair Yeh
2018-10-11 0:16 ` [PATCH v3 03/18] drm: Add helper iterator functions for plane fb_damage_clips blob Deepak Rawat
2018-10-11 0:16 ` [Intel-gfx] [PATCH v3 04/18] drm/selftest: Add drm damage helper selftest Deepak Rawat
2018-10-11 0:16 ` Deepak Rawat
2018-10-11 16:23 ` [Intel-gfx] " Daniel Vetter
2018-10-11 16:23 ` Daniel Vetter
2018-10-15 16:11 ` Deepak Singh Rawat
2018-10-16 12:21 ` [Intel-gfx] " Daniel Vetter
2018-10-16 12:21 ` Daniel Vetter
2018-10-16 12:52 ` Alexandru-Cosmin Gheorghe
2018-10-16 12:52 ` Alexandru-Cosmin Gheorghe
2018-10-16 16:14 ` Deepak Singh Rawat
2018-10-16 16:14 ` Deepak Singh Rawat
2018-10-16 16:00 ` [Intel-gfx] " Deepak Singh Rawat
2018-10-16 16:00 ` Deepak Singh Rawat
2018-10-11 0:16 ` [PATCH v3 05/18] drm: Add helper to implement legacy dirtyfb Deepak Rawat
2018-10-11 16:15 ` Daniel Vetter
2018-10-11 16:21 ` Daniel Vetter
2018-10-11 0:16 ` [PATCH v3 06/18] drm/vmwgfx: Add a new interface for plane update on a display unit Deepak Rawat
2018-10-11 0:16 ` [PATCH v3 07/18] drm/vmwgfx: Implement STDU plane update for surface backed fb Deepak Rawat
2018-10-11 0:16 ` [PATCH v3 08/18] drm/vmwgfx: Implement STDU plane update for BO " Deepak Rawat
2018-10-11 0:16 ` [PATCH v3 09/18] drm/vmwgfx: Use the new interface for STDU plane update Deepak Rawat
2018-10-11 0:16 ` [PATCH v3 10/18] drm/vmwgfx: Updated comment for stdu " Deepak Rawat
2018-10-15 13:09 ` Thomas Hellstrom
2018-10-11 0:16 ` [PATCH v3 11/18] drm/vmwgfx: Enable FB_DAMAGE_CLIPS property for STDU primary plane Deepak Rawat
2018-10-11 0:16 ` [PATCH v3 12/18] drm/vmwgfx: Implement SOU plane update for surface backed fb Deepak Rawat
2018-10-11 0:16 ` [PATCH v3 13/18] drm/vmwgfx: Implement SOU plane update for BO " Deepak Rawat
2018-10-11 0:16 ` [PATCH v3 14/18] drm/vmwgfx: Use the new interface for SOU plane update Deepak Rawat
2018-10-11 0:16 ` [PATCH v3 15/18] drm/vmwgfx: Update comments for sou plane update function Deepak Rawat
2018-10-15 13:10 ` Thomas Hellstrom
2018-10-11 0:16 ` [PATCH v3 16/18] drm/vmwgfx: Enable FB_DAMAGE_CLIPS property for SOU primary plane Deepak Rawat
2018-10-11 0:16 ` [PATCH v3 17/18] drm/vmwgfx: Use atomic helper function for dirty fb IOCTL Deepak Rawat
2018-10-11 0:16 ` [PATCH v3 18/18] drm/vmwgfx: Don't clear mode::type anymore Deepak Rawat
2018-10-15 13:12 ` Thomas Hellstrom
2018-10-15 13:15 ` [PATCH v3 01/18] drm: Add a new plane property to send damage during plane update Thomas Hellstrom
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=20181011001657.1715-2-drawat@vmware.com \
--to=drawat@vmware.com \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-graphics-maintainer@vmware.com \
--cc=syeh@vmware.com \
--cc=thellstrom@vmware.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 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.