diff options
-rw-r--r-- | pixman/pixman.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/pixman/pixman.c b/pixman/pixman.c index 435340b8..393cdb9b 100644 --- a/pixman/pixman.c +++ b/pixman/pixman.c @@ -30,7 +30,16 @@ #include <stdlib.h> -static pixman_implementation_t *imp; +static force_inline pixman_implementation_t * +get_implementation (void) +{ + static pixman_implementation_t *imp; + + if (!imp) + imp = _pixman_choose_implementation(); + + return imp; +} typedef struct operator_info_t operator_info_t; @@ -820,10 +829,7 @@ pixman_image_composite32 (pixman_op_t op, _pixman_image_validate (mask); _pixman_image_validate (dest); - if (!imp) - imp = _pixman_choose_implementation (); - - do_composite (imp, op, + do_composite (get_implementation(), op, src, mask, dest, src_x, src_y, mask_x, mask_y, @@ -845,10 +851,8 @@ pixman_blt (uint32_t *src_bits, int width, int height) { - if (!imp) - imp = _pixman_choose_implementation (); - - return _pixman_implementation_blt (imp, src_bits, dst_bits, src_stride, dst_stride, + return _pixman_implementation_blt (get_implementation(), + src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp, src_x, src_y, dst_x, dst_y, @@ -865,10 +869,8 @@ pixman_fill (uint32_t *bits, int height, uint32_t xor) { - if (!imp) - imp = _pixman_choose_implementation (); - - return _pixman_implementation_fill (imp, bits, stride, bpp, x, y, width, height, xor); + return _pixman_implementation_fill (get_implementation(), + bits, stride, bpp, x, y, width, height, xor); } static uint32_t |