Message ID | 20240226211100.100108-3-harry.wentland@amd.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Color Pipeline API w/ VKMS | expand |
On 02/26, Harry Wentland wrote: > CTM values are defined as signed-magnitude values. Add > a helper that converts from CTM signed-magnitude fixed > point value to the twos-complement value used by > drm_fixed. > > Signed-off-by: Harry Wentland <harry.wentland@amd.com> > --- > include/drm/drm_fixed.h | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/include/drm/drm_fixed.h b/include/drm/drm_fixed.h > index 0c9f917a4d4b..cb842ba80ddd 100644 > --- a/include/drm/drm_fixed.h > +++ b/include/drm/drm_fixed.h > @@ -78,6 +78,24 @@ static inline u32 dfixed_div(fixed20_12 A, fixed20_12 B) > #define DRM_FIXED_EPSILON 1LL > #define DRM_FIXED_ALMOST_ONE (DRM_FIXED_ONE - DRM_FIXED_EPSILON) > > +/** > + * @drm_sm2fixp > + * > + * Convert a 1.31.32 signed-magnitude fixed point to 32.32 > + * 2s-complement fixed point > + * > + * @return s64 2s-complement fixed point > + */ > +static inline s64 drm_sm2fixp(__u64 a) > +{ > + if ((a & (1LL << 63))) { > + return -(a & 0x7fffffffffffffffll); Hi Harry, Can we have a #define macro for this constant? ^ Other than that, LGTM. You can add my r-b to the next version. Thanks, Melissa > + } else { > + return a; > + } > + > +} > + > static inline s64 drm_int2fixp(int a) > { > return ((s64)a) << DRM_FIXED_POINT; > -- > 2.44.0 >
diff --git a/include/drm/drm_fixed.h b/include/drm/drm_fixed.h index 0c9f917a4d4b..cb842ba80ddd 100644 --- a/include/drm/drm_fixed.h +++ b/include/drm/drm_fixed.h @@ -78,6 +78,24 @@ static inline u32 dfixed_div(fixed20_12 A, fixed20_12 B) #define DRM_FIXED_EPSILON 1LL #define DRM_FIXED_ALMOST_ONE (DRM_FIXED_ONE - DRM_FIXED_EPSILON) +/** + * @drm_sm2fixp + * + * Convert a 1.31.32 signed-magnitude fixed point to 32.32 + * 2s-complement fixed point + * + * @return s64 2s-complement fixed point + */ +static inline s64 drm_sm2fixp(__u64 a) +{ + if ((a & (1LL << 63))) { + return -(a & 0x7fffffffffffffffll); + } else { + return a; + } + +} + static inline s64 drm_int2fixp(int a) { return ((s64)a) << DRM_FIXED_POINT;
CTM values are defined as signed-magnitude values. Add a helper that converts from CTM signed-magnitude fixed point value to the twos-complement value used by drm_fixed. Signed-off-by: Harry Wentland <harry.wentland@amd.com> --- include/drm/drm_fixed.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)