Ilia Mirkin wrote: > > > #define DRM_FORMAT_XRGB8888 fourcc_code('X', 'R', '2', '4') /* [31:0] > > > x:R:G:B 8:8:8:8 little endian */ > > > > Okay, "[31:0] x:R:G:B 8:8:8:8" can certainly mean > > [31:24]=x [23:16]=R [15:8]=G [7:0]=B, which when stored "little endian" > > becomes B G R X in memory, for which your pix32 code is correct. > > > > That's the reverse *memory* layout of what the name says :) > > The definition of the formats is memory layout in little endian. To clarify, my new (hopefully correct?) understanding is this: XRGB8888 does *not* mean that address 0=X, 1=R, 2=G, 3=B, but that the most significant byte in a packed XRGB8888 32-bit integer is X and the least significant byte is B, and that this is the case both on LE and BE machines. I previously thought that XRGB8888 indicated the memory byte order of components being X R G B regardless of machine endianess, but now understand XRGB to mean the MSB..LSB order of component bytes within the 32-bit integer, as seen by software, not the order of bytes in memory. > The definition you see is of a 32-bit packed little-endian integer, > which is a fixed memory layout. In the header definition I'm not completely sure what the "little endian" means - I guess it refers to how the 32-bit integer will be stored in memory, but it could also refer to the order of component packing within. Noralf's code and testing and also what fbset tells me seems to support this understanding, at least on LE machines. > Now, if you're on an actual big-endian platform, and you want to > accept big-endian-packed formats, there's a bit of unpleasantness that > goes on. In the particular case of XRGB8888 that Noralf has implemented and I've tested every pixel is translated "manually" anyway; each component byte is downconverted to a single bit, but this use case is mostly for smaller resolutions, so no too big deal. > I'm not sure why you guys were talking about BE in the first place, I was worried that the translation didn't consider endianess. Noralf, looking at the 3/3 patch again now, drm_fb_swab() gets called on BE when format == fb->format, but does it also need to be called on BE they are different, or will circumstances be such that it's never neccessary then? Thanks and sorry if I'm confusing things needlessly //Peter