Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread Alex Deucher
2010/1/6 Michel Dänzer :
> On Wed, 2010-01-06 at 15:18 +, Keith Whitwell wrote:
>> On Wed, 2010-01-06 at 07:13 -0800, José Fonseca wrote:
>> > On Wed, 2010-01-06 at 06:51 -0800, Michel Dänzer wrote:
>> > > On Wed, 2010-01-06 at 14:32 +, José Fonseca wrote:
>> > > > On Wed, 2010-01-06 at 06:23 -0800, Michel Dänzer wrote:
>> > > > > On Wed, 2010-01-06 at 14:03 +, José Fonseca wrote:
>> > > > > > On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
>> > > > > > > michal wrote on 2010-01-06 07:58:
>> > > > > > > > michal wrote on 2009-12-22 10:00:
>> > > > > > > >
>> > > > > > > >> Marek Olšák wrote on 2009-12-22 08:40:
>> > > > > > > >>
>> > > > > > > >>
>> > > > > > > >>> Hi,
>> > > > > > > >>>
>> > > > > > > >>> I noticed that gallium/auxiliary/util/u_format.csv contains 
>> > > > > > > >>> some weird
>> > > > > > > >>> swizzling, for example see this:
>> > > > > > > >>>
>> > > > > > > >>> $ grep zyxw u_format.csv
>> > > > > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM        , arith , 1, 1, un8 , un8 
>> > > > > > > >>> , un8 ,
>> > > > > > > >>> un8 , zyxw, rgb
>> > > > > > > >>> PIPE_FORMAT_A1R5G5B5_UNORM        , arith , 1, 1, un5 , un5 
>> > > > > > > >>> , un5 ,
>> > > > > > > >>> un1 , zyxw, rgb
>> > > > > > > >>> PIPE_FORMAT_A4R4G4B4_UNORM        , arith , 1, 1, un4 , un4 
>> > > > > > > >>> , un4 ,
>> > > > > > > >>> un4 , zyxw, rgb
>> > > > > > > >>> PIPE_FORMAT_A8B8G8R8_SNORM        , arith , 1, 1, sn8 , sn8 
>> > > > > > > >>> , sn8 ,
>> > > > > > > >>> sn8 , zyxw, rgb
>> > > > > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB         , arith , 1, 1, u8  , u8  
>> > > > > > > >>> , u8  , u8
>> > > > > > > >>>  , zyxw, srgb
>> > > > > > > >>>
>> > > > > > > >>> It's hard to believe that ARGB, ABGR, and BGRA have the same
>> > > > > > > >>> swizzling. Let's continue our journey:
>> > > > > > > >>>
>> > > > > > > >>> $ grep A8R8G8B8 u_format.csv
>> > > > > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM        , arith , 1, 1, un8 , un8 
>> > > > > > > >>> , un8 ,
>> > > > > > > >>> un8 , zyxw, rgb
>> > > > > > > >>> PIPE_FORMAT_A8R8G8B8_SRGB         , arith , 1, 1, u8  , u8  
>> > > > > > > >>> , u8  ,
>> > > > > > > >>> u8  , wxyz, srgb
>> > > > > > > >>>
>> > > > > > > >>> Same formats, different swizzling? Also:
>> > > > > > > >>>
>> > > > > > > >>> $ grep B8G8R8A8 u_format.csv
>> > > > > > > >>> PIPE_FORMAT_B8G8R8A8_UNORM        , arith , 1, 1, un8 , un8 
>> > > > > > > >>> , un8 ,
>> > > > > > > >>> un8 , yzwx, rgb
>> > > > > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB         , arith , 1, 1, u8  , u8  
>> > > > > > > >>> , u8  ,
>> > > > > > > >>> u8  , zyxw, srgb
>> > > > > > > >>>
>> > > > > > > >>> Same formats, different swizzling? I don't really get it. 
>> > > > > > > >>> And there's
>> > > > > > > >>> much more cases like these. Could someone tell me what the 
>> > > > > > > >>> intended
>> > > > > > > >>> order of channels should be? (or possibly propose a fix) The 
>> > > > > > > >>> meaning
>> > > > > > > >>> of the whole table is self-contradictory and it's definitely 
>> > > > > > > >>> the
>> > > > > > > >>> source of some r300g bugs.
>> > > > > > > >>>
>> > > > > > > >>>
>> > > > > > > >>>
>> > > > > > > >> Marek,
>> > > > > > > >>
>> > > > > > > >> Yes, that seems like a defect. The format swizzle field tells 
>> > > > > > > >> us how to
>> > > > > > > >> "swizzle" the incoming pixel so that its components are 
>> > > > > > > >> ordered in some
>> > > > > > > >> predefined order. For RGB and SRGB colorspaces the order is 
>> > > > > > > >> R, G, B and
>> > > > > > > >> A. For depth-stencil, ie. ZS color space the order is Z and 
>> > > > > > > >> then S.
>> > > > > > > >>
>> > > > > > > >> I will have a look at this.
>> > > > > > > >>
>> > > > > > > >>
>> > > > > > > > Marek, Jose,
>> > > > > > > >
>> > > > > > > > Can you review the attached patch?
>> > > > > > > >
>> > > > > > >
>> > > > > > > Ouch, it looks like we will have to leave 24-bit (s)rgb formats 
>> > > > > > > with
>> > > > > > > array layout as the current code generator will bite us on big 
>> > > > > > > endian
>> > > > > > > platforms. Attached an updated patch.
>> > > > > >
>> > > > > > Why are you changing the layout from array to arith? Please leave 
>> > > > > > that
>> > > > > > alone.
>> > > > > >
>> > > > > > Yes, the code generator needs a big_ending -> little endian call 
>> > > > > > to be
>> > > > > > correct on big endian platforms, as gallium formats should always 
>> > > > > > be
>> > > > > > thougth of in little endian terms, just like most hardware is.
>> > > > >
>> > > > > Actually, 'array' formats should be endianness neutral,
>> > > >
>> > > > Yep.
>> > > >
>> > > > > and IMO 'arith' formats should be defined in the CPU endianness.
>> > > >
>> > > > I originally thought that too, but Keith convinced me that "gallium is 
>> > > > a
>> > > > hardware abstraction, and all 3d hardware is little endian, therefore
>> > > > gallium formats should be always in little endian."
>> > >
>> > > Then there probably should be no 'arith' formats

Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread Michel Dänzer
On Wed, 2010-01-06 at 15:18 +, Keith Whitwell wrote: 
> On Wed, 2010-01-06 at 07:13 -0800, José Fonseca wrote:
> > On Wed, 2010-01-06 at 06:51 -0800, Michel Dänzer wrote:
> > > On Wed, 2010-01-06 at 14:32 +, José Fonseca wrote: 
> > > > On Wed, 2010-01-06 at 06:23 -0800, Michel Dänzer wrote:
> > > > > On Wed, 2010-01-06 at 14:03 +, José Fonseca wrote: 
> > > > > > On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
> > > > > > > michal wrote on 2010-01-06 07:58:
> > > > > > > > michal wrote on 2009-12-22 10:00:
> > > > > > > >   
> > > > > > > >> Marek Olšák wrote on 2009-12-22 08:40:
> > > > > > > >>   
> > > > > > > >> 
> > > > > > > >>> Hi,
> > > > > > > >>>
> > > > > > > >>> I noticed that gallium/auxiliary/util/u_format.csv contains 
> > > > > > > >>> some weird 
> > > > > > > >>> swizzling, for example see this:
> > > > > > > >>>
> > > > > > > >>> $ grep zyxw u_format.csv
> > > > > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , 
> > > > > > > >>> un8 , 
> > > > > > > >>> un8 , zyxw, rgb
> > > > > > > >>> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , 
> > > > > > > >>> un5 , 
> > > > > > > >>> un1 , zyxw, rgb
> > > > > > > >>> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , 
> > > > > > > >>> un4 , 
> > > > > > > >>> un4 , zyxw, rgb
> > > > > > > >>> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , 
> > > > > > > >>> sn8 , 
> > > > > > > >>> sn8 , zyxw, rgb
> > > > > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , 
> > > > > > > >>> u8  , u8 
> > > > > > > >>>  , zyxw, srgb
> > > > > > > >>>
> > > > > > > >>> It's hard to believe that ARGB, ABGR, and BGRA have the same 
> > > > > > > >>> swizzling. Let's continue our journey:
> > > > > > > >>>
> > > > > > > >>> $ grep A8R8G8B8 u_format.csv
> > > > > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , 
> > > > > > > >>> un8 , 
> > > > > > > >>> un8 , zyxw, rgb
> > > > > > > >>> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , 
> > > > > > > >>> u8  , 
> > > > > > > >>> u8  , wxyz, srgb
> > > > > > > >>>
> > > > > > > >>> Same formats, different swizzling? Also:
> > > > > > > >>>
> > > > > > > >>> $ grep B8G8R8A8 u_format.csv
> > > > > > > >>> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , 
> > > > > > > >>> un8 , 
> > > > > > > >>> un8 , yzwx, rgb
> > > > > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , 
> > > > > > > >>> u8  , 
> > > > > > > >>> u8  , zyxw, srgb
> > > > > > > >>>
> > > > > > > >>> Same formats, different swizzling? I don't really get it. And 
> > > > > > > >>> there's 
> > > > > > > >>> much more cases like these. Could someone tell me what the 
> > > > > > > >>> intended 
> > > > > > > >>> order of channels should be? (or possibly propose a fix) The 
> > > > > > > >>> meaning 
> > > > > > > >>> of the whole table is self-contradictory and it's definitely 
> > > > > > > >>> the 
> > > > > > > >>> source of some r300g bugs.
> > > > > > > >>>
> > > > > > > >>> 
> > > > > > > >>>   
> > > > > > > >> Marek,
> > > > > > > >>
> > > > > > > >> Yes, that seems like a defect. The format swizzle field tells 
> > > > > > > >> us how to 
> > > > > > > >> "swizzle" the incoming pixel so that its components are 
> > > > > > > >> ordered in some 
> > > > > > > >> predefined order. For RGB and SRGB colorspaces the order is R, 
> > > > > > > >> G, B and 
> > > > > > > >> A. For depth-stencil, ie. ZS color space the order is Z and 
> > > > > > > >> then S.
> > > > > > > >>
> > > > > > > >> I will have a look at this.
> > > > > > > >>   
> > > > > > > >> 
> > > > > > > > Marek, Jose,
> > > > > > > >
> > > > > > > > Can you review the attached patch?
> > > > > > > >   
> > > > > > > 
> > > > > > > Ouch, it looks like we will have to leave 24-bit (s)rgb formats 
> > > > > > > with 
> > > > > > > array layout as the current code generator will bite us on big 
> > > > > > > endian 
> > > > > > > platforms. Attached an updated patch.
> > > > > > 
> > > > > > Why are you changing the layout from array to arith? Please leave 
> > > > > > that
> > > > > > alone.
> > > > > > 
> > > > > > Yes, the code generator needs a big_ending -> little endian call to 
> > > > > > be
> > > > > > correct on big endian platforms, as gallium formats should always be
> > > > > > thougth of in little endian terms, just like most hardware is.
> > > > > 
> > > > > Actually, 'array' formats should be endianness neutral, 
> > > > 
> > > > Yep.
> > > > 
> > > > > and IMO 'arith' formats should be defined in the CPU endianness. 
> > > > 
> > > > I originally thought that too, but Keith convinced me that "gallium is a
> > > > hardware abstraction, and all 3d hardware is little endian, therefore
> > > > gallium formats should be always in little endian."
> > > 
> > > Then there probably should be no 'arith' formats, at least not when the
> > > components consist of an integer number of bytes.
> > 
> > Yes, tha

Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread Michel Dänzer
On Wed, 2010-01-06 at 15:13 +, José Fonseca wrote: 
> On Wed, 2010-01-06 at 06:51 -0800, Michel Dänzer wrote:
> > On Wed, 2010-01-06 at 14:32 +, José Fonseca wrote: 
> > > On Wed, 2010-01-06 at 06:23 -0800, Michel Dänzer wrote:
> > > > On Wed, 2010-01-06 at 14:03 +, José Fonseca wrote: 
> > > > > On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
> > > > > > michal wrote on 2010-01-06 07:58:
> > > > > > > michal wrote on 2009-12-22 10:00:
> > > > > > >   
> > > > > > >> Marek Olšák wrote on 2009-12-22 08:40:
> > > > > > >>   
> > > > > > >> 
> > > > > > >>> Hi,
> > > > > > >>>
> > > > > > >>> I noticed that gallium/auxiliary/util/u_format.csv contains 
> > > > > > >>> some weird 
> > > > > > >>> swizzling, for example see this:
> > > > > > >>>
> > > > > > >>> $ grep zyxw u_format.csv
> > > > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , 
> > > > > > >>> un8 , 
> > > > > > >>> un8 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , 
> > > > > > >>> un5 , 
> > > > > > >>> un1 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , 
> > > > > > >>> un4 , 
> > > > > > >>> un4 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , 
> > > > > > >>> sn8 , 
> > > > > > >>> sn8 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , 
> > > > > > >>> u8  , u8 
> > > > > > >>>  , zyxw, srgb
> > > > > > >>>
> > > > > > >>> It's hard to believe that ARGB, ABGR, and BGRA have the same 
> > > > > > >>> swizzling. Let's continue our journey:
> > > > > > >>>
> > > > > > >>> $ grep A8R8G8B8 u_format.csv
> > > > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , 
> > > > > > >>> un8 , 
> > > > > > >>> un8 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , 
> > > > > > >>> u8  , 
> > > > > > >>> u8  , wxyz, srgb
> > > > > > >>>
> > > > > > >>> Same formats, different swizzling? Also:
> > > > > > >>>
> > > > > > >>> $ grep B8G8R8A8 u_format.csv
> > > > > > >>> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , 
> > > > > > >>> un8 , 
> > > > > > >>> un8 , yzwx, rgb
> > > > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , 
> > > > > > >>> u8  , 
> > > > > > >>> u8  , zyxw, srgb
> > > > > > >>>
> > > > > > >>> Same formats, different swizzling? I don't really get it. And 
> > > > > > >>> there's 
> > > > > > >>> much more cases like these. Could someone tell me what the 
> > > > > > >>> intended 
> > > > > > >>> order of channels should be? (or possibly propose a fix) The 
> > > > > > >>> meaning 
> > > > > > >>> of the whole table is self-contradictory and it's definitely 
> > > > > > >>> the 
> > > > > > >>> source of some r300g bugs.
> > > > > > >>>
> > > > > > >>> 
> > > > > > >>>   
> > > > > > >> Marek,
> > > > > > >>
> > > > > > >> Yes, that seems like a defect. The format swizzle field tells us 
> > > > > > >> how to 
> > > > > > >> "swizzle" the incoming pixel so that its components are ordered 
> > > > > > >> in some 
> > > > > > >> predefined order. For RGB and SRGB colorspaces the order is R, 
> > > > > > >> G, B and 
> > > > > > >> A. For depth-stencil, ie. ZS color space the order is Z and then 
> > > > > > >> S.
> > > > > > >>
> > > > > > >> I will have a look at this.
> > > > > > >>   
> > > > > > >> 
> > > > > > > Marek, Jose,
> > > > > > >
> > > > > > > Can you review the attached patch?
> > > > > > >   
> > > > > > 
> > > > > > Ouch, it looks like we will have to leave 24-bit (s)rgb formats 
> > > > > > with 
> > > > > > array layout as the current code generator will bite us on big 
> > > > > > endian 
> > > > > > platforms. Attached an updated patch.
> > > > > 
> > > > > Why are you changing the layout from array to arith? Please leave that
> > > > > alone.
> > > > > 
> > > > > Yes, the code generator needs a big_ending -> little endian call to be
> > > > > correct on big endian platforms, as gallium formats should always be
> > > > > thougth of in little endian terms, just like most hardware is.
> > > > 
> > > > Actually, 'array' formats should be endianness neutral, 
> > > 
> > > Yep.
> > > 
> > > > and IMO 'arith' formats should be defined in the CPU endianness. 
> > > 
> > > I originally thought that too, but Keith convinced me that "gallium is a
> > > hardware abstraction, and all 3d hardware is little endian, therefore
> > > gallium formats should be always in little endian."
> > 
> > Then there probably should be no 'arith' formats, at least not when the
> > components consist of an integer number of bytes.
> 
> Yes, that's probably the best.
> 
> > > > Though as discussed
> > > > before, having 'reversed' formats defined in the other endianness as
> > > > well might be useful. Drivers which can work on setups where the CPU
> > > > endianness doesn't match the GPU endianness should possibly only use
> > > > 'array' formats, b

Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread Keith Whitwell
On Wed, 2010-01-06 at 07:13 -0800, José Fonseca wrote:
> On Wed, 2010-01-06 at 06:51 -0800, Michel Dänzer wrote:
> > On Wed, 2010-01-06 at 14:32 +, José Fonseca wrote: 
> > > On Wed, 2010-01-06 at 06:23 -0800, Michel Dänzer wrote:
> > > > On Wed, 2010-01-06 at 14:03 +, José Fonseca wrote: 
> > > > > On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
> > > > > > michal wrote on 2010-01-06 07:58:
> > > > > > > michal wrote on 2009-12-22 10:00:
> > > > > > >   
> > > > > > >> Marek Olšák wrote on 2009-12-22 08:40:
> > > > > > >>   
> > > > > > >> 
> > > > > > >>> Hi,
> > > > > > >>>
> > > > > > >>> I noticed that gallium/auxiliary/util/u_format.csv contains 
> > > > > > >>> some weird 
> > > > > > >>> swizzling, for example see this:
> > > > > > >>>
> > > > > > >>> $ grep zyxw u_format.csv
> > > > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , 
> > > > > > >>> un8 , 
> > > > > > >>> un8 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , 
> > > > > > >>> un5 , 
> > > > > > >>> un1 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , 
> > > > > > >>> un4 , 
> > > > > > >>> un4 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , 
> > > > > > >>> sn8 , 
> > > > > > >>> sn8 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , 
> > > > > > >>> u8  , u8 
> > > > > > >>>  , zyxw, srgb
> > > > > > >>>
> > > > > > >>> It's hard to believe that ARGB, ABGR, and BGRA have the same 
> > > > > > >>> swizzling. Let's continue our journey:
> > > > > > >>>
> > > > > > >>> $ grep A8R8G8B8 u_format.csv
> > > > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , 
> > > > > > >>> un8 , 
> > > > > > >>> un8 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , 
> > > > > > >>> u8  , 
> > > > > > >>> u8  , wxyz, srgb
> > > > > > >>>
> > > > > > >>> Same formats, different swizzling? Also:
> > > > > > >>>
> > > > > > >>> $ grep B8G8R8A8 u_format.csv
> > > > > > >>> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , 
> > > > > > >>> un8 , 
> > > > > > >>> un8 , yzwx, rgb
> > > > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , 
> > > > > > >>> u8  , 
> > > > > > >>> u8  , zyxw, srgb
> > > > > > >>>
> > > > > > >>> Same formats, different swizzling? I don't really get it. And 
> > > > > > >>> there's 
> > > > > > >>> much more cases like these. Could someone tell me what the 
> > > > > > >>> intended 
> > > > > > >>> order of channels should be? (or possibly propose a fix) The 
> > > > > > >>> meaning 
> > > > > > >>> of the whole table is self-contradictory and it's definitely 
> > > > > > >>> the 
> > > > > > >>> source of some r300g bugs.
> > > > > > >>>
> > > > > > >>> 
> > > > > > >>>   
> > > > > > >> Marek,
> > > > > > >>
> > > > > > >> Yes, that seems like a defect. The format swizzle field tells us 
> > > > > > >> how to 
> > > > > > >> "swizzle" the incoming pixel so that its components are ordered 
> > > > > > >> in some 
> > > > > > >> predefined order. For RGB and SRGB colorspaces the order is R, 
> > > > > > >> G, B and 
> > > > > > >> A. For depth-stencil, ie. ZS color space the order is Z and then 
> > > > > > >> S.
> > > > > > >>
> > > > > > >> I will have a look at this.
> > > > > > >>   
> > > > > > >> 
> > > > > > > Marek, Jose,
> > > > > > >
> > > > > > > Can you review the attached patch?
> > > > > > >   
> > > > > > 
> > > > > > Ouch, it looks like we will have to leave 24-bit (s)rgb formats 
> > > > > > with 
> > > > > > array layout as the current code generator will bite us on big 
> > > > > > endian 
> > > > > > platforms. Attached an updated patch.
> > > > > 
> > > > > Why are you changing the layout from array to arith? Please leave that
> > > > > alone.
> > > > > 
> > > > > Yes, the code generator needs a big_ending -> little endian call to be
> > > > > correct on big endian platforms, as gallium formats should always be
> > > > > thougth of in little endian terms, just like most hardware is.
> > > > 
> > > > Actually, 'array' formats should be endianness neutral, 
> > > 
> > > Yep.
> > > 
> > > > and IMO 'arith' formats should be defined in the CPU endianness. 
> > > 
> > > I originally thought that too, but Keith convinced me that "gallium is a
> > > hardware abstraction, and all 3d hardware is little endian, therefore
> > > gallium formats should be always in little endian."
> > 
> > Then there probably should be no 'arith' formats, at least not when the
> > components consist of an integer number of bytes.
> 
> Yes, that's probably the best.
> 
> > > > Though as discussed
> > > > before, having 'reversed' formats defined in the other endianness as
> > > > well might be useful. Drivers which can work on setups where the CPU
> > > > endianness doesn't match the GPU endianness should possibly only use
> > > > 'array' formats, bu

Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread José Fonseca
On Wed, 2010-01-06 at 07:03 -0800, Michel Dänzer wrote:
> On Wed, 2010-01-06 at 15:51 +0100, Michel Dänzer wrote: 
> > On Wed, 2010-01-06 at 14:32 +, José Fonseca wrote: 
> > > On Wed, 2010-01-06 at 06:23 -0800, Michel Dänzer wrote:
> > > > On Wed, 2010-01-06 at 14:03 +, José Fonseca wrote: 
> > > > > On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
> > > > > > michal wrote on 2010-01-06 07:58:
> > > > > > > michal wrote on 2009-12-22 10:00:
> > > > > > >   
> > > > > > >> Marek Olšák wrote on 2009-12-22 08:40:
> > > > > > >>   
> > > > > > >> 
> > > > > > >>> Hi,
> > > > > > >>>
> > > > > > >>> I noticed that gallium/auxiliary/util/u_format.csv contains 
> > > > > > >>> some weird 
> > > > > > >>> swizzling, for example see this:
> > > > > > >>>
> > > > > > >>> $ grep zyxw u_format.csv
> > > > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , 
> > > > > > >>> un8 , 
> > > > > > >>> un8 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , 
> > > > > > >>> un5 , 
> > > > > > >>> un1 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , 
> > > > > > >>> un4 , 
> > > > > > >>> un4 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , 
> > > > > > >>> sn8 , 
> > > > > > >>> sn8 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , 
> > > > > > >>> u8  , u8 
> > > > > > >>>  , zyxw, srgb
> > > > > > >>>
> > > > > > >>> It's hard to believe that ARGB, ABGR, and BGRA have the same 
> > > > > > >>> swizzling. Let's continue our journey:
> > > > > > >>>
> > > > > > >>> $ grep A8R8G8B8 u_format.csv
> > > > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , 
> > > > > > >>> un8 , 
> > > > > > >>> un8 , zyxw, rgb
> > > > > > >>> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , 
> > > > > > >>> u8  , 
> > > > > > >>> u8  , wxyz, srgb
> > > > > > >>>
> > > > > > >>> Same formats, different swizzling? Also:
> > > > > > >>>
> > > > > > >>> $ grep B8G8R8A8 u_format.csv
> > > > > > >>> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , 
> > > > > > >>> un8 , 
> > > > > > >>> un8 , yzwx, rgb
> > > > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , 
> > > > > > >>> u8  , 
> > > > > > >>> u8  , zyxw, srgb
> > > > > > >>>
> > > > > > >>> Same formats, different swizzling? I don't really get it. And 
> > > > > > >>> there's 
> > > > > > >>> much more cases like these. Could someone tell me what the 
> > > > > > >>> intended 
> > > > > > >>> order of channels should be? (or possibly propose a fix) The 
> > > > > > >>> meaning 
> > > > > > >>> of the whole table is self-contradictory and it's definitely 
> > > > > > >>> the 
> > > > > > >>> source of some r300g bugs.
> > > > > > >>>
> > > > > > >>> 
> > > > > > >>>   
> > > > > > >> Marek,
> > > > > > >>
> > > > > > >> Yes, that seems like a defect. The format swizzle field tells us 
> > > > > > >> how to 
> > > > > > >> "swizzle" the incoming pixel so that its components are ordered 
> > > > > > >> in some 
> > > > > > >> predefined order. For RGB and SRGB colorspaces the order is R, 
> > > > > > >> G, B and 
> > > > > > >> A. For depth-stencil, ie. ZS color space the order is Z and then 
> > > > > > >> S.
> > > > > > >>
> > > > > > >> I will have a look at this.
> > > > > > >>   
> > > > > > >> 
> > > > > > > Marek, Jose,
> > > > > > >
> > > > > > > Can you review the attached patch?
> > > > > > >   
> > > > > > 
> > > > > > Ouch, it looks like we will have to leave 24-bit (s)rgb formats 
> > > > > > with 
> > > > > > array layout as the current code generator will bite us on big 
> > > > > > endian 
> > > > > > platforms. Attached an updated patch.
> > > > > 
> > > > > Why are you changing the layout from array to arith? Please leave that
> > > > > alone.
> > > > > 
> > > > > Yes, the code generator needs a big_ending -> little endian call to be
> > > > > correct on big endian platforms, as gallium formats should always be
> > > > > thougth of in little endian terms, just like most hardware is.
> > > > 
> > > > Actually, 'array' formats should be endianness neutral, 
> > > 
> > > Yep.
> > > 
> > > > and IMO 'arith' formats should be defined in the CPU endianness. 
> > > 
> > > I originally thought that too, but Keith convinced me that "gallium is a
> > > hardware abstraction, and all 3d hardware is little endian, therefore
> > > gallium formats should be always in little endian."
> > 
> > Then there probably should be no 'arith' formats, at least not when the
> > components consist of an integer number of bytes.
> 
> ... and at least for some others, e.g. 16 bit 565 or 1555 formats,
> 'always little endian' would mean that some API formats couldn't be
> represented by Gallium formats on big endian CPUs. So there would have
> to be a 'reverse byte order' bit at least.

