mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 06:31:58 +02:00
drm/amd/display: store sharpness 1dlut table in dscl_prog_data
[Why] Previously dscl_prog_data stored pointer to sharpness 1dlut table. SPL had four pre-generated tables, one for each setup. This allowed us to minimize number of times we had to recalculate table when switching between setups. However, with dual display, this becomes an issue because for a given setup, we could have a different per app sharpness value than the global sharpness value. So the pre-generated table will change but both displays may point to the same table and one of them will have the wrong sharpness setting. [How] Store the sharpness 1dlut table in dscl_prog_data. This ensures that each display can have its own sharpness setting. Reviewed-by: Ilya Bakoulin <ilya.bakoulin@amd.com> Signed-off-by: Samson Tam <Samson.Tam@amd.com> Signed-off-by: Tom Chung <chiahsuan.chung@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
558cec793e
commit
f3928f3d48
|
|
@ -1091,7 +1091,8 @@ void dpp401_dscl_set_scaler_manual_scale(struct dpp *dpp_base,
|
|||
/* ISHARP_DELTA_LUT */
|
||||
dpp401_dscl_set_isharp_filter(dpp, scl_data->dscl_prog_data.isharp_delta);
|
||||
dpp->scl_data.dscl_prog_data.sharpness_level = scl_data->dscl_prog_data.sharpness_level;
|
||||
dpp->scl_data.dscl_prog_data.isharp_delta = scl_data->dscl_prog_data.isharp_delta;
|
||||
memcpy(dpp->scl_data.dscl_prog_data.isharp_delta, scl_data->dscl_prog_data.isharp_delta,
|
||||
sizeof(uint32_t) * ISHARP_LUT_TABLE_SIZE);
|
||||
|
||||
if (memcmp(&dpp->scl_data, scl_data, sizeof(*scl_data)) == 0)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -1607,7 +1607,8 @@ static void spl_set_isharp_data(struct dscl_prog_data *dscl_prog_data,
|
|||
|
||||
spl_build_isharp_1dlut_from_reference_curve(ratio, setup, adp_sharpness,
|
||||
scale_to_sharpness_policy);
|
||||
dscl_prog_data->isharp_delta = spl_get_pregen_filter_isharp_1D_lut(setup);
|
||||
memcpy(dscl_prog_data->isharp_delta, spl_get_pregen_filter_isharp_1D_lut(setup),
|
||||
sizeof(uint32_t) * ISHARP_LUT_TABLE_SIZE);
|
||||
dscl_prog_data->sharpness_level = adp_sharpness.sharpness_level;
|
||||
|
||||
dscl_prog_data->isharp_en = 1; // ISHARP_EN
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
#include "dc_spl_types.h"
|
||||
|
||||
#define ISHARP_LUT_TABLE_SIZE 32
|
||||
const uint32_t *spl_get_filter_isharp_1D_lut_0(void);
|
||||
const uint32_t *spl_get_filter_isharp_1D_lut_0p5x(void);
|
||||
const uint32_t *spl_get_filter_isharp_1D_lut_1p0x(void);
|
||||
|
|
|
|||
|
|
@ -250,6 +250,7 @@ enum isharp_en {
|
|||
ISHARP_DISABLE,
|
||||
ISHARP_ENABLE
|
||||
};
|
||||
#define ISHARP_LUT_TABLE_SIZE 32
|
||||
// Below struct holds values that can be directly used to program
|
||||
// hardware registers. No conversion/clamping is required
|
||||
struct dscl_prog_data {
|
||||
|
|
@ -400,7 +401,7 @@ struct dscl_prog_data {
|
|||
uint32_t isharp_nl_en; // ISHARP_NL_EN ? TODO:check this
|
||||
struct isharp_lba isharp_lba; // ISHARP_LBA
|
||||
struct isharp_fmt isharp_fmt; // ISHARP_FMT
|
||||
const uint32_t *isharp_delta;
|
||||
uint32_t isharp_delta[ISHARP_LUT_TABLE_SIZE];
|
||||
struct isharp_nldelta_sclip isharp_nldelta_sclip; // ISHARP_NLDELTA_SCLIP
|
||||
/* blur and scale filter */
|
||||
const uint16_t *filter_blur_scale_v;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user