[webkit-dev] RGBA8 and BGRA8 formats in WebKit

Balazs Kelemen kbalazs at webkit.org
Wed Jan 23 05:12:54 PST 2013

On 01/23/2013 01:43 AM, Allan Sandfeld Jensen wrote:
> On Wednesday 23 January 2013, Balazs Kelemen wrote:
>> On 01/22/2013 05:14 PM, Zoltan Herczeg wrote:
>>>>> Where in WebKit do you experience problems with color conversion?
>>> As for me WebKit2 transmits BGRA images, which needs to be converted to
>>> RGBA before it is uploaded to a texture on GLES 2.0. These conversions
>>> seems computation heavy for certain animations, and I was wondered
>>> whether do we really need to use BGRA here. It would be nice to invent
>>> something to avoid that.
>> You explained the symptom but not the source of the problem. So, do you
>> know _why_ do we have BGRA before the texture upload? If this is a
>> software rendered image buffer, why can't we just use the appropriate
>> format when doing the software rendering? Anybody?
> Because it is a 32bit buffer of ARGB values. On a little endian CPU like i386,
> 32bit ARGB is stored bytewise as BGRA. In Qt we always have 32bit ARGB values
> because that is the internal color format of the Qt renderer (QRgb). In the
> grand scheme of things it is probably easier up to upload BGRA textures than
> trying to double the rendering paths of QPainter to support RGBA.
> A quick little overview of what I am talking about:
> ARGB format aka RGBA32 (32bit ordered)
> As 32bit math   8bit big endian 	8bit little endian
> 24-31bit: A 	    1.byte: A			1.byte B
> 16-23bit: R   		2.byte. R			2.byte G
>   8-15bit: G   		3.byte. G			3.byte R
>    0-7bit: B		   	4.byte. B			4.byte A
> RGBA format aka RGBA8 (byte-ordered)
> As byte format    32bit big endian 	32bit little endian
> 1.byte: R 	 	   24-31bit: R			24-31bit: A
> 2.byte: G   	   16-23bit: G			16-23bit: B
> 3.byte: B   		8-15bit: B			 8-15bit: G
> 4.byte: A		     0-7bit: A			  0-7bit: R
> Ofcourse the confusion can be avoided if RGBA8 is only accesed bytewise, and
> ARGB only 32bit wise, but when uploading to textures or otherwise serializing
> it we need to deal with the mess.

Thanks, that was useful to me. I did not know that the internal format 
is byte order agnostic.

More information about the webkit-dev mailing list