Michał Król wrote:
> José Fonseca pisze:
>> I found one other problem in the way we use 4 x 8bit color formats:
>> sometimes we interpret them as arithmetically coded in an unsigned (e.g
>> src/gallium/auxiliary/util/u_tile.c when reading/writing
>> color/depth/stencil buffers), sometimes we interpret them (e.g.
>> src/gallium/auxiliary/translate/translate_generic.c when reading/writing
>> vertex buffers). And these actually mean different things on
>> little-endian architectures. 
>>
>>   
> Some text is missing from the first sentence. I am guessing that 
> sometimes we interpret them as an array of bytes, right?
> 
>> I think the only viable option is to distinguish between these two kinds
>> in the cases where it is ambiguous, like
>>
>>   PIPE_FORMAT_R8G8B8A8_UNORM  /* a | ( b << 8) | (g << 8) | (r << 24) */
>>   PIPE_FORMAT_RGBA8_UNORM /*  {r, g, b, a} */
>>
>> Since there are legitimate uses in for both (color buffers, and vertex
>> buffers).
>>
>> Anybody has better ideas?
>>   
> 
> We should go with and stick to a single convention. I don't know, maybe 
> for example this:
> 
> A16R16G16B16
> 
> The format description above would indicate that we are dealing with a 
> 64-bit entity with bits being numbered from right to left. That would 
> mean the B component occupies first 16 bits (bytes 0:1), the G component 
> next 16 bits (bytes 2:3) and so on. Because there is no implied dword 
> and encoding using shifts, we could easily write some code that decodes 
> the format in a portable way across LE and BE architectures.

When I've worked on this stuff in the past, the convention I was 
following was:

IF total pixels size <= 32 bits THEN
    Treat the pixel as a uint, ushort or ubyte where the components
    are listed in MSB to LSB order.  Individual components are
    accessed with bit shifts and masks.
ELSE
    Components are listed in "array" order and accessed as an array.

It would be consistant to use the array style everywhere but that 
doesn't really work for a format like RGB565 or Z24S8.

Note that this issue is similar to OpenGL's "regular" pixel types such 
as GL_UNSIGNED_BYTE and GL_UNSIGNED_SHORT vs. the "packed" pixel types 
such as GL_UNSIGNED_INT_8_8_8_8 and GL_UNSIGNED_SHORT_5_6_5.

-Brian

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to