panfrost: Implement missing texture formats
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Fri, 29 Mar 2019 01:46:17 +0000 (01:46 +0000)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sun, 31 Mar 2019 02:36:38 +0000 (02:36 +0000)
 - Implements RGB565/RGBA5551 formats
 - Don't advertise support for flipped RGBA5551 and ETC

Fixes remaining tests in dEQP-GLES2.functional.texture.format.* which is
now at 36/36.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
src/gallium/drivers/panfrost/pan_format.c
src/gallium/drivers/panfrost/pan_screen.c

index cac8a3d..cb1c71f 100644 (file)
@@ -182,6 +182,18 @@ panfrost_find_format(const struct util_format_description *desc)
                 case PIPE_FORMAT_Z32_UNORM:
                         return MALI_Z32_UNORM;
 
+                case PIPE_FORMAT_B5G6R5_UNORM:
+                        return MALI_RGB565;
+
+                case PIPE_FORMAT_B5G5R5A1_UNORM:
+                        return MALI_RGB5_A1_UNORM;
+
+                case PIPE_FORMAT_A1B5G5R5_UNORM:
+                case PIPE_FORMAT_X1B5G5R5_UNORM:
+                        /* Not supported - this is backwards from OpenGL! */
+                        assert(0);
+                        break;
+
                 default:
                         /* Fallthrough to default */
                         break;
index 45569d5..682eb37 100644 (file)
@@ -440,6 +440,9 @@ panfrost_is_format_supported( struct pipe_screen *screen,
         if (format == PIPE_FORMAT_Z24X8_UNORM || format == PIPE_FORMAT_X8Z24_UNORM)
                 return FALSE;
 
+        if (format == PIPE_FORMAT_A1B5G5R5_UNORM || format == PIPE_FORMAT_X1B5G5R5_UNORM)
+                return FALSE;
+
         if (bind & PIPE_BIND_RENDER_TARGET) {
                 /* We don't support rendering into anything but RGBA8 yet. We
                  * need more formats for spec compliance, but for now, honesty
@@ -467,7 +470,8 @@ panfrost_is_format_supported( struct pipe_screen *screen,
         }
 
         if (format_desc->layout == UTIL_FORMAT_LAYOUT_BPTC ||
-                        format_desc->layout == UTIL_FORMAT_LAYOUT_ASTC) {
+                        format_desc->layout == UTIL_FORMAT_LAYOUT_ASTC ||
+                        format_desc->layout == UTIL_FORMAT_LAYOUT_ETC) {
                 /* Compressed formats not yet hooked up. */
                 return FALSE;
         }