From: Uma Shankar <uma.shankar@intel.com>
To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Cc: Uma Shankar <uma.shankar@intel.com>,
ville.syrjala@intel.com, maarten.lankhorst@intel.com
Subject: [RFC v1 1/6] drm: Add Plane Degamma properties
Date: Tue, 26 Sep 2017 13:32:53 +0530 [thread overview]
Message-ID: <1506412979-22028-2-git-send-email-uma.shankar@intel.com> (raw)
In-Reply-To: <1506412979-22028-1-git-send-email-uma.shankar@intel.com>
Add Plane Degamma as a blob property and plane
degamma size as a range property.
Signed-off-by: Uma Shankar <uma.shankar@intel.com>
---
drivers/gpu/drm/drm_atomic.c | 12 ++++++++++++
drivers/gpu/drm/drm_atomic_helper.c | 6 ++++++
drivers/gpu/drm/drm_mode_config.c | 14 ++++++++++++++
include/drm/drm_mode_config.h | 11 +++++++++++
include/drm/drm_plane.h | 10 ++++++++++
5 files changed, 53 insertions(+)
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 366c56f..e226c3b 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -716,6 +716,8 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane,
{
struct drm_device *dev = plane->dev;
struct drm_mode_config *config = &dev->mode_config;
+ bool replaced = false;
+ int ret;
if (property == config->prop_fb_id) {
struct drm_framebuffer *fb = drm_framebuffer_lookup(dev, val);
@@ -761,6 +763,12 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane,
} else if (plane->funcs->atomic_set_property) {
return plane->funcs->atomic_set_property(plane, state,
property, val);
+ } else if (property == config->plane_degamma_lut_property) {
+ ret = drm_atomic_replace_property_blob_from_id(dev,
+ &state->degamma_lut,
+ val, -1, &replaced);
+ state->color_mgmt_changed |= replaced;
+ return ret;
} else {
return -EINVAL;
}
@@ -819,6 +827,9 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane,
*val = state->zpos;
} else if (plane->funcs->atomic_get_property) {
return plane->funcs->atomic_get_property(plane, state, property, val);
+ } else if (property == config->plane_degamma_lut_property) {
+ *val = (state->degamma_lut) ?
+ state->degamma_lut->base.id : 0;
} else {
return -EINVAL;
}
@@ -955,6 +966,7 @@ static void drm_atomic_plane_print_state(struct drm_printer *p,
drm_printf(p, "\tcrtc-pos=" DRM_RECT_FMT "\n", DRM_RECT_ARG(&dest));
drm_printf(p, "\tsrc-pos=" DRM_RECT_FP_FMT "\n", DRM_RECT_FP_ARG(&src));
drm_printf(p, "\trotation=%x\n", state->rotation);
+ drm_printf(p, "\tcolor_mgmt_changed=%d\n", state->color_mgmt_changed);
if (plane->funcs->atomic_print_state)
plane->funcs->atomic_print_state(p, state);
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 01c34bc..fbc4c33 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -3386,6 +3386,10 @@ void __drm_atomic_helper_plane_duplicate_state(struct drm_plane *plane,
state->fence = NULL;
state->commit = NULL;
+
+ if (state->degamma_lut)
+ drm_property_blob_get(state->degamma_lut);
+ state->color_mgmt_changed = false;
}
EXPORT_SYMBOL(__drm_atomic_helper_plane_duplicate_state);
@@ -3430,6 +3434,8 @@ void __drm_atomic_helper_plane_destroy_state(struct drm_plane_state *state)
if (state->commit)
drm_crtc_commit_put(state->commit);
+
+ drm_property_blob_put(state->degamma_lut);
}
EXPORT_SYMBOL(__drm_atomic_helper_plane_destroy_state);
diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
index 74f6ff5..c25342c 100644
--- a/drivers/gpu/drm/drm_mode_config.c
+++ b/drivers/gpu/drm/drm_mode_config.c
@@ -344,6 +344,20 @@ static int drm_mode_create_standard_properties(struct drm_device *dev)
return -ENOMEM;
dev->mode_config.modifiers_property = prop;
+ prop = drm_property_create(dev,
+ DRM_MODE_PROP_BLOB,
+ "PLANE_DEGAMMA_LUT", 0);
+ if (!prop)
+ return -ENOMEM;
+ dev->mode_config.plane_degamma_lut_property = prop;
+
+ prop = drm_property_create_range(dev,
+ DRM_MODE_PROP_IMMUTABLE,
+ "PLANE_DEGAMMA_LUT_SIZE", 0, UINT_MAX);
+ if (!prop)
+ return -ENOMEM;
+ dev->mode_config.plane_degamma_lut_size_property = prop;
+
return 0;
}
diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
index 1b37368..df362fb 100644
--- a/include/drm/drm_mode_config.h
+++ b/include/drm/drm_mode_config.h
@@ -731,6 +731,17 @@ struct drm_mode_config {
struct drm_property *gamma_lut_size_property;
/**
+ * @plane_degamma_lut_property: Optional Plane property to set the LUT
+ * used to convert the framebuffer's colors to linear gamma.
+ */
+ struct drm_property *plane_degamma_lut_property;
+ /**
+ * @plane_degamma_lut_size_property: Optional Plane property for the
+ * size of the degamma LUT as supported by the driver (read-only).
+ */
+ struct drm_property *plane_degamma_lut_size_property;
+
+ /**
* @suggested_x_property: Optional connector property with a hint for
* the position of the output on the host's screen.
*/
diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
index 82a217b..1cbba7c 100644
--- a/include/drm/drm_plane.h
+++ b/include/drm/drm_plane.h
@@ -123,6 +123,14 @@ struct drm_plane_state {
*/
bool visible;
+ /* @degamma_lut:
+ *
+ * Lookup table for converting framebuffer pixel data before apply the
+ * color conversion matrix @ctm. See drm_plane_enable_color_mgmt(). The
+ * blob (if not NULL) is an array of &struct drm_color_lut.
+ */
+ struct drm_property_blob *degamma_lut;
+
/**
* @commit: Tracks the pending commit to prevent use-after-free conditions,
* and for async plane updates.
@@ -132,6 +140,8 @@ struct drm_plane_state {
struct drm_crtc_commit *commit;
struct drm_atomic_state *state;
+
+ bool color_mgmt_changed : 1;
};
static inline struct drm_rect
--
1.7.9.5
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2017-09-26 8:02 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-26 8:02 [RFC V1 0/6] Add Plane Color Properties Uma Shankar
2017-09-26 8:02 ` Uma Shankar [this message]
2017-09-26 8:02 ` [RFC v1 2/6] drm: Add Plane CTM property Uma Shankar
2017-09-26 8:02 ` [RFC v1 3/6] drm: Add Plane Gamma properties Uma Shankar
2017-09-26 8:02 ` [RFC v1 4/6] drm: Define helper function for plane color enabling Uma Shankar
2017-09-26 8:02 ` [RFC v1 5/6] drm: Define helper to set legacy gamma table size Uma Shankar
2017-09-26 10:05 ` Lankhorst, Maarten
2017-09-26 10:11 ` Shankar, Uma
2017-09-26 10:15 ` Lankhorst, Maarten
2017-09-26 10:20 ` Shankar, Uma
2017-09-26 8:02 ` [RFC v1 6/6] drm/i915: Enable plane color features Uma Shankar
2017-09-26 9:31 ` ✓ Fi.CI.BAT: success for Add Plane Color Properties Patchwork
2017-09-26 11:16 ` [Intel-gfx] [RFC V1 0/6] " Daniel Vetter
2017-09-26 12:53 ` ✓ Fi.CI.IGT: success for " Patchwork
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=1506412979-22028-2-git-send-email-uma.shankar@intel.com \
--to=uma.shankar@intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=maarten.lankhorst@intel.com \
--cc=ville.syrjala@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 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.