mesa: Replace the LA16_UNORM packed formats with one array format.
authorEric Anholt <eric@anholt.net>
Thu, 29 Aug 2019 22:45:18 +0000 (15:45 -0700)
committerEric Anholt <eric@anholt.net>
Sun, 20 Oct 2019 04:39:48 +0000 (04:39 +0000)
The array format is what the GL API wants (and we made a mistake in
the format returned for texbos on big-endian!), and it's exactly what
the gallium-side PIPE_FORMAT_L16A16 is.  The only downside is that
dri_util tries to fall back to sampling RG16 using LA16, which doesn't
have a match for big-endian any more.  No HW drivers supported A16L16
anyway.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/drivers/dri/common/dri_util.c
src/mesa/drivers/dri/i965/brw_surface_formats.c
src/mesa/main/formats.c
src/mesa/main/formats.csv
src/mesa/main/formats.h
src/mesa/main/texformat.c
src/mesa/main/teximage.c
src/mesa/state_tracker/st_format.c
src/mesa/swrast/s_texfetch.c
src/mesa/swrast/s_texfetch_tmp.h

index 45f614bf720eb2520f3bcf2396141ecc5cc17244..55abacd6714564b0ed921b02c1968c762a16a559 100644 (file)
@@ -42,6 +42,7 @@
 #include <stdbool.h>
 #include "dri_util.h"
 #include "utils.h"
+#include "util/u_endian.h"
 #include "util/xmlpool.h"
 #include "main/mtypes.h"
 #include "main/framebuffer.h"
@@ -959,10 +960,12 @@ static const struct {
       .image_format = __DRI_IMAGE_FORMAT_GR1616,
       .mesa_format  =        MESA_FORMAT_R16G16_UNORM,
    },
+#ifdef PIPE_ARCH_LITTLE_ENDIAN
    {
       .image_format = __DRI_IMAGE_FORMAT_GR1616,
-      .mesa_format  =        MESA_FORMAT_L16A16_UNORM,
+      .mesa_format  =        MESA_FORMAT_LA_UNORM16,
    },
+#endif
 };
 
 uint32_t
index 77476a8c7eb07ec1981810a5c2ee15ff13fb2f6c..059b2f4bb620ccb5a76092e6102b26be16fd553f 100644 (file)
@@ -48,7 +48,7 @@ brw_isl_format_for_mesa_format(mesa_format mesa_format)
       [MESA_FORMAT_B4G4R4A4_UNORM] = ISL_FORMAT_B4G4R4A4_UNORM,
       [MESA_FORMAT_B5G5R5A1_UNORM] = ISL_FORMAT_B5G5R5A1_UNORM,
       [MESA_FORMAT_L8A8_UNORM] = ISL_FORMAT_L8A8_UNORM,
-      [MESA_FORMAT_L16A16_UNORM] = ISL_FORMAT_L16A16_UNORM,
+      [MESA_FORMAT_LA_UNORM16] = ISL_FORMAT_L16A16_UNORM,
       [MESA_FORMAT_A_UNORM8] = ISL_FORMAT_A8_UNORM,
       [MESA_FORMAT_A_UNORM16] = ISL_FORMAT_A16_UNORM,
       [MESA_FORMAT_L_UNORM8] = ISL_FORMAT_L8_UNORM,
