Xfbdev color problems due to endianess

Leon Ljunggren leon.ljunggren at gmail.com
Wed Sep 10 06:05:48 PDT 2008


Hi,
I have compiled and got kdrive (Xfbdev), using the latest stable
source from git, running on my ARM based system but I'm experiencing
problems with colours., they are "inverted". This is casued by the
fact that my machine is big endian while the gfx module is little
endian. This means that:

BBBBBGGGGGGRRRRR

becomes

GGGRRRRRBBBBBGGG

In fbdev.c there's a color masking feature (in
fbdevScreenInitialize(...), line 264-266), that I thought I could
modify to fix the problem:

screen->fb[0].redMask = Mask (3, 5);
screen->fb[0].greenMask = Mask (0, 3) | Mask (13, 3);
screen->fb[0].blueMask = Mask (8, 5);

However, when I run with these changes the server quits with a
segmentation fault error. It would seem that it doesn't like having
the green section split up in two part. I can swap the masks around as
I wish as long as I don't try to split the bits for any one mask.

Anyone that has any idea on what I can do to fix this? I guess I could
swap the byte order of each pixel as they are written to the
framebuffer, but I haven't been able to find where this writing is
done in the server.

Thanks
Leon Ljunggren



More information about the xorg mailing list