Just to see if I have the right facts here: does ATI & NVIDIA 

Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread José Fonseca
On Wed, 2010-01-06 at 06:51 -0800, Michel Dänzer wrote:
> On Wed, 2010-01-06 at 14:32 +, José Fonseca wrote: 
> > On Wed, 2010-01-06 at 06:23 -0800, Michel Dänzer wrote:
> > > On Wed, 2010-01-06 at 14:03 +, José Fonseca wrote: 
> > > > On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
> > > > > michal wrote on 2010-01-06 07:58:
> > > > > > michal wrote on 2009-12-22 10:00:
> > > > > >   
> > > > > >> Marek Olšák wrote on 2009-12-22 08:40:
> > > > > >>   
> > > > > >> 
> > > > > >>> Hi,
> > > > > >>>
> > > > > >>> I noticed that gallium/auxiliary/util/u_format.csv contains some 
> > > > > >>> weird 
> > > > > >>> swizzling, for example see this:
> > > > > >>>
> > > > > >>> $ grep zyxw u_format.csv
> > > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 
> > > > > >>> , 
> > > > > >>> un8 , zyxw, rgb
> > > > > >>> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 
> > > > > >>> , 
> > > > > >>> un1 , zyxw, rgb
> > > > > >>> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 
> > > > > >>> , 
> > > > > >>> un4 , zyxw, rgb
> > > > > >>> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 
> > > > > >>> , 
> > > > > >>> sn8 , zyxw, rgb
> > > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  
> > > > > >>> , u8 
> > > > > >>>  , zyxw, srgb
> > > > > >>>
> > > > > >>> It's hard to believe that ARGB, ABGR, and BGRA have the same 
> > > > > >>> swizzling. Let's continue our journey:
> > > > > >>>
> > > > > >>> $ grep A8R8G8B8 u_format.csv
> > > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 
> > > > > >>> , 
> > > > > >>> un8 , zyxw, rgb
> > > > > >>> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  
> > > > > >>> , 
> > > > > >>> u8  , wxyz, srgb
> > > > > >>>
> > > > > >>> Same formats, different swizzling? Also:
> > > > > >>>
> > > > > >>> $ grep B8G8R8A8 u_format.csv
> > > > > >>> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 
> > > > > >>> , 
> > > > > >>> un8 , yzwx, rgb
> > > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  
> > > > > >>> , 
> > > > > >>> u8  , zyxw, srgb
> > > > > >>>
> > > > > >>> Same formats, different swizzling? I don't really get it. And 
> > > > > >>> there's 
> > > > > >>> much more cases like these. Could someone tell me what the 
> > > > > >>> intended 
> > > > > >>> order of channels should be? (or possibly propose a fix) The 
> > > > > >>> meaning 
> > > > > >>> of the whole table is self-contradictory and it's definitely the 
> > > > > >>> source of some r300g bugs.
> > > > > >>>
> > > > > >>> 
> > > > > >>>   
> > > > > >> Marek,
> > > > > >>
> > > > > >> Yes, that seems like a defect. The format swizzle field tells us 
> > > > > >> how to 
> > > > > >> "swizzle" the incoming pixel so that its components are ordered in 
> > > > > >> some 
> > > > > >> predefined order. For RGB and SRGB colorspaces the order is R, G, 
> > > > > >> B and 
> > > > > >> A. For depth-stencil, ie. ZS color space the order is Z and then S.
> > > > > >>
> > > > > >> I will have a look at this.
> > > > > >>   
> > > > > >> 
> > > > > > Marek, Jose,
> > > > > >
> > > > > > Can you review the attached patch?
> > > > > >   
> > > > > 
> > > > > Ouch, it looks like we will have to leave 24-bit (s)rgb formats with 
> > > > > array layout as the current code generator will bite us on big endian 
> > > > > platforms. Attached an updated patch.
> > > > 
> > > > Why are you changing the layout from array to arith? Please leave that
> > > > alone.
> > > > 
> > > > Yes, the code generator needs a big_ending -> little endian call to be
> > > > correct on big endian platforms, as gallium formats should always be
> > > > thougth of in little endian terms, just like most hardware is.
> > > 
> > > Actually, 'array' formats should be endianness neutral, 
> > 
> > Yep.
> > 
> > > and IMO 'arith' formats should be defined in the CPU endianness. 
> > 
> > I originally thought that too, but Keith convinced me that "gallium is a
> > hardware abstraction, and all 3d hardware is little endian, therefore
> > gallium formats should be always in little endian."
> 
> Then there probably should be no 'arith' formats, at least not when the
> components consist of an integer number of bytes.

Yes, that's probably the best.

> > > Though as discussed
> > > before, having 'reversed' formats defined in the other endianness as
> > > well might be useful. Drivers which can work on setups where the CPU
> > > endianness doesn't match the GPU endianness should possibly only use
> > > 'array' formats, but then there might need to be some kind of mapping
> > > between the two kinds of formats somewhere, maybe in the state trackers
> > > or an auxiliary module...
> > 
> > Basically a developer implementing a pipe drivers for a hardware should
> > not have to worry about CPU endianness. If a graphics API define formats
> > in terms of the nativ

Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread Michel Dänzer
On Wed, 2010-01-06 at 15:51 +0100, Michel Dänzer wrote: 
> On Wed, 2010-01-06 at 14:32 +, José Fonseca wrote: 
> > On Wed, 2010-01-06 at 06:23 -0800, Michel Dänzer wrote:
> > > On Wed, 2010-01-06 at 14:03 +, José Fonseca wrote: 
> > > > On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
> > > > > michal wrote on 2010-01-06 07:58:
> > > > > > michal wrote on 2009-12-22 10:00:
> > > > > >   
> > > > > >> Marek Olšák wrote on 2009-12-22 08:40:
> > > > > >>   
> > > > > >> 
> > > > > >>> Hi,
> > > > > >>>
> > > > > >>> I noticed that gallium/auxiliary/util/u_format.csv contains some 
> > > > > >>> weird 
> > > > > >>> swizzling, for example see this:
> > > > > >>>
> > > > > >>> $ grep zyxw u_format.csv
> > > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 
> > > > > >>> , 
> > > > > >>> un8 , zyxw, rgb
> > > > > >>> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 
> > > > > >>> , 
> > > > > >>> un1 , zyxw, rgb
> > > > > >>> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 
> > > > > >>> , 
> > > > > >>> un4 , zyxw, rgb
> > > > > >>> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 
> > > > > >>> , 
> > > > > >>> sn8 , zyxw, rgb
> > > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  
> > > > > >>> , u8 
> > > > > >>>  , zyxw, srgb
> > > > > >>>
> > > > > >>> It's hard to believe that ARGB, ABGR, and BGRA have the same 
> > > > > >>> swizzling. Let's continue our journey:
> > > > > >>>
> > > > > >>> $ grep A8R8G8B8 u_format.csv
> > > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 
> > > > > >>> , 
> > > > > >>> un8 , zyxw, rgb
> > > > > >>> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  
> > > > > >>> , 
> > > > > >>> u8  , wxyz, srgb
> > > > > >>>
> > > > > >>> Same formats, different swizzling? Also:
> > > > > >>>
> > > > > >>> $ grep B8G8R8A8 u_format.csv
> > > > > >>> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 
> > > > > >>> , 
> > > > > >>> un8 , yzwx, rgb
> > > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  
> > > > > >>> , 
> > > > > >>> u8  , zyxw, srgb
> > > > > >>>
> > > > > >>> Same formats, different swizzling? I don't really get it. And 
> > > > > >>> there's 
> > > > > >>> much more cases like these. Could someone tell me what the 
> > > > > >>> intended 
> > > > > >>> order of channels should be? (or possibly propose a fix) The 
> > > > > >>> meaning 
> > > > > >>> of the whole table is self-contradictory and it's definitely the 
> > > > > >>> source of some r300g bugs.
> > > > > >>>
> > > > > >>> 
> > > > > >>>   
> > > > > >> Marek,
> > > > > >>
> > > > > >> Yes, that seems like a defect. The format swizzle field tells us 
> > > > > >> how to 
> > > > > >> "swizzle" the incoming pixel so that its components are ordered in 
> > > > > >> some 
> > > > > >> predefined order. For RGB and SRGB colorspaces the order is R, G, 
> > > > > >> B and 
> > > > > >> A. For depth-stencil, ie. ZS color space the order is Z and then S.
> > > > > >>
> > > > > >> I will have a look at this.
> > > > > >>   
> > > > > >> 
> > > > > > Marek, Jose,
> > > > > >
> > > > > > Can you review the attached patch?
> > > > > >   
> > > > > 
> > > > > Ouch, it looks like we will have to leave 24-bit (s)rgb formats with 
> > > > > array layout as the current code generator will bite us on big endian 
> > > > > platforms. Attached an updated patch.
> > > > 
> > > > Why are you changing the layout from array to arith? Please leave that
> > > > alone.
> > > > 
> > > > Yes, the code generator needs a big_ending -> little endian call to be
> > > > correct on big endian platforms, as gallium formats should always be
> > > > thougth of in little endian terms, just like most hardware is.
> > > 
> > > Actually, 'array' formats should be endianness neutral, 
> > 
> > Yep.
> > 
> > > and IMO 'arith' formats should be defined in the CPU endianness. 
> > 
> > I originally thought that too, but Keith convinced me that "gallium is a
> > hardware abstraction, and all 3d hardware is little endian, therefore
> > gallium formats should be always in little endian."
> 
> Then there probably should be no 'arith' formats, at least not when the
> components consist of an integer number of bytes.

