asahi: Support more renderable formats
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sun, 12 Mar 2023 00:47:27 +0000 (19:47 -0500)
committerMarge Bot <emma+marge@anholt.net>
Fri, 7 Apr 2023 03:23:03 +0000 (03:23 +0000)
Fixes KHR-GLES3.copy_tex_image_conversions.forbidden.*

Arguably working around a mesa/st issue but more format support is good for
compatibility and performance anyway.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Janne Grunau <j@jannau.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22353>

src/asahi/lib/agx_formats.c
src/asahi/lib/agx_nir_format_helpers.h

index 4aa4efa..f74da6f 100644 (file)
 
 /* clang-format off */
 const struct agx_pixel_format_entry agx_pixel_format[PIPE_FORMAT_COUNT] = {
+   AGX_FMT(R5G6B5_UNORM,            R5G6B5,        UNORM,  T, F16),
+   AGX_FMT(B5G6R5_UNORM,            R5G6B5,        UNORM,  T, F16),
+
+   AGX_FMT(R5G5B5A1_UNORM,          R5G5B5A1,      UNORM,  T, F16),
+   AGX_FMT(B5G5R5A1_UNORM,          R5G5B5A1,      UNORM,  T, F16),
+   AGX_FMT(R5G5B5A1_UNORM,          R5G5B5A1,      UNORM,  T, F16),
+   AGX_FMT(B5G5R5A1_UNORM,          R5G5B5A1,      UNORM,  T, F16),
+
+   AGX_FMT(R4G4B4A4_UNORM,          R4G4B4A4,      UNORM,  T, F16),
+   AGX_FMT(B4G4R4A4_UNORM,          R4G4B4A4,      UNORM,  T, F16),
+   AGX_FMT(A4B4G4R4_UNORM,          R4G4B4A4,      UNORM,  T, F16),
+
    AGX_FMT(R8_UNORM,                R8,            UNORM,  T, U8NORM),
    AGX_FMT(R8G8_UNORM,              R8G8,          UNORM,  T, U8NORM),
    AGX_FMT(R8G8B8A8_UNORM,          R8G8B8A8,      UNORM,  T, U8NORM),
@@ -63,34 +75,42 @@ const struct agx_pixel_format_entry agx_pixel_format[PIPE_FORMAT_COUNT] = {
 
    AGX_FMT(R16_FLOAT,               R16,           FLOAT,  T, F16),
    AGX_FMT(R16G16_FLOAT,            R16G16,        FLOAT,  T, F16),
+   AGX_FMT(R16G16B16X16_FLOAT,      R16G16B16A16,  FLOAT,  T, F16),
    AGX_FMT(R16G16B16A16_FLOAT,      R16G16B16A16,  FLOAT,  T, F16),
 
    AGX_FMT(R32_FLOAT,               R32,           FLOAT,  T, I32),
    AGX_FMT(R32G32_FLOAT,            R32G32,        FLOAT,  T, I32),
+   AGX_FMT(R32G32B32X32_FLOAT,      R32G32B32A32,  FLOAT,  T, I32),
    AGX_FMT(R32G32B32A32_FLOAT,      R32G32B32A32,  FLOAT,  T, I32),
 
    AGX_FMT(R8_UINT,                 R8,            UINT,   T, I8),
    AGX_FMT(R8G8_UINT,               R8G8,          UINT,   T, I8),
+   AGX_FMT(R8G8B8X8_UINT,           R8G8B8A8,      UINT,   T, I8),
    AGX_FMT(R8G8B8A8_UINT,           R8G8B8A8,      UINT,   T, I8),
 
    AGX_FMT(R16_UINT,                R16,           UINT,   T, I16),
    AGX_FMT(R16G16_UINT,             R16G16,        UINT,   T, I16),
+   AGX_FMT(R16G16B16X16_UINT,       R16G16B16A16,  UINT,   T, I16),
    AGX_FMT(R16G16B16A16_UINT,       R16G16B16A16,  UINT,   T, I16),
 
    AGX_FMT(R32_UINT,                R32,           UINT,   T, I32),
    AGX_FMT(R32G32_UINT,             R32G32,        UINT,   T, I32),
+   AGX_FMT(R32G32B32X32_UINT,       R32G32B32A32,  UINT,   T, I32),
    AGX_FMT(R32G32B32A32_UINT,       R32G32B32A32,  UINT,   T, I32),
 
    AGX_FMT(R8_SINT,                 R8,            SINT,   T, I8),
    AGX_FMT(R8G8_SINT,               R8G8,          SINT,   T, I8),
+   AGX_FMT(R8G8B8X8_SINT,           R8G8B8A8,      SINT,   T, I8),
    AGX_FMT(R8G8B8A8_SINT,           R8G8B8A8,      SINT,   T, I8),
 
    AGX_FMT(R16_SINT,                R16,           SINT,   T, I16),
    AGX_FMT(R16G16_SINT,             R16G16,        SINT,   T, I16),
+   AGX_FMT(R16G16B16X16_SINT,       R16G16B16A16,  SINT,   T, I16),
    AGX_FMT(R16G16B16A16_SINT,       R16G16B16A16,  SINT,   T, I16),
 
    AGX_FMT(R32_SINT,                R32,           SINT,   T, I32),
    AGX_FMT(R32G32_SINT,             R32G32,        SINT,   T, I32),
+   AGX_FMT(R32G32B32X32_SINT,       R32G32B32A32,  SINT,   T, I32),
    AGX_FMT(R32G32B32A32_SINT,       R32G32B32A32,  SINT,   T, I32),
 
    AGX_FMT(Z16_UNORM,               R16,           UNORM,  F, _),
@@ -106,7 +126,9 @@ const struct agx_pixel_format_entry agx_pixel_format[PIPE_FORMAT_COUNT] = {
    AGX_FMT(Z24_UNORM_S8_UINT,       R32,           FLOAT,  F, _),
 
    AGX_FMT(R10G10B10A2_UNORM,       R10G10B10A2,   UNORM,  T, RGB10A2),
+   AGX_FMT(R10G10B10X2_UNORM,       R10G10B10A2,   UNORM,  T, RGB10A2),
    AGX_FMT(B10G10R10A2_UNORM,       R10G10B10A2,   UNORM,  T, RGB10A2),
+   AGX_FMT(B10G10R10X2_UNORM,       R10G10B10A2,   UNORM,  T, RGB10A2),
 
    AGX_FMT(R10G10B10A2_UINT,        R10G10B10A2,   UINT,   T, I16),
    AGX_FMT(B10G10R10A2_UINT,        R10G10B10A2,   UINT,   T, I16),
index 1cf74fb..fe6df12 100644 (file)
@@ -20,7 +20,8 @@ nir_sign_extend_if_sint(nir_builder *b, nir_ssa_def *x, enum pipe_format format)
    unsigned bits[4] = {0};
 
    for (unsigned i = 0; i < desc->nr_channels; ++i) {
-      assert(desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED);
+      assert(desc->channel[i].type == UTIL_FORMAT_TYPE_SIGNED ||
+             desc->channel[i].type == UTIL_FORMAT_TYPE_VOID);
 
       bits[i] = desc->channel[i].size;
    }