On Wed, Nov 28, 2018 at 10:38:11PM -0800, Kevin Strasser wrote: > Add 64 bpp 16:16:16:16 half float pixel formats. Each 16 bit component is > formatted in IEEE-754 half-precision float (binary16) 1:5:10 > MSb-sign:exponent:fraction form. > > An 'is_fp' attribute is added to drm_format_info so that drivers can easily > distinguish these formats from those that might contain uint pixel data. > > This patch attempts to address the feedback provided when 2 of these > formats were previosly proposed: > https://patchwork.kernel.org/patch/10072545/ > > Signed-off-by: Kevin Strasser <kevin.stras...@intel.com> > Cc: Tina Zhang <tina.zh...@intel.com> > Cc: Uma Shankar <uma.shan...@intel.com> > Cc: Shashank Sharma <shashank.sha...@intel.com> > Cc: Ville Syrjälä <ville.syrj...@linux.intel.com> > Cc: David Airlie <airl...@linux.ie> > Cc: Daniel Vetter <daniel.vet...@ffwll.ch> > Cc: dri-devel@lists.freedesktop.org > --- > drivers/gpu/drm/drm_fourcc.c | 4 ++++ > include/drm/drm_fourcc.h | 3 +++ > include/uapi/drm/drm_fourcc.h | 6 ++++++ > 3 files changed, 13 insertions(+) > > diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c > index f523948..a7b969a 100644 > --- a/drivers/gpu/drm/drm_fourcc.c > +++ b/drivers/gpu/drm/drm_fourcc.c > @@ -198,6 +198,10 @@ const struct drm_format_info *__drm_format_info(u32 > format) > { .format = DRM_FORMAT_ABGR8888, .depth = 32, > .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true > }, > { .format = DRM_FORMAT_RGBA8888, .depth = 32, > .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true > }, > { .format = DRM_FORMAT_BGRA8888, .depth = 32, > .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true > }, > + { .format = DRM_FORMAT_XRGB16161616H, .depth = 48, > .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .is_fp = true }, > + { .format = DRM_FORMAT_XBGR16161616H, .depth = 48, > .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .is_fp = true }, > + { .format = DRM_FORMAT_ARGB16161616H, .depth = 64, > .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true, > .is_fp = true }, > + { .format = DRM_FORMAT_ABGR16161616H, .depth = 64, > .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true, > .is_fp = true },
cpp is wrong for all of these. > { .format = DRM_FORMAT_RGB888_A8, .depth = 32, > .num_planes = 2, .cpp = { 3, 1, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true > }, > { .format = DRM_FORMAT_BGR888_A8, .depth = 32, > .num_planes = 2, .cpp = { 3, 1, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true > }, > { .format = DRM_FORMAT_XRGB8888_A8, .depth = 32, > .num_planes = 2, .cpp = { 4, 1, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true > }, > diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h > index bcb389f..2c5aa19 100644 > --- a/include/drm/drm_fourcc.h > +++ b/include/drm/drm_fourcc.h > @@ -133,6 +133,9 @@ struct drm_format_info { > > /** @is_yuv: Is it a YUV format? */ > bool is_yuv; > + > + /** @is_fp: Is it a floating point format? */ > + bool is_fp; > }; > > /** > diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h > index e7e48f1f..530bce4 100644 > --- a/include/uapi/drm/drm_fourcc.h > +++ b/include/uapi/drm/drm_fourcc.h > @@ -144,6 +144,12 @@ extern "C" { > #define DRM_FORMAT_RGBA1010102 fourcc_code('R', 'A', '3', '0') /* > [31:0] R:G:B:A 10:10:10:2 little endian */ > #define DRM_FORMAT_BGRA1010102 fourcc_code('B', 'A', '3', '0') /* > [31:0] B:G:R:A 10:10:10:2 little endian */ > > +/* 64 bpp RGB IEEE-754 half-precision float (binary16) */ Might as well document the bits: * [15:0] sign:exponent:mantissa 1:5:10 > +#define DRM_FORMAT_XBGR16161616H fourcc_code('X', 'B', '4', 'H') /* [63:0] > x:B:G:R 16:16:16:16 little endian */ > +#define DRM_FORMAT_ABGR16161616H fourcc_code('A', 'B', '4', 'H') /* [63:0] > A:B:G:R 16:16:16:16 little endian */ > +#define DRM_FORMAT_XRGB16161616H fourcc_code('X', 'R', '4', 'H') /* [63:0] > x:R:G:B 16:16:16:16 little endian */ > +#define DRM_FORMAT_ARGB16161616H fourcc_code('A', 'R', '4', 'H') /* [63:0] > A:R:G:B 16:16:16:16 little endian */ ocd: the other formats have separate groups for X vs. A separate. And RGB before BGR. > + > /* packed YCbCr */ > #define DRM_FORMAT_YUYV fourcc_code('Y', 'U', 'Y', 'V') /* > [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */ > #define DRM_FORMAT_YVYU fourcc_code('Y', 'V', 'Y', 'U') /* > [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */ > -- > 2.7.4 -- Ville Syrjälä Intel _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel