drm/amd/display: Optimize gamma calculations
[Why&How] 1. Stack usage is pretty high as fixed31_32 struct is 8 bytes and we have functions with >30 vars on the stack. 2. Optimize gamma calculation by reducing number of calls to dc_fixpt_pow Our X points are divided into 32 regions wth 16 pts each. Each region is 2x the previous, meaning x[i] = 2*x[i-16] for i>=16. Using (2x)^gamma = 2^gamma * x^gamma, we can recursively compute powers of gamma, we just need first 16 pts to start it up. dc_fixpt_pow() is expensive, it computes x^y by doing exp(y*logx) Exp is done by Taylor series approximation, and log by Newton-like approximation that also uses exp internally. In short, it's significantly heavier than run-of-the-mill addition/subtraction/multiply. Signed-off-by: Krunoslav Kovac <Krunoslav.Kovac@amd.com> Reviewed-by: Anthony Koo <Anthony.Koo@amd.com> Acked-by: Aric Cyr <Aric.Cyr@amd.com> Acked-by: Leo Li <sunpeng.li@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:

کامیت شده توسط
Alex Deucher

والد
c43f89f81c
کامیت
e752058b86
@@ -482,7 +482,6 @@ struct dc_gamma {
|
||||
* is_logical_identity indicates the given gamma ramp regardless of type is identity.
|
||||
*/
|
||||
bool is_identity;
|
||||
bool is_logical_identity;
|
||||
};
|
||||
|
||||
/* Used by both ipp amd opp functions*/
|
||||
|
مرجع در شماره جدید
Block a user