On Thu, Jan 31, 2013 at 9:34 AM, Michel Dänzer <mic...@daenzer.net> wrote:
> On Don, 2013-01-31 at 02:14 -0800, Jose Fonseca wrote:
>> ----- Original Message -----
>> > On Mit, 2013-01-30 at 08:35 -0800, Jose Fonseca wrote:
>> > >
>> > > ----- Original Message -----
>> > > > For another example (which I suspect is more relevant for this
>> > > > thread),
>> > > > wouldn't it be nice if the software rendering drivers could
>> > > > directly
>> > > > represent the window system renderbuffer format as a Gallium
>> > > > format
>> > > > in
>> > > > all cases?
>> > >
>> > > I'm missing your point, could you give an example of where that's
>> > > currently not possible?
>> >
>> > E.g. an XImage of depth 16, where the pixels are generally packed in
>> > big
>> > endian if the X server runs on a big endian machine. It's impossible
>> > to
>> > represent that with PIPE_FORMAT_*5*6*5_UNORM packed in little endian.
>>
>> I see.
>>
>> Is this something that could be worked around?
>
> Basically anything can be worked around somehow, right? :)
>
> But in this example, it seems like it would require some kind of
> sideband information to specify that PIPE_FORMAT_*5*6*5_UNORM actually
> has the reversed byte order now, and some layer of the stack to use that
> and swap the bytes accordingly. So, extra copies and an extra
> information channel (and possibly a layering violation).
>
>
>> > > > I can't help feeling it would be better to treat endianness
>> > > > explicitly
>> > > > rather than implicitly in the format description, so drivers and
>> > > > state
>> > > > trackers could choose to use little/big/native/foreign endian
>> > > > formats
>> > > > as
>> > > > appropriate for the hardware and APIs they're dealing with.
>> > >
>> > > What you mean by explicitly vs implicitly? Do you mean r5g6b5_be,
>> > > r5g6b5_le, r32g32b32a32_unorm_le, r32g32b32a32_unorm_be, etc?
>> >
>> > Yeah, something like that, with the byte order only applying within
>> > each
>> > component for array formats.
>>
>> I don't oppose that. But it does seem a lot of work.
>
> I'm afraid so.
>
>> How would hardware drivers handle this? Specially those that have a
>> single LE/BE bit to choose?
>
> I guess drivers would advertise the formats they can and want to support
> given the hardware capabilities and target platforms. For drivers which
> only have to worry about little endian environments, basically nothing
> should change except for the format names and maybe other similar
> details.
>
>
>> (BTW, I do believe we should unify Mesa format handling and Gallium's
>> u_format module into a shared external helper library for formats
>> before we venture into that though as the effort of doing that would
>> pretty much double.
>
> That might be a good idea. The Mesa format code seems to have grown some
> warts of its own anyway.
>
>
>> I think it is also worth considering the other extreme: all formats
>> are expected to be LE on LE platforms, BE on BE platforms.
>
> Right. I think that might be preferable over LE always, if we decide not
> to support both LE/BE explicitly.
>
>> Is this feasible, or are there APIs that need (i.e, require) to handle
>> both LE/BE formats?
>
> Not sure, but my impression has been that APIs tend to prefer the CPU
> native byte order. Anything else makes little sense from an application
> POV. Still, I wouldn't be surprised if there were exceptions, e.g. with
> image/video APIs related to fixed file formats.
>
>> (Or hardware only capable of LE formats?)
>
> Unfortunately, our Southern Islands GPUs no longer have facilities for
> byte-swapping vertex / texture data on the fly.

The DMA engine still supports endian swaps so if we used that for
uploads like r600g now does, we could use the facilities there.

Alex
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to