|
1 /* |
|
2 * Copyright (c) 2012 |
|
3 * MIPS Technologies, Inc., California. |
|
4 * |
|
5 * Redistribution and use in source and binary forms, with or without |
|
6 * modification, are permitted provided that the following conditions |
|
7 * are met: |
|
8 * 1. Redistributions of source code must retain the above copyright |
|
9 * notice, this list of conditions and the following disclaimer. |
|
10 * 2. Redistributions in binary form must reproduce the above copyright |
|
11 * notice, this list of conditions and the following disclaimer in the |
|
12 * documentation and/or other materials provided with the distribution. |
|
13 * 3. Neither the name of the MIPS Technologies, Inc., nor the names of its |
|
14 * contributors may be used to endorse or promote products derived from |
|
15 * this software without specific prior written permission. |
|
16 * |
|
17 * THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND |
|
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE |
|
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
|
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
|
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
|
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
|
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
|
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
|
27 * SUCH DAMAGE. |
|
28 * |
|
29 * Author: Nemanja Lukic (nlukic@mips.com) |
|
30 */ |
|
31 |
|
32 #ifdef HAVE_CONFIG_H |
|
33 #include <config.h> |
|
34 #endif |
|
35 |
|
36 #include "pixman-private.h" |
|
37 #include "pixman-mips-dspr2.h" |
|
38 |
|
39 PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, src_x888_8888, |
|
40 uint32_t, 1, uint32_t, 1) |
|
41 PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, src_8888_0565, |
|
42 uint32_t, 1, uint16_t, 1) |
|
43 PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, src_0565_8888, |
|
44 uint16_t, 1, uint32_t, 1) |
|
45 PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (DO_FAST_MEMCPY, src_0565_0565, |
|
46 uint16_t, 1, uint16_t, 1) |
|
47 PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (DO_FAST_MEMCPY, src_8888_8888, |
|
48 uint32_t, 1, uint32_t, 1) |
|
49 PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (DO_FAST_MEMCPY, src_0888_0888, |
|
50 uint8_t, 3, uint8_t, 3) |
|
51 PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, over_8888_8888, |
|
52 uint32_t, 1, uint32_t, 1) |
|
53 PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, add_8_8, |
|
54 uint8_t, 1, uint8_t, 1) |
|
55 PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, add_8888_8888, |
|
56 uint32_t, 1, uint32_t, 1) |
|
57 PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, out_reverse_8_0565, |
|
58 uint8_t, 1, uint16_t, 1) |
|
59 PIXMAN_MIPS_BIND_FAST_PATH_SRC_DST (0, out_reverse_8_8888, |
|
60 uint8_t, 1, uint32_t, 1) |
|
61 |
|
62 PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (0, src_n_8_8888, |
|
63 uint8_t, 1, uint32_t, 1) |
|
64 PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (0, src_n_8_8, |
|
65 uint8_t, 1, uint8_t, 1) |
|
66 PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, over_n_8888_8888_ca, |
|
67 uint32_t, 1, uint32_t, 1) |
|
68 PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, over_n_8888_0565_ca, |
|
69 uint32_t, 1, uint16_t, 1) |
|
70 PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, over_n_8_8888, |
|
71 uint8_t, 1, uint32_t, 1) |
|
72 PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, over_n_8_0565, |
|
73 uint8_t, 1, uint16_t, 1) |
|
74 PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, add_n_8_8, |
|
75 uint8_t, 1, uint8_t, 1) |
|
76 PIXMAN_MIPS_BIND_FAST_PATH_N_MASK_DST (SKIP_ZERO_SRC, add_n_8_8888, |
|
77 uint8_t, 1, uint32_t, 1) |
|
78 |
|
79 PIXMAN_MIPS_BIND_FAST_PATH_SRC_N_DST (SKIP_ZERO_MASK, over_8888_n_8888, |
|
80 uint32_t, 1, uint32_t, 1) |
|
81 PIXMAN_MIPS_BIND_FAST_PATH_SRC_N_DST (SKIP_ZERO_MASK, over_8888_n_0565, |
|
82 uint32_t, 1, uint16_t, 1) |
|
83 PIXMAN_MIPS_BIND_FAST_PATH_SRC_N_DST (SKIP_ZERO_MASK, over_0565_n_0565, |
|
84 uint16_t, 1, uint16_t, 1) |
|
85 PIXMAN_MIPS_BIND_FAST_PATH_SRC_N_DST (SKIP_ZERO_MASK, add_8888_n_8888, |
|
86 uint32_t, 1, uint32_t, 1) |
|
87 |
|
88 PIXMAN_MIPS_BIND_FAST_PATH_N_DST (SKIP_ZERO_SRC, over_n_0565, |
|
89 uint16_t, 1) |
|
90 PIXMAN_MIPS_BIND_FAST_PATH_N_DST (SKIP_ZERO_SRC, over_n_8888, |
|
91 uint32_t, 1) |
|
92 PIXMAN_MIPS_BIND_FAST_PATH_N_DST (SKIP_ZERO_SRC, over_reverse_n_8888, |
|
93 uint32_t, 1) |
|
94 PIXMAN_MIPS_BIND_FAST_PATH_N_DST (0, in_n_8, |
|
95 uint8_t, 1) |
|
96 |
|
97 PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (add_8_8_8, uint8_t, 1, |
|
98 uint8_t, 1, uint8_t, 1) |
|
99 PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (add_8888_8_8888, uint32_t, 1, |
|
100 uint8_t, 1, uint32_t, 1) |
|
101 PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (add_8888_8888_8888, uint32_t, 1, |
|
102 uint32_t, 1, uint32_t, 1) |
|
103 PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (add_0565_8_0565, uint16_t, 1, |
|
104 uint8_t, 1, uint16_t, 1) |
|
105 PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (over_8888_8_8888, uint32_t, 1, |
|
106 uint8_t, 1, uint32_t, 1) |
|
107 PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (over_8888_8_0565, uint32_t, 1, |
|
108 uint8_t, 1, uint16_t, 1) |
|
109 PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (over_0565_8_0565, uint16_t, 1, |
|
110 uint8_t, 1, uint16_t, 1) |
|
111 PIXMAN_MIPS_BIND_FAST_PATH_SRC_MASK_DST (over_8888_8888_8888, uint32_t, 1, |
|
112 uint32_t, 1, uint32_t, 1) |
|
113 |
|
114 PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST (0, 8888_8888, SRC, |
|
115 uint32_t, uint32_t) |
|
116 PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST (0, 8888_0565, SRC, |
|
117 uint32_t, uint16_t) |
|
118 PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST (0, 0565_8888, SRC, |
|
119 uint16_t, uint32_t) |
|
120 PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST (0, 0565_0565, SRC, |
|
121 uint16_t, uint16_t) |
|
122 PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST (SKIP_ZERO_SRC, 8888_8888, OVER, |
|
123 uint32_t, uint32_t) |
|
124 PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_DST (SKIP_ZERO_SRC, 8888_8888, ADD, |
|
125 uint32_t, uint32_t) |
|
126 |
|
127 PIXMAN_MIPS_BIND_SCALED_NEAREST_SRC_A8_DST (SKIP_ZERO_SRC, 8888_8_0565, |
|
128 OVER, uint32_t, uint16_t) |
|
129 PIXMAN_MIPS_BIND_SCALED_NEAREST_SRC_A8_DST (SKIP_ZERO_SRC, 0565_8_0565, |
|
130 OVER, uint16_t, uint16_t) |
|
131 |
|
132 PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST (0, 8888_8_8888, SRC, |
|
133 uint32_t, uint32_t) |
|
134 PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST (0, 8888_8_0565, SRC, |
|
135 uint32_t, uint16_t) |
|
136 PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST (0, 0565_8_x888, SRC, |
|
137 uint16_t, uint32_t) |
|
138 PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST (0, 0565_8_0565, SRC, |
|
139 uint16_t, uint16_t) |
|
140 PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST (SKIP_ZERO_SRC, 8888_8_8888, OVER, |
|
141 uint32_t, uint32_t) |
|
142 PIXMAN_MIPS_BIND_SCALED_BILINEAR_SRC_A8_DST (SKIP_ZERO_SRC, 8888_8_8888, ADD, |
|
143 uint32_t, uint32_t) |
|
144 |
|
145 static pixman_bool_t |
|
146 mips_dspr2_fill (pixman_implementation_t *imp, |
|
147 uint32_t * bits, |
|
148 int stride, |
|
149 int bpp, |
|
150 int x, |
|
151 int y, |
|
152 int width, |
|
153 int height, |
|
154 uint32_t _xor) |
|
155 { |
|
156 uint8_t *byte_line; |
|
157 uint32_t byte_width; |
|
158 switch (bpp) |
|
159 { |
|
160 case 16: |
|
161 stride = stride * (int) sizeof (uint32_t) / 2; |
|
162 byte_line = (uint8_t *)(((uint16_t *)bits) + stride * y + x); |
|
163 byte_width = width * 2; |
|
164 stride *= 2; |
|
165 |
|
166 while (height--) |
|
167 { |
|
168 uint8_t *dst = byte_line; |
|
169 byte_line += stride; |
|
170 pixman_fill_buff16_mips (dst, byte_width, _xor & 0xffff); |
|
171 } |
|
172 return TRUE; |
|
173 case 32: |
|
174 stride = stride * (int) sizeof (uint32_t) / 4; |
|
175 byte_line = (uint8_t *)(((uint32_t *)bits) + stride * y + x); |
|
176 byte_width = width * 4; |
|
177 stride *= 4; |
|
178 |
|
179 while (height--) |
|
180 { |
|
181 uint8_t *dst = byte_line; |
|
182 byte_line += stride; |
|
183 pixman_fill_buff32_mips (dst, byte_width, _xor); |
|
184 } |
|
185 return TRUE; |
|
186 default: |
|
187 return FALSE; |
|
188 } |
|
189 } |
|
190 |
|
191 static pixman_bool_t |
|
192 mips_dspr2_blt (pixman_implementation_t *imp, |
|
193 uint32_t * src_bits, |
|
194 uint32_t * dst_bits, |
|
195 int src_stride, |
|
196 int dst_stride, |
|
197 int src_bpp, |
|
198 int dst_bpp, |
|
199 int src_x, |
|
200 int src_y, |
|
201 int dest_x, |
|
202 int dest_y, |
|
203 int width, |
|
204 int height) |
|
205 { |
|
206 if (src_bpp != dst_bpp) |
|
207 return FALSE; |
|
208 |
|
209 uint8_t *src_bytes; |
|
210 uint8_t *dst_bytes; |
|
211 uint32_t byte_width; |
|
212 |
|
213 switch (src_bpp) |
|
214 { |
|
215 case 16: |
|
216 src_stride = src_stride * (int) sizeof (uint32_t) / 2; |
|
217 dst_stride = dst_stride * (int) sizeof (uint32_t) / 2; |
|
218 src_bytes =(uint8_t *)(((uint16_t *)src_bits) |
|
219 + src_stride * (src_y) + (src_x)); |
|
220 dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) |
|
221 + dst_stride * (dest_y) + (dest_x)); |
|
222 byte_width = width * 2; |
|
223 src_stride *= 2; |
|
224 dst_stride *= 2; |
|
225 |
|
226 while (height--) |
|
227 { |
|
228 uint8_t *src = src_bytes; |
|
229 uint8_t *dst = dst_bytes; |
|
230 src_bytes += src_stride; |
|
231 dst_bytes += dst_stride; |
|
232 pixman_mips_fast_memcpy (dst, src, byte_width); |
|
233 } |
|
234 return TRUE; |
|
235 case 32: |
|
236 src_stride = src_stride * (int) sizeof (uint32_t) / 4; |
|
237 dst_stride = dst_stride * (int) sizeof (uint32_t) / 4; |
|
238 src_bytes = (uint8_t *)(((uint32_t *)src_bits) |
|
239 + src_stride * (src_y) + (src_x)); |
|
240 dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) |
|
241 + dst_stride * (dest_y) + (dest_x)); |
|
242 byte_width = width * 4; |
|
243 src_stride *= 4; |
|
244 dst_stride *= 4; |
|
245 |
|
246 while (height--) |
|
247 { |
|
248 uint8_t *src = src_bytes; |
|
249 uint8_t *dst = dst_bytes; |
|
250 src_bytes += src_stride; |
|
251 dst_bytes += dst_stride; |
|
252 pixman_mips_fast_memcpy (dst, src, byte_width); |
|
253 } |
|
254 return TRUE; |
|
255 default: |
|
256 return FALSE; |
|
257 } |
|
258 } |
|
259 |
|
260 static const pixman_fast_path_t mips_dspr2_fast_paths[] = |
|
261 { |
|
262 PIXMAN_STD_FAST_PATH (SRC, r5g6b5, null, r5g6b5, mips_composite_src_0565_0565), |
|
263 PIXMAN_STD_FAST_PATH (SRC, b5g6r5, null, b5g6r5, mips_composite_src_0565_0565), |
|
264 PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, r5g6b5, mips_composite_src_8888_0565), |
|
265 PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, r5g6b5, mips_composite_src_8888_0565), |
|
266 PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, b5g6r5, mips_composite_src_8888_0565), |
|
267 PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, b5g6r5, mips_composite_src_8888_0565), |
|
268 PIXMAN_STD_FAST_PATH (SRC, r5g6b5, null, a8r8g8b8, mips_composite_src_0565_8888), |
|
269 PIXMAN_STD_FAST_PATH (SRC, r5g6b5, null, x8r8g8b8, mips_composite_src_0565_8888), |
|
270 PIXMAN_STD_FAST_PATH (SRC, b5g6r5, null, a8b8g8r8, mips_composite_src_0565_8888), |
|
271 PIXMAN_STD_FAST_PATH (SRC, b5g6r5, null, x8b8g8r8, mips_composite_src_0565_8888), |
|
272 PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, x8r8g8b8, mips_composite_src_8888_8888), |
|
273 PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, x8r8g8b8, mips_composite_src_8888_8888), |
|
274 PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, x8b8g8r8, mips_composite_src_8888_8888), |
|
275 PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, x8b8g8r8, mips_composite_src_8888_8888), |
|
276 PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, a8r8g8b8, mips_composite_src_8888_8888), |
|
277 PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, a8b8g8r8, mips_composite_src_8888_8888), |
|
278 PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, a8r8g8b8, mips_composite_src_x888_8888), |
|
279 PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, a8b8g8r8, mips_composite_src_x888_8888), |
|
280 PIXMAN_STD_FAST_PATH (SRC, r8g8b8, null, r8g8b8, mips_composite_src_0888_0888), |
|
281 PIXMAN_STD_FAST_PATH (SRC, solid, a8, a8r8g8b8, mips_composite_src_n_8_8888), |
|
282 PIXMAN_STD_FAST_PATH (SRC, solid, a8, x8r8g8b8, mips_composite_src_n_8_8888), |
|
283 PIXMAN_STD_FAST_PATH (SRC, solid, a8, a8b8g8r8, mips_composite_src_n_8_8888), |
|
284 PIXMAN_STD_FAST_PATH (SRC, solid, a8, x8b8g8r8, mips_composite_src_n_8_8888), |
|
285 PIXMAN_STD_FAST_PATH (SRC, solid, a8, a8, mips_composite_src_n_8_8), |
|
286 |
|
287 PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, a8r8g8b8, mips_composite_over_n_8888_8888_ca), |
|
288 PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, x8r8g8b8, mips_composite_over_n_8888_8888_ca), |
|
289 PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, a8b8g8r8, mips_composite_over_n_8888_8888_ca), |
|
290 PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, x8b8g8r8, mips_composite_over_n_8888_8888_ca), |
|
291 PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, r5g6b5, mips_composite_over_n_8888_0565_ca), |
|
292 PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, b5g6r5, mips_composite_over_n_8888_0565_ca), |
|
293 PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8r8g8b8, mips_composite_over_n_8_8888), |
|
294 PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8r8g8b8, mips_composite_over_n_8_8888), |
|
295 PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8b8g8r8, mips_composite_over_n_8_8888), |
|
296 PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8b8g8r8, mips_composite_over_n_8_8888), |
|
297 PIXMAN_STD_FAST_PATH (OVER, solid, a8, r5g6b5, mips_composite_over_n_8_0565), |
|
298 PIXMAN_STD_FAST_PATH (OVER, solid, a8, b5g6r5, mips_composite_over_n_8_0565), |
|
299 PIXMAN_STD_FAST_PATH (OVER, solid, null, r5g6b5, mips_composite_over_n_0565), |
|
300 PIXMAN_STD_FAST_PATH (OVER, solid, null, a8r8g8b8, mips_composite_over_n_8888), |
|
301 PIXMAN_STD_FAST_PATH (OVER, solid, null, x8r8g8b8, mips_composite_over_n_8888), |
|
302 PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, a8r8g8b8, mips_composite_over_8888_n_8888), |
|
303 PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, x8r8g8b8, mips_composite_over_8888_n_8888), |
|
304 PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, r5g6b5, mips_composite_over_8888_n_0565), |
|
305 PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, solid, b5g6r5, mips_composite_over_8888_n_0565), |
|
306 PIXMAN_STD_FAST_PATH (OVER, r5g6b5, solid, r5g6b5, mips_composite_over_0565_n_0565), |
|
307 PIXMAN_STD_FAST_PATH (OVER, b5g6r5, solid, b5g6r5, mips_composite_over_0565_n_0565), |
|
308 PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8, a8r8g8b8, mips_composite_over_8888_8_8888), |
|
309 PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8, x8r8g8b8, mips_composite_over_8888_8_8888), |
|
310 PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, a8, a8b8g8r8, mips_composite_over_8888_8_8888), |
|
311 PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, a8, x8b8g8r8, mips_composite_over_8888_8_8888), |
|
312 PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8, r5g6b5, mips_composite_over_8888_8_0565), |
|
313 PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, a8, b5g6r5, mips_composite_over_8888_8_0565), |
|
314 PIXMAN_STD_FAST_PATH (OVER, r5g6b5, a8, r5g6b5, mips_composite_over_0565_8_0565), |
|
315 PIXMAN_STD_FAST_PATH (OVER, b5g6r5, a8, b5g6r5, mips_composite_over_0565_8_0565), |
|
316 PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, a8r8g8b8, mips_composite_over_8888_8888_8888), |
|
317 PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, a8r8g8b8, mips_composite_over_8888_8888), |
|
318 PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, x8r8g8b8, mips_composite_over_8888_8888), |
|
319 PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, a8b8g8r8, mips_composite_over_8888_8888), |
|
320 PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, x8b8g8r8, mips_composite_over_8888_8888), |
|
321 PIXMAN_STD_FAST_PATH (ADD, solid, a8, a8, mips_composite_add_n_8_8), |
|
322 PIXMAN_STD_FAST_PATH (ADD, solid, a8, a8r8g8b8, mips_composite_add_n_8_8888), |
|
323 PIXMAN_STD_FAST_PATH (ADD, solid, a8, a8b8g8r8, mips_composite_add_n_8_8888), |
|
324 PIXMAN_STD_FAST_PATH (ADD, a8, a8, a8, mips_composite_add_8_8_8), |
|
325 PIXMAN_STD_FAST_PATH (ADD, r5g6b5, a8, r5g6b5, mips_composite_add_0565_8_0565), |
|
326 PIXMAN_STD_FAST_PATH (ADD, b5g6r5, a8, b5g6r5, mips_composite_add_0565_8_0565), |
|
327 PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, a8, a8r8g8b8, mips_composite_add_8888_8_8888), |
|
328 PIXMAN_STD_FAST_PATH (ADD, a8b8g8r8, a8, a8b8g8r8, mips_composite_add_8888_8_8888), |
|
329 PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, a8r8g8b8, a8r8g8b8, mips_composite_add_8888_8888_8888), |
|
330 PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, solid, a8r8g8b8, mips_composite_add_8888_n_8888), |
|
331 PIXMAN_STD_FAST_PATH (ADD, a8b8g8r8, solid, a8b8g8r8, mips_composite_add_8888_n_8888), |
|
332 PIXMAN_STD_FAST_PATH (ADD, a8, null, a8, mips_composite_add_8_8), |
|
333 PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, null, a8r8g8b8, mips_composite_add_8888_8888), |
|
334 PIXMAN_STD_FAST_PATH (ADD, a8b8g8r8, null, a8b8g8r8, mips_composite_add_8888_8888), |
|
335 PIXMAN_STD_FAST_PATH (OUT_REVERSE, a8, null, r5g6b5, mips_composite_out_reverse_8_0565), |
|
336 PIXMAN_STD_FAST_PATH (OUT_REVERSE, a8, null, b5g6r5, mips_composite_out_reverse_8_0565), |
|
337 PIXMAN_STD_FAST_PATH (OUT_REVERSE, a8, null, a8r8g8b8, mips_composite_out_reverse_8_8888), |
|
338 PIXMAN_STD_FAST_PATH (OUT_REVERSE, a8, null, a8b8g8r8, mips_composite_out_reverse_8_8888), |
|
339 PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8r8g8b8, mips_composite_over_reverse_n_8888), |
|
340 PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8b8g8r8, mips_composite_over_reverse_n_8888), |
|
341 PIXMAN_STD_FAST_PATH (IN, solid, null, a8, mips_composite_in_n_8), |
|
342 |
|
343 PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, a8r8g8b8, r5g6b5, mips_8888_8_0565), |
|
344 PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, a8b8g8r8, b5g6r5, mips_8888_8_0565), |
|
345 |
|
346 PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, r5g6b5, r5g6b5, mips_0565_8_0565), |
|
347 PIXMAN_MIPS_SIMPLE_NEAREST_A8_MASK_FAST_PATH (OVER, b5g6r5, b5g6r5, mips_0565_8_0565), |
|
348 |
|
349 SIMPLE_BILINEAR_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8, mips_8888_8888), |
|
350 SIMPLE_BILINEAR_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8, mips_8888_8888), |
|
351 SIMPLE_BILINEAR_FAST_PATH (SRC, x8r8g8b8, x8r8g8b8, mips_8888_8888), |
|
352 |
|
353 SIMPLE_BILINEAR_FAST_PATH (SRC, a8r8g8b8, r5g6b5, mips_8888_0565), |
|
354 SIMPLE_BILINEAR_FAST_PATH (SRC, x8r8g8b8, r5g6b5, mips_8888_0565), |
|
355 |
|
356 SIMPLE_BILINEAR_FAST_PATH (SRC, r5g6b5, x8r8g8b8, mips_0565_8888), |
|
357 SIMPLE_BILINEAR_FAST_PATH (SRC, r5g6b5, r5g6b5, mips_0565_0565), |
|
358 |
|
359 SIMPLE_BILINEAR_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, mips_8888_8888), |
|
360 SIMPLE_BILINEAR_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, mips_8888_8888), |
|
361 |
|
362 SIMPLE_BILINEAR_FAST_PATH (ADD, a8r8g8b8, a8r8g8b8, mips_8888_8888), |
|
363 SIMPLE_BILINEAR_FAST_PATH (ADD, a8r8g8b8, x8r8g8b8, mips_8888_8888), |
|
364 |
|
365 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8, mips_8888_8_8888), |
|
366 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8, mips_8888_8_8888), |
|
367 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, x8r8g8b8, x8r8g8b8, mips_8888_8_8888), |
|
368 |
|
369 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, a8r8g8b8, r5g6b5, mips_8888_8_0565), |
|
370 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, x8r8g8b8, r5g6b5, mips_8888_8_0565), |
|
371 |
|
372 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, r5g6b5, x8r8g8b8, mips_0565_8_x888), |
|
373 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (SRC, r5g6b5, r5g6b5, mips_0565_8_0565), |
|
374 |
|
375 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, mips_8888_8_8888), |
|
376 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, mips_8888_8_8888), |
|
377 |
|
378 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (ADD, a8r8g8b8, a8r8g8b8, mips_8888_8_8888), |
|
379 SIMPLE_BILINEAR_A8_MASK_FAST_PATH (ADD, a8r8g8b8, x8r8g8b8, mips_8888_8_8888), |
|
380 { PIXMAN_OP_NONE }, |
|
381 }; |
|
382 |
|
383 static void |
|
384 mips_dspr2_combine_over_u (pixman_implementation_t *imp, |
|
385 pixman_op_t op, |
|
386 uint32_t * dest, |
|
387 const uint32_t * src, |
|
388 const uint32_t * mask, |
|
389 int width) |
|
390 { |
|
391 if (mask) |
|
392 pixman_composite_over_8888_8888_8888_asm_mips ( |
|
393 dest, (uint32_t *)src, (uint32_t *)mask, width); |
|
394 else |
|
395 pixman_composite_over_8888_8888_asm_mips ( |
|
396 dest, (uint32_t *)src, width); |
|
397 } |
|
398 |
|
399 pixman_implementation_t * |
|
400 _pixman_implementation_create_mips_dspr2 (pixman_implementation_t *fallback) |
|
401 { |
|
402 pixman_implementation_t *imp = |
|
403 _pixman_implementation_create (fallback, mips_dspr2_fast_paths); |
|
404 |
|
405 imp->combine_32[PIXMAN_OP_OVER] = mips_dspr2_combine_over_u; |
|
406 |
|
407 imp->blt = mips_dspr2_blt; |
|
408 imp->fill = mips_dspr2_fill; |
|
409 |
|
410 return imp; |
|
411 } |