It's worth noting that this only fixes some of the more obvious problems. For the formats that mesa defines as array formats, I think things are still pretty broken.
This also brings into question how "worth it" it is having different format enums. I personally prefer the way that mesa core has them defined as I find it much simpler to understand. However, changing either is probably going to be a buggy mess. :-( --Jason On Sat, Aug 8, 2015 at 1:45 PM, Jason Ekstrand <[email protected]> wrote: > Mesa formats and gallium formats are defined a bit differently. In mesa > there are "packed" formats which are based on byte-order within a 8, 16, or > 32-bit word and there are "array" formats which are simply an array of 8, > 16, or 32-bit values. In gallium, they do something different called > "plain" which I've never been able to fully understand. However, for those > formats which mesa defines as "packed", they should match up 1-1 with the > corresponding "plane" gallium format. > > Unfortunately, st_format.c was using the endian-dependent wrappers such as > PIPE_FORMAT_ARGB_8888 that are defined in p_format.h and mapping them to > MESA_FORMAT_A8R8G8B8. On little-endian systems, this is fine but on > big-endian systems, it breaks because it introduces one extra byte-swap. > > Cc: Brian Paul <[email protected]> > Cc: Oded Gabbay <[email protected]> > --- > src/mesa/state_tracker/st_format.c | 94 > +++++++++++++++++++------------------- > 1 file changed, 47 insertions(+), 47 deletions(-) > > diff --git a/src/mesa/state_tracker/st_format.c > b/src/mesa/state_tracker/st_format.c > index db7b5b7..f946f24 100644 > --- a/src/mesa/state_tracker/st_format.c > +++ b/src/mesa/state_tracker/st_format.c > @@ -58,21 +58,21 @@ st_mesa_format_to_pipe_format(struct st_context *st, > mesa_format mesaFormat) > { > switch (mesaFormat) { > case MESA_FORMAT_A8B8G8R8_UNORM: > - return PIPE_FORMAT_ABGR8888_UNORM; > + return PIPE_FORMAT_A8B8G8R8_UNORM; > case MESA_FORMAT_R8G8B8A8_UNORM: > - return PIPE_FORMAT_RGBA8888_UNORM; > + return PIPE_FORMAT_R8G8B8A8_UNORM; > case MESA_FORMAT_B8G8R8A8_UNORM: > - return PIPE_FORMAT_BGRA8888_UNORM; > + return PIPE_FORMAT_B8G8R8A8_UNORM; > case MESA_FORMAT_A8R8G8B8_UNORM: > - return PIPE_FORMAT_ARGB8888_UNORM; > + return PIPE_FORMAT_A8R8G8B8_UNORM; > case MESA_FORMAT_X8B8G8R8_UNORM: > - return PIPE_FORMAT_XBGR8888_UNORM; > + return PIPE_FORMAT_X8B8G8R8_UNORM; > case MESA_FORMAT_R8G8B8X8_UNORM: > - return PIPE_FORMAT_RGBX8888_UNORM; > + return PIPE_FORMAT_R8G8B8X8_UNORM; > case MESA_FORMAT_B8G8R8X8_UNORM: > - return PIPE_FORMAT_BGRX8888_UNORM; > + return PIPE_FORMAT_B8G8R8X8_UNORM; > case MESA_FORMAT_X8R8G8B8_UNORM: > - return PIPE_FORMAT_XRGB8888_UNORM; > + return PIPE_FORMAT_X8R8G8B8_UNORM; > case MESA_FORMAT_B5G5R5A1_UNORM: > return PIPE_FORMAT_B5G5R5A1_UNORM; > case MESA_FORMAT_B4G4R4A4_UNORM: > @@ -154,13 +154,13 @@ st_mesa_format_to_pipe_format(struct st_context *st, > mesa_format mesaFormat) > case MESA_FORMAT_BGR_SRGB8: > return PIPE_FORMAT_R8G8B8_SRGB; > case MESA_FORMAT_A8B8G8R8_SRGB: > - return PIPE_FORMAT_ABGR8888_SRGB; > + return PIPE_FORMAT_A8B8G8R8_SRGB; > case MESA_FORMAT_R8G8B8A8_SRGB: > - return PIPE_FORMAT_RGBA8888_SRGB; > + return PIPE_FORMAT_R8G8B8A8_SRGB; > case MESA_FORMAT_B8G8R8A8_SRGB: > - return PIPE_FORMAT_BGRA8888_SRGB; > + return PIPE_FORMAT_B8G8R8A8_SRGB; > case MESA_FORMAT_A8R8G8B8_SRGB: > - return PIPE_FORMAT_ARGB8888_SRGB; > + return PIPE_FORMAT_A8R8G8B8_SRGB; > case MESA_FORMAT_RGBA_FLOAT32: > return PIPE_FORMAT_R32G32B32A32_FLOAT; > case MESA_FORMAT_RGBA_FLOAT16: > @@ -199,13 +199,13 @@ st_mesa_format_to_pipe_format(struct st_context *st, > mesa_format mesaFormat) > case MESA_FORMAT_R_UNORM16: > return PIPE_FORMAT_R16_UNORM; > case MESA_FORMAT_R8G8_UNORM: > - return PIPE_FORMAT_RG88_UNORM; > + return PIPE_FORMAT_R8G8_UNORM; > case MESA_FORMAT_G8R8_UNORM: > - return PIPE_FORMAT_GR88_UNORM; > + return PIPE_FORMAT_G8R8_UNORM; > case MESA_FORMAT_R16G16_UNORM: > - return PIPE_FORMAT_RG1616_UNORM; > + return PIPE_FORMAT_R16G16_UNORM; > case MESA_FORMAT_G16R16_UNORM: > - return PIPE_FORMAT_GR1616_UNORM; > + return PIPE_FORMAT_G16R16_UNORM; > case MESA_FORMAT_RGBA_UNORM16: > return PIPE_FORMAT_R16G16B16A16_UNORM; > > @@ -357,7 +357,7 @@ st_mesa_format_to_pipe_format(struct st_context *st, > mesa_format mesaFormat) > case MESA_FORMAT_G8R8_SNORM: > return PIPE_FORMAT_GR88_SNORM; > case MESA_FORMAT_R8G8B8A8_SNORM: > - return PIPE_FORMAT_RGBA8888_SNORM; > + return PIPE_FORMAT_R8G8B8A8_SNORM; > case MESA_FORMAT_A8B8G8R8_SNORM: > return PIPE_FORMAT_ABGR8888_SNORM; > > @@ -476,21 +476,21 @@ mesa_format > st_pipe_format_to_mesa_format(enum pipe_format format) > { > switch (format) { > - case PIPE_FORMAT_ABGR8888_UNORM: > + case PIPE_FORMAT_A8B8G8R8_UNORM: > return MESA_FORMAT_A8B8G8R8_UNORM; > - case PIPE_FORMAT_RGBA8888_UNORM: > + case PIPE_FORMAT_R8G8B8A8_UNORM: > return MESA_FORMAT_R8G8B8A8_UNORM; > - case PIPE_FORMAT_BGRA8888_UNORM: > + case PIPE_FORMAT_B8G8R8A8_UNORM: > return MESA_FORMAT_B8G8R8A8_UNORM; > - case PIPE_FORMAT_ARGB8888_UNORM: > + case PIPE_FORMAT_A8R8G8B8_UNORM: > return MESA_FORMAT_A8R8G8B8_UNORM; > - case PIPE_FORMAT_XBGR8888_UNORM: > + case PIPE_FORMAT_X8B8G8R8_UNORM: > return MESA_FORMAT_X8B8G8R8_UNORM; > - case PIPE_FORMAT_RGBX8888_UNORM: > + case PIPE_FORMAT_R8G8B8X8_UNORM: > return MESA_FORMAT_R8G8B8X8_UNORM; > - case PIPE_FORMAT_BGRX8888_UNORM: > + case PIPE_FORMAT_B8G8R8X8_UNORM: > return MESA_FORMAT_B8G8R8X8_UNORM; > - case PIPE_FORMAT_XRGB8888_UNORM: > + case PIPE_FORMAT_X8R8G8B8_UNORM: > return MESA_FORMAT_X8R8G8B8_UNORM; > case PIPE_FORMAT_B5G5R5A1_UNORM: > return MESA_FORMAT_B5G5R5A1_UNORM; > @@ -506,13 +506,13 @@ st_pipe_format_to_mesa_format(enum pipe_format format) > return MESA_FORMAT_R10G10B10A2_UNORM; > case PIPE_FORMAT_L4A4_UNORM: > return MESA_FORMAT_L4A4_UNORM; > - case PIPE_FORMAT_LA88_UNORM: > + case PIPE_FORMAT_L8A8_UNORM: > return MESA_FORMAT_L8A8_UNORM; > - case PIPE_FORMAT_AL88_UNORM: > + case PIPE_FORMAT_A8L8_UNORM: > return MESA_FORMAT_A8L8_UNORM; > - case PIPE_FORMAT_LA1616_UNORM: > + case PIPE_FORMAT_L16A16_UNORM: > return MESA_FORMAT_L16A16_UNORM; > - case PIPE_FORMAT_AL1616_UNORM: > + case PIPE_FORMAT_A16L16_UNORM: > return MESA_FORMAT_A16L16_UNORM; > case PIPE_FORMAT_A8_UNORM: > return MESA_FORMAT_A_UNORM8; > @@ -570,21 +570,21 @@ st_pipe_format_to_mesa_format(enum pipe_format format) > return MESA_FORMAT_SRGBA_DXT3; > case PIPE_FORMAT_DXT5_SRGBA: > return MESA_FORMAT_SRGBA_DXT5; > - case PIPE_FORMAT_LA88_SRGB: > + case PIPE_FORMAT_L8A8_SRGB: > return MESA_FORMAT_L8A8_SRGB; > - case PIPE_FORMAT_AL88_SRGB: > + case PIPE_FORMAT_A8L8_SRGB: > return MESA_FORMAT_A8L8_SRGB; > case PIPE_FORMAT_L8_SRGB: > return MESA_FORMAT_L_SRGB8; > case PIPE_FORMAT_R8G8B8_SRGB: > return MESA_FORMAT_BGR_SRGB8; > - case PIPE_FORMAT_ABGR8888_SRGB: > + case PIPE_FORMAT_A8B8G8R8_SRGB: > return MESA_FORMAT_A8B8G8R8_SRGB; > - case PIPE_FORMAT_RGBA8888_SRGB: > + case PIPE_FORMAT_R8G8B8A8_SRGB: > return MESA_FORMAT_R8G8B8A8_SRGB; > - case PIPE_FORMAT_BGRA8888_SRGB: > + case PIPE_FORMAT_B8G8R8A8_SRGB: > return MESA_FORMAT_B8G8R8A8_SRGB; > - case PIPE_FORMAT_ARGB8888_SRGB: > + case PIPE_FORMAT_A8R8G8B8_SRGB: > return MESA_FORMAT_A8R8G8B8_SRGB; > case PIPE_FORMAT_R32G32B32A32_FLOAT: > return MESA_FORMAT_RGBA_FLOAT32; > @@ -623,13 +623,13 @@ st_pipe_format_to_mesa_format(enum pipe_format format) > return MESA_FORMAT_R_UNORM8; > case PIPE_FORMAT_R16_UNORM: > return MESA_FORMAT_R_UNORM16; > - case PIPE_FORMAT_RG88_UNORM: > + case PIPE_FORMAT_R8G8_UNORM: > return MESA_FORMAT_R8G8_UNORM; > - case PIPE_FORMAT_GR88_UNORM: > + case PIPE_FORMAT_G8R8_UNORM: > return MESA_FORMAT_G8R8_UNORM; > - case PIPE_FORMAT_RG1616_UNORM: > + case PIPE_FORMAT_R16G16_UNORM: > return MESA_FORMAT_R16G16_UNORM; > - case PIPE_FORMAT_GR1616_UNORM: > + case PIPE_FORMAT_G16R16_UNORM: > return MESA_FORMAT_G16R16_UNORM; > > case PIPE_FORMAT_A8_UINT: > @@ -772,31 +772,31 @@ st_pipe_format_to_mesa_format(enum pipe_format format) > /* signed normalized formats */ > case PIPE_FORMAT_R8_SNORM: > return MESA_FORMAT_R_SNORM8; > - case PIPE_FORMAT_RG88_SNORM: > + case PIPE_FORMAT_R8G8_SNORM: > return MESA_FORMAT_R8G8_SNORM; > - case PIPE_FORMAT_GR88_SNORM: > + case PIPE_FORMAT_G8R8_SNORM: > return MESA_FORMAT_G8R8_SNORM; > - case PIPE_FORMAT_RGBA8888_SNORM: > + case PIPE_FORMAT_R8G8B8A8_SNORM: > return MESA_FORMAT_R8G8B8A8_SNORM; > - case PIPE_FORMAT_ABGR8888_SNORM: > + case PIPE_FORMAT_A8B8G8R8_SNORM: > return MESA_FORMAT_A8B8G8R8_SNORM; > > case PIPE_FORMAT_A8_SNORM: > return MESA_FORMAT_A_SNORM8; > case PIPE_FORMAT_L8_SNORM: > return MESA_FORMAT_L_SNORM8; > - case PIPE_FORMAT_LA88_SNORM: > + case PIPE_FORMAT_L8A8_SNORM: > return MESA_FORMAT_L8A8_SNORM; > - case PIPE_FORMAT_AL88_SNORM: > + case PIPE_FORMAT_A8L8_SNORM: > return MESA_FORMAT_A8L8_SNORM; > case PIPE_FORMAT_I8_SNORM: > return MESA_FORMAT_I_SNORM8; > > case PIPE_FORMAT_R16_SNORM: > return MESA_FORMAT_R_SNORM16; > - case PIPE_FORMAT_RG1616_SNORM: > + case PIPE_FORMAT_R16G16_SNORM: > return MESA_FORMAT_R16G16_SNORM; > - case PIPE_FORMAT_GR1616_SNORM: > + case PIPE_FORMAT_G16R16_SNORM: > return MESA_FORMAT_G16R16_SNORM; > case PIPE_FORMAT_R16G16B16A16_SNORM: > return MESA_FORMAT_RGBA_SNORM16; > -- > 2.4.3 > _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