... and at least for some others, e.g. 16 bit 565 or 1555 formats,
'always little endian' would mean that some API formats couldn't be
represented by Gallium formats on big endian CPUs. So there would have
to be a 'reverse byte order' bit at least.


-- 
Earthling Michel Dänzer   |http://www.vmware.com
Libre software enthusiast |  Debian, X and DRI developer

--
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market proces

Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread Michel Dänzer
On Wed, 2010-01-06 at 14:32 +, José Fonseca wrote: 
> On Wed, 2010-01-06 at 06:23 -0800, Michel Dänzer wrote:
> > On Wed, 2010-01-06 at 14:03 +, José Fonseca wrote: 
> > > On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
> > > > michal wrote on 2010-01-06 07:58:
> > > > > michal wrote on 2009-12-22 10:00:
> > > > >   
> > > > >> Marek Olšák wrote on 2009-12-22 08:40:
> > > > >>   
> > > > >> 
> > > > >>> Hi,
> > > > >>>
> > > > >>> I noticed that gallium/auxiliary/util/u_format.csv contains some 
> > > > >>> weird 
> > > > >>> swizzling, for example see this:
> > > > >>>
> > > > >>> $ grep zyxw u_format.csv
> > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> > > > >>> un8 , zyxw, rgb
> > > > >>> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 , 
> > > > >>> un1 , zyxw, rgb
> > > > >>> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 , 
> > > > >>> un4 , zyxw, rgb
> > > > >>> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 , 
> > > > >>> sn8 , zyxw, rgb
> > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> > > > >>> u8 
> > > > >>>  , zyxw, srgb
> > > > >>>
> > > > >>> It's hard to believe that ARGB, ABGR, and BGRA have the same 
> > > > >>> swizzling. Let's continue our journey:
> > > > >>>
> > > > >>> $ grep A8R8G8B8 u_format.csv
> > > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> > > > >>> un8 , zyxw, rgb
> > > > >>> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> > > > >>> u8  , wxyz, srgb
> > > > >>>
> > > > >>> Same formats, different swizzling? Also:
> > > > >>>
> > > > >>> $ grep B8G8R8A8 u_format.csv
> > > > >>> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> > > > >>> un8 , yzwx, rgb
> > > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> > > > >>> u8  , zyxw, srgb
> > > > >>>
> > > > >>> Same formats, different swizzling? I don't really get it. And 
> > > > >>> there's 
> > > > >>> much more cases like these. Could someone tell me what the intended 
> > > > >>> order of channels should be? (or possibly propose a fix) The 
> > > > >>> meaning 
> > > > >>> of the whole table is self-contradictory and it's definitely the 
> > > > >>> source of some r300g bugs.
> > > > >>>
> > > > >>> 
> > > > >>>   
> > > > >> Marek,
> > > > >>
> > > > >> Yes, that seems like a defect. The format swizzle field tells us how 
> > > > >> to 
> > > > >> "swizzle" the incoming pixel so that its components are ordered in 
> > > > >> some 
> > > > >> predefined order. For RGB and SRGB colorspaces the order is R, G, B 
> > > > >> and 
> > > > >> A. For depth-stencil, ie. ZS color space the order is Z and then S.
> > > > >>
> > > > >> I will have a look at this.
> > > > >>   
> > > > >> 
> > > > > Marek, Jose,
> > > > >
> > > > > Can you review the attached patch?
> > > > >   
> > > > 
> > > > Ouch, it looks like we will have to leave 24-bit (s)rgb formats with 
> > > > array layout as the current code generator will bite us on big endian 
> > > > platforms. Attached an updated patch.
> > > 
> > > Why are you changing the layout from array to arith? Please leave that
> > > alone.
> > > 
> > > Yes, the code generator needs a big_ending -> little endian call to be
> > > correct on big endian platforms, as gallium formats should always be
> > > thougth of in little endian terms, just like most hardware is.
> > 
> > Actually, 'array' formats should be endianness neutral, 
> 
> Yep.
> 
> > and IMO 'arith' formats should be defined in the CPU endianness. 
> 
> I originally thought that too, but Keith convinced me that "gallium is a
> hardware abstraction, and all 3d hardware is little endian, therefore
> gallium formats should be always in little endian."

Then there probably should be no 'arith' formats, at least not when the
components consist of an integer number of bytes.


> > Though as discussed
> > before, having 'reversed' formats defined in the other endianness as
> > well might be useful. Drivers which can work on setups where the CPU
> > endianness doesn't match the GPU endianness should possibly only use
> > 'array' formats, but then there might need to be some kind of mapping
> > between the two kinds of formats somewhere, maybe in the state trackers
> > or an auxiliary module...
> 
> Basically a developer implementing a pipe drivers for a hardware should
> not have to worry about CPU endianness. If a graphics API define formats
> in terms of the native CPU endianness then the state tracker will have
> to do the translation.

That's more or less what I meant in my last sentence above. Hopefully
it'll be possible to share this between state trackers at least to some
degree via an auxiliary module or so. At least OpenGL and X11 define
(some) formats in CPU endianness.


-- 
Earthling Michel Dänzer   |http://www.vmware.com
Libre software enthusiast |   

Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread José Fonseca
On Wed, 2010-01-06 at 06:32 -0800, michal wrote:
> Michel Dänzer wrote on 2010-01-06 15:23:
> > On Wed, 2010-01-06 at 14:03 +, José Fonseca wrote: 
> >   
> >> On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
> >> 
> >>> michal wrote on 2010-01-06 07:58:
> >>>   
>  michal wrote on 2009-12-22 10:00:
>    
>  
> > Marek Olšák wrote on 2009-12-22 08:40:
> >   
> > 
> >   
> >> Hi,
> >>
> >> I noticed that gallium/auxiliary/util/u_format.csv contains some weird 
> >> swizzling, for example see this:
> >>
> >> $ grep zyxw u_format.csv
> >> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> >> un8 , zyxw, rgb
> >> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 , 
> >> un1 , zyxw, rgb
> >> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 , 
> >> un4 , zyxw, rgb
> >> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 , 
> >> sn8 , zyxw, rgb
> >> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , u8 
> >>  , zyxw, srgb
> >>
> >> It's hard to believe that ARGB, ABGR, and BGRA have the same 
> >> swizzling. Let's continue our journey:
> >>
> >> $ grep A8R8G8B8 u_format.csv
> >> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> >> un8 , zyxw, rgb
> >> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> >> u8  , wxyz, srgb
> >>
> >> Same formats, different swizzling? Also:
> >>
> >> $ grep B8G8R8A8 u_format.csv
> >> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> >> un8 , yzwx, rgb
> >> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> >> u8  , zyxw, srgb
> >>
> >> Same formats, different swizzling? I don't really get it. And there's 
> >> much more cases like these. Could someone tell me what the intended 
> >> order of channels should be? (or possibly propose a fix) The meaning 
> >> of the whole table is self-contradictory and it's definitely the 
> >> source of some r300g bugs.
> >>
> >> 
> >>   
> >> 
> > Marek,
> >
> > Yes, that seems like a defect. The format swizzle field tells us how to 
> > "swizzle" the incoming pixel so that its components are ordered in some 
> > predefined order. For RGB and SRGB colorspaces the order is R, G, B and 
> > A. For depth-stencil, ie. ZS color space the order is Z and then S.
> >
> > I will have a look at this.
> >   
> > 
> >   
>  Marek, Jose,
> 
>  Can you review the attached patch?
>    
>  
> >>> Ouch, it looks like we will have to leave 24-bit (s)rgb formats with 
> >>> array layout as the current code generator will bite us on big endian 
> >>> platforms. Attached an updated patch.
> >>>   
> >> Why are you changing the layout from array to arith? Please leave that
> >> alone.
> >>
> >> Yes, the code generator needs a big_ending -> little endian call to be
> >> correct on big endian platforms, as gallium formats should always be
> >> thougth of in little endian terms, just like most hardware is.
> >> 
> >
> > Actually, 'array' formats should be endianness neutral, and IMO 'arith'
> > formats should be defined in the CPU endianness. Though as discussed
> > before, having 'reversed' formats defined in the other endianness as
> > well might be useful. Drivers which can work on setups where the CPU
> > endianness doesn't match the GPU endianness should possibly only use
> > 'array' formats, but then there might need to be some kind of mapping
> > between the two kinds of formats somewhere, maybe in the state trackers
> > or an auxiliary module...
> >
> >   
> Interesting. Is there any reference that would say which formats are 
> 'array', and which are not? Or is it a simple rule that when every 
> component's bitsize is greater-or-equal to, say, 16, then it's an array 
> format?

