Signed-off-by: Adam Jackson
---
exa/exa_render.c| 4 +++-
fb/fbpict.c | 16 +++-
glamor/glamor_program.c | 7 ---
glamor/glamor_render.c | 14 --
glamor/glamor_utils.h | 9 +
render/picture.c| 10 +-
render/picturestr.h | 2 +-
7 files changed, 25 insertions(+), 37 deletions(-)
diff --git a/exa/exa_render.c b/exa/exa_render.c
index b24bec052..2dad795f2 100644
--- a/exa/exa_render.c
+++ b/exa/exa_render.c
@@ -291,7 +291,9 @@ exaTryDriverSolidFill(PicturePtr pSrc,
pixel = exaGetPixmapFirstPixel(pSrcPix);
}
else
-pixel = pSrc->pSourcePict->solidFill.color;
+miRenderColorToPixel(pSrc->pFormat,
+ >pSourcePict->solidFill.color,
+ );
if (!exaGetRGBAFromPixel(pixel, , , , ,
pSrc->pFormat, pSrc->format) ||
diff --git a/fb/fbpict.c b/fb/fbpict.c
index 7ea0b668f..759f0d5db 100644
--- a/fb/fbpict.c
+++ b/fb/fbpict.c
@@ -220,20 +220,10 @@ static pixman_image_t *
create_solid_fill_image(PicturePtr pict)
{
PictSolidFill *solid = >pSourcePict->solidFill;
-pixman_color_t color;
-CARD32 a, r, g, b;
+/* pixman_color_t and xRenderColor have the same layout */
+pixman_color_t *color = (pixman_color_t *)>color;
-a = (solid->color & 0xff00) >> 24;
-r = (solid->color & 0x00ff) >> 16;
-g = (solid->color & 0xff00) >> 8;
-b = (solid->color & 0x00ff) >> 0;
-
-color.alpha = (a << 8) | a;
-color.red = (r << 8) | r;
-color.green = (g << 8) | g;
-color.blue = (b << 8) | b;
-
-return pixman_image_create_solid_fill();
+return pixman_image_create_solid_fill(color);
}
static pixman_image_t *
diff --git a/glamor/glamor_program.c b/glamor/glamor_program.c
index 23c102bc3..29ffed05c 100644
--- a/glamor/glamor_program.c
+++ b/glamor/glamor_program.c
@@ -508,12 +508,13 @@ glamor_set_blend(CARD8 op, glamor_program_alpha alpha,
PicturePtr dst)
static Bool
use_source_solid(CARD8 op, PicturePtr src, PicturePtr dst, glamor_program
*prog)
{
+PictSolidFill *solid = >pSourcePict->solidFill;
+float color[4];
+glamor_get_rgba_from_color(>color, color);
glamor_set_blend(op, prog->alpha, dst);
+glUniform4fv(prog->fg_uniform, 1, color);
-glamor_set_color_depth(dst->pDrawable->pScreen, 32,
- src->pSourcePict->solidFill.color,
- prog->fg_uniform);
return TRUE;
}
diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c
index 7a96c82dd..75f4258d8 100644
--- a/glamor/glamor_render.c
+++ b/glamor/glamor_render.c
@@ -830,11 +830,8 @@ glamor_composite_choose_shader(CARD8 op,
else if (!source->pDrawable) {
if (source->pSourcePict->type == SourcePictTypeSolidFill) {
key.source = SHADER_SOURCE_SOLID;
-glamor_get_rgba_from_pixel(source->pSourcePict->solidFill.color,
- _solid_color[0],
- _solid_color[1],
- _solid_color[2],
- _solid_color[3], PICT_a8r8g8b8);
+glamor_get_rgba_from_color(>pSourcePict->solidFill.color,
+ source_solid_color);
}
else
goto fail;
@@ -850,11 +847,8 @@ glamor_composite_choose_shader(CARD8 op,
if (!mask->pDrawable) {
if (mask->pSourcePict->type == SourcePictTypeSolidFill) {
key.mask = SHADER_MASK_SOLID;
-glamor_get_rgba_from_pixel
-(mask->pSourcePict->solidFill.color,
- _solid_color[0],
- _solid_color[1],
- _solid_color[2], _solid_color[3],
PICT_a8r8g8b8);
+glamor_get_rgba_from_color(>pSourcePict->solidFill.color,
+ mask_solid_color);
}
else
goto fail;
diff --git a/glamor/glamor_utils.h b/glamor/glamor_utils.h
index 7597b92dc..d4f995ab9 100644
--- a/glamor/glamor_utils.h
+++ b/glamor/glamor_utils.h
@@ -710,6 +710,15 @@ glamor_get_rgba_from_pixel(CARD32 pixel,
return TRUE;
}
+static inline void
+glamor_get_rgba_from_color(const xRenderColor *color, float rgba[4])
+{
+rgba[0] = color->red / (float)UINT16_MAX;
+rgba[1] = color->green / (float)UINT16_MAX;
+rgba[2] = color->blue / (float)UINT16_MAX;
+rgba[3] = color->alpha / (float)UINT16_MAX;
+}
+
inline static Bool
glamor_is_large_pixmap(PixmapPtr pixmap)
{
diff --git a/render/picture.c b/render/picture.c
index 9e4036e7d..9907e15d6 100644
--- a/render/picture.c
+++ b/render/picture.c
@@ -817,14 +817,6 @@ CreatePicture(Picture pid,
return pPicture;
}
-static CARD32
-xRenderColorToCard32(xRenderColor c)
-{
-return
-(c.alpha >> 8 << 24) |
-