[Mesa-dev] [PATCH v2 10/23] mesa: Add a concept of an array format
Iago Toral
itoral at igalia.com
Thu Dec 4 00:48:36 PST 2014
On Thu, 2014-12-04 at 17:39 +0900, Michel Dänzer wrote:
> On 04.12.2014 17:17, Iago Toral wrote:
> > On Wed, 2014-12-03 at 14:58 -0800, Jason Ekstrand wrote:
> >> On Wed, Dec 3, 2014 at 2:52 PM, Ian Romanick <idr at freedesktop.org>
> >> wrote:
> >> On 12/01/2014 03:04 AM, Iago Toral Quiroga wrote:
> >> > From: Jason Ekstrand <jason.ekstrand at intel.com>
> > (...)
> >>
> >> >
> >> > +enum mesa_array_format_datatype {
> >> > + MESA_ARRAY_FORMAT_TYPE_UBYTE = 0x0,
> >> > + MESA_ARRAY_FORMAT_TYPE_USHORT = 0x1,
> >> > + MESA_ARRAY_FORMAT_TYPE_UINT = 0x2,
> >> > + MESA_ARRAY_FORMAT_TYPE_BYTE = 0x4,
> >> > + MESA_ARRAY_FORMAT_TYPE_SHORT = 0x5,
> >> > + MESA_ARRAY_FORMAT_TYPE_INT = 0x6,
> >> > + MESA_ARRAY_FORMAT_TYPE_HALF = 0xd,
> >> > + MESA_ARRAY_FORMAT_TYPE_FLOAT = 0xe,
> >> > +};
> >> > +
> >> > +#define MESA_ARRAY_FORMAT_TYPE_IS_SIGNED 0x4
> >> > +#define MESA_ARRAY_FORMAT_TYPE_IS_FLOAT 0x8
> >> > +#define MESA_ARRAY_FORMAT_BIT 0x80000000
> >>
> >> This...
> >>
> >> > +
> >> > +typedef union {
> >> > + struct {
> >> > + enum mesa_array_format_datatype type:4;
> >> > + bool normalized:1;
> >> > + unsigned num_channels:3;
> >> > + unsigned swizzle_x:3;
> >> > + unsigned swizzle_y:3;
> >> > + unsigned swizzle_z:3;
> >> > + unsigned swizzle_w:3;
> >> > + unsigned pad:11;
> >> > + unsigned array_format_bit:1; /* Must always be 1 */
> >>
> >> ...and this are not correct on big-endian.
> >>
> >>
> >> Bah! I originally did this as a bitfield in a uint32_t and then
> >> decided that the union was easier. Probably best to go back to the
> >> bitfield...
> >
> > Wouldn't it be enough to rewrite the 3 definitions like this?:
> >
> > #define MESA_ARRAY_FORMAT_BIT (_mesa_little_endian() ? 0x80000000 :
> > 0x00000080)
>
> No. With the example above, setting the array_format_bit member to 1
> sets the least significant bit of the aliased 32-bit integer on this
> PowerBook.
>
>
> The C specification doesn't make any guarantees about the layout of
> bit-fields that would allow them to be used for something like this, so
> you have to stick to either using only bit-fields for flags, or only
> shifts and masks on integer values.
Thanks Michel... then I guess we will have to go back to the bitfield as
Jason suggested.
Iago
More information about the mesa-dev
mailing list