提交 a93a3af9 编写于 作者: G Gerd Hoffmann

console: add qemu_pixelformat_from_pixman

Function to convert pixman format codes to qemu PixelFormat.

[ Benjamin Herrenschmidt: fix BGRA+RGBA shifts ]
Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
上级 fd884c07
......@@ -33,6 +33,7 @@
/* -------------------------------------------------------------------- */
PixelFormat qemu_pixelformat_from_pixman(pixman_format_code_t format);
int qemu_pixman_get_type(int rshift, int gshift, int bshift);
pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf);
......
......@@ -6,6 +6,62 @@
#include "qemu-common.h"
#include "ui/console.h"
PixelFormat qemu_pixelformat_from_pixman(pixman_format_code_t format)
{
PixelFormat pf;
uint8_t bpp;
bpp = pf.bits_per_pixel = PIXMAN_FORMAT_BPP(format);
pf.bytes_per_pixel = PIXMAN_FORMAT_BPP(format) / 8;
pf.depth = PIXMAN_FORMAT_DEPTH(format);
pf.abits = PIXMAN_FORMAT_A(format);
pf.rbits = PIXMAN_FORMAT_R(format);
pf.gbits = PIXMAN_FORMAT_G(format);
pf.bbits = PIXMAN_FORMAT_B(format);
switch (PIXMAN_FORMAT_TYPE(format)) {
case PIXMAN_TYPE_ARGB:
pf.ashift = pf.bbits + pf.gbits + pf.rbits;
pf.rshift = pf.bbits + pf.gbits;
pf.gshift = pf.bbits;
pf.bshift = 0;
break;
case PIXMAN_TYPE_ABGR:
pf.ashift = pf.rbits + pf.gbits + pf.bbits;
pf.bshift = pf.rbits + pf.gbits;
pf.gshift = pf.rbits;
pf.rshift = 0;
break;
case PIXMAN_TYPE_BGRA:
pf.bshift = bpp - pf.bbits;
pf.gshift = bpp - (pf.bbits + pf.gbits);
pf.rshift = bpp - (pf.bbits + pf.gbits + pf.rbits);
pf.ashift = 0;
break;
case PIXMAN_TYPE_RGBA:
pf.rshift = bpp - pf.rbits;
pf.gshift = bpp - (pf.rbits + pf.gbits);
pf.bshift = bpp - (pf.rbits + pf.gbits + pf.bbits);
pf.ashift = 0;
break;
default:
g_assert_not_reached();
break;
}
pf.amax = (1 << pf.abits) - 1;
pf.rmax = (1 << pf.rbits) - 1;
pf.gmax = (1 << pf.gbits) - 1;
pf.bmax = (1 << pf.bbits) - 1;
pf.amask = pf.amax << pf.ashift;
pf.rmask = pf.rmax << pf.rshift;
pf.gmask = pf.gmax << pf.gshift;
pf.bmask = pf.bmax << pf.bshift;
return pf;
}
int qemu_pixman_get_type(int rshift, int gshift, int bshift)
{
int type = PIXMAN_TYPE_OTHER;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册