intel/isl: Add isl_format_has_color_component() function.

v2: Get luminance bits from luminance component (Ken).

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Rafael Antognolli 2019-03-08 14:01:58 -08:00
parent 7f6344a726
commit d97eddff25
2 changed files with 25 additions and 0 deletions

View File

@ -1503,6 +1503,9 @@ isl_format_has_int_channel(enum isl_format fmt)
isl_format_has_sint_channel(fmt);
}
bool isl_format_has_color_component(enum isl_format fmt,
int component) ATTRIBUTE_CONST;
unsigned isl_format_get_num_channels(enum isl_format fmt);
uint32_t isl_format_get_depth_format(enum isl_format fmt, bool has_stencil);

View File

@ -688,6 +688,28 @@ isl_format_has_sint_channel(enum isl_format fmt)
return isl_format_has_channel_type(fmt, ISL_SINT);
}
bool
isl_format_has_color_component(enum isl_format fmt, int component)
{
const struct isl_format_layout *fmtl = isl_format_get_layout(fmt);
const uint8_t intensity = fmtl->channels.i.bits;
const uint8_t luminance = fmtl->channels.l.bits;
switch (component) {
case 0:
return (fmtl->channels.r.bits + intensity + luminance) > 0;
case 1:
return (fmtl->channels.g.bits + intensity + luminance) > 0;
case 2:
return (fmtl->channels.b.bits + intensity + luminance) > 0;
case 3:
return (fmtl->channels.a.bits + intensity) > 0;
default:
assert(!"Invalid color component: must be 0..3");
return false;
}
}
unsigned
isl_format_get_num_channels(enum isl_format fmt)
{