const struct drm_color_lut *degamma_lut;
enum amdgpu_transfer_function tf = AMDGPU_TRANSFER_FUNCTION_DEFAULT;
uint32_t degamma_size;
- bool has_degamma_lut;
+ bool has_degamma_lut, is_subsampled_format;
int ret;
degamma_lut = __extract_blob_lut(dm_plane_state->degamma_lut,
if (ret)
return ret;
} else {
- dc_plane_state->in_transfer_func.type =
- TF_TYPE_PREDEFINED;
+ /* Check if format requires post-scale color processing (subsampled formats) */
+ is_subsampled_format = (dc_plane_state->format >= SURFACE_PIXEL_FORMAT_VIDEO_BEGIN &&
+ dc_plane_state->format < SURFACE_PIXEL_FORMAT_SUBSAMPLE_END);
+
+ dc_plane_state->in_transfer_func.type = TF_TYPE_PREDEFINED;
if (!mod_color_calculate_degamma_params(color_caps,
- &dc_plane_state->in_transfer_func, NULL, false))
+ &dc_plane_state->in_transfer_func,
+ NULL,
+ is_subsampled_format)) {
+ drm_err(plane_state->state->dev,
+ "Failed to calculate degamma params.\n");
return -ENOMEM;
+ }
}
return 0;
}