index aba12fc9f0b4584192155049c8e0df06ad1cd72f..31c63d6497b15e6a87e36d7c53ed02400a12431d 100644 (file)
@@ -954,8 +954,7 @@ _mesa_uncompressed_format_to_type_and_comps(mesa_format format,
       *comps = 2;
       return;
 
-   case MESA_FORMAT_L16A16_UNORM:
-   case MESA_FORMAT_A16L16_UNORM:
+   case MESA_FORMAT_LA_UNORM16:
    case MESA_FORMAT_R16G16_UNORM:
    case MESA_FORMAT_G16R16_UNORM:
       *datatype = GL_UNSIGNED_SHORT;
index 90d9bf07ece6279e6b8cd239ed5575683f5ed321..f123ab2ba73268b5fac375c0a866c37994aff328 100644 (file)
@@ -60,8 +60,6 @@ MESA_FORMAT_B8G8R8A8_UNORM                , packed, 1, 1, 1, un8 , un8 , un8 , u
 MESA_FORMAT_B8G8R8X8_UNORM                , packed, 1, 1, 1, un8 , un8 , un8 , x8  , zyx1, rgb
 MESA_FORMAT_A8R8G8B8_UNORM                , packed, 1, 1, 1, un8 , un8 , un8 , un8 , yzwx, rgb
 MESA_FORMAT_X8R8G8B8_UNORM                , packed, 1, 1, 1, x8  , un8 , un8 , un8 , yzw1, rgb
-MESA_FORMAT_L16A16_UNORM                  , packed, 1, 1, 1, un16, un16,     ,     , xxxy, rgb
-MESA_FORMAT_A16L16_UNORM                  , packed, 1, 1, 1, un16, un16,     ,     , yyyx, rgb
 MESA_FORMAT_B5G6R5_UNORM                  , packed, 1, 1, 1, un5 , un6 , un5 ,     , zyx1, rgb
 MESA_FORMAT_R5G6B5_UNORM                  , packed, 1, 1, 1, un5 , un6 , un5 ,     , xyz1, rgb
 MESA_FORMAT_B4G4R4A4_UNORM                , packed, 1, 1, 1, un4 , un4 , un4 , un4 , zyxw, rgb
@@ -106,6 +104,7 @@ MESA_FORMAT_A_UNORM8                      , array , 1, 1, 1, un8 ,     ,     ,
 MESA_FORMAT_A_UNORM16                     , array , 1, 1, 1, un16,     ,     ,     , 000x, rgb
 MESA_FORMAT_L_UNORM8                      , array , 1, 1, 1, un8 ,     ,     ,     , xxx1, rgb
 MESA_FORMAT_L_UNORM16                     , array , 1, 1, 1, un16,     ,     ,     , xxx1, rgb
+MESA_FORMAT_LA_UNORM16                    , array , 1, 1, 1, un16, un16,     ,     , xxxy, rgb
 MESA_FORMAT_I_UNORM8                      , array , 1, 1, 1, un8 ,     ,     ,     , xxxx, rgb
 MESA_FORMAT_I_UNORM16                     , array , 1, 1, 1, un16,     ,     ,     , xxxx, rgb
 MESA_FORMAT_R_UNORM8                      , array , 1, 1, 1, un8 ,     ,     ,     , x001, rgb
index cbeb237fba09d93d3a1d737b068759ebf533aa64..d1ee8ab5cb6f7cae3f2d86484667cea2eced44a8 100644 (file)
@@ -357,8 +357,6 @@ typedef enum
    MESA_FORMAT_B8G8R8X8_UNORM,   /* xxxx xxxx RRRR RRRR GGGG GGGG BBBB BBBB */
    MESA_FORMAT_A8R8G8B8_UNORM,   /* BBBB BBBB GGGG GGGG RRRR RRRR AAAA AAAA */
    MESA_FORMAT_X8R8G8B8_UNORM,   /* BBBB BBBB GGGG GGGG RRRR RRRR xxxx xxxx */
-   MESA_FORMAT_L16A16_UNORM,     /* AAAA AAAA AAAA AAAA LLLL LLLL LLLL LLLL */
-   MESA_FORMAT_A16L16_UNORM,     /* LLLL LLLL LLLL LLLL AAAA AAAA AAAA AAAA */
    MESA_FORMAT_B5G6R5_UNORM,                         /* RRRR RGGG GGGB BBBB */
    MESA_FORMAT_R5G6B5_UNORM,                         /* BBBB BGGG GGGR RRRR */
    MESA_FORMAT_B4G4R4A4_UNORM,                       /* AAAA RRRR GGGG BBBB */
@@ -404,6 +402,7 @@ typedef enum
    MESA_FORMAT_A_UNORM16,     /* ushort[i] = A */
    MESA_FORMAT_L_UNORM8,      /* ubyte[i] = L */
    MESA_FORMAT_L_UNORM16,     /* ushort[i] = L */
+   MESA_FORMAT_LA_UNORM16,     /* ushort[i * 2] = L, ushort[i*2+1] = A */
    MESA_FORMAT_I_UNORM8,      /* ubyte[i] = I */
    MESA_FORMAT_I_UNORM16,     /* ushort[i] = I */
    MESA_FORMAT_R_UNORM8,      /* ubyte[i] = R */
index 381edd554513ef61d2c258d19df22e9bdc2c468f..4c8ded7e211ae2958806573fc30ff940b39aa412 100644 (file)
@@ -202,7 +202,7 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
    case GL_LUMINANCE12_ALPHA4:
    case GL_LUMINANCE12_ALPHA12:
    case GL_LUMINANCE16_ALPHA16:
-      RETURN_IF_SUPPORTED(MESA_FORMAT_L16A16_UNORM);
+      RETURN_IF_SUPPORTED(MESA_FORMAT_LA_UNORM16);
       RETURN_IF_SUPPORTED(MESA_FORMAT_L8A8_UNORM);
       break;
 
index 67500830853179392dfb2b5efd22e94294bda43c..5b6afcfa985dfec1780862b6ddfb43b378796aef 100644 (file)
@@ -6008,7 +6008,7 @@ _mesa_get_texbuffer_format(const struct gl_context *ctx, GLenum internalFormat)
       case GL_LUMINANCE8_ALPHA8:
          return MESA_FORMAT_L8A8_UNORM;
       case GL_LUMINANCE16_ALPHA16:
-         return MESA_FORMAT_L16A16_UNORM;
+         return MESA_FORMAT_LA_UNORM16;
       case GL_LUMINANCE_ALPHA16F_ARB:
          return MESA_FORMAT_LA_FLOAT16;
       case GL_LUMINANCE_ALPHA32F_ARB:
index 38ea51b02cdd72ed23fb207ed8c46c6507260fb8..462e93ff1d0b6c183715e146da7def536f596c83 100644 (file)
@@ -109,10 +109,6 @@ st_mesa_format_to_pipe_format(const struct st_context *st,
       return PIPE_FORMAT_LA88_UNORM;
    case MESA_FORMAT_A8L8_UNORM:
       return PIPE_FORMAT_AL88_UNORM;
-   case MESA_FORMAT_L16A16_UNORM:
-      return PIPE_FORMAT_LA1616_UNORM;
-   case MESA_FORMAT_A16L16_UNORM:
-      return PIPE_FORMAT_AL1616_UNORM;
    case MESA_FORMAT_A_UNORM8:
       return PIPE_FORMAT_A8_UNORM;
    case MESA_FORMAT_A_UNORM16:
@@ -121,6 +117,8 @@ st_mesa_format_to_pipe_format(const struct st_context *st,
       return PIPE_FORMAT_L8_UNORM;
    case MESA_FORMAT_L_UNORM16:
       return PIPE_FORMAT_L16_UNORM;
+   case MESA_FORMAT_LA_UNORM16:
+      return PIPE_FORMAT_L16A16_UNORM;
    case MESA_FORMAT_I_UNORM8:
       return PIPE_FORMAT_I8_UNORM;
    case MESA_FORMAT_I_UNORM16:
@@ -703,10 +701,8 @@ st_pipe_format_to_mesa_format(enum pipe_format format)
       return MESA_FORMAT_L8A8_UNORM;
    case PIPE_FORMAT_AL88_UNORM:
       return MESA_FORMAT_A8L8_UNORM;
-   case PIPE_FORMAT_LA1616_UNORM:
-      return MESA_FORMAT_L16A16_UNORM;
-   case PIPE_FORMAT_AL1616_UNORM:
-      return MESA_FORMAT_A16L16_UNORM;
+   case PIPE_FORMAT_L16A16_UNORM:
+      return MESA_FORMAT_LA_UNORM16;
    case PIPE_FORMAT_A8_UNORM:
       return MESA_FORMAT_A_UNORM8;
    case PIPE_FORMAT_A16_UNORM:
index 5f0b06e915c65ea6209d80ce1608fc4fdeb7f07b..1fe5e21162a92ed421178d4289c330d701c69123 100644 (file)
@@ -134,8 +134,6 @@ texfetch_funcs[] =
    FETCH_FUNCS(B8G8R8X8_UNORM),
    FETCH_FUNCS(A8R8G8B8_UNORM),
    FETCH_FUNCS(X8R8G8B8_UNORM),
-   FETCH_FUNCS(L16A16_UNORM),
-   FETCH_FUNCS(A16L16_UNORM),
    FETCH_FUNCS(B5G6R5_UNORM),
    FETCH_FUNCS(R5G6B5_UNORM),
    FETCH_FUNCS(B4G4R4A4_UNORM),
@@ -175,6 +173,7 @@ texfetch_funcs[] =
    FETCH_FUNCS(A_UNORM16),
    FETCH_FUNCS(L_UNORM8),
    FETCH_FUNCS(L_UNORM16),
+   FETCH_FUNCS(LA_UNORM16),
    FETCH_FUNCS(I_UNORM8),
    FETCH_FUNCS(I_UNORM16),
    FETCH_FUNCS(R_UNORM8),
index 8261ebf46ef3532cbe2be5305c1ccb9c419dc898..72bb13498afa7e89efee61912ff14605a68eecb0 100644 (file)
@@ -137,13 +137,12 @@ FETCH_RGBA(R_UNORM16, GLushort, 1)
 FETCH_RGBA(A8L8_UNORM, GLushort, 1)
 FETCH_RGBA(R16G16_UNORM, GLuint, 1)
 FETCH_RGBA(G16R16_UNORM, GLuint, 1)
-FETCH_RGBA(L16A16_UNORM, GLuint, 1)
-FETCH_RGBA(A16L16_UNORM, GLuint, 1)
 FETCH_RGBA(B2G3R3_UNORM, GLubyte, 1)
 FETCH_RGBA(A_UNORM8, GLubyte, 1)
 FETCH_RGBA(A_UNORM16, GLushort, 1)
 FETCH_RGBA(L_UNORM8, GLubyte, 1)
 FETCH_RGBA(L_UNORM16, GLushort, 1)
+FETCH_RGBA(LA_UNORM16, GLushort, 2)
 FETCH_RGBA(I_UNORM8, GLubyte, 1)
 FETCH_RGBA(I_UNORM16, GLushort, 1)
 FETCH_RGBA(BGR_SRGB8, GLubyte, 3)