There isn't really a rule, and I haven't profiled code enough to tell
which algorithm is faster for swizzling -- bit shifting arithmetic or
byte/word/dword indexation. My expectation is that byte/word/dword
indexation will be faster for n x 8bit formats. In particular there is
sse3 instruction PSHUFB can swizzle any n x 8bit format, 16 channels at
a time. Where as bit SSE2 bit shift arithmetic instructions can only do
4 or 8 channels at a time, for 32bit and 16bit formats respectively. 

Again, this is only relevant for the generating CPU routines that will
do pixel translation. GPU drivers should behave identically regardless
of this layout.

Jose


--
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market p

Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread michal
Michel Dänzer wrote on 2010-01-06 15:23:
> On Wed, 2010-01-06 at 14:03 +, José Fonseca wrote: 
>   
>> On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
>> 
>>> michal wrote on 2010-01-06 07:58:
>>>   
 michal wrote on 2009-12-22 10:00:
   
 
> Marek Olšák wrote on 2009-12-22 08:40:
>   
> 
>   
>> Hi,
>>
>> I noticed that gallium/auxiliary/util/u_format.csv contains some weird 
>> swizzling, for example see this:
>>
>> $ grep zyxw u_format.csv
>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
>> un8 , zyxw, rgb
>> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 , 
>> un1 , zyxw, rgb
>> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 , 
>> un4 , zyxw, rgb
>> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 , 
>> sn8 , zyxw, rgb
>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , u8 
>>  , zyxw, srgb
>>
>> It's hard to believe that ARGB, ABGR, and BGRA have the same 
>> swizzling. Let's continue our journey:
>>
>> $ grep A8R8G8B8 u_format.csv
>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
>> un8 , zyxw, rgb
>> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
>> u8  , wxyz, srgb
>>
>> Same formats, different swizzling? Also:
>>
>> $ grep B8G8R8A8 u_format.csv
>> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
>> un8 , yzwx, rgb
>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
>> u8  , zyxw, srgb
>>
>> Same formats, different swizzling? I don't really get it. And there's 
>> much more cases like these. Could someone tell me what the intended 
>> order of channels should be? (or possibly propose a fix) The meaning 
>> of the whole table is self-contradictory and it's definitely the 
>> source of some r300g bugs.
>>
>> 
>>   
>> 
> Marek,
>
> Yes, that seems like a defect. The format swizzle field tells us how to 
> "swizzle" the incoming pixel so that its components are ordered in some 
> predefined order. For RGB and SRGB colorspaces the order is R, G, B and 
> A. For depth-stencil, ie. ZS color space the order is Z and then S.
>
> I will have a look at this.
>   
> 
>   
 Marek, Jose,

 Can you review the attached patch?
   
 
>>> Ouch, it looks like we will have to leave 24-bit (s)rgb formats with 
>>> array layout as the current code generator will bite us on big endian 
>>> platforms. Attached an updated patch.
>>>   
>> Why are you changing the layout from array to arith? Please leave that
>> alone.
>>
>> Yes, the code generator needs a big_ending -> little endian call to be
>> correct on big endian platforms, as gallium formats should always be
>> thougth of in little endian terms, just like most hardware is.
>> 
>
> Actually, 'array' formats should be endianness neutral, and IMO 'arith'
> formats should be defined in the CPU endianness. Though as discussed
> before, having 'reversed' formats defined in the other endianness as
> well might be useful. Drivers which can work on setups where the CPU
> endianness doesn't match the GPU endianness should possibly only use
> 'array' formats, but then there might need to be some kind of mapping
> between the two kinds of formats somewhere, maybe in the state trackers
> or an auxiliary module...
>
>   
Interesting. Is there any reference that would say which formats are 
'array', and which are not? Or is it a simple rule that when every 
component's bitsize is greater-or-equal to, say, 16, then it's an array 
format?


--
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
___
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev


Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread José Fonseca
On Wed, 2010-01-06 at 06:23 -0800, Michel Dänzer wrote:
> On Wed, 2010-01-06 at 14:03 +, José Fonseca wrote: 
> > On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
> > > michal wrote on 2010-01-06 07:58:
> > > > michal wrote on 2009-12-22 10:00:
> > > >   
> > > >> Marek Olšák wrote on 2009-12-22 08:40:
> > > >>   
> > > >> 
> > > >>> Hi,
> > > >>>
> > > >>> I noticed that gallium/auxiliary/util/u_format.csv contains some 
> > > >>> weird 
> > > >>> swizzling, for example see this:
> > > >>>
> > > >>> $ grep zyxw u_format.csv
> > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> > > >>> un8 , zyxw, rgb
> > > >>> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 , 
> > > >>> un1 , zyxw, rgb
> > > >>> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 , 
> > > >>> un4 , zyxw, rgb
> > > >>> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 , 
> > > >>> sn8 , zyxw, rgb
> > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> > > >>> u8 
> > > >>>  , zyxw, srgb
> > > >>>
> > > >>> It's hard to believe that ARGB, ABGR, and BGRA have the same 
> > > >>> swizzling. Let's continue our journey:
> > > >>>
> > > >>> $ grep A8R8G8B8 u_format.csv
> > > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> > > >>> un8 , zyxw, rgb
> > > >>> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> > > >>> u8  , wxyz, srgb
> > > >>>
> > > >>> Same formats, different swizzling? Also:
> > > >>>
> > > >>> $ grep B8G8R8A8 u_format.csv
> > > >>> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> > > >>> un8 , yzwx, rgb
> > > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> > > >>> u8  , zyxw, srgb
> > > >>>
> > > >>> Same formats, different swizzling? I don't really get it. And there's 
> > > >>> much more cases like these. Could someone tell me what the intended 
> > > >>> order of channels should be? (or possibly propose a fix) The meaning 
> > > >>> of the whole table is self-contradictory and it's definitely the 
> > > >>> source of some r300g bugs.
> > > >>>
> > > >>> 
> > > >>>   
> > > >> Marek,
> > > >>
> > > >> Yes, that seems like a defect. The format swizzle field tells us how 
> > > >> to 
> > > >> "swizzle" the incoming pixel so that its components are ordered in 
> > > >> some 
> > > >> predefined order. For RGB and SRGB colorspaces the order is R, G, B 
> > > >> and 
> > > >> A. For depth-stencil, ie. ZS color space the order is Z and then S.
> > > >>
> > > >> I will have a look at this.
> > > >>   
> > > >> 
> > > > Marek, Jose,
> > > >
> > > > Can you review the attached patch?
> > > >   
> > > 
> > > Ouch, it looks like we will have to leave 24-bit (s)rgb formats with 
> > > array layout as the current code generator will bite us on big endian 
> > > platforms. Attached an updated patch.
> > 
> > Why are you changing the layout from array to arith? Please leave that
> > alone.
> > 
> > Yes, the code generator needs a big_ending -> little endian call to be
> > correct on big endian platforms, as gallium formats should always be
> > thougth of in little endian terms, just like most hardware is.
> 
> Actually, 'array' formats should be endianness neutral, 

Yep.

> and IMO 'arith'
> formats should be defined in the CPU endianness. 

I originally thought that too, but Keith convinced me that "gallium is a
hardware abstraction, and all 3d hardware is little endian, therefore
gallium formats should be always in little endian."

> Though as discussed
> before, having 'reversed' formats defined in the other endianness as
> well might be useful. Drivers which can work on setups where the CPU
> endianness doesn't match the GPU endianness should possibly only use
> 'array' formats, but then there might need to be some kind of mapping
> between the two kinds of formats somewhere, maybe in the state trackers
> or an auxiliary module...

Basically a developer implementing a pipe drivers for a hardware should
not have to worry about CPU endianness. If a graphics API define formats
in terms of the native CPU endianness then the state tracker will have
to do the translation.

Perhaps Keith can elaborate this better than I can.

Jose


--
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
___
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev


Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread michal
José Fonseca wrote on 2010-01-06 15:26:
> On Wed, 2010-01-06 at 06:11 -0800, michal wrote:
>   
>> José Fonseca wrote on 2010-01-06 15:03:
>> 
>>> On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
>>>   
>>>   
 michal wrote on 2010-01-06 07:58:
 
 
> michal wrote on 2009-12-22 10:00:
>   
>   
>   
>> Marek Olšák wrote on 2009-12-22 08:40:
>>   
>> 
>> 
>> 
>>> Hi,
>>>
>>> I noticed that gallium/auxiliary/util/u_format.csv contains some weird 
>>> swizzling, for example see this:
>>>
>>> $ grep zyxw u_format.csv
>>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
>>> un8 , zyxw, rgb
>>> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 , 
>>> un1 , zyxw, rgb
>>> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 , 
>>> un4 , zyxw, rgb
>>> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 , 
>>> sn8 , zyxw, rgb
>>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , u8 
>>>  , zyxw, srgb
>>>
>>> It's hard to believe that ARGB, ABGR, and BGRA have the same 
>>> swizzling. Let's continue our journey:
>>>
>>> $ grep A8R8G8B8 u_format.csv
>>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
>>> un8 , zyxw, rgb
>>> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
>>> u8  , wxyz, srgb
>>>
>>> Same formats, different swizzling? Also:
>>>
>>> $ grep B8G8R8A8 u_format.csv
>>> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
>>> un8 , yzwx, rgb
>>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
>>> u8  , zyxw, srgb
>>>
>>> Same formats, different swizzling? I don't really get it. And there's 
>>> much more cases like these. Could someone tell me what the intended 
>>> order of channels should be? (or possibly propose a fix) The meaning 
>>> of the whole table is self-contradictory and it's definitely the 
>>> source of some r300g bugs.
>>>
>>> 
>>>   
>>>   
>>>   
>> Marek,
>>
>> Yes, that seems like a defect. The format swizzle field tells us how to 
>> "swizzle" the incoming pixel so that its components are ordered in some 
>> predefined order. For RGB and SRGB colorspaces the order is R, G, B and 
>> A. For depth-stencil, ie. ZS color space the order is Z and then S.
>>
>> I will have a look at this.
>>   
>> 
>> 
>> 
> Marek, Jose,
>
> Can you review the attached patch?
>   
>   
>   
 Ouch, it looks like we will have to leave 24-bit (s)rgb formats with 
 array layout as the current code generator will bite us on big endian 
 platforms. Attached an updated patch.
 
 
>>> Why are you changing the layout from array to arith? Please leave that
>>> alone.
>>>
>>>   
>>>   
>> I did this because in the other thread you defined arith layout to apply 
>> to 32-or-less-bit formats. Since I still believe arith and array layout 
>> are somewhat redundant, we can go the other way round and convert other 
>> arith layouts to array, save for 16-or-less-bit formats.
>> 
>
> Indeed arith applies to 32-or-less-bit formats, but I never meant to say
> that all 32-or-less-bit formats must be in arith.
>
>   

Understood.

