From: Jason Ekstrand Date: Sat, 21 Jan 2017 17:24:26 +0000 (-0800) Subject: intel/isl: Add some helpers for working with RGBX formats X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=08cd834996377634cab8c49c50ad2dc66600fa45;p=mesa.git intel/isl: Add some helpers for working with RGBX formats Reviewed-by: Topi Pohjolainen --- diff --git a/src/intel/isl/isl.h b/src/intel/isl/isl.h index c1d73646ab4..7c9a41e09b3 100644 --- a/src/intel/isl/isl.h +++ b/src/intel/isl/isl.h @@ -1561,8 +1561,19 @@ isl_format_is_rgb(enum isl_format fmt) isl_format_layouts[fmt].channels.a.bits == 0; } +static inline bool +isl_format_is_rgbx(enum isl_format fmt) +{ + return isl_format_layouts[fmt].channels.r.bits > 0 && + isl_format_layouts[fmt].channels.g.bits > 0 && + isl_format_layouts[fmt].channels.b.bits > 0 && + isl_format_layouts[fmt].channels.a.bits > 0 && + isl_format_layouts[fmt].channels.a.type == ISL_VOID; +} + enum isl_format isl_format_rgb_to_rgba(enum isl_format rgb) ATTRIBUTE_CONST; enum isl_format isl_format_rgb_to_rgbx(enum isl_format rgb) ATTRIBUTE_CONST; +enum isl_format isl_format_rgbx_to_rgba(enum isl_format rgb) ATTRIBUTE_CONST; bool isl_is_storage_image_format(enum isl_format fmt); diff --git a/src/intel/isl/isl_format.c b/src/intel/isl/isl_format.c index a5bbdbceb1a..6de681d5081 100644 --- a/src/intel/isl/isl_format.c +++ b/src/intel/isl/isl_format.c @@ -774,3 +774,35 @@ isl_format_rgb_to_rgbx(enum isl_format rgb) return ISL_FORMAT_UNSUPPORTED; } } + +enum isl_format +isl_format_rgbx_to_rgba(enum isl_format rgbx) +{ + assert(isl_format_is_rgbx(rgbx)); + + switch (rgbx) { + case ISL_FORMAT_R32G32B32X32_FLOAT: + return ISL_FORMAT_R32G32B32A32_FLOAT; + case ISL_FORMAT_R16G16B16X16_UNORM: + return ISL_FORMAT_R16G16B16A16_UNORM; + case ISL_FORMAT_R16G16B16X16_FLOAT: + return ISL_FORMAT_R16G16B16A16_FLOAT; + case ISL_FORMAT_B8G8R8X8_UNORM: + return ISL_FORMAT_B8G8R8A8_UNORM; + case ISL_FORMAT_B8G8R8X8_UNORM_SRGB: + return ISL_FORMAT_B8G8R8A8_UNORM_SRGB; + case ISL_FORMAT_R8G8B8X8_UNORM: + return ISL_FORMAT_R8G8B8A8_UNORM; + case ISL_FORMAT_R8G8B8X8_UNORM_SRGB: + return ISL_FORMAT_R8G8B8A8_UNORM_SRGB; + case ISL_FORMAT_B10G10R10X2_UNORM: + return ISL_FORMAT_B10G10R10A2_UNORM; + case ISL_FORMAT_B5G5R5X1_UNORM: + return ISL_FORMAT_B5G5R5A1_UNORM; + case ISL_FORMAT_B5G5R5X1_UNORM_SRGB: + return ISL_FORMAT_B5G5R5A1_UNORM_SRGB; + default: + assert(!"Invalid RGBX format"); + return rgbx; + } +}