[Mesa-dev] [PATCH] mesa: rename MESA format names to have the same names as PIPE formats
Mark Mueller
markkmueller at gmail.com
Fri Jan 10 19:19:22 PST 2014
The predominant feedback on this adventure has been to make the
MESA_FORMATs match the PIPE, or gallium formats but every journey I've made
down that path has been fraught with peril. There are some cases where
PIPE_FORMATs are even more confusing then MESA_FORMATs*. Either there is
something that I am missing, or there are things about the PIPE_FORMATS
that people aren't aware of, so let me pull out some specific references.
The first problem is that in PIPE_FORMATS there is no distinction between
array and packed formats, and this has proven to be a big cause for format
ambiguity that some are wanting to see addressed. One proposed solution is
to represent array formats like (hypothetically): R8G8B8A8; and packed
formats as RGBA_8888 (or vice versa) in the MESA_FORMATs and subsequently
modifying the PIPE_FORMATs to suit. But that makes RGBA_1010102 kinda messy
(though it could be RGBA_aaa2). So then how to handle this:
So how about a poll! Isn't that the rage these days?
Please vote on:
1) Should MESA_FORMAT names clearly distinguish between array and
packed formats, yes or no?
2) What is your preference for array format naming convention:
a) RGBA8888_UNORM
b) R8G8B8A8_UNORM
c) RGBA_UNORM8
3) What is your preference for packed format naming convention:
a) RGBA5551_UNORM
b) R5G5B5A1_UNORM
4) What is your preference for naming packed formats with 10 or more bits:
a) RGBA1010102_UNORM
b) R10G10B10A2_UNORM
c) RGBAaaa2_UNORM
d) Croque-monsieur
Please vote just once!
Thanks,
Mark
* code snip-it from p_format.h
#if defined(PIPE_ARCH_LITTLE_ENDIAN)
#define PIPE_FORMAT_RGBA8888_UNORM PIPE_FORMAT_R8G8B8A8_UNORM
#define PIPE_FORMAT_RGBX8888_UNORM PIPE_FORMAT_R8G8B8X8_UNORM
#define PIPE_FORMAT_BGRA8888_UNORM PIPE_FORMAT_B8G8R8A8_UNORM
#define PIPE_FORMAT_BGRX8888_UNORM PIPE_FORMAT_B8G8R8X8_UNORM
#define PIPE_FORMAT_ARGB8888_UNORM PIPE_FORMAT_A8R8G8B8_UNORM
#define PIPE_FORMAT_XRGB8888_UNORM PIPE_FORMAT_X8R8G8B8_UNORM
#define PIPE_FORMAT_ABGR8888_UNORM PIPE_FORMAT_A8B8G8R8_UNORM
#define PIPE_FORMAT_XBGR8888_UNORM PIPE_FORMAT_X8B8G8R8_UNORM
#elif defined(PIPE_ARCH_BIG_ENDIAN)
#define PIPE_FORMAT_ABGR8888_UNORM PIPE_FORMAT_R8G8B8A8_UNORM
#define PIPE_FORMAT_XBGR8888_UNORM PIPE_FORMAT_R8G8B8X8_UNORM
#define PIPE_FORMAT_XRGB8888_UNORM PIPE_FORMAT_B8G8R8X8_UNORM
#define PIPE_FORMAT_ARGB8888_UNORM PIPE_FORMAT_B8G8R8A8_UNORM
#define PIPE_FORMAT_XRGB8888_UNORM PIPE_FORMAT_B8G8R8X8_UNORM
#define PIPE_FORMAT_BGRA8888_UNORM PIPE_FORMAT_A8R8G8B8_UNORM
#define PIPE_FORMAT_BGRX8888_UNORM PIPE_FORMAT_X8R8G8B8_UNORM
#define PIPE_FORMAT_RGBA8888_UNORM PIPE_FORMAT_A8B8G8R8_UNORM
#define PIPE_FORMAT_RGBX8888_UNORM PIPE_FORMAT_X8B8G8R8_UNORM
#endif
There is more below the surface here too because the above macros
aren't employed consistently throughout the gallium drivers as best as
I can tell.
On Thu, Dec 26, 2013 at 7:48 PM, Mark Mueller <markkmueller at gmail.com>wrote:
>
>
>
> On Thu, Dec 26, 2013 at 6:57 PM, Michel Dänzer <michel at daenzer.net> wrote:
>
>> On Mit, 2013-12-25 at 20:35 -0800, Mark Mueller wrote:
>>
>> > On Wed, Dec 25, 2013 at 7:25 PM, Michel Dänzer <michel at daenzer.net>
>> > wrote:
>> > On Mit, 2013-12-25 at 15:19 -0800, Mark Mueller wrote:
>> > >
>> > > ---------- Format Base Type P: Packed ----------
>> > > MESA_FORMAT_[[component list,bit width][storage
>> > type*][_]][_][storage
>> > > type**]
>> > > * when type differs between component
>> > > ** when type applies to all components
>> > >
>> > >
>> > > examples:
>> > > MESA_FORMAT_R5G6B5_UNORM /* RRRR RGGG GGGB BBBB
>> > */
>> > >
>> > > MESA_FORMAT_B4G4R4X4_UNORM /* BBBB GGGG RRRR XXXX
>> > */
>> >
>> > This is slightly confusing in that the PIPE_FORMATs use this
>> > convention
>> > for naming the components of 'array' formats, packed formats
>> > use
>> > BGRXnnnn (just like packed MESA_FORMATs do now). Beware that
>> > not all
>> > PIPE_FORMATs have been updated yet according to that
>> > distinction.
>> >
>> > Is this what you are suggesting then?
>> >
>> >
>> > ---------- Format Base Type P: Packed ----------
>> > MESA_FORMAT_[[component list][bit width per component]_[storage
>> > type*]][_][storage type**]
>> > * when type differs between component
>> > ** when type applies to all components
>> >
>> >
>> > examples:
>> > MESA_FORMAT_RGB565_UNORM /* RRRR RGGG GGGB BBBB */
>> > MESA_FORMAT_BGRX4444_UNORM /* BBBB GGGG RRRR XXXX */
>> > MESA_FORMAT_Z32_FLOAT_SX824_UINT
>> > MESA_FORMAT_RGBA1010102_UINT
>> > MESA_FORMAT_RGBE9995_FLOAT
>>
>> That would be more consistent with the current PIPE_FORMAT naming
>> convention, but some of the component size sequences look a bit weird,
>> your original proposal actually makes more sense for those...
>>
>> Sorry, I'm not sure which original proposal you are referring to, could
> you be more specific? My concern about this latest iteration is that the
> delimiter between bit widths per component isn't distinct, though it's
> generally intuitive, whereas a component followed by a bit width gives a
> clearer association.
>
>>
>> > I'm afraid there also needs to be a way to encode endianness,
>> > either
>> > explicitly or via something like _REV to indicate the inverse
>> > byte order
>> > of the host byte order. This would apply to the packed values
>> > as a whole
>> > and to any multi-byte components of array formats.
>> >
>> >
>> > I have seen the gallium discussion on this. Since my current focus is
>> > i965, I'm safely immune from big endian problems and I'm not aware of
>> > the details around the issue. Is it not sufficient to maintain a flag
>> > within the individual texture object or image, or a global flag per
>> > context to indicate host big endianess?
>>
>> Maybe? Hard to be sure without actually trying it and working out all
>> the issues.
>>
>>
> Since the endianess issue is still in flux, and the format naming work
> doesn't offer a silver bullet, my recommendation is to solve the two
> problems independently. Thus I can produce a new set of patches based on
> the naming spec tomorrow for another round or review.
>
> Mark
>
>
>
>> --
>> Earthling Michel Dänzer | http://www.amd.com
>> Libre software enthusiast | Mesa and X developer
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140110/661573c3/attachment-0001.html>
More information about the mesa-dev
mailing list