> They are indeed redundant, but array is/will be more efficient and when
> code generation is more robust and big-endian-safe all x8, x8x8, x8x8x8,
> x8x8x8x8x8 formats will be likely in array layout. 
>
>   

That is okay, we agree on that part. The question is what is the reason 
we treat PIPE_FORMAT_R8G8B8A8_UNORM as having array layout (before my 
patch), and e.g. PIPE_FORMAT_B8G8R8A8_UNORM as having arith layout?


--
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
___
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev


Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread José Fonseca
On Wed, 2010-01-06 at 06:11 -0800, michal wrote:
> José Fonseca wrote on 2010-01-06 15:03:
> > On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
> >   
> >> michal wrote on 2010-01-06 07:58:
> >> 
> >>> michal wrote on 2009-12-22 10:00:
> >>>   
> >>>   
>  Marek Olšák wrote on 2009-12-22 08:40:
>    
>  
>  
> > Hi,
> >
> > I noticed that gallium/auxiliary/util/u_format.csv contains some weird 
> > swizzling, for example see this:
> >
> > $ grep zyxw u_format.csv
> > PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> > un8 , zyxw, rgb
> > PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 , 
> > un1 , zyxw, rgb
> > PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 , 
> > un4 , zyxw, rgb
> > PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 , 
> > sn8 , zyxw, rgb
> > PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , u8 
> >  , zyxw, srgb
> >
> > It's hard to believe that ARGB, ABGR, and BGRA have the same 
> > swizzling. Let's continue our journey:
> >
> > $ grep A8R8G8B8 u_format.csv
> > PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> > un8 , zyxw, rgb
> > PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> > u8  , wxyz, srgb
> >
> > Same formats, different swizzling? Also:
> >
> > $ grep B8G8R8A8 u_format.csv
> > PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> > un8 , yzwx, rgb
> > PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> > u8  , zyxw, srgb
> >
> > Same formats, different swizzling? I don't really get it. And there's 
> > much more cases like these. Could someone tell me what the intended 
> > order of channels should be? (or possibly propose a fix) The meaning 
> > of the whole table is self-contradictory and it's definitely the 
> > source of some r300g bugs.
> >
> > 
> >   
> >   
>  Marek,
> 
>  Yes, that seems like a defect. The format swizzle field tells us how to 
>  "swizzle" the incoming pixel so that its components are ordered in some 
>  predefined order. For RGB and SRGB colorspaces the order is R, G, B and 
>  A. For depth-stencil, ie. ZS color space the order is Z and then S.
> 
>  I will have a look at this.
>    
>  
>  
> >>> Marek, Jose,
> >>>
> >>> Can you review the attached patch?
> >>>   
> >>>   
> >> Ouch, it looks like we will have to leave 24-bit (s)rgb formats with 
> >> array layout as the current code generator will bite us on big endian 
> >> platforms. Attached an updated patch.
> >> 
> >
> > Why are you changing the layout from array to arith? Please leave that
> > alone.
> >
> >   
> 
> I did this because in the other thread you defined arith layout to apply 
> to 32-or-less-bit formats. Since I still believe arith and array layout 
> are somewhat redundant, we can go the other way round and convert other 
> arith layouts to array, save for 16-or-less-bit formats.

Indeed arith applies to 32-or-less-bit formats, but I never meant to say
that all 32-or-less-bit formats must be in arith.

They are indeed redundant, but array is/will be more efficient and when
code generation is more robust and big-endian-safe all x8, x8x8, x8x8x8,
x8x8x8x8x8 formats will be likely in array layout. 

Jose


--
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
___
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev


Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread Michel Dänzer
On Wed, 2010-01-06 at 14:03 +, José Fonseca wrote: 
> On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
> > michal wrote on 2010-01-06 07:58:
> > > michal wrote on 2009-12-22 10:00:
> > >   
> > >> Marek Olšák wrote on 2009-12-22 08:40:
> > >>   
> > >> 
> > >>> Hi,
> > >>>
> > >>> I noticed that gallium/auxiliary/util/u_format.csv contains some weird 
> > >>> swizzling, for example see this:
> > >>>
> > >>> $ grep zyxw u_format.csv
> > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> > >>> un8 , zyxw, rgb
> > >>> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 , 
> > >>> un1 , zyxw, rgb
> > >>> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 , 
> > >>> un4 , zyxw, rgb
> > >>> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 , 
> > >>> sn8 , zyxw, rgb
> > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , u8 
> > >>>  , zyxw, srgb
> > >>>
> > >>> It's hard to believe that ARGB, ABGR, and BGRA have the same 
> > >>> swizzling. Let's continue our journey:
> > >>>
> > >>> $ grep A8R8G8B8 u_format.csv
> > >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> > >>> un8 , zyxw, rgb
> > >>> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> > >>> u8  , wxyz, srgb
> > >>>
> > >>> Same formats, different swizzling? Also:
> > >>>
> > >>> $ grep B8G8R8A8 u_format.csv
> > >>> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> > >>> un8 , yzwx, rgb
> > >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> > >>> u8  , zyxw, srgb
> > >>>
> > >>> Same formats, different swizzling? I don't really get it. And there's 
> > >>> much more cases like these. Could someone tell me what the intended 
> > >>> order of channels should be? (or possibly propose a fix) The meaning 
> > >>> of the whole table is self-contradictory and it's definitely the 
> > >>> source of some r300g bugs.
> > >>>
> > >>> 
> > >>>   
> > >> Marek,
> > >>
> > >> Yes, that seems like a defect. The format swizzle field tells us how to 
> > >> "swizzle" the incoming pixel so that its components are ordered in some 
> > >> predefined order. For RGB and SRGB colorspaces the order is R, G, B and 
> > >> A. For depth-stencil, ie. ZS color space the order is Z and then S.
> > >>
> > >> I will have a look at this.
> > >>   
> > >> 
> > > Marek, Jose,
> > >
> > > Can you review the attached patch?
> > >   
> > 
> > Ouch, it looks like we will have to leave 24-bit (s)rgb formats with 
> > array layout as the current code generator will bite us on big endian 
> > platforms. Attached an updated patch.
> 
> Why are you changing the layout from array to arith? Please leave that
> alone.
> 
> Yes, the code generator needs a big_ending -> little endian call to be
> correct on big endian platforms, as gallium formats should always be
> thougth of in little endian terms, just like most hardware is.

Actually, 'array' formats should be endianness neutral, and IMO 'arith'
formats should be defined in the CPU endianness. Though as discussed
before, having 'reversed' formats defined in the other endianness as
well might be useful. Drivers which can work on setups where the CPU
endianness doesn't match the GPU endianness should possibly only use
'array' formats, but then there might need to be some kind of mapping
between the two kinds of formats somewhere, maybe in the state trackers
or an auxiliary module...


-- 
Earthling Michel Dänzer   |http://www.vmware.com
Libre software enthusiast |  Debian, X and DRI developer

--
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
___
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev


Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread michal
Christoph Bumiller wrote on 2010-01-06 12:08:
> On 06.01.2010 08:36, michal wrote:
>> michal wrote on 2010-01-06 07:58:
>>> michal wrote on 2009-12-22 10:00:
>>>  
 Marek Olšák wrote on 2009-12-22 08:40:
  
> Hi,
>
> I noticed that gallium/auxiliary/util/u_format.csv contains some 
> weird swizzling, for example see this:
>
> $ grep zyxw u_format.csv
> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 
> , un8 , zyxw, rgb
> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 
> , un1 , zyxw, rgb
> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 
> , un4 , zyxw, rgb
> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 
> , sn8 , zyxw, rgb
> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  
> , u8  , zyxw, srgb
>
> It's hard to believe that ARGB, ABGR, and BGRA have the same 
> swizzling. Let's continue our journey:
>
> $ grep A8R8G8B8 u_format.csv
> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 
> , un8 , zyxw, rgb
> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  
> , u8  , wxyz, srgb
>
> Same formats, different swizzling? Also:
>
> $ grep B8G8R8A8 u_format.csv
> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 
> , un8 , yzwx, rgb
> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  
> , u8  , zyxw, srgb
>
> Same formats, different swizzling? I don't really get it. And 
> there's much more cases like these. Could someone tell me what the 
> intended order of channels should be? (or possibly propose a fix) 
> The meaning of the whole table is self-contradictory and it's 
> definitely the source of some r300g bugs.
>
>   
 Marek,

 Yes, that seems like a defect. The format swizzle field tells us 
 how to "swizzle" the incoming pixel so that its components are 
 ordered in some predefined order. For RGB and SRGB colorspaces the 
 order is R, G, B and A. For depth-stencil, ie. ZS color space the 
 order is Z and then S.

 I will have a look at this.
   
>>> Marek, Jose,
>>>
>>> Can you review the attached patch?
>>>   
>>
>> Ouch, it looks like we will have to leave 24-bit (s)rgb formats with 
>> array layout as the current code generator will bite us on big endian 
>> platforms. Attached an updated patch.
>>
> It looks like I always thought how to interpret the formats now.
>
> Which means the vertex element formats in mesa/state_tracker/st_draw.c
> should be corrected - the R8G8B8A8 and R8G8 vertex elements should be
> reversed, and the BGRA format should be A8R8G8B8.
>
> At least this would fix my (gallium/drivers/nv50/nv50.vbo)
>if (desc->swizzle[0] == UTIL_FORMAT_SWIZZLE_Z) /* BGRA */
> check.
>

I'm affraid you will also need to check desc->layout field, and if it is 
array, compare against desc->swizzle[3].

--
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
___
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev


Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread michal
José Fonseca wrote on 2010-01-06 15:03:
> On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
>   
>> michal wrote on 2010-01-06 07:58:
>> 
>>> michal wrote on 2009-12-22 10:00:
>>>   
>>>   
 Marek Olšák wrote on 2009-12-22 08:40:
   
 
 
> Hi,
>
> I noticed that gallium/auxiliary/util/u_format.csv contains some weird 
> swizzling, for example see this:
>
> $ grep zyxw u_format.csv
> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> un8 , zyxw, rgb
> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 , 
> un1 , zyxw, rgb
> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 , 
> un4 , zyxw, rgb
> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 , 
> sn8 , zyxw, rgb
> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , u8 
>  , zyxw, srgb
>
> It's hard to believe that ARGB, ABGR, and BGRA have the same 
> swizzling. Let's continue our journey:
>
> $ grep A8R8G8B8 u_format.csv
> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> un8 , zyxw, rgb
> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> u8  , wxyz, srgb
>
> Same formats, different swizzling? Also:
>
> $ grep B8G8R8A8 u_format.csv
> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> un8 , yzwx, rgb
> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> u8  , zyxw, srgb
>
> Same formats, different swizzling? I don't really get it. And there's 
> much more cases like these. Could someone tell me what the intended 
> order of channels should be? (or possibly propose a fix) The meaning 
> of the whole table is self-contradictory and it's definitely the 
> source of some r300g bugs.
>
> 
>   
>   
 Marek,

 Yes, that seems like a defect. The format swizzle field tells us how to 
 "swizzle" the incoming pixel so that its components are ordered in some 
 predefined order. For RGB and SRGB colorspaces the order is R, G, B and 
 A. For depth-stencil, ie. ZS color space the order is Z and then S.

 I will have a look at this.
   
 
 
>>> Marek, Jose,
>>>
>>> Can you review the attached patch?
>>>   
>>>   
>> Ouch, it looks like we will have to leave 24-bit (s)rgb formats with 
>> array layout as the current code generator will bite us on big endian 
>> platforms. Attached an updated patch.
>> 
>
> Why are you changing the layout from array to arith? Please leave that
> alone.
>
>   

I did this because in the other thread you defined arith layout to apply 
to 32-or-less-bit formats. Since I still believe arith and array layout 
are somewhat redundant, we can go the other way round and convert other 
arith layouts to array, save for 16-or-less-bit formats.

> Yes, the code generator needs a big_ending -> little endian call to be
> correct on big endian platforms, as gallium formats should always be
> thougth of in little endian terms, just like most hardware is.
>
>   


--
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
___
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev


Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread José Fonseca
On Tue, 2010-01-05 at 23:36 -0800, michal wrote:
> michal wrote on 2010-01-06 07:58:
> > michal wrote on 2009-12-22 10:00:
> >   
> >> Marek Olšák wrote on 2009-12-22 08:40:
> >>   
> >> 
> >>> Hi,
> >>>
> >>> I noticed that gallium/auxiliary/util/u_format.csv contains some weird 
> >>> swizzling, for example see this:
> >>>
> >>> $ grep zyxw u_format.csv
> >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> >>> un8 , zyxw, rgb
> >>> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 , 
> >>> un1 , zyxw, rgb
> >>> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 , 
> >>> un4 , zyxw, rgb
> >>> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 , 
> >>> sn8 , zyxw, rgb
> >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , u8 
> >>>  , zyxw, srgb
> >>>
> >>> It's hard to believe that ARGB, ABGR, and BGRA have the same 
> >>> swizzling. Let's continue our journey:
> >>>
> >>> $ grep A8R8G8B8 u_format.csv
> >>> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> >>> un8 , zyxw, rgb
> >>> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> >>> u8  , wxyz, srgb
> >>>
> >>> Same formats, different swizzling? Also:
> >>>
> >>> $ grep B8G8R8A8 u_format.csv
> >>> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> >>> un8 , yzwx, rgb
> >>> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> >>> u8  , zyxw, srgb
> >>>
> >>> Same formats, different swizzling? I don't really get it. And there's 
> >>> much more cases like these. Could someone tell me what the intended 
> >>> order of channels should be? (or possibly propose a fix) The meaning 
> >>> of the whole table is self-contradictory and it's definitely the 
> >>> source of some r300g bugs.
> >>>
> >>> 
> >>>   
> >> Marek,
> >>
> >> Yes, that seems like a defect. The format swizzle field tells us how to 
> >> "swizzle" the incoming pixel so that its components are ordered in some 
> >> predefined order. For RGB and SRGB colorspaces the order is R, G, B and 
> >> A. For depth-stencil, ie. ZS color space the order is Z and then S.
> >>
> >> I will have a look at this.
> >>   
> >> 
> > Marek, Jose,
> >
> > Can you review the attached patch?
> >   
> 
> Ouch, it looks like we will have to leave 24-bit (s)rgb formats with 
> array layout as the current code generator will bite us on big endian 
> platforms. Attached an updated patch.

Why are you changing the layout from array to arith? Please leave that
alone.

Yes, the code generator needs a big_ending -> little endian call to be
correct on big endian platforms, as gallium formats should always be
thougth of in little endian terms, just like most hardware is.

Jose


--
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
___
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev


Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-06 Thread Christoph Bumiller
On 06.01.2010 08:36, michal wrote:
> michal wrote on 2010-01-06 07:58:
>> michal wrote on 2009-12-22 10:00:
>>  
>>> Marek Olšák wrote on 2009-12-22 08:40:
>>>  
 Hi,

 I noticed that gallium/auxiliary/util/u_format.csv contains some
 weird swizzling, for example see this:

 $ grep zyxw u_format.csv
 PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 ,
 un8 , zyxw, rgb
 PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 ,
 un1 , zyxw, rgb
 PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 ,
 un4 , zyxw, rgb
 PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 ,
 sn8 , zyxw, rgb
 PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  ,
 u8  , zyxw, srgb

 It's hard to believe that ARGB, ABGR, and BGRA have the same
 swizzling. Let's continue our journey:

 $ grep A8R8G8B8 u_format.csv
 PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 ,
 un8 , zyxw, rgb
 PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  ,
 u8  , wxyz, srgb

 Same formats, different swizzling? Also:

 $ grep B8G8R8A8 u_format.csv
 PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 ,
 un8 , yzwx, rgb
 PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  ,
 u8  , zyxw, srgb

 Same formats, different swizzling? I don't really get it. And
 there's much more cases like these. Could someone tell me what the
 intended order of channels should be? (or possibly propose a fix)
 The meaning of the whole table is self-contradictory and it's
 definitely the source of some r300g bugs.

   
>>> Marek,
>>>
>>> Yes, that seems like a defect. The format swizzle field tells us how
>>> to "swizzle" the incoming pixel so that its components are ordered
>>> in some predefined order. For RGB and SRGB colorspaces the order is
>>> R, G, B and A. For depth-stencil, ie. ZS color space the order is Z
>>> and then S.
>>>
>>> I will have a look at this.
>>>   
>> Marek, Jose,
>>
>> Can you review the attached patch?
>>   
>
> Ouch, it looks like we will have to leave 24-bit (s)rgb formats with
> array layout as the current code generator will bite us on big endian
> platforms. Attached an updated patch.
>
It looks like I always thought how to interpret the formats now.

Which means the vertex element formats in mesa/state_tracker/st_draw.c
should be corrected - the R8G8B8A8 and R8G8 vertex elements should be
reversed, and the BGRA format should be A8R8G8B8.

At least this would fix my (gallium/drivers/nv50/nv50.vbo)
   if (desc->swizzle[0] == UTIL_FORMAT_SWIZZLE_Z) /* BGRA */
check.

Christoph
>
>
> --
> This SF.Net email is sponsored by the Verizon Developer Community
> Take advantage of Verizon's best-in-class app development support
> A streamlined, 14 day to market process makes app distribution fast and easy
> Join now and get one step closer to millions of Verizon customers
> http://p.sf.net/sfu/verizon-dev2dev 
>
>
> ___
> Mesa3d-dev mailing list
> Mesa3d-dev@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/mesa3d-dev
>   

--
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev ___
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev


Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-05 Thread michal

michal wrote on 2010-01-06 07:58:

michal wrote on 2009-12-22 10:00:
  

Marek Olšák wrote on 2009-12-22 08:40:
  


Hi,

I noticed that gallium/auxiliary/util/u_format.csv contains some weird 
swizzling, for example see this:


$ grep zyxw u_format.csv
PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
un8 , zyxw, rgb
PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 , 
un1 , zyxw, rgb
PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 , 
un4 , zyxw, rgb
PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 , 
sn8 , zyxw, rgb
PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , u8 
 , zyxw, srgb


It's hard to believe that ARGB, ABGR, and BGRA have the same 
swizzling. Let's continue our journey:


$ grep A8R8G8B8 u_format.csv
PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
un8 , zyxw, rgb
PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
u8  , wxyz, srgb


Same formats, different swizzling? Also:

$ grep B8G8R8A8 u_format.csv
PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
un8 , yzwx, rgb
PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
u8  , zyxw, srgb


Same formats, different swizzling? I don't really get it. And there's 
much more cases like these. Could someone tell me what the intended 
order of channels should be? (or possibly propose a fix) The meaning 
of the whole table is self-contradictory and it's definitely the 
source of some r300g bugs.



  

Marek,

Yes, that seems like a defect. The format swizzle field tells us how to 
"swizzle" the incoming pixel so that its components are ordered in some 
predefined order. For RGB and SRGB colorspaces the order is R, G, B and 
A. For depth-stencil, ie. ZS color space the order is Z and then S.


I will have a look at this.
  


Marek, Jose,

Can you review the attached patch?
  


Ouch, it looks like we will have to leave 24-bit (s)rgb formats with 
array layout as the current code generator will bite us on big endian 
platforms. Attached an updated patch.



>From b906e38badecffeacdda6fda04fd0456ebd21510 Mon Sep 17 00:00:00 2001
From: Michal Krol 
Date: Wed, 6 Jan 2010 08:36:00 +0100
Subject: [PATCH] util: Fix format descriptor table entries.

For 8-/16-/32-bit-sized srgb/rgb formats, make them have an arith layout
and their components read from right to left.

Not sure about dxt layout, though.
---
 src/gallium/auxiliary/util/u_format.csv |   54 +++---
 1 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_format.csv 
b/src/gallium/auxiliary/util/u_format.csv
index 866b18f..e37c446 100644
--- a/src/gallium/auxiliary/util/u_format.csv
+++ b/src/gallium/auxiliary/util/u_format.csv
@@ -61,43 +61,43 @@ PIPE_FORMAT_R16_SSCALED   , array , 1, 1, s16 , 
, , , x001,
 PIPE_FORMAT_R16G16_SSCALED, array , 1, 1, s16 , s16 , , , 
xy01, rgb
 PIPE_FORMAT_R16G16B16_SSCALED , array , 1, 1, s16 , s16 , s16 , , 
xyz1, rgb
 PIPE_FORMAT_R16G16B16A16_SSCALED  , array , 1, 1, s16 , s16 , s16 , s16 , 
xyzw, rgb
-PIPE_FORMAT_R8_UNORM  , array , 1, 1, un8 , , , , 
x001, rgb
-PIPE_FORMAT_R8G8_UNORM, array , 1, 1, un8 , un8 , , , 
xy01, rgb
+PIPE_FORMAT_R8_UNORM  , arith , 1, 1, un8 , , , , 
x001, rgb
+PIPE_FORMAT_R8G8_UNORM, arith , 1, 1, un8 , un8 , , , 
yx01, rgb
 PIPE_FORMAT_R8G8B8_UNORM  , array , 1, 1, un8 , un8 , un8 , , 
xyz1, rgb
-PIPE_FORMAT_R8G8B8A8_UNORM, array , 1, 1, un8 , un8 , un8 , un8 , 
xyzw, rgb
-PIPE_FORMAT_R8G8B8X8_UNORM, array , 1, 1, un8 , un8 , un8 , un8 , 
xyz1, rgb
-PIPE_FORMAT_R8_USCALED, array , 1, 1, u8  , , , , 
x001, rgb
-PIPE_FORMAT_R8G8_USCALED  , array , 1, 1, u8  , u8  , , , 
xy01, rgb
+PIPE_FORMAT_R8G8B8A8_UNORM, arith , 1, 1, un8 , un8 , un8 , un8 , 
wzyx, rgb
+PIPE_FORMAT_R8G8B8X8_UNORM, arith , 1, 1, un8 , un8 , un8 , un8 , 
wzy1, rgb
+PIPE_FORMAT_R8_USCALED, arith , 1, 1, u8  , , , , 
x001, rgb
+PIPE_FORMAT_R8G8_USCALED  , arith , 1, 1, u8  , u8  , , , 
yx01, rgb
 PIPE_FORMAT_R8G8B8_USCALED, array , 1, 1, u8  , u8  , u8  , , 
xyz1, rgb
-PIPE_FORMAT_R8G8B8A8_USCALED  , array , 1, 1, u8  , u8  , u8  , u8  , 
xyzw, rgb
-PIPE_FORMAT_R8G8B8X8_USCALED  , array , 1, 1, u8  , u8  , u8  , u8  , 
xyz1, rgb
-PIPE_FORMAT_R8_SNORM  , array , 1, 1, sn8 , , , , 
x001, rgb
-PIPE_FORMAT_R8G8_SNORM, array , 1, 1, sn8 , sn8 , , , 
xy01, rgb
+PIPE_FORMAT_R8G8B8A8_USCALED  , arith , 1, 1, u8  , u8  , u8  , u8  , 
wzyx, rgb
+PIPE_FORMAT_R8G8B8X8_USCALED  , arith , 1, 1, u8  , u8  , u8  , u8  , 
wzy1, rgb
+PIPE_FORMAT_R8_SNORM  , arith , 1, 1, sn8 , , , , 
x001, rgb
+PIPE_FORMAT

Re: [Mesa3d-dev] Mystery of u_format.csv

2010-01-05 Thread michal

michal wrote on 2009-12-22 10:00:

Marek Olšák wrote on 2009-12-22 08:40:
  

Hi,

I noticed that gallium/auxiliary/util/u_format.csv contains some weird 
swizzling, for example see this:


$ grep zyxw u_format.csv
PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
un8 , zyxw, rgb
PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 , 
un1 , zyxw, rgb
PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 , 
un4 , zyxw, rgb
PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 , 
sn8 , zyxw, rgb
PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , u8 
 , zyxw, srgb


It's hard to believe that ARGB, ABGR, and BGRA have the same 
swizzling. Let's continue our journey:


$ grep A8R8G8B8 u_format.csv
PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
un8 , zyxw, rgb
PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
u8  , wxyz, srgb


Same formats, different swizzling? Also:

$ grep B8G8R8A8 u_format.csv
PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
un8 , yzwx, rgb
PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
u8  , zyxw, srgb


Same formats, different swizzling? I don't really get it. And there's 
much more cases like these. Could someone tell me what the intended 
order of channels should be? (or possibly propose a fix) The meaning 
of the whole table is self-contradictory and it's definitely the 
source of some r300g bugs.




Marek,

Yes, that seems like a defect. The format swizzle field tells us how to 
"swizzle" the incoming pixel so that its components are ordered in some 
predefined order. For RGB and SRGB colorspaces the order is R, G, B and 
A. For depth-stencil, ie. ZS color space the order is Z and then S.


I will have a look at this.
  

Marek, Jose,

Can you review the attached patch?
>From f2b47d3429f0484d09820ebeffd86409dd98b92d Mon Sep 17 00:00:00 2001
From: Michal Krol 
Date: Wed, 6 Jan 2010 07:55:29 +0100
Subject: [PATCH] util: Fix format descriptor table entries.

For double-word-sized srgb/rgb formats, make them have an arith layout
and their swizzle read from right to left.

Not sure about dxt layout, though.
---
 src/gallium/auxiliary/util/u_format.csv |   62 +++---
 1 files changed, 31 insertions(+), 31 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_format.csv 
b/src/gallium/auxiliary/util/u_format.csv
index 866b18f..2890f7f 100644
--- a/src/gallium/auxiliary/util/u_format.csv
+++ b/src/gallium/auxiliary/util/u_format.csv
@@ -61,43 +61,43 @@ PIPE_FORMAT_R16_SSCALED   , array , 1, 1, s16 , 
, , , x001,
 PIPE_FORMAT_R16G16_SSCALED, array , 1, 1, s16 , s16 , , , 
xy01, rgb
 PIPE_FORMAT_R16G16B16_SSCALED , array , 1, 1, s16 , s16 , s16 , , 
xyz1, rgb
 PIPE_FORMAT_R16G16B16A16_SSCALED  , array , 1, 1, s16 , s16 , s16 , s16 , 
xyzw, rgb
-PIPE_FORMAT_R8_UNORM  , array , 1, 1, un8 , , , , 
x001, rgb
-PIPE_FORMAT_R8G8_UNORM, array , 1, 1, un8 , un8 , , , 
xy01, rgb
-PIPE_FORMAT_R8G8B8_UNORM  , array , 1, 1, un8 , un8 , un8 , , 
xyz1, rgb
-PIPE_FORMAT_R8G8B8A8_UNORM, array , 1, 1, un8 , un8 , un8 , un8 , 
xyzw, rgb
-PIPE_FORMAT_R8G8B8X8_UNORM, array , 1, 1, un8 , un8 , un8 , un8 , 
xyz1, rgb
-PIPE_FORMAT_R8_USCALED, array , 1, 1, u8  , , , , 
x001, rgb
-PIPE_FORMAT_R8G8_USCALED  , array , 1, 1, u8  , u8  , , , 
xy01, rgb
-PIPE_FORMAT_R8G8B8_USCALED, array , 1, 1, u8  , u8  , u8  , , 
xyz1, rgb
-PIPE_FORMAT_R8G8B8A8_USCALED  , array , 1, 1, u8  , u8  , u8  , u8  , 
xyzw, rgb
-PIPE_FORMAT_R8G8B8X8_USCALED  , array , 1, 1, u8  , u8  , u8  , u8  , 
xyz1, rgb
-PIPE_FORMAT_R8_SNORM  , array , 1, 1, sn8 , , , , 
x001, rgb
-PIPE_FORMAT_R8G8_SNORM, array , 1, 1, sn8 , sn8 , , , 
xy01, rgb
-PIPE_FORMAT_R8G8B8_SNORM  , array , 1, 1, sn8 , sn8 , sn8 , , 
xyz1, rgb
-PIPE_FORMAT_R8G8B8A8_SNORM, array , 1, 1, sn8 , sn8 , sn8 , sn8 , 
xyzw, rgb
-PIPE_FORMAT_R8G8B8X8_SNORM, array , 1, 1, sn8 , sn8 , sn8 , sn8 , 
xyz1, rgb
-PIPE_FORMAT_B6G5R5_SNORM  , arith , 1, 1, sn5 , sn5 , sn6 , , 
zyx1, rgb
-PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 , sn8 , 
zyxw, rgb
-PIPE_FORMAT_X8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 , sn8 , 
zyx1, rgb
-PIPE_FORMAT_R8_SSCALED, array , 1, 1, s8  , , , , 
x001, rgb
-PIPE_FORMAT_R8G8_SSCALED  , array , 1, 1, s8  , s8  , , , 
xy01, rgb
-PIPE_FORMAT_R8G8B8_SSCALED, array , 1, 1, s8  , s8  , s8  , , 
xyz1, rgb
-PIPE_FORMAT_R8G8B8A8_SSCALED  , array , 1, 1, s8  , s8  , s8  , s8  , 
xyzw, rgb
-PIPE_FORMAT_R8G8B8X8_SSCALED  , array , 1, 1, s8  , s8  , s8  , s8  , 
xyz1, rgb
+PIPE_FORMAT_R8_UNORM  , arith , 1, 1, un8 , , , , 
x001, rgb
+

Re: [Mesa3d-dev] Mystery of u_format.csv

2009-12-22 Thread José Fonseca
The data in u_format.csv was migrated from p_format which was full of
inconsistencies. I've fixed some of these but there are others which I
haven't. Read the "pipe_format lookup table" thread of mesa3d-dev if you
want to know the background.

I'll add more documentation to u_format.h. The gist is source channels
come in a vector ordered from least significant bit -> highest
significant bit. 

Jose

On Mon, 2009-12-21 at 23:40 -0800, Marek Olšák wrote:
> Hi,
> 
> I noticed that gallium/auxiliary/util/u_format.csv contains some weird
> swizzling, for example see this:
> 
> $ grep zyxw u_format.csv
> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 ,
> un8 , zyxw, rgb
> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 ,
> un1 , zyxw, rgb
> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 ,
> un4 , zyxw, rgb
> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 ,
> sn8 , zyxw, rgb
> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  ,
> u8  , zyxw, srgb
> 
> It's hard to believe that ARGB, ABGR, and BGRA have the same
> swizzling. Let's continue our journey:
> 
> $ grep A8R8G8B8 u_format.csv
> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 ,
> un8 , zyxw, rgb
> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  ,
> u8  , wxyz, srgb
> 
> Same formats, different swizzling? Also:
> 
> $ grep B8G8R8A8 u_format.csv
> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 ,
> un8 , yzwx, rgb
> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  ,
> u8  , zyxw, srgb
> 
> Same formats, different swizzling? I don't really get it. And there's
> much more cases like these. Could someone tell me what the intended
> order of channels should be? (or possibly propose a fix) The meaning
> of the whole table is self-contradictory and it's definitely the
> source of some r300g bugs.
> 
> Marek



--
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
___
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev


Re: [Mesa3d-dev] Mystery of u_format.csv

2009-12-22 Thread michal
Marek Olšák wrote on 2009-12-22 08:40:
> Hi,
>
> I noticed that gallium/auxiliary/util/u_format.csv contains some weird 
> swizzling, for example see this:
>
> $ grep zyxw u_format.csv
> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> un8 , zyxw, rgb
> PIPE_FORMAT_A1R5G5B5_UNORM, arith , 1, 1, un5 , un5 , un5 , 
> un1 , zyxw, rgb
> PIPE_FORMAT_A4R4G4B4_UNORM, arith , 1, 1, un4 , un4 , un4 , 
> un4 , zyxw, rgb
> PIPE_FORMAT_A8B8G8R8_SNORM, arith , 1, 1, sn8 , sn8 , sn8 , 
> sn8 , zyxw, rgb
> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , u8 
>  , zyxw, srgb
>
> It's hard to believe that ARGB, ABGR, and BGRA have the same 
> swizzling. Let's continue our journey:
>
> $ grep A8R8G8B8 u_format.csv
> PIPE_FORMAT_A8R8G8B8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> un8 , zyxw, rgb
> PIPE_FORMAT_A8R8G8B8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> u8  , wxyz, srgb
>
> Same formats, different swizzling? Also:
>
> $ grep B8G8R8A8 u_format.csv
> PIPE_FORMAT_B8G8R8A8_UNORM, arith , 1, 1, un8 , un8 , un8 , 
> un8 , yzwx, rgb
> PIPE_FORMAT_B8G8R8A8_SRGB , arith , 1, 1, u8  , u8  , u8  , 
> u8  , zyxw, srgb
>
> Same formats, different swizzling? I don't really get it. And there's 
> much more cases like these. Could someone tell me what the intended 
> order of channels should be? (or possibly propose a fix) The meaning 
> of the whole table is self-contradictory and it's definitely the 
> source of some r300g bugs.
>
Marek,

Yes, that seems like a defect. The format swizzle field tells us how to 
"swizzle" the incoming pixel so that its components are ordered in some 
predefined order. For RGB and SRGB colorspaces the order is R, G, B and 
A. For depth-stencil, ie. ZS color space the order is Z and then S.

I will have a look at this.

Thanks.

--
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
___
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev