intel/isl: Add some helpers for working with RGBX formats
authorJason Ekstrand <jason.ekstrand@intel.com>
Sat, 21 Jan 2017 17:24:26 +0000 (09:24 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 9 May 2018 18:16:33 +0000 (11:16 -0700)
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/intel/isl/isl.h
src/intel/isl/isl_format.c

index c1d73646ab4440e34301b4c9b1c6d470efd5c2fb..7c9a41e09b3d658822a068c2e7fa412532dd211a 100644 (file)
@@ -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);
 
index a5bbdbceb1a7dff84936007c62e740e8a230bc28..6de681d5081d972f0725c60a1dfc04fc08c4c0ee 100644 (file)
@@ -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;
+   }
+}