xf86drm: Add support for decoding Vivante format modifiers
Allow applications to pretty-print Vivante format modifiers. Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>main
parent
329eebcf32
commit
874af99463
68
xf86drm.c
68
xf86drm.c
|
@ -175,11 +175,15 @@ drmGetFormatModifierNameFromAmd(uint64_t modifier);
|
||||||
static char *
|
static char *
|
||||||
drmGetFormatModifierNameFromAmlogic(uint64_t modifier);
|
drmGetFormatModifierNameFromAmlogic(uint64_t modifier);
|
||||||
|
|
||||||
|
static char *
|
||||||
|
drmGetFormatModifierNameFromVivante(uint64_t modifier);
|
||||||
|
|
||||||
static const struct drmVendorInfo modifier_format_vendor_table[] = {
|
static const struct drmVendorInfo modifier_format_vendor_table[] = {
|
||||||
{ DRM_FORMAT_MOD_VENDOR_ARM, drmGetFormatModifierNameFromArm },
|
{ DRM_FORMAT_MOD_VENDOR_ARM, drmGetFormatModifierNameFromArm },
|
||||||
{ DRM_FORMAT_MOD_VENDOR_NVIDIA, drmGetFormatModifierNameFromNvidia },
|
{ DRM_FORMAT_MOD_VENDOR_NVIDIA, drmGetFormatModifierNameFromNvidia },
|
||||||
{ DRM_FORMAT_MOD_VENDOR_AMD, drmGetFormatModifierNameFromAmd },
|
{ DRM_FORMAT_MOD_VENDOR_AMD, drmGetFormatModifierNameFromAmd },
|
||||||
{ DRM_FORMAT_MOD_VENDOR_AMLOGIC, drmGetFormatModifierNameFromAmlogic },
|
{ DRM_FORMAT_MOD_VENDOR_AMLOGIC, drmGetFormatModifierNameFromAmlogic },
|
||||||
|
{ DRM_FORMAT_MOD_VENDOR_VIVANTE, drmGetFormatModifierNameFromVivante },
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef AFBC_FORMAT_MOD_MODE_VALUE_MASK
|
#ifndef AFBC_FORMAT_MOD_MODE_VALUE_MASK
|
||||||
|
@ -547,6 +551,70 @@ drmGetFormatModifierNameFromAmlogic(uint64_t modifier)
|
||||||
return mod_amlogic;
|
return mod_amlogic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
drmGetFormatModifierNameFromVivante(uint64_t modifier)
|
||||||
|
{
|
||||||
|
const char *color_tiling, *tile_status, *compression;
|
||||||
|
const char *mod_vivante = NULL;
|
||||||
|
|
||||||
|
switch (modifier & VIVANTE_MOD_TS_MASK) {
|
||||||
|
case 0:
|
||||||
|
tile_status = "";
|
||||||
|
break;
|
||||||
|
case VIVANTE_MOD_TS_64_4:
|
||||||
|
tile_status = ",TS=64B_4";
|
||||||
|
break;
|
||||||
|
case VIVANTE_MOD_TS_64_2:
|
||||||
|
tile_status = ",TS=64B_2";
|
||||||
|
break;
|
||||||
|
case VIVANTE_MOD_TS_128_4:
|
||||||
|
tile_status = ",TS=128B_4";
|
||||||
|
break;
|
||||||
|
case VIVANTE_MOD_TS_256_4:
|
||||||
|
tile_status = ",TS=256B_4";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
tile_status = ",TS=UNKNOWN";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (modifier & VIVANTE_MOD_COMP_MASK) {
|
||||||
|
case 0:
|
||||||
|
compression = "";
|
||||||
|
break;
|
||||||
|
case VIVANTE_MOD_COMP_DEC400:
|
||||||
|
compression = ",COMP=DEC400";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
compression = ",COMP=UNKNOWN";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (modifier & ~VIVANTE_MOD_EXT_MASK) {
|
||||||
|
case 0:
|
||||||
|
color_tiling = "LINEAR";
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_MOD_VIVANTE_TILED:
|
||||||
|
color_tiling = "TILED";
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_MOD_VIVANTE_SUPER_TILED:
|
||||||
|
color_tiling = "SUPER_TILED";
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_MOD_VIVANTE_SPLIT_TILED:
|
||||||
|
color_tiling = "SPLIT_TILED";
|
||||||
|
break;
|
||||||
|
case DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED:
|
||||||
|
color_tiling = "SPLIT_SUPER_TILED";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
color_tiling = "UNKNOWN";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
asprintf(&mod_vivante, "%s%s%s", color_tiling, tile_status, compression);
|
||||||
|
return mod_vivante;
|
||||||
|
}
|
||||||
|
|
||||||
static unsigned log2_int(unsigned x)
|
static unsigned log2_int(unsigned x)
|
||||||
{
|
{
|
||||||
unsigned l;
|
unsigned l;
|
||||||
|
|
Loading…
Reference in New Issue