drm/colorop: make lut(1/3)d_interpolation props correctly behave as mutable
As interpolation props are actually mutable props, any changes should be handled by drm_colorop_state. Move their enum and make it correctly behaves as mutable. Fixes:7fa3ee8c0a("drm/colorop: Define LUT_1D interpolation") Fixes:db971856bb("drm/colorop: Add 3D LUT support to color pipeline") Reviewed-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com> Reviewed-by: Alex Hung <alex.hung@amd.com> Fixes:9ba25915ef("drm/amd/display: Add support for sRGB EOTF in DEGAM block") Signed-off-by: Melissa Wen <mwen@igalia.com> Signed-off-by: Melissa Wen <melissa.srw@gmail.com> Link: https://patch.msgid.link/20260609110420.1298352-3-mwen@igalia.com
This commit is contained in:
parent
e480228cf6
commit
94ff735296
4 changed files with 34 additions and 22 deletions
|
|
@ -830,7 +830,7 @@ static void drm_atomic_colorop_print_state(struct drm_printer *p,
|
|||
case DRM_COLOROP_1D_LUT:
|
||||
drm_printf(p, "\tsize=%d\n", colorop->size);
|
||||
drm_printf(p, "\tinterpolation=%s\n",
|
||||
drm_get_colorop_lut1d_interpolation_name(colorop->lut1d_interpolation));
|
||||
drm_get_colorop_lut1d_interpolation_name(state->lut1d_interpolation));
|
||||
drm_printf(p, "\tdata blob id=%d\n", state->data ? state->data->base.id : 0);
|
||||
break;
|
||||
case DRM_COLOROP_CTM_3X4:
|
||||
|
|
@ -842,7 +842,7 @@ static void drm_atomic_colorop_print_state(struct drm_printer *p,
|
|||
case DRM_COLOROP_3D_LUT:
|
||||
drm_printf(p, "\tsize=%d\n", colorop->size);
|
||||
drm_printf(p, "\tinterpolation=%s\n",
|
||||
drm_get_colorop_lut3d_interpolation_name(colorop->lut3d_interpolation));
|
||||
drm_get_colorop_lut3d_interpolation_name(state->lut3d_interpolation));
|
||||
drm_printf(p, "\tdata blob id=%d\n", state->data ? state->data->base.id : 0);
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -751,13 +751,13 @@ static int drm_atomic_colorop_set_property(struct drm_colorop *colorop,
|
|||
if (property == colorop->bypass_property) {
|
||||
state->bypass = val;
|
||||
} else if (property == colorop->lut1d_interpolation_property) {
|
||||
colorop->lut1d_interpolation = val;
|
||||
state->lut1d_interpolation = val;
|
||||
} else if (property == colorop->curve_1d_type_property) {
|
||||
state->curve_1d_type = val;
|
||||
} else if (property == colorop->multiplier_property) {
|
||||
state->multiplier = val;
|
||||
} else if (property == colorop->lut3d_interpolation_property) {
|
||||
colorop->lut3d_interpolation = val;
|
||||
state->lut3d_interpolation = val;
|
||||
} else if (property == colorop->data_property) {
|
||||
return drm_atomic_color_set_data_property(colorop, state,
|
||||
property, val);
|
||||
|
|
@ -782,7 +782,7 @@ drm_atomic_colorop_get_property(struct drm_colorop *colorop,
|
|||
else if (property == colorop->bypass_property)
|
||||
*val = state->bypass;
|
||||
else if (property == colorop->lut1d_interpolation_property)
|
||||
*val = colorop->lut1d_interpolation;
|
||||
*val = state->lut1d_interpolation;
|
||||
else if (property == colorop->curve_1d_type_property)
|
||||
*val = state->curve_1d_type;
|
||||
else if (property == colorop->multiplier_property)
|
||||
|
|
@ -790,7 +790,7 @@ drm_atomic_colorop_get_property(struct drm_colorop *colorop,
|
|||
else if (property == colorop->size_property)
|
||||
*val = colorop->size;
|
||||
else if (property == colorop->lut3d_interpolation_property)
|
||||
*val = colorop->lut3d_interpolation;
|
||||
*val = state->lut3d_interpolation;
|
||||
else if (property == colorop->data_property)
|
||||
*val = (state->data) ? state->data->base.id : 0;
|
||||
else
|
||||
|
|
|
|||
|
|
@ -342,7 +342,6 @@ int drm_plane_colorop_curve_1d_lut_init(struct drm_device *dev, struct drm_color
|
|||
|
||||
colorop->lut1d_interpolation_property = prop;
|
||||
drm_object_attach_property(&colorop->base, prop, interpolation);
|
||||
colorop->lut1d_interpolation = interpolation;
|
||||
|
||||
/* data */
|
||||
ret = drm_colorop_create_data_prop(dev, colorop);
|
||||
|
|
@ -442,7 +441,6 @@ int drm_plane_colorop_3dlut_init(struct drm_device *dev, struct drm_colorop *col
|
|||
|
||||
colorop->lut3d_interpolation_property = prop;
|
||||
drm_object_attach_property(&colorop->base, prop, interpolation);
|
||||
colorop->lut3d_interpolation = interpolation;
|
||||
|
||||
/* data */
|
||||
ret = drm_colorop_create_data_prop(dev, colorop);
|
||||
|
|
@ -521,6 +519,20 @@ static void __drm_colorop_state_reset(struct drm_colorop_state *colorop_state,
|
|||
&val);
|
||||
colorop_state->curve_1d_type = val;
|
||||
}
|
||||
|
||||
if (colorop->lut1d_interpolation_property) {
|
||||
if (!drm_object_property_get_default_value(&colorop->base,
|
||||
colorop->lut1d_interpolation_property,
|
||||
&val))
|
||||
colorop_state->lut1d_interpolation = val;
|
||||
}
|
||||
|
||||
if (colorop->lut3d_interpolation_property) {
|
||||
if (!drm_object_property_get_default_value(&colorop->base,
|
||||
colorop->lut3d_interpolation_property,
|
||||
&val))
|
||||
colorop_state->lut3d_interpolation = val;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -183,6 +183,20 @@ struct drm_colorop_state {
|
|||
*/
|
||||
struct drm_property_blob *data;
|
||||
|
||||
/**
|
||||
* @lut1d_interpolation:
|
||||
*
|
||||
* Interpolation for DRM_COLOROP_1D_LUT
|
||||
*/
|
||||
enum drm_colorop_lut1d_interpolation_type lut1d_interpolation;
|
||||
|
||||
/**
|
||||
* @lut3d_interpolation:
|
||||
*
|
||||
* Interpolation for DRM_COLOROP_3D_LUT
|
||||
*/
|
||||
enum drm_colorop_lut3d_interpolation_type lut3d_interpolation;
|
||||
|
||||
/** @state: backpointer to global drm_atomic_state */
|
||||
struct drm_atomic_state *state;
|
||||
};
|
||||
|
|
@ -306,20 +320,6 @@ struct drm_colorop {
|
|||
*/
|
||||
uint32_t size;
|
||||
|
||||
/**
|
||||
* @lut1d_interpolation:
|
||||
*
|
||||
* Interpolation for DRM_COLOROP_1D_LUT
|
||||
*/
|
||||
enum drm_colorop_lut1d_interpolation_type lut1d_interpolation;
|
||||
|
||||
/**
|
||||
* @lut3d_interpolation:
|
||||
*
|
||||
* Interpolation for DRM_COLOROP_3D_LUT
|
||||
*/
|
||||
enum drm_colorop_lut3d_interpolation_type lut3d_interpolation;
|
||||
|
||||
/**
|
||||
* @lut1d_interpolation_property:
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue