panfrost: Add ETC1/ETC2 texture formats
authorIcecream95 <ixn@keemail.me>
Sat, 11 Jan 2020 07:00:38 +0000 (20:00 +1300)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tue, 21 Jan 2020 13:35:23 +0000 (08:35 -0500)
Acked-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3414>

src/gallium/drivers/panfrost/pan_format.c
src/gallium/drivers/panfrost/pan_resource.c
src/gallium/drivers/panfrost/pan_screen.c
src/panfrost/include/panfrost-job.h

index 9b0440eae378923b93d1361026f8b1443150800d..040b01d9e5bd4f4c95906e2c6f714e5e0753bf6e 100644 (file)
@@ -217,6 +217,29 @@ panfrost_find_format(const struct util_format_description *desc) {
         case PIPE_FORMAT_R9G9B9E5_FLOAT:
                 return MALI_R9F_G9F_B9F_E5F;
 
+        case PIPE_FORMAT_ETC1_RGB8:
+        case PIPE_FORMAT_ETC2_RGB8:
+        case PIPE_FORMAT_ETC2_SRGB8:
+                return MALI_ETC2_RGB8;
+
+        case PIPE_FORMAT_ETC2_RGB8A1:
+        case PIPE_FORMAT_ETC2_SRGB8A1:
+                return MALI_ETC2_RGB8A1;
+
+        case PIPE_FORMAT_ETC2_RGBA8:
+        case PIPE_FORMAT_ETC2_SRGBA8:
+                return MALI_ETC2_RGBA8;
+
+        case PIPE_FORMAT_ETC2_R11_UNORM:
+                return MALI_ETC2_R11_UNORM;
+        case PIPE_FORMAT_ETC2_R11_SNORM:
+                return MALI_ETC2_R11_SNORM;
+
+        case PIPE_FORMAT_ETC2_RG11_UNORM:
+                return MALI_ETC2_RG11_UNORM;
+        case PIPE_FORMAT_ETC2_RG11_SNORM:
+                return MALI_ETC2_RG11_SNORM;
+
         default:
                 /* Fallthrough to default */
                 break;
index 18c6e05ba3bd8fca514c71447a30fa1b3c299bac..aac1e8cf19d53c185c703507808aff9d0324d4cf 100644 (file)
@@ -315,6 +315,9 @@ panfrost_setup_slices(struct panfrost_resource *pres, size_t *bo_size)
                 /* Compute the would-be stride */
                 unsigned stride = bytes_per_pixel * effective_width;
 
+                if (util_format_is_compressed(res->format))
+                        stride /= 4;
+
                 /* ..but cache-line align it for performance */
                 if (can_align_stride && pres->layout == PAN_LINEAR)
                         stride = ALIGN_POT(stride, 64);
index 296be13484dd95f07e0edf74795784ebe7691a82..b7d24c93ea24965c5198bed4beac2a9bfa4b7723 100644 (file)
@@ -459,10 +459,14 @@ panfrost_is_format_supported( struct pipe_screen *screen,
         if (scanout && renderable && !util_format_is_rgba8_variant(format_desc))
                 return false;
 
-        if (format_desc->layout != UTIL_FORMAT_LAYOUT_PLAIN &&
-            format_desc->layout != UTIL_FORMAT_LAYOUT_OTHER) {
-                /* Compressed formats not yet hooked up. */
-                return false;
+        switch (format_desc->layout) {
+                case UTIL_FORMAT_LAYOUT_PLAIN:
+                case UTIL_FORMAT_LAYOUT_OTHER:
+                        break;
+                case UTIL_FORMAT_LAYOUT_ETC:
+                        return true;
+                default:
+                        return false;
         }
 
         /* Internally, formats that are depth/stencil renderable are limited.
index b9a560911ebf0958bbc792ef80b47a2f098a7e57..9535669918665632b3aee83f5f84b5ddcdb19797 100644 (file)
@@ -229,6 +229,9 @@ struct mali_channel_swizzle {
 
 /* The top 3 bits specify how the bits of each component are interpreted. */
 
+/* e.g. ETC2_RGB8 */
+#define MALI_FORMAT_COMPRESSED (0 << 5)
+
 /* e.g. R11F_G11F_B10F */
 #define MALI_FORMAT_SPECIAL (2 << 5)
 
@@ -273,6 +276,14 @@ struct mali_channel_swizzle {
 #define MALI_CHANNEL_FLOAT 7
 
 enum mali_format {
+       MALI_ETC2_RGB8       = MALI_FORMAT_COMPRESSED | 0x1,
+       MALI_ETC2_R11_UNORM  = MALI_FORMAT_COMPRESSED | 0x2,
+       MALI_ETC2_RGBA8      = MALI_FORMAT_COMPRESSED | 0x3,
+       MALI_ETC2_RG11_UNORM = MALI_FORMAT_COMPRESSED | 0x4,
+       MALI_ETC2_R11_SNORM  = MALI_FORMAT_COMPRESSED | 0x11,
+       MALI_ETC2_RG11_SNORM = MALI_FORMAT_COMPRESSED | 0x12,
+       MALI_ETC2_RGB8A1     = MALI_FORMAT_COMPRESSED | 0x13,
+
        MALI_RGB565         = MALI_FORMAT_SPECIAL | 0x0,
        MALI_RGB5_A1_UNORM  = MALI_FORMAT_SPECIAL | 0x2,
        MALI_RGB10_A2_UNORM = MALI_FORMAT_SPECIAL | 0x3,