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 <i...@freedesktop.org>
wrote:
On 12/01/2014 03:04 AM, Iago Toral Quiroga wrote:
> From: Jason Ekstrand <jason.ekstr...@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.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev