[PATCH] Implementation properly fixed.
Jonathan Morton
jmorton at sd070.hel.movial.fi
Fri May 29 04:13:20 PDT 2009
---
pixman/pixman-arm-neon.c | 274 +++++++++++++++++++++++++++++++++++-----------
pixman/pixman-arm-neon.h | 166 +++++++++++++++++-----------
pixman/pixman-arm-simd.c | 124 +++++++++++++++------
pixman/pixman-arm-simd.h | 82 ++++++++------
pixman/pixman-cpu.c | 10 ++
pixman/pixman-general.c | 21 ----
pixman/pixman-private.h | 8 ++
7 files changed, 466 insertions(+), 219 deletions(-)
diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
index 7be4843..5453dbb 100644
--- a/pixman/pixman-arm-neon.c
+++ b/pixman/pixman-arm-neon.c
@@ -118,18 +118,20 @@ static force_inline uint8x8x4_t neon8qadd(uint8x8x4_t x, uint8x8x4_t y)
void
-fbCompositeSrcAdd_8000x8000neon (pixman_op_t op,
+fbCompositeSrcAdd_8000x8000neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height)
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height)
{
uint8_t *dstLine, *dst;
uint8_t *srcLine, *src;
@@ -263,18 +265,20 @@ fbCompositeSrcAdd_8000x8000neon (pixman_op_t op,
void
-fbCompositeSrc_8888x8888neon (pixman_op_t op,
+fbCompositeSrc_8888x8888neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height)
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height)
{
uint32_t *dstLine, *dst;
uint32_t *srcLine, *src;
@@ -424,18 +428,20 @@ fbCompositeSrc_8888x8888neon (pixman_op_t op,
void
-fbCompositeSrc_x888x0565neon (pixman_op_t op,
+fbCompositeSrc_x888x0565neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height)
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height)
{
uint16_t *dstLine, *dst;
uint32_t *srcLine, *src;
@@ -529,18 +535,20 @@ fbCompositeSrc_x888x0565neon (pixman_op_t op,
void
-fbCompositeSrc_8888x8x8888neon (pixman_op_t op,
+fbCompositeSrc_8888x8x8888neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height)
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height)
{
uint32_t *dstLine, *dst;
uint32_t *srcLine, *src;
@@ -725,18 +733,20 @@ fbCompositeSrc_8888x8x8888neon (pixman_op_t op,
void
-fbCompositeSolidMask_nx8x0565neon (pixman_op_t op,
+fbCompositeSolidMask_nx8x0565neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height)
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height)
{
uint32_t src, srca;
uint16_t *dstLine, *dst;
@@ -1057,19 +1067,22 @@ fbCompositeSolidMask_nx8x0565neon (pixman_op_t op,
}
+
void
-fbCompositeSolidMask_nx8x8888neon (pixman_op_t op,
+fbCompositeSolidMask_nx8x8888neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height)
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height)
{
uint32_t src, srca;
uint32_t *dstLine, *dst;
@@ -1262,18 +1275,20 @@ fbCompositeSolidMask_nx8x8888neon (pixman_op_t op,
void
-fbCompositeSrcAdd_8888x8x8neon (pixman_op_t op,
+fbCompositeSrcAdd_8888x8x8neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height)
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height)
{
uint8_t *dstLine, *dst;
uint8_t *maskLine, *mask;
@@ -1400,3 +1415,136 @@ static const FastPathInfo arm_neon_fast_path_array[] =
};
const FastPathInfo *const arm_neon_fast_paths = arm_neon_fast_path_array;
+
+static void
+arm_neon_composite (pixman_implementation_t *imp,
+ pixman_op_t op,
+ pixman_image_t *src,
+ pixman_image_t *mask,
+ pixman_image_t *dest,
+ int32_t src_x,
+ int32_t src_y,
+ int32_t mask_x,
+ int32_t mask_y,
+ int32_t dest_x,
+ int32_t dest_y,
+ int32_t width,
+ int32_t height)
+{
+ if (_pixman_run_fast_path (arm_neon_fast_paths, imp,
+ op, src, mask, dest,
+ src_x, src_y,
+ mask_x, mask_y,
+ dest_x, dest_y,
+ width, height))
+ {
+ return;
+ }
+
+ _pixman_implementation_composite (imp->delegate, op,
+ src, mask, dest,
+ src_x, src_y,
+ mask_x, mask_y,
+ dest_x, dest_y,
+ width, height);
+}
+
+pixman_bool_t
+pixman_blt_neon (
+ void *src_bits,
+ void *dst_bits,
+ int src_stride,
+ int dst_stride,
+ int src_bpp,
+ int dst_bpp,
+ int src_x, int src_y,
+ int dst_x, int dst_y,
+ int width, int height)
+{
+
+#if 0 // Relies on code which isn't upstreamed yet
+
+ // accelerate only straight copies
+ if(src_bpp != dst_bpp || (src_bpp & 7) || !width || !height)
+ return FALSE;
+
+ {
+ uint32_t bytes_per_pixel = src_bpp >> 3;
+ uint32_t byte_width = width * bytes_per_pixel;
+ int32_t src_stride_bytes = src_stride * 4; // parameter is in words for some reason
+ int32_t dst_stride_bytes = dst_stride * 4;
+ uint8_t *src_bytes = ((uint8_t*) src_bits) + src_y * src_stride_bytes + src_x * bytes_per_pixel;
+ uint8_t *dst_bytes = ((uint8_t*) dst_bits) + dst_y * dst_stride_bytes + dst_x * bytes_per_pixel;
+ uint32_t quadword_count = byte_width / 16;
+ uint32_t offset = byte_width % 16;
+
+ while(height--) {
+ QuadwordCopy_neon(dst_bytes, src_bytes, quadword_count, offset);
+ src_bytes += src_stride_bytes;
+ dst_bytes += dst_stride_bytes;
+ }
+ }
+
+ return TRUE;
+
+#else /* USE_GCC_INLINE_ASM */
+
+ // TODO: intrinsic version for armcc
+ return FALSE;
+
+#endif
+}
+
+static pixman_bool_t
+arm_neon_blt (pixman_implementation_t *imp,
+ uint32_t *src_bits,
+ uint32_t *dst_bits,
+ int src_stride,
+ int dst_stride,
+ int src_bpp,
+ int dst_bpp,
+ int src_x, int src_y,
+ int dst_x, int dst_y,
+ int width, int height)
+{
+ if (pixman_blt_neon (
+ src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+ src_x, src_y, dst_x, dst_y, width, height))
+ return TRUE;
+
+ return _pixman_implementation_blt (
+ imp->delegate,
+ src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+ src_x, src_y, dst_x, dst_y, width, height);
+}
+
+static pixman_bool_t
+arm_neon_fill (pixman_implementation_t *imp,
+ uint32_t *bits,
+ int stride,
+ int bpp,
+ int x,
+ int y,
+ int width,
+ int height,
+ uint32_t xor)
+{
+ if (pixman_fill_neon (bits, stride, bpp, x, y, width, height, xor))
+ return TRUE;
+
+ return _pixman_implementation_fill (
+ imp->delegate, bits, stride, bpp, x, y, width, height, xor);
+}
+
+pixman_implementation_t *
+_pixman_implementation_create_arm_neon (pixman_implementation_t *toplevel)
+{
+ pixman_implementation_t *simd = _pixman_implementation_create_arm_simd (NULL);
+ pixman_implementation_t *imp = _pixman_implementation_create (toplevel, simd);
+
+ imp->composite = arm_neon_composite;
+// imp->blt = arm_neon_blt;
+// imp->fill = arm_neon_fill; -- Relies on code which is not upstreamed yet
+
+ return imp;
+}
diff --git a/pixman/pixman-arm-neon.h b/pixman/pixman-arm-neon.h
index 9fee6c2..2442ea6 100644
--- a/pixman/pixman-arm-neon.h
+++ b/pixman/pixman-arm-neon.h
@@ -39,101 +39,141 @@ pixman_bool_t pixman_have_arm_neon(void);
extern const FastPathInfo *const arm_neon_fast_paths;
void
-fbCompositeSrcAdd_8000x8000neon (pixman_op_t op,
+fbCompositeSrcAdd_8000x8000neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height);
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height);
void
-fbCompositeSrc_8888x8888neon (pixman_op_t op,
+fbCompositeSrc_8888x8888neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height);
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height);
void
-fbCompositeSrc_8888x8x8888neon (pixman_op_t op,
+fbCompositeSrc_8888x8x8888neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height);
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height);
void
-fbCompositeSolidMask_nx8x0565neon (pixman_op_t op,
+fbCompositeSolidMask_nx8x0565neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height);
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height);
void
-fbCompositeSolidMask_nx8x8888neon (pixman_op_t op,
+fbCompositeSolidMask_nx8x8888neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height);
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height);
void
-fbCompositeSrc_x888x0565neon (pixman_op_t op,
+fbCompositeSrcAdd_8888x8x8neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height);
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height);
void
-fbCompositeSrcAdd_8888x8x8neon (pixman_op_t op,
+fbCompositeSrc_16x16neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height);
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height);
+
+void
+fbCompositeSrc_24x16neon (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
+ pixman_image_t * pSrc,
+ pixman_image_t * pMask,
+ pixman_image_t * pDst,
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height);
+
+pixman_bool_t
+pixman_fill_neon (uint32_t *bits,
+ int stride,
+ int bpp,
+ int x,
+ int y,
+ int width,
+ int height,
+ uint32_t _xor);
#endif /* USE_ARM_NEON */
diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c
index cd8c194..1204a36 100644
--- a/pixman/pixman-arm-simd.c
+++ b/pixman/pixman-arm-simd.c
@@ -30,18 +30,20 @@
#include "pixman-arm-simd.h"
void
-fbCompositeSrcAdd_8000x8000arm (pixman_op_t op,
+fbCompositeSrcAdd_8000x8000arm (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height)
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height)
{
uint8_t *dstLine, *dst;
uint8_t *srcLine, *src;
@@ -98,18 +100,20 @@ fbCompositeSrcAdd_8000x8000arm (pixman_op_t op,
}
void
-fbCompositeSrc_8888x8888arm (pixman_op_t op,
+fbCompositeSrc_8888x8888arm (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height)
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height)
{
uint32_t *dstLine, *dst;
uint32_t *srcLine, *src;
@@ -189,18 +193,20 @@ fbCompositeSrc_8888x8888arm (pixman_op_t op,
}
void
-fbCompositeSrc_8888x8x8888arm (pixman_op_t op,
+fbCompositeSrc_8888x8x8888arm (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height)
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height)
{
uint32_t *dstLine, *dst;
uint32_t *srcLine, *src;
@@ -296,18 +302,20 @@ fbCompositeSrc_8888x8x8888arm (pixman_op_t op,
}
void
-fbCompositeSolidMask_nx8x8888arm (pixman_op_t op,
+fbCompositeSolidMask_nx8x8888arm (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height)
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height)
{
uint32_t src, srca;
uint32_t *dstLine, *dst;
@@ -428,3 +436,47 @@ static const FastPathInfo arm_simd_fast_path_array[] =
};
const FastPathInfo *const arm_simd_fast_paths = arm_simd_fast_path_array;
+
+static void
+arm_simd_composite (pixman_implementation_t *imp,
+ pixman_op_t op,
+ pixman_image_t *src,
+ pixman_image_t *mask,
+ pixman_image_t *dest,
+ int32_t src_x,
+ int32_t src_y,
+ int32_t mask_x,
+ int32_t mask_y,
+ int32_t dest_x,
+ int32_t dest_y,
+ int32_t width,
+ int32_t height)
+{
+ if (_pixman_run_fast_path (arm_simd_fast_paths, imp,
+ op, src, mask, dest,
+ src_x, src_y,
+ mask_x, mask_y,
+ dest_x, dest_y,
+ width, height))
+ {
+ return;
+ }
+
+ _pixman_implementation_composite (imp->delegate, op,
+ src, mask, dest,
+ src_x, src_y,
+ mask_x, mask_y,
+ dest_x, dest_y,
+ width, height);
+}
+
+pixman_implementation_t *
+_pixman_implementation_create_arm_simd (pixman_implementation_t *toplevel)
+{
+ pixman_implementation_t *general = _pixman_implementation_create_fast_path (NULL);
+ pixman_implementation_t *imp = _pixman_implementation_create (toplevel, general);
+
+ imp->composite = arm_simd_composite;
+
+ return imp;
+}
diff --git a/pixman/pixman-arm-simd.h b/pixman/pixman-arm-simd.h
index cc7a035..8c1f883 100644
--- a/pixman/pixman-arm-simd.h
+++ b/pixman/pixman-arm-simd.h
@@ -39,58 +39,68 @@ pixman_bool_t pixman_have_arm_simd(void);
extern const FastPathInfo *const arm_simd_fast_paths;
void
-fbCompositeSrcAdd_8000x8000arm (pixman_op_t op,
+fbCompositeSrcAdd_8000x8000arm (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height);
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height);
+
void
-fbCompositeSrc_8888x8888arm (pixman_op_t op,
+fbCompositeSrc_8888x8888arm (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height);
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height);
void
-fbCompositeSrc_8888x8x8888arm (pixman_op_t op,
+fbCompositeSrc_8888x8x8888arm (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height);
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height);
+
void
-fbCompositeSolidMask_nx8x8888arm (pixman_op_t op,
+fbCompositeSolidMask_nx8x8888arm (
+ pixman_implementation_t * impl,
+ pixman_op_t op,
pixman_image_t * pSrc,
pixman_image_t * pMask,
pixman_image_t * pDst,
- int16_t xSrc,
- int16_t ySrc,
- int16_t xMask,
- int16_t yMask,
- int16_t xDst,
- int16_t yDst,
- uint16_t width,
- uint16_t height);
+ int32_t xSrc,
+ int32_t ySrc,
+ int32_t xMask,
+ int32_t yMask,
+ int32_t xDst,
+ int32_t yDst,
+ int32_t width,
+ int32_t height);
#endif /* USE_ARM */
diff --git a/pixman/pixman-cpu.c b/pixman/pixman-cpu.c
index 61a93a5..96b4d9b 100644
--- a/pixman/pixman-cpu.c
+++ b/pixman/pixman-cpu.c
@@ -515,6 +515,16 @@ _pixman_choose_implementation (void)
if (pixman_have_mmx())
return _pixman_implementation_create_mmx (NULL);
#endif
+
+#ifdef USE_ARM_NEON
+ if (pixman_have_arm_neon())
+ return _pixman_implementation_create_arm_neon (NULL);
+#endif
+#ifdef USE_ARM_SIMD
+ if (pixman_have_arm_simd())
+ return _pixman_implementation_create_arm_simd (NULL);
+#endif
+
return _pixman_implementation_create_fast_path (NULL);
}
diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
index 3b70bec..4d4759a 100644
--- a/pixman/pixman-general.c
+++ b/pixman/pixman-general.c
@@ -36,7 +36,6 @@
#include <string.h>
#include "pixman-private.h"
#include "pixman-vmx.h"
-#include "pixman-arm-simd.h"
#include "pixman-combine32.h"
#include "pixman-private.h"
@@ -303,26 +302,6 @@ general_composite (pixman_implementation_t * imp,
return;
#endif
-#ifdef USE_ARM_NEON
- if (pixman_have_arm_neon() && _pixman_run_fast_path (arm_neon_fast_paths, imp,
- op, src, mask, dest,
- src_x, src_y,
- mask_x, mask_y,
- dest_x, dest_y,
- width, height))
- return;
-#endif
-
-#ifdef USE_ARM_SIMD
- if (pixman_have_arm_simd() && _pixman_run_fast_path (arm_simd_fast_paths, imp,
- op, src, mask, dest,
- src_x, src_y,
- mask_x, mask_y,
- dest_x, dest_y,
- width, height))
- return;
-#endif
-
/* CompositeGeneral optimizes 1x1 repeating images itself */
if (src->type == BITS &&
src->bits.width == 1 && src->bits.height == 1)
diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
index 3280af7..5facfb4 100644
--- a/pixman/pixman-private.h
+++ b/pixman/pixman-private.h
@@ -1046,6 +1046,14 @@ _pixman_implementation_create_mmx (pixman_implementation_t *toplevel);
pixman_implementation_t *
_pixman_implementation_create_sse2 (pixman_implementation_t *toplevel);
#endif
+#ifdef USE_ARM_SIMD
+pixman_implementation_t *
+_pixman_implementation_create_arm_simd (pixman_implementation_t *toplevel);
+#endif
+#ifdef USE_ARM_NEON
+pixman_implementation_t *
+_pixman_implementation_create_arm_neon (pixman_implementation_t *toplevel);
+#endif
pixman_bool_t
_pixman_run_fast_path (const FastPathInfo *paths,
--
1.5.6.3
--=-I4QhT5V8Oht1SATyJMEK--
More information about the cairo
mailing list