freedreno/ir3: lower local_index using local_id
[mesa.git] / src / freedreno / vulkan / vk_format.h
index b1b763ff52edcef35229f6245c7ad148953606c9..890e453c2184f27fb01b4d851ccbcd4b0913c87a 100644 (file)
@@ -40,15 +40,6 @@ vk_format_description(VkFormat format)
    return util_format_description(vk_format_to_pipe_format(format));
 }
 
-/**
- * Return total bits needed for the pixel format per block.
- */
-static inline unsigned
-vk_format_get_blocksizebits(VkFormat format)
-{
-   return util_format_get_blocksizebits(vk_format_to_pipe_format(format));
-}
-
 /**
  * Return bytes per block (not pixel) for the given format.
  */
@@ -70,132 +61,19 @@ vk_format_get_blockheight(VkFormat format)
    return util_format_get_blockheight(vk_format_to_pipe_format(format));
 }
 
-static inline unsigned
-vk_format_get_block_count_width(VkFormat format, unsigned width)
-{
-   return util_format_get_nblocksx(vk_format_to_pipe_format(format), width);
-}
-
-static inline unsigned
-vk_format_get_block_count_height(VkFormat format, unsigned height)
-{
-   return util_format_get_nblocksy(vk_format_to_pipe_format(format), height);
-}
-
-static inline unsigned
-vk_format_get_block_count(VkFormat format, unsigned width, unsigned height)
-{
-   return util_format_get_nblocks(vk_format_to_pipe_format(format),
-                                  width, height);
-}
-
-static inline VkImageAspectFlags
-vk_format_aspects(VkFormat format)
-{
-   switch (format) {
-   case VK_FORMAT_UNDEFINED:
-      return 0;
-
-   case VK_FORMAT_S8_UINT:
-      return VK_IMAGE_ASPECT_STENCIL_BIT;
-
-   case VK_FORMAT_D16_UNORM_S8_UINT:
-   case VK_FORMAT_D24_UNORM_S8_UINT:
-   case VK_FORMAT_D32_SFLOAT_S8_UINT:
-      return VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT;
-
-   case VK_FORMAT_D16_UNORM:
-   case VK_FORMAT_X8_D24_UNORM_PACK32:
-   case VK_FORMAT_D32_SFLOAT:
-      return VK_IMAGE_ASPECT_DEPTH_BIT;
-
-   default:
-      return VK_IMAGE_ASPECT_COLOR_BIT;
-   }
-}
-
-static inline enum pipe_swizzle
-tu_swizzle_conv(VkComponentSwizzle component,
-                const unsigned char chan[4],
-                VkComponentSwizzle vk_swiz)
-{
-   int x;
-
-   if (vk_swiz == VK_COMPONENT_SWIZZLE_IDENTITY)
-      vk_swiz = component;
-   switch (vk_swiz) {
-   case VK_COMPONENT_SWIZZLE_ZERO:
-      return PIPE_SWIZZLE_0;
-   case VK_COMPONENT_SWIZZLE_ONE:
-      return PIPE_SWIZZLE_1;
-   case VK_COMPONENT_SWIZZLE_R:
-      for (x = 0; x < 4; x++)
-         if (chan[x] == 0)
-            return x;
-      return PIPE_SWIZZLE_0;
-   case VK_COMPONENT_SWIZZLE_G:
-      for (x = 0; x < 4; x++)
-         if (chan[x] == 1)
-            return x;
-      return PIPE_SWIZZLE_0;
-   case VK_COMPONENT_SWIZZLE_B:
-      for (x = 0; x < 4; x++)
-         if (chan[x] == 2)
-            return x;
-      return PIPE_SWIZZLE_0;
-   case VK_COMPONENT_SWIZZLE_A:
-      for (x = 0; x < 4; x++)
-         if (chan[x] == 3)
-            return x;
-      return PIPE_SWIZZLE_1;
-   default:
-      unreachable("Illegal swizzle");
-   }
-}
-
-static inline void
-vk_format_compose_swizzles(const VkComponentMapping *mapping,
-                           const unsigned char swz[4],
-                           enum pipe_swizzle dst[4])
-{
-   dst[0] = tu_swizzle_conv(VK_COMPONENT_SWIZZLE_R, swz, mapping->r);
-   dst[1] = tu_swizzle_conv(VK_COMPONENT_SWIZZLE_G, swz, mapping->g);
-   dst[2] = tu_swizzle_conv(VK_COMPONENT_SWIZZLE_B, swz, mapping->b);
-   dst[3] = tu_swizzle_conv(VK_COMPONENT_SWIZZLE_A, swz, mapping->a);
-}
-
 static inline bool
 vk_format_is_compressed(VkFormat format)
 {
-   return util_format_is_compressed(vk_format_to_pipe_format(format));
-}
-
-static inline bool
-vk_format_has_depth(VkFormat format)
-{
-   const struct util_format_description *desc = vk_format_description(format);
-
-   return util_format_has_depth(desc);
-}
-
-static inline bool
-vk_format_has_stencil(VkFormat format)
-{
-   const struct util_format_description *desc = vk_format_description(format);
-
-   return util_format_has_stencil(desc);
+   /* this includes 4:2:2 formats, which are compressed formats for vulkan */
+   return vk_format_get_blockwidth(format) > 1;
 }
 
 static inline bool
 vk_format_is_depth_or_stencil(VkFormat format)
 {
-   return vk_format_has_depth(format) || vk_format_has_stencil(format);
-}
+   const struct util_format_description *desc = vk_format_description(format);
 
-static inline bool
-vk_format_is_color(VkFormat format)
-{
-   return !vk_format_is_depth_or_stencil(format);
+   return util_format_has_depth(desc) || util_format_has_stencil(desc);
 }
 
 static inline bool
@@ -204,21 +82,6 @@ vk_format_has_alpha(VkFormat format)
    return util_format_has_alpha(vk_format_to_pipe_format(format));
 }
 
-static inline VkFormat
-vk_format_depth_only(VkFormat format)
-{
-   switch (format) {
-   case VK_FORMAT_D16_UNORM_S8_UINT:
-      return VK_FORMAT_D16_UNORM;
-   case VK_FORMAT_D24_UNORM_S8_UINT:
-      return VK_FORMAT_X8_D24_UNORM_PACK32;
-   case VK_FORMAT_D32_SFLOAT_S8_UINT:
-      return VK_FORMAT_D32_SFLOAT;
-   default:
-      return format;
-   }
-}
-
 static inline bool
 vk_format_is_int(VkFormat format)
 {
@@ -243,50 +106,22 @@ vk_format_is_srgb(VkFormat format)
    return util_format_is_srgb(vk_format_to_pipe_format(format));
 }
 
-static inline VkFormat
-vk_format_no_srgb(VkFormat format)
+static inline bool
+vk_format_is_unorm(VkFormat format)
 {
-   switch (format) {
-   case VK_FORMAT_R8_SRGB:
-      return VK_FORMAT_R8_UNORM;
-   case VK_FORMAT_R8G8_SRGB:
-      return VK_FORMAT_R8G8_UNORM;
-   case VK_FORMAT_R8G8B8_SRGB:
-      return VK_FORMAT_R8G8B8_UNORM;
-   case VK_FORMAT_B8G8R8_SRGB:
-      return VK_FORMAT_B8G8R8_UNORM;
-   case VK_FORMAT_R8G8B8A8_SRGB:
-      return VK_FORMAT_R8G8B8A8_UNORM;
-   case VK_FORMAT_B8G8R8A8_SRGB:
-      return VK_FORMAT_B8G8R8A8_UNORM;
-   case VK_FORMAT_A8B8G8R8_SRGB_PACK32:
-      return VK_FORMAT_A8B8G8R8_UNORM_PACK32;
-   case VK_FORMAT_BC1_RGB_SRGB_BLOCK:
-      return VK_FORMAT_BC1_RGB_UNORM_BLOCK;
-   case VK_FORMAT_BC1_RGBA_SRGB_BLOCK:
-      return VK_FORMAT_BC1_RGBA_UNORM_BLOCK;
-   case VK_FORMAT_BC2_SRGB_BLOCK:
-      return VK_FORMAT_BC2_UNORM_BLOCK;
-   case VK_FORMAT_BC3_SRGB_BLOCK:
-      return VK_FORMAT_BC3_UNORM_BLOCK;
-   case VK_FORMAT_BC7_SRGB_BLOCK:
-      return VK_FORMAT_BC7_UNORM_BLOCK;
-   case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:
-      return VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK;
-   case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:
-      return VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK;
-   case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:
-      return VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK;
-   default:
-      assert(!vk_format_is_srgb(format));
-      return format;
-   }
+   return util_format_is_unorm(vk_format_to_pipe_format(format));
 }
 
-static inline VkFormat
-vk_format_stencil_only(VkFormat format)
+static inline bool
+vk_format_is_snorm(VkFormat format)
+{
+   return util_format_is_snorm(vk_format_to_pipe_format(format));
+}
+
+static inline bool
+vk_format_is_float(VkFormat format)
 {
-   return VK_FORMAT_S8_UINT;
+   return util_format_is_float(vk_format_to_pipe_format(format));
 }
 
 static inline unsigned
@@ -294,6 +129,17 @@ vk_format_get_component_bits(VkFormat format,
                              enum util_format_colorspace colorspace,
                              unsigned component)
 {
+   switch (format) {
+   case VK_FORMAT_G8B8G8R8_422_UNORM:
+   case VK_FORMAT_B8G8R8G8_422_UNORM:
+   case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:
+   case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
+      /* util_format_get_component_bits doesn't return what we want */
+      return 8;
+   default:
+      break;
+   }
+
    return util_format_get_component_bits(vk_format_to_pipe_format(format),
                                          colorspace, component);
 }