On Fri, Apr 17, 2020 at 6:05 PM Neil Armstrong <narmstrong@xxxxxxxxxxxx> wrote: > > On 17/04/2020 17:07, Daniel Vetter wrote: > > On Thu, Apr 16, 2020 at 05:24:53PM +0200, Neil Armstrong wrote: > >> Amlogic uses a proprietary lossless image compression protocol and format > >> for their hardware video codec accelerators, either video decoders or > >> video input encoders. > >> > >> It considerably reduces memory bandwidth while writing and reading > >> frames in memory. > >> > >> The underlying storage is considered to be 3 components, 8bit or 10-bit > >> per component, YCbCr 420, single plane : > >> - DRM_FORMAT_YUV420_8BIT > >> - DRM_FORMAT_YUV420_10BIT > >> > >> This modifier will be notably added to DMA-BUF frames imported from the V4L2 > >> Amlogic VDEC decoder. > >> > >> This introduces the basic layout composed of: > >> - a body content organized in 64x32 superblocks with 4096 bytes per > >> superblock in default mode. > >> - a 32 bytes per 128x64 header block > >> > >> This layout is tranferrable between Amlogic SoCs supporting this modifier. > >> > >> Tested-by: Kevin Hilman <khilman@xxxxxxxxxxxx> > >> Signed-off-by: Neil Armstrong <narmstrong@xxxxxxxxxxxx> > >> --- > >> include/uapi/drm/drm_fourcc.h | 39 +++++++++++++++++++++++++++++++++++ > >> 1 file changed, 39 insertions(+) > >> > >> diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h > >> index 8bc0b31597d8..a1b163a5641f 100644 > >> --- a/include/uapi/drm/drm_fourcc.h > >> +++ b/include/uapi/drm/drm_fourcc.h > >> @@ -309,6 +309,7 @@ extern "C" { > >> #define DRM_FORMAT_MOD_VENDOR_BROADCOM 0x07 > >> #define DRM_FORMAT_MOD_VENDOR_ARM 0x08 > >> #define DRM_FORMAT_MOD_VENDOR_ALLWINNER 0x09 > >> +#define DRM_FORMAT_MOD_VENDOR_AMLOGIC 0x0a > >> > >> /* add more to the end as needed */ > >> > >> @@ -804,6 +805,44 @@ extern "C" { > >> */ > >> #define DRM_FORMAT_MOD_ALLWINNER_TILED fourcc_mod_code(ALLWINNER, 1) > >> > >> +/* > >> + * Amlogic Video Framebuffer Compression modifiers > >> + * > >> + * Amlogic uses a proprietary lossless image compression protocol and format > >> + * for their hardware video codec accelerators, either video decoders or > >> + * video input encoders. > >> + * > >> + * It considerably reduces memory bandwidth while writing and reading > >> + * frames in memory. > >> + * > >> + * The underlying storage is considered to be 3 components, 8bit or 10-bit > >> + * per component YCbCr 420, single plane : > >> + * - DRM_FORMAT_YUV420_8BIT > >> + * - DRM_FORMAT_YUV420_10BIT > >> + * > >> + * The first 8 bits of the mode defines the layout, then the following 8 bits > >> + * defines the options changing the layout. > > > > None of the modifiers you're doing seem to have these other 8 bits > > defined anywhere. And it's not encoded in your modifiers. Can't we just > > enumerate the ones we have/need and done? > > It's introduced in patch 5 Hm must have been blind, I overlooked the << 8 shift. I'd just do a macro which encoders all fields into the modifier, instead of hand-rolling this. > > > >> + * > >> + * Not all combinations are valid, and different SoCs may support different > >> + * combinations of layout and options. > >> + */ > >> +#define DRM_FORMAT_MOD_AMLOGIC_FBC(__modes) fourcc_mod_code(AMLOGIC, __modes) > >> + > >> +/* Amlogic FBC Layouts */ > >> +#define DRM_FORMAT_MOD_AMLOGIC_FBC_LAYOUT_MASK (0xf << 0) > >> + > >> +/* > >> + * Amlogic FBC Basic Layout > >> + * > >> + * The basic layout is composed of: > >> + * - a body content organized in 64x32 superblocks with 4096 bytes per > >> + * superblock in default mode. > >> + * - a 32 bytes per 128x64 header block > >> + * > >> + * This layout is transferrable between Amlogic SoCs supporting this modifier. > >> + */ > >> +#define DRM_FORMAT_MOD_AMLOGIC_FBC_LAYOUT_BASIC (1ULL << 0) > > > > This is kinda confusing, since this isn't actually the modifier, but the > > mode of the modifer. Generally what we do is only define the former, with > > maybe some macros to extract stuff. > > > > To make this more mistake-proof I'd only define the full modifier code. > > Definitely don't add a #define with the DRM_FORMAT_MOD_ prefix which isn't > > actually a full modifier code. > > Exact, I'll use the same scheme as AFBC: AMLOGIC_FBC_FORMAT_ ... Yup there's a number of parametried modifiers. As long as the stuff you get from a DRM_FORMAT_MOD_ ... macro is a full modifier with everything it should be all fine. -Daniel > Neil > > > -Daniel > > > >> + > >> #if defined(__cplusplus) > >> } > >> #endif > >> -- > >> 2.22.0 > >> > > > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel