Commit c28b3ec3 authored by Alex Hung's avatar Alex Hung Committed by Alex Deucher
Browse files

drm/amd/display: Use mpc.preblend flag to indicate 3D LUT



[WHAT]
New ASIC's 3D LUT is indicated by mpc.preblend.

Fixes: 0de2b1af ("drm/amd/display: add 3D LUT colorop")
Reviewed-by: default avatarMelissa Wen <mwen@igalia.com>
Reviewed-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Hung <alex.hung@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 43175f61)
parent 11439c46
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1706,6 +1706,7 @@ __set_dm_plane_colorop_3dlut(struct drm_plane_state *plane_state,
	struct dc_transfer_func *tf = &dc_plane_state->in_shaper_func;
	struct drm_atomic_state *state = plane_state->state;
	const struct amdgpu_device *adev = drm_to_adev(colorop->dev);
	bool has_3dlut = adev->dm.dc->caps.color.dpp.hw_3d_lut || adev->dm.dc->caps.color.mpc.preblend;
	const struct drm_device *dev = colorop->dev;
	const struct drm_color_lut32 *lut3d;
	uint32_t lut3d_size;
@@ -1722,7 +1723,7 @@ __set_dm_plane_colorop_3dlut(struct drm_plane_state *plane_state,
	}

	if (colorop_state && !colorop_state->bypass && colorop->type == DRM_COLOROP_3D_LUT) {
		if (!adev->dm.dc->caps.color.dpp.hw_3d_lut) {
		if (!has_3dlut) {
			drm_dbg(dev, "3D LUT is not supported by hardware\n");
			return -EINVAL;
		}
@@ -1875,6 +1876,7 @@ amdgpu_dm_plane_set_colorop_properties(struct drm_plane_state *plane_state,
	struct drm_colorop *colorop = plane_state->color_pipeline;
	struct drm_device *dev = plane_state->plane->dev;
	struct amdgpu_device *adev = drm_to_adev(dev);
	bool has_3dlut = adev->dm.dc->caps.color.dpp.hw_3d_lut || adev->dm.dc->caps.color.mpc.preblend;
	int ret;

	/* 1D Curve - DEGAM TF */
@@ -1907,7 +1909,7 @@ amdgpu_dm_plane_set_colorop_properties(struct drm_plane_state *plane_state,
	if (ret)
		return ret;

	if (adev->dm.dc->caps.color.dpp.hw_3d_lut) {
	if (has_3dlut) {
		/* 1D Curve & LUT - SHAPER TF & LUT */
		colorop = colorop->next;
		if (!colorop) {
+2 −1
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr
	struct drm_colorop *ops[MAX_COLOR_PIPELINE_OPS];
	struct drm_device *dev = plane->dev;
	struct amdgpu_device *adev = drm_to_adev(dev);
	bool has_3dlut = adev->dm.dc->caps.color.dpp.hw_3d_lut || adev->dm.dc->caps.color.mpc.preblend;
	int ret;
	int i = 0;

@@ -112,7 +113,7 @@ int amdgpu_dm_initialize_default_pipeline(struct drm_plane *plane, struct drm_pr

	i++;

	if (adev->dm.dc->caps.color.dpp.hw_3d_lut) {
	if (has_3dlut) {
		/* 1D curve - SHAPER TF */
		ops[i] = kzalloc_obj(*ops[0]);
		if (!ops[i]) {