gfx/cairo/libpixman/src/pixman-mips-dspr2.c

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/gfx/cairo/libpixman/src/pixman-mips-dspr2.c	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,411 @@
     1.4 +/*
     1.5 + * Copyright (c) 2012
     1.6 + *      MIPS Technologies, Inc., California.
     1.7 + *
     1.8 + * Redistribution and use in source and binary forms, with or without
     1.9 + * modification, are permitted provided that the following conditions
    1.10 + * are met:
    1.11 + * 1. Redistributions of source code must retain the above copyright
    1.12 + *    notice, this list of conditions and the following disclaimer.
    1.13 + * 2. Redistributions in binary form must reproduce the above copyright
    1.14 + *    notice, this list of conditions and the following disclaimer in the
    1.15 + *    documentation and/or other materials provided with the distribution.
    1.16 + * 3. Neither the name of the MIPS Technologies, Inc., nor the names of its
    1.17 + *    contributors may be used to endorse or promote products derived from
    1.18 + *    this software without specific prior written permission.
    1.19 + *
    1.20 + * THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
    1.21 + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    1.22 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    1.23 + * ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
    1.24 + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    1.25 + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    1.26 + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    1.27 + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    1.28 + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    1.29 + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    1.30 + * SUCH DAMAGE.
    1.31 + *
    1.32 + * Author:  Nemanja Lukic (nlukic@mips.com)
    1.33 + */
    1.34 +
    1.35 +#ifdef HAVE_CONFIG_H
    1.36 +#include <config.h>
    1.37 +#endif
    1.38 +
    1.39 +#include "pixman-private.h"
    1.40 +#include "pixman-mips-dspr2.h"
    1.41 +
    1.42 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, src_x888_8888,
    1.43 +                                    uint32_t, 1, uint32_t, 1)
    1.44 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, src_8888_0565,
    1.45 +                                    uint32_t, 1, uint16_t, 1)
    1.46 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, src_0565_8888,
    1.47 +                                    uint16_t, 1, uint32_t, 1)
    1.48 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (DO_FAST_MEMCPY, src_0565_0565,
    1.49 +                                    uint16_t, 1, uint16_t, 1)
    1.50 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (DO_FAST_MEMCPY, src_8888_8888,
    1.51 +                                    uint32_t, 1, uint32_t, 1)
    1.52 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (DO_FAST_MEMCPY, src_0888_0888,
    1.53 +                                    uint8_t, 3, uint8_t, 3)
    1.54 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, over_8888_8888,
    1.55 +                                    uint32_t, 1, uint32_t, 1)
    1.56 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, add_8_8,
    1.57 +                                    uint8_t, 1, uint8_t, 1)
    1.58 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, add_8888_8888,
    1.59 +                                    uint32_t, 1, uint32_t, 1)
    1.60 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, out_reverse_8_0565,
    1.61 +                                    uint8_t, 1, uint16_t, 1)
    1.62 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, out_reverse_8_8888,
    1.63 +                                    uint8_t,  1, uint32_t, 1)
    1.64 +
    1.65 +PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (0, src_n_8_8888,
    1.66 +                                       uint8_t, 1, uint32_t, 1)
    1.67 +PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (0, src_n_8_8,
    1.68 +                                       uint8_t, 1, uint8_t, 1)
    1.69 +PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, over_n_8888_8888_ca,
    1.70 +                                       uint32_t, 1, uint32_t, 1)
    1.71 +PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, over_n_8888_0565_ca,
    1.72 +                                       uint32_t, 1, uint16_t, 1)
    1.73 +PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, over_n_8_8888,
    1.74 +                                       uint8_t, 1, uint32_t, 1)
    1.75 +PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, over_n_8_0565,
    1.76 +                                       uint8_t, 1, uint16_t, 1)
    1.77 +PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, add_n_8_8,
    1.78 +                                       uint8_t, 1, uint8_t, 1)
    1.79 +PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, add_n_8_8888,
    1.80 +                                       uint8_t, 1, uint32_t, 1)
    1.81 +
    1.82 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_N_DST (SKIP_ZERO_MASK, over_8888_n_8888,
    1.83 +                                      uint32_t, 1, uint32_t, 1)
    1.84 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_N_DST (SKIP_ZERO_MASK, over_8888_n_0565,
    1.85 +                                      uint32_t, 1, uint16_t, 1)
    1.86 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_N_DST (SKIP_ZERO_MASK, over_0565_n_0565,
    1.87 +                                      uint16_t, 1, uint16_t, 1)
    1.88 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_N_DST (SKIP_ZERO_MASK, add_8888_n_8888,
    1.89 +                                      uint32_t, 1, uint32_t, 1)
    1.90 +
    1.91 +PIXMAN_MIPS_BIND_FAST_PATH_N_DST (SKIP_ZERO_SRC, over_n_0565,
    1.92 +                                  uint16_t, 1)
    1.93 +PIXMAN_MIPS_BIND_FAST_PATH_N_DST (SKIP_ZERO_SRC, over_n_8888,
    1.94 +                                  uint32_t, 1)
    1.95 +PIXMAN_MIPS_BIND_FAST_PATH_N_DST (SKIP_ZERO_SRC, over_reverse_n_8888,
    1.96 +                                  uint32_t, 1)
    1.97 +PIXMAN_MIPS_BIND_FAST_PATH_N_DST (0, in_n_8,
    1.98 +                                  uint8_t, 1)
    1.99 +
   1.100 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (add_8_8_8, uint8_t,  1,
   1.101 +                                         uint8_t,  1, uint8_t,  1)
   1.102 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (add_8888_8_8888, uint32_t, 1,
   1.103 +                                         uint8_t, 1, uint32_t, 1)
   1.104 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (add_8888_8888_8888, uint32_t, 1,
   1.105 +                                         uint32_t, 1, uint32_t, 1)
   1.106 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (add_0565_8_0565, uint16_t, 1,
   1.107 +                                         uint8_t,  1, uint16_t, 1)
   1.108 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (over_8888_8_8888, uint32_t, 1,
   1.109 +                                         uint8_t, 1, uint32_t, 1)
   1.110 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (over_8888_8_0565, uint32_t, 1,
   1.111 +                                         uint8_t, 1, uint16_t, 1)
   1.112 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (over_0565_8_0565, uint16_t, 1,
   1.113 +                                         uint8_t, 1, uint16_t, 1)
   1.114 +PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (over_8888_8888_8888, uint32_t, 1,
   1.115 +                                         uint32_t, 1, uint32_t, 1)
   1.116 +
   1.117 +PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST (0, 8888_8888, SRC,
   1.118 +                                          uint32_t, uint32_t)
   1.119 +PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST (0, 8888_0565, SRC,
   1.120 +                                          uint32_t, uint16_t)
   1.121 +PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST (0, 0565_8888, SRC,
   1.122 +                                          uint16_t, uint32_t)
   1.123 +PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST (0, 0565_0565, SRC,
   1.124 +                                          uint16_t, uint16_t)
   1.125 +PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST (SKIP_ZERO_SRC, 8888_8888, OVER,
   1.126 +                                          uint32_t, uint32_t)
   1.127 +PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST (SKIP_ZERO_SRC, 8888_8888, ADD,
   1.128 +                                          uint32_t, uint32_t)
   1.129 +
   1.130 +PIXMAN_MIPS_BIND_SCALED_NEAREST_SRC_A8_DST (SKIP_ZERO_SRC, 8888_8_0565,
   1.131 +                                            OVER, uint32_t, uint16_t)
   1.132 +PIXMAN_MIPS_BIND_SCALED_NEAREST_SRC_A8_DST (SKIP_ZERO_SRC, 0565_8_0565,
   1.133 +                                            OVER, uint16_t, uint16_t)
   1.134 +
   1.135 +PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST (0, 8888_8_8888, SRC,
   1.136 +                                             uint32_t, uint32_t)
   1.137 +PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST (0, 8888_8_0565, SRC,
   1.138 +                                             uint32_t, uint16_t)
   1.139 +PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST (0, 0565_8_x888, SRC,
   1.140 +                                             uint16_t, uint32_t)
   1.141 +PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST (0, 0565_8_0565, SRC,
   1.142 +                                             uint16_t, uint16_t)
   1.143 +PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST (SKIP_ZERO_SRC, 8888_8_8888, OVER,
   1.144 +                                             uint32_t, uint32_t)
   1.145 +PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST (SKIP_ZERO_SRC, 8888_8_8888, ADD,
   1.146 +                                             uint32_t, uint32_t)
   1.147 +
   1.148 +static pixman_bool_t
   1.149 +mips_dspr2_fill (pixman_implementation_t *imp,
   1.150 +                 uint32_t *               bits,
   1.151 +                 int                      stride,
   1.152 +                 int                      bpp,
   1.153 +                 int                      x,
   1.154 +                 int                      y,
   1.155 +                 int                      width,
   1.156 +                 int                      height,
   1.157 +                 uint32_t                 _xor)
   1.158 +{
   1.159 +    uint8_t *byte_line;
   1.160 +    uint32_t byte_width;
   1.161 +    switch (bpp)
   1.162 +    {
   1.163 +    case 16:
   1.164 +        stride = stride * (int) sizeof (uint32_t) / 2;
   1.165 +        byte_line = (uint8_t *)(((uint16_t *)bits) + stride * y + x);
   1.166 +        byte_width = width * 2;
   1.167 +        stride *= 2;
   1.168 +
   1.169 +        while (height--)
   1.170 +        {
   1.171 +            uint8_t *dst = byte_line;
   1.172 +            byte_line += stride;
   1.173 +            pixman_fill_buff16_mips (dst, byte_width, _xor & 0xffff);
   1.174 +        }
   1.175 +        return TRUE;
   1.176 +    case 32:
   1.177 +        stride = stride * (int) sizeof (uint32_t) / 4;
   1.178 +        byte_line = (uint8_t *)(((uint32_t *)bits) + stride * y + x);
   1.179 +        byte_width = width * 4;
   1.180 +        stride *= 4;
   1.181 +
   1.182 +        while (height--)
   1.183 +        {
   1.184 +            uint8_t *dst = byte_line;
   1.185 +            byte_line += stride;
   1.186 +            pixman_fill_buff32_mips (dst, byte_width, _xor);
   1.187 +        }
   1.188 +        return TRUE;
   1.189 +    default:
   1.190 +        return FALSE;
   1.191 +    }
   1.192 +}
   1.193 +
   1.194 +static pixman_bool_t
   1.195 +mips_dspr2_blt (pixman_implementation_t *imp,
   1.196 +                uint32_t *               src_bits,
   1.197 +                uint32_t *               dst_bits,
   1.198 +                int                      src_stride,
   1.199 +                int                      dst_stride,
   1.200 +                int                      src_bpp,
   1.201 +                int                      dst_bpp,
   1.202 +                int                      src_x,
   1.203 +                int                      src_y,
   1.204 +                int                      dest_x,
   1.205 +                int                      dest_y,
   1.206 +                int                      width,
   1.207 +                int                      height)
   1.208 +{
   1.209 +    if (src_bpp != dst_bpp)
   1.210 +        return FALSE;
   1.211 +
   1.212 +    uint8_t *src_bytes;
   1.213 +    uint8_t *dst_bytes;
   1.214 +    uint32_t byte_width;
   1.215 +
   1.216 +    switch (src_bpp)
   1.217 +    {
   1.218 +    case 16:
   1.219 +        src_stride = src_stride * (int) sizeof (uint32_t) / 2;
   1.220 +        dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
   1.221 +        src_bytes =(uint8_t *)(((uint16_t *)src_bits)
   1.222 +                                          + src_stride * (src_y) + (src_x));
   1.223 +        dst_bytes = (uint8_t *)(((uint16_t *)dst_bits)
   1.224 +                                           + dst_stride * (dest_y) + (dest_x));
   1.225 +        byte_width = width * 2;
   1.226 +        src_stride *= 2;
   1.227 +        dst_stride *= 2;
   1.228 +
   1.229 +        while (height--)
   1.230 +        {
   1.231 +            uint8_t *src = src_bytes;
   1.232 +            uint8_t *dst = dst_bytes;
   1.233 +            src_bytes += src_stride;
   1.234 +            dst_bytes += dst_stride;
   1.235 +            pixman_mips_fast_memcpy (dst, src, byte_width);
   1.236 +        }
   1.237 +        return TRUE;
   1.238 +    case 32:
   1.239 +        src_stride = src_stride * (int) sizeof (uint32_t) / 4;
   1.240 +        dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
   1.241 +        src_bytes = (uint8_t *)(((uint32_t *)src_bits)
   1.242 +                                           + src_stride * (src_y) + (src_x));
   1.243 +        dst_bytes = (uint8_t *)(((uint32_t *)dst_bits)
   1.244 +                                           + dst_stride * (dest_y) + (dest_x));
   1.245 +        byte_width = width * 4;
   1.246 +        src_stride *= 4;
   1.247 +        dst_stride *= 4;
   1.248 +
   1.249 +        while (height--)
   1.250 +        {
   1.251 +            uint8_t *src = src_bytes;
   1.252 +            uint8_t *dst = dst_bytes;
   1.253 +            src_bytes += src_stride;
   1.254 +            dst_bytes += dst_stride;
   1.255 +            pixman_mips_fast_memcpy (dst, src, byte_width);
   1.256 +        }
   1.257 +        return TRUE;
   1.258 +    default:
   1.259 +        return FALSE;
   1.260 +    }
   1.261 +}
   1.262 +
   1.263 +static const pixman_fast_path_t mips_dspr2_fast_paths[] =
   1.264 +{
   1.265 +    PIXMAN_STD_FAST_PATH (SRC, r5g6b5,   null, r5g6b5,   mips_composite_src_0565_0565),
   1.266 +    PIXMAN_STD_FAST_PATH (SRC, b5g6r5,   null, b5g6r5,   mips_composite_src_0565_0565),
   1.267 +    PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, r5g6b5,   mips_composite_src_8888_0565),
   1.268 +    PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, r5g6b5,   mips_composite_src_8888_0565),
   1.269 +    PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, b5g6r5,   mips_composite_src_8888_0565),
   1.270 +    PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, b5g6r5,   mips_composite_src_8888_0565),
   1.271 +    PIXMAN_STD_FAST_PATH (SRC, r5g6b5,   null, a8r8g8b8, mips_composite_src_0565_8888),
   1.272 +    PIXMAN_STD_FAST_PATH (SRC, r5g6b5,   null, x8r8g8b8, mips_composite_src_0565_8888),
   1.273 +    PIXMAN_STD_FAST_PATH (SRC, b5g6r5,   null, a8b8g8r8, mips_composite_src_0565_8888),
   1.274 +    PIXMAN_STD_FAST_PATH (SRC, b5g6r5,   null, x8b8g8r8, mips_composite_src_0565_8888),
   1.275 +    PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, x8r8g8b8, mips_composite_src_8888_8888),
   1.276 +    PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, x8r8g8b8, mips_composite_src_8888_8888),
   1.277 +    PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, x8b8g8r8, mips_composite_src_8888_8888),
   1.278 +    PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, x8b8g8r8, mips_composite_src_8888_8888),
   1.279 +    PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, a8r8g8b8, mips_composite_src_8888_8888),
   1.280 +    PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, a8b8g8r8, mips_composite_src_8888_8888),
   1.281 +    PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, a8r8g8b8, mips_composite_src_x888_8888),
   1.282 +    PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, a8b8g8r8, mips_composite_src_x888_8888),
   1.283 +    PIXMAN_STD_FAST_PATH (SRC, r8g8b8,   null, r8g8b8,   mips_composite_src_0888_0888),
   1.284 +    PIXMAN_STD_FAST_PATH (SRC, solid,    a8,   a8r8g8b8, mips_composite_src_n_8_8888),
   1.285 +    PIXMAN_STD_FAST_PATH (SRC, solid,    a8,   x8r8g8b8, mips_composite_src_n_8_8888),
   1.286 +    PIXMAN_STD_FAST_PATH (SRC, solid,    a8,   a8b8g8r8, mips_composite_src_n_8_8888),
   1.287 +    PIXMAN_STD_FAST_PATH (SRC, solid,    a8,   x8b8g8r8, mips_composite_src_n_8_8888),
   1.288 +    PIXMAN_STD_FAST_PATH (SRC, solid,    a8,   a8,       mips_composite_src_n_8_8),
   1.289 +
   1.290 +    PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, a8r8g8b8, mips_composite_over_n_8888_8888_ca),
   1.291 +    PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, x8r8g8b8, mips_composite_over_n_8888_8888_ca),
   1.292 +    PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, a8b8g8r8, mips_composite_over_n_8888_8888_ca),
   1.293 +    PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, x8b8g8r8, mips_composite_over_n_8888_8888_ca),
   1.294 +    PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, r5g6b5,   mips_composite_over_n_8888_0565_ca),
   1.295 +    PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, b5g6r5,   mips_composite_over_n_8888_0565_ca),
   1.296 +    PIXMAN_STD_FAST_PATH (OVER, solid,    a8,       a8r8g8b8, mips_composite_over_n_8_8888),
   1.297 +    PIXMAN_STD_FAST_PATH (OVER, solid,    a8,       x8r8g8b8, mips_composite_over_n_8_8888),
   1.298 +    PIXMAN_STD_FAST_PATH (OVER, solid,    a8,       a8b8g8r8, mips_composite_over_n_8_8888),
   1.299 +    PIXMAN_STD_FAST_PATH (OVER, solid,    a8,       x8b8g8r8, mips_composite_over_n_8_8888),
   1.300 +    PIXMAN_STD_FAST_PATH (OVER, solid,    a8,       r5g6b5,   mips_composite_over_n_8_0565),
   1.301 +    PIXMAN_STD_FAST_PATH (OVER, solid,    a8,       b5g6r5,   mips_composite_over_n_8_0565),
   1.302 +    PIXMAN_STD_FAST_PATH (OVER, solid,    null,     r5g6b5,   mips_composite_over_n_0565),
   1.303 +    PIXMAN_STD_FAST_PATH (OVER, solid,    null,     a8r8g8b8, mips_composite_over_n_8888),
   1.304 +    PIXMAN_STD_FAST_PATH (OVER, solid,    null,     x8r8g8b8, mips_composite_over_n_8888),
   1.305 +    PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid,    a8r8g8b8, mips_composite_over_8888_n_8888),
   1.306 +    PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid,    x8r8g8b8, mips_composite_over_8888_n_8888),
   1.307 +    PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid,    r5g6b5,   mips_composite_over_8888_n_0565),
   1.308 +    PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, solid,    b5g6r5,   mips_composite_over_8888_n_0565),
   1.309 +    PIXMAN_STD_FAST_PATH (OVER, r5g6b5,   solid,    r5g6b5,   mips_composite_over_0565_n_0565),
   1.310 +    PIXMAN_STD_FAST_PATH (OVER, b5g6r5,   solid,    b5g6r5,   mips_composite_over_0565_n_0565),
   1.311 +    PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8,       a8r8g8b8, mips_composite_over_8888_8_8888),
   1.312 +    PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8,       x8r8g8b8, mips_composite_over_8888_8_8888),
   1.313 +    PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, a8,       a8b8g8r8, mips_composite_over_8888_8_8888),
   1.314 +    PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, a8,       x8b8g8r8, mips_composite_over_8888_8_8888),
   1.315 +    PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8,       r5g6b5,   mips_composite_over_8888_8_0565),
   1.316 +    PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, a8,       b5g6r5,   mips_composite_over_8888_8_0565),
   1.317 +    PIXMAN_STD_FAST_PATH (OVER, r5g6b5,   a8,       r5g6b5,   mips_composite_over_0565_8_0565),
   1.318 +    PIXMAN_STD_FAST_PATH (OVER, b5g6r5,   a8,       b5g6r5,   mips_composite_over_0565_8_0565),
   1.319 +    PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, a8r8g8b8, mips_composite_over_8888_8888_8888),
   1.320 +    PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null,     a8r8g8b8, mips_composite_over_8888_8888),
   1.321 +    PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null,     x8r8g8b8, mips_composite_over_8888_8888),
   1.322 +    PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null,     a8b8g8r8, mips_composite_over_8888_8888),
   1.323 +    PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null,     x8b8g8r8, mips_composite_over_8888_8888),
   1.324 +    PIXMAN_STD_FAST_PATH (ADD,  solid,    a8,       a8,       mips_composite_add_n_8_8),
   1.325 +    PIXMAN_STD_FAST_PATH (ADD,  solid,    a8,       a8r8g8b8, mips_composite_add_n_8_8888),
   1.326 +    PIXMAN_STD_FAST_PATH (ADD,  solid,    a8,       a8b8g8r8, mips_composite_add_n_8_8888),
   1.327 +    PIXMAN_STD_FAST_PATH (ADD,  a8,       a8,       a8,       mips_composite_add_8_8_8),
   1.328 +    PIXMAN_STD_FAST_PATH (ADD,  r5g6b5,   a8,       r5g6b5,   mips_composite_add_0565_8_0565),
   1.329 +    PIXMAN_STD_FAST_PATH (ADD,  b5g6r5,   a8,       b5g6r5,   mips_composite_add_0565_8_0565),
   1.330 +    PIXMAN_STD_FAST_PATH (ADD,  a8r8g8b8, a8,       a8r8g8b8, mips_composite_add_8888_8_8888),
   1.331 +    PIXMAN_STD_FAST_PATH (ADD,  a8b8g8r8, a8,       a8b8g8r8, mips_composite_add_8888_8_8888),
   1.332 +    PIXMAN_STD_FAST_PATH (ADD,  a8r8g8b8, a8r8g8b8, a8r8g8b8, mips_composite_add_8888_8888_8888),
   1.333 +    PIXMAN_STD_FAST_PATH (ADD,  a8r8g8b8, solid,    a8r8g8b8, mips_composite_add_8888_n_8888),
   1.334 +    PIXMAN_STD_FAST_PATH (ADD,  a8b8g8r8, solid,    a8b8g8r8, mips_composite_add_8888_n_8888),
   1.335 +    PIXMAN_STD_FAST_PATH (ADD,  a8,       null,     a8,       mips_composite_add_8_8),
   1.336 +    PIXMAN_STD_FAST_PATH (ADD,  a8r8g8b8, null,     a8r8g8b8, mips_composite_add_8888_8888),
   1.337 +    PIXMAN_STD_FAST_PATH (ADD,  a8b8g8r8, null,     a8b8g8r8, mips_composite_add_8888_8888),
   1.338 +    PIXMAN_STD_FAST_PATH (OUT_REVERSE, a8,    null, r5g6b5,   mips_composite_out_reverse_8_0565),
   1.339 +    PIXMAN_STD_FAST_PATH (OUT_REVERSE, a8,    null, b5g6r5,   mips_composite_out_reverse_8_0565),
   1.340 +    PIXMAN_STD_FAST_PATH (OUT_REVERSE, a8,    null, a8r8g8b8, mips_composite_out_reverse_8_8888),
   1.341 +    PIXMAN_STD_FAST_PATH (OUT_REVERSE, a8,    null, a8b8g8r8, mips_composite_out_reverse_8_8888),
   1.342 +    PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8r8g8b8, mips_composite_over_reverse_n_8888),
   1.343 +    PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8b8g8r8, mips_composite_over_reverse_n_8888),
   1.344 +    PIXMAN_STD_FAST_PATH (IN,           solid, null, a8,       mips_composite_in_n_8),
   1.345 +
   1.346 +    PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, a8r8g8b8, r5g6b5, mips_8888_8_0565),
   1.347 +    PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, a8b8g8r8, b5g6r5, mips_8888_8_0565),
   1.348 +
   1.349 +    PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, r5g6b5, r5g6b5, mips_0565_8_0565),
   1.350 +    PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, b5g6r5, b5g6r5, mips_0565_8_0565),
   1.351 +
   1.352 +    SIMPLE_BILINEAR_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8, mips_8888_8888),
   1.353 +    SIMPLE_BILINEAR_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8, mips_8888_8888),
   1.354 +    SIMPLE_BILINEAR_FAST_PATH (SRC, x8r8g8b8, x8r8g8b8, mips_8888_8888),
   1.355 +
   1.356 +    SIMPLE_BILINEAR_FAST_PATH (SRC, a8r8g8b8, r5g6b5, mips_8888_0565),
   1.357 +    SIMPLE_BILINEAR_FAST_PATH (SRC, x8r8g8b8, r5g6b5, mips_8888_0565),
   1.358 +
   1.359 +    SIMPLE_BILINEAR_FAST_PATH (SRC, r5g6b5, x8r8g8b8, mips_0565_8888),
   1.360 +    SIMPLE_BILINEAR_FAST_PATH (SRC, r5g6b5, r5g6b5, mips_0565_0565),
   1.361 +
   1.362 +    SIMPLE_BILINEAR_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, mips_8888_8888),
   1.363 +    SIMPLE_BILINEAR_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, mips_8888_8888),
   1.364 +
   1.365 +    SIMPLE_BILINEAR_FAST_PATH (ADD, a8r8g8b8, a8r8g8b8, mips_8888_8888),
   1.366 +    SIMPLE_BILINEAR_FAST_PATH (ADD, a8r8g8b8, x8r8g8b8, mips_8888_8888),
   1.367 +
   1.368 +    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8, mips_8888_8_8888),
   1.369 +    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8, mips_8888_8_8888),
   1.370 +    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, x8r8g8b8, x8r8g8b8, mips_8888_8_8888),
   1.371 +
   1.372 +    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, a8r8g8b8, r5g6b5, mips_8888_8_0565),
   1.373 +    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, x8r8g8b8, r5g6b5, mips_8888_8_0565),
   1.374 +
   1.375 +    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, r5g6b5, x8r8g8b8, mips_0565_8_x888),
   1.376 +    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, r5g6b5, r5g6b5, mips_0565_8_0565),
   1.377 +
   1.378 +    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, mips_8888_8_8888),
   1.379 +    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, mips_8888_8_8888),
   1.380 +
   1.381 +    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (ADD, a8r8g8b8, a8r8g8b8, mips_8888_8_8888),
   1.382 +    SIMPLE_BILINEAR_A8_MASK_FAST_PATH (ADD, a8r8g8b8, x8r8g8b8, mips_8888_8_8888),
   1.383 +    { PIXMAN_OP_NONE },
   1.384 +};
   1.385 +
   1.386 +static void
   1.387 +mips_dspr2_combine_over_u (pixman_implementation_t *imp,
   1.388 +                           pixman_op_t              op,
   1.389 +                           uint32_t *               dest,
   1.390 +                           const uint32_t *         src,
   1.391 +                           const uint32_t *         mask,
   1.392 +                           int                      width)
   1.393 +{
   1.394 +    if (mask)
   1.395 +        pixman_composite_over_8888_8888_8888_asm_mips (
   1.396 +            dest, (uint32_t *)src, (uint32_t *)mask, width);
   1.397 +    else
   1.398 +        pixman_composite_over_8888_8888_asm_mips (
   1.399 +		    dest, (uint32_t *)src, width);
   1.400 +}
   1.401 +
   1.402 +pixman_implementation_t *
   1.403 +_pixman_implementation_create_mips_dspr2 (pixman_implementation_t *fallback)
   1.404 +{
   1.405 +    pixman_implementation_t *imp =
   1.406 +        _pixman_implementation_create (fallback, mips_dspr2_fast_paths);
   1.407 +
   1.408 +    imp->combine_32[PIXMAN_OP_OVER] = mips_dspr2_combine_over_u;
   1.409 +
   1.410 +    imp->blt = mips_dspr2_blt;
   1.411 +    imp->fill = mips_dspr2_fill;
   1.412 +
   1.413 +    return imp;
   1.414 +}

mercurial