Incorrect. You have to manually check if the pack and unpack functions access the components using bitwise operations or arrays.
Consider char pix[]. The array formats use arrays for accessing, for example: char *p = &pix[(y*width+x)*4]; p[0] = r; p[1] = g; p[2] = b; p[3] = a; Packed formats use bitwise operators for accessing, for example: uint32_t *p = &pix[(y*width+x)*4]; *p = r | (g << 8) | (b << 16) | (a << 24); It's okay to have both RGBA8 array and packed formats. For example, Gallium has these array formats: PIPE_FORMAT_R8G8B8A8_UNORM PIPE_FORMAT_B8G8R8A8_UNORM PIPE_FORMAT_A8R8G8B8_UNORM PIPE_FORMAT_A8B8G8R8_UNORM And it defines these packed formats by using the array formats according to the CPU architecture: #if defined(PIPE_ARCH_LITTLE_ENDIAN) #define PIPE_FORMAT_RGBA8888_UNORM PIPE_FORMAT_R8G8B8A8_UNORM #define PIPE_FORMAT_BGRA8888_UNORM PIPE_FORMAT_B8G8R8A8_UNORM #define PIPE_FORMAT_ARGB8888_UNORM PIPE_FORMAT_A8R8G8B8_UNORM #define PIPE_FORMAT_ABGR8888_UNORM PIPE_FORMAT_A8B8G8R8_UNORM #elif defined(PIPE_ARCH_BIG_ENDIAN) #define PIPE_FORMAT_ABGR8888_UNORM PIPE_FORMAT_R8G8B8A8_UNORM #define PIPE_FORMAT_ARGB8888_UNORM PIPE_FORMAT_B8G8R8A8_UNORM #define PIPE_FORMAT_BGRA8888_UNORM PIPE_FORMAT_A8R8G8B8_UNORM #define PIPE_FORMAT_RGBA8888_UNORM PIPE_FORMAT_A8B8G8R8_UNORM #endif This way, Gallium has all the possible RGBA8 array formats and also the possible RGBA8 packed formats, so we can use whatever we want. Marek On Fri, Jan 17, 2014 at 9:41 PM, Mark Mueller <markkmuel...@gmail.com> wrote: > > > > On Fri, Jan 17, 2014 at 8:58 AM, Brian Paul <bri...@vmware.com> wrote: >> >> On 01/17/2014 03:45 AM, Mark Mueller wrote: >>> >>> Change all 4 color component unsigned byte formats to meet spec: >>> s/MESA_FORMAT_RGBA8888\b/MESA_FORMAT_ABGR_UNORM8/g >>> s/MESA_FORMAT_RGBA8888_REV\b/MESA_FORMAT_RGBA_UNORM8/g >>> s/MESA_FORMAT_ARGB8888\b/MESA_FORMAT_BGRA_UNORM8/g >>> s/MESA_FORMAT_ARGB8888_REV\b/MESA_FORMAT_ARGB_UNORM8/g >>> s/MESA_FORMAT_RGBX8888\b/MESA_FORMAT_XBGR_UNORM8/g >>> s/MESA_FORMAT_RGBX8888_REV\b/MESA_FORMAT_RGBX_UNORM8/g >>> s/MESA_FORMAT_XRGB8888\b/MESA_FORMAT_BGRX_UNORM8/g >>> s/MESA_FORMAT_XRGB8888_REV\b/MESA_FORMAT_XRGB_UNORM8/g >>> >> >> >> I'm not sure this is right. If you look at the existing code such as >> src/mesa/main/format_{un}pack.c you'll see that these formats are treated as >> packed formats, not arrays. >> > > Ah. Array formats are really rare with OGL, that was unexpected but now > really ancient issues with memory throughput optimization are surfacing. > Those were the days. > > Thus Array Types would only include the much smaller group of all 32 > bit-per-component formats, and formats with an odd number of 8 or 16 bit > components. Right? > > So the naming convention would be a derivation of MESA_FORMAT_R8G8B8A8_UNORM > for these. > > Mark > > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev