mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-22 13:30:12 +01:00
isl: add new helper for format component compatibility
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Cc: mesa-stable Reviewed-by: Nanley Chery <nanley.g.chery@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17329>
This commit is contained in:
parent
10cd9ce606
commit
ab4beaf3fb
2 changed files with 25 additions and 7 deletions
|
|
@ -1872,6 +1872,9 @@ bool isl_formats_are_ccs_e_compatible(const struct intel_device_info *devinfo,
|
||||||
uint8_t isl_format_get_aux_map_encoding(enum isl_format format);
|
uint8_t isl_format_get_aux_map_encoding(enum isl_format format);
|
||||||
uint8_t isl_get_render_compression_format(enum isl_format format);
|
uint8_t isl_get_render_compression_format(enum isl_format format);
|
||||||
|
|
||||||
|
bool isl_formats_have_same_bits_per_channel(enum isl_format format1,
|
||||||
|
enum isl_format format2);
|
||||||
|
|
||||||
bool isl_format_has_unorm_channel(enum isl_format fmt) ATTRIBUTE_CONST;
|
bool isl_format_has_unorm_channel(enum isl_format fmt) ATTRIBUTE_CONST;
|
||||||
bool isl_format_has_snorm_channel(enum isl_format fmt) ATTRIBUTE_CONST;
|
bool isl_format_has_snorm_channel(enum isl_format fmt) ATTRIBUTE_CONST;
|
||||||
bool isl_format_has_ufloat_channel(enum isl_format fmt) ATTRIBUTE_CONST;
|
bool isl_format_has_ufloat_channel(enum isl_format fmt) ATTRIBUTE_CONST;
|
||||||
|
|
|
||||||
|
|
@ -948,6 +948,27 @@ isl_format_supports_multisampling(const struct intel_device_info *devinfo,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the two formats are component size compatible meaning that
|
||||||
|
* each component from one format has the same number of bits as the other
|
||||||
|
* format.
|
||||||
|
*
|
||||||
|
* This is useful to check whether an image used with 2 different formats can
|
||||||
|
* be fast cleared with a non 0 clear color.
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
isl_formats_have_same_bits_per_channel(enum isl_format format1,
|
||||||
|
enum isl_format format2)
|
||||||
|
{
|
||||||
|
const struct isl_format_layout *fmtl1 = isl_format_get_layout(format1);
|
||||||
|
const struct isl_format_layout *fmtl2 = isl_format_get_layout(format2);
|
||||||
|
|
||||||
|
return fmtl1->channels.r.bits == fmtl2->channels.r.bits &&
|
||||||
|
fmtl1->channels.g.bits == fmtl2->channels.g.bits &&
|
||||||
|
fmtl1->channels.b.bits == fmtl2->channels.b.bits &&
|
||||||
|
fmtl1->channels.a.bits == fmtl2->channels.a.bits;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the two formats are "CCS_E compatible" meaning that you can
|
* Returns true if the two formats are "CCS_E compatible" meaning that you can
|
||||||
* render in one format with CCS_E enabled and then texture using the other
|
* render in one format with CCS_E enabled and then texture using the other
|
||||||
|
|
@ -976,16 +997,10 @@ isl_formats_are_ccs_e_compatible(const struct intel_device_info *devinfo,
|
||||||
if (format2 == ISL_FORMAT_A8_UNORM)
|
if (format2 == ISL_FORMAT_A8_UNORM)
|
||||||
format2 = ISL_FORMAT_R8_UNORM;
|
format2 = ISL_FORMAT_R8_UNORM;
|
||||||
|
|
||||||
const struct isl_format_layout *fmtl1 = isl_format_get_layout(format1);
|
|
||||||
const struct isl_format_layout *fmtl2 = isl_format_get_layout(format2);
|
|
||||||
|
|
||||||
/* The compression used by CCS is not dependent on the actual data encoding
|
/* The compression used by CCS is not dependent on the actual data encoding
|
||||||
* of the format but only depends on the bit-layout of the channels.
|
* of the format but only depends on the bit-layout of the channels.
|
||||||
*/
|
*/
|
||||||
return fmtl1->channels.r.bits == fmtl2->channels.r.bits &&
|
return isl_formats_have_same_bits_per_channel(format1, format2);
|
||||||
fmtl1->channels.g.bits == fmtl2->channels.g.bits &&
|
|
||||||
fmtl1->channels.b.bits == fmtl2->channels.b.bits &&
|
|
||||||
fmtl1->channels.a.bits == fmtl2->channels.a.bits;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue