File: | root/firefox-clang/gfx/cairo/libpixman/src/pixman-fast-path.c |
Warning: | line 2520, column 10 Although the value stored to 'ux_top' is used in the enclosing expression, the value is never actually read from 'ux_top' |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* -*- Mode: c; c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t; -*- */ |
2 | /* |
3 | * Copyright © 2000 SuSE, Inc. |
4 | * Copyright © 2007 Red Hat, Inc. |
5 | * |
6 | * Permission to use, copy, modify, distribute, and sell this software and its |
7 | * documentation for any purpose is hereby granted without fee, provided that |
8 | * the above copyright notice appear in all copies and that both that |
9 | * copyright notice and this permission notice appear in supporting |
10 | * documentation, and that the name of SuSE not be used in advertising or |
11 | * publicity pertaining to distribution of the software without specific, |
12 | * written prior permission. SuSE makes no representations about the |
13 | * suitability of this software for any purpose. It is provided "as is" |
14 | * without express or implied warranty. |
15 | * |
16 | * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL |
17 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE |
18 | * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
19 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION |
20 | * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN |
21 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
22 | * |
23 | * Author: Keith Packard, SuSE, Inc. |
24 | */ |
25 | |
26 | #ifdef HAVE_CONFIG_H |
27 | #include <pixman-config.h> |
28 | #endif |
29 | #include <string.h> |
30 | #include <stdlib.h> |
31 | #include "pixman-private.h" |
32 | #include "pixman-combine32.h" |
33 | #include "pixman-inlines.h" |
34 | |
35 | static force_inline__inline__ __attribute__ ((__always_inline__)) uint32_t |
36 | fetch_24 (uint8_t *a) |
37 | { |
38 | if (((uintptr_t)a) & 1) |
39 | { |
40 | #ifdef WORDS_BIGENDIAN |
41 | return (*a << 16) | (*(uint16_t *)(a + 1)); |
42 | #else |
43 | return *a | (*(uint16_t *)(a + 1) << 8); |
44 | #endif |
45 | } |
46 | else |
47 | { |
48 | #ifdef WORDS_BIGENDIAN |
49 | return (*(uint16_t *)a << 8) | *(a + 2); |
50 | #else |
51 | return *(uint16_t *)a | (*(a + 2) << 16); |
52 | #endif |
53 | } |
54 | } |
55 | |
56 | static force_inline__inline__ __attribute__ ((__always_inline__)) void |
57 | store_24 (uint8_t *a, |
58 | uint32_t v) |
59 | { |
60 | if (((uintptr_t)a) & 1) |
61 | { |
62 | #ifdef WORDS_BIGENDIAN |
63 | *a = (uint8_t) (v >> 16); |
64 | *(uint16_t *)(a + 1) = (uint16_t) (v); |
65 | #else |
66 | *a = (uint8_t) (v); |
67 | *(uint16_t *)(a + 1) = (uint16_t) (v >> 8); |
68 | #endif |
69 | } |
70 | else |
71 | { |
72 | #ifdef WORDS_BIGENDIAN |
73 | *(uint16_t *)a = (uint16_t)(v >> 8); |
74 | *(a + 2) = (uint8_t)v; |
75 | #else |
76 | *(uint16_t *)a = (uint16_t)v; |
77 | *(a + 2) = (uint8_t)(v >> 16); |
78 | #endif |
79 | } |
80 | } |
81 | |
82 | static force_inline__inline__ __attribute__ ((__always_inline__)) uint32_t |
83 | over (uint32_t src, |
84 | uint32_t dest) |
85 | { |
86 | uint32_t a = ~src >> 24; |
87 | |
88 | UN8x4_MUL_UN8_ADD_UN8x4 (dest, a, src)do { uint32_t r1__, r2__, r3__, t__; r1__ = (dest); r2__ = (src ) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ( (r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r1__ = (t__ & 0xff00ff); } while (0); r2__ = (dest) >> 8; r3__ = ((src) >> 8) & 0xff00ff; do { t__ = ((r2__ ) & 0xff00ff) * ((a)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff ; } while (0); do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff ); } while (0); (dest) = r1__ | (r2__ << 8); } while (0 ); |
89 | |
90 | return dest; |
91 | } |
92 | |
93 | static force_inline__inline__ __attribute__ ((__always_inline__)) uint32_t |
94 | in (uint32_t x, |
95 | uint8_t y) |
96 | { |
97 | uint16_t a = y; |
98 | |
99 | UN8x4_MUL_UN8 (x, a)do { uint32_t r1__, r2__, t__; r1__ = (x); do { t__ = ((r1__) & 0xff00ff) * ((a)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff ; } while (0); r2__ = (x) >> 8; do { t__ = ((r2__) & 0xff00ff) * ((a)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); (x) = r1__ | (r2__ << 8); } while (0); |
100 | |
101 | return x; |
102 | } |
103 | |
104 | /* |
105 | * Naming convention: |
106 | * |
107 | * op_src_mask_dest |
108 | */ |
109 | static void |
110 | fast_composite_over_x888_8_8888 (pixman_implementation_t *imp, |
111 | pixman_composite_info_t *info) |
112 | { |
113 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
114 | uint32_t *src, *src_line; |
115 | uint32_t *dst, *dst_line; |
116 | uint8_t *mask, *mask_line; |
117 | int src_stride, mask_stride, dst_stride; |
118 | uint8_t m; |
119 | uint32_t s, d; |
120 | int32_t w; |
121 | |
122 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
123 | PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t, mask_stride, mask_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = mask_image ->bits.bits; __stride__ = mask_image->bits.rowstride; ( mask_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__) + (mask_stride ) * (mask_y) + (1) * (mask_x); } while (0); |
124 | PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_line) = ((uint32_t *) __bits__) + (src_stride) * (src_y ) + (1) * (src_x); } while (0); |
125 | |
126 | while (height--) |
127 | { |
128 | src = src_line; |
129 | src_line += src_stride; |
130 | dst = dst_line; |
131 | dst_line += dst_stride; |
132 | mask = mask_line; |
133 | mask_line += mask_stride; |
134 | |
135 | w = width; |
136 | while (w--) |
137 | { |
138 | m = *mask++; |
139 | if (m) |
140 | { |
141 | s = *src | 0xff000000; |
142 | |
143 | if (m == 0xff) |
144 | { |
145 | *dst = s; |
146 | } |
147 | else |
148 | { |
149 | d = in (s, m); |
150 | *dst = over (d, *dst); |
151 | } |
152 | } |
153 | src++; |
154 | dst++; |
155 | } |
156 | } |
157 | } |
158 | |
159 | static void |
160 | fast_composite_in_n_8_8 (pixman_implementation_t *imp, |
161 | pixman_composite_info_t *info) |
162 | { |
163 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
164 | uint32_t src, srca; |
165 | uint8_t *dst_line, *dst; |
166 | uint8_t *mask_line, *mask, m; |
167 | int dst_stride, mask_stride; |
168 | int32_t w; |
169 | uint16_t t; |
170 | |
171 | src = _pixman_image_get_solid (imp, src_image, dest_image->bits.format); |
172 | |
173 | srca = src >> 24; |
174 | |
175 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint8_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t); (dst_line) = ((uint8_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
176 | PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t, mask_stride, mask_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = mask_image ->bits.bits; __stride__ = mask_image->bits.rowstride; ( mask_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__) + (mask_stride ) * (mask_y) + (1) * (mask_x); } while (0); |
177 | |
178 | if (srca == 0xff) |
179 | { |
180 | while (height--) |
181 | { |
182 | dst = dst_line; |
183 | dst_line += dst_stride; |
184 | mask = mask_line; |
185 | mask_line += mask_stride; |
186 | w = width; |
187 | |
188 | while (w--) |
189 | { |
190 | m = *mask++; |
191 | |
192 | if (m == 0) |
193 | *dst = 0; |
194 | else if (m != 0xff) |
195 | *dst = MUL_UN8 (m, *dst, t)((t) = (m) * (uint16_t)(*dst) + 0x80, ((((t) >> 8 ) + ( t) ) >> 8 )); |
196 | |
197 | dst++; |
198 | } |
199 | } |
200 | } |
201 | else |
202 | { |
203 | while (height--) |
204 | { |
205 | dst = dst_line; |
206 | dst_line += dst_stride; |
207 | mask = mask_line; |
208 | mask_line += mask_stride; |
209 | w = width; |
210 | |
211 | while (w--) |
212 | { |
213 | m = *mask++; |
214 | m = MUL_UN8 (m, srca, t)((t) = (m) * (uint16_t)(srca) + 0x80, ((((t) >> 8 ) + ( t) ) >> 8 )); |
215 | |
216 | if (m == 0) |
217 | *dst = 0; |
218 | else if (m != 0xff) |
219 | *dst = MUL_UN8 (m, *dst, t)((t) = (m) * (uint16_t)(*dst) + 0x80, ((((t) >> 8 ) + ( t) ) >> 8 )); |
220 | |
221 | dst++; |
222 | } |
223 | } |
224 | } |
225 | } |
226 | |
227 | static void |
228 | fast_composite_in_8_8 (pixman_implementation_t *imp, |
229 | pixman_composite_info_t *info) |
230 | { |
231 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
232 | uint8_t *dst_line, *dst; |
233 | uint8_t *src_line, *src; |
234 | int dst_stride, src_stride; |
235 | int32_t w; |
236 | uint8_t s; |
237 | uint16_t t; |
238 | |
239 | PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint8_t, src_stride, src_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t ); (src_line) = ((uint8_t *) __bits__) + (src_stride) * (src_y ) + (1) * (src_x); } while (0); |
240 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint8_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t); (dst_line) = ((uint8_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
241 | |
242 | while (height--) |
243 | { |
244 | dst = dst_line; |
245 | dst_line += dst_stride; |
246 | src = src_line; |
247 | src_line += src_stride; |
248 | w = width; |
249 | |
250 | while (w--) |
251 | { |
252 | s = *src++; |
253 | |
254 | if (s == 0) |
255 | *dst = 0; |
256 | else if (s != 0xff) |
257 | *dst = MUL_UN8 (s, *dst, t)((t) = (s) * (uint16_t)(*dst) + 0x80, ((((t) >> 8 ) + ( t) ) >> 8 )); |
258 | |
259 | dst++; |
260 | } |
261 | } |
262 | } |
263 | |
264 | static void |
265 | fast_composite_over_n_8_8888 (pixman_implementation_t *imp, |
266 | pixman_composite_info_t *info) |
267 | { |
268 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
269 | uint32_t src, srca; |
270 | uint32_t *dst_line, *dst, d; |
271 | uint8_t *mask_line, *mask, m; |
272 | int dst_stride, mask_stride; |
273 | int32_t w; |
274 | |
275 | src = _pixman_image_get_solid (imp, src_image, dest_image->bits.format); |
276 | |
277 | srca = src >> 24; |
278 | if (src == 0) |
279 | return; |
280 | |
281 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
282 | PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t, mask_stride, mask_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = mask_image ->bits.bits; __stride__ = mask_image->bits.rowstride; ( mask_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__) + (mask_stride ) * (mask_y) + (1) * (mask_x); } while (0); |
283 | |
284 | while (height--) |
285 | { |
286 | dst = dst_line; |
287 | dst_line += dst_stride; |
288 | mask = mask_line; |
289 | mask_line += mask_stride; |
290 | w = width; |
291 | |
292 | while (w--) |
293 | { |
294 | m = *mask++; |
295 | if (m == 0xff) |
296 | { |
297 | if (srca == 0xff) |
298 | *dst = src; |
299 | else |
300 | *dst = over (src, *dst); |
301 | } |
302 | else if (m) |
303 | { |
304 | d = in (src, m); |
305 | *dst = over (d, *dst); |
306 | } |
307 | dst++; |
308 | } |
309 | } |
310 | } |
311 | |
312 | static void |
313 | fast_composite_add_n_8888_8888_ca (pixman_implementation_t *imp, |
314 | pixman_composite_info_t *info) |
315 | { |
316 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
317 | uint32_t src, s; |
318 | uint32_t *dst_line, *dst, d; |
319 | uint32_t *mask_line, *mask, ma; |
320 | int dst_stride, mask_stride; |
321 | int32_t w; |
322 | |
323 | src = _pixman_image_get_solid (imp, src_image, dest_image->bits.format); |
324 | |
325 | if (src == 0) |
326 | return; |
327 | |
328 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
329 | PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint32_t, mask_stride, mask_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = mask_image ->bits.bits; __stride__ = mask_image->bits.rowstride; ( mask_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (mask_line) = ((uint32_t *) __bits__) + (mask_stride ) * (mask_y) + (1) * (mask_x); } while (0); |
330 | |
331 | while (height--) |
332 | { |
333 | dst = dst_line; |
334 | dst_line += dst_stride; |
335 | mask = mask_line; |
336 | mask_line += mask_stride; |
337 | w = width; |
338 | |
339 | while (w--) |
340 | { |
341 | ma = *mask++; |
342 | |
343 | if (ma) |
344 | { |
345 | d = *dst; |
346 | s = src; |
347 | |
348 | UN8x4_MUL_UN8x4_ADD_UN8x4 (s, ma, d)do { uint32_t r1__, r2__, r3__, t__; r1__ = (s); r2__ = (ma); do { t__ = (r1__ & 0xff) * (r2__ & 0xff); t__ |= (r1__ & 0xff0000) * ((r2__ >> 8 * 2) & 0xff); t__ += 0x800080; t__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ = t__ & 0xff00ff; } while (0); r2__ = (d) & 0xff00ff ; do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = ((s) >> 8); r3__ = ((ma) >> 8); do { t__ = (r2__ & 0xff) * (r3__ & 0xff); t__ |= (r2__ & 0xff0000 ) * ((r3__ >> 8 * 2) & 0xff); t__ += 0x800080; t__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ = t__ & 0xff00ff; } while (0); r3__ = ((d) >> 8) & 0xff00ff; do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ( (t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff) ; } while (0); (s) = r1__ | (r2__ << 8); } while (0); |
349 | |
350 | *dst = s; |
351 | } |
352 | |
353 | dst++; |
354 | } |
355 | } |
356 | } |
357 | |
358 | static void |
359 | fast_composite_over_n_8888_8888_ca (pixman_implementation_t *imp, |
360 | pixman_composite_info_t *info) |
361 | { |
362 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
363 | uint32_t src, srca, s; |
364 | uint32_t *dst_line, *dst, d; |
365 | uint32_t *mask_line, *mask, ma; |
366 | int dst_stride, mask_stride; |
367 | int32_t w; |
368 | |
369 | src = _pixman_image_get_solid (imp, src_image, dest_image->bits.format); |
370 | |
371 | srca = src >> 24; |
372 | if (src == 0) |
373 | return; |
374 | |
375 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
376 | PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint32_t, mask_stride, mask_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = mask_image ->bits.bits; __stride__ = mask_image->bits.rowstride; ( mask_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (mask_line) = ((uint32_t *) __bits__) + (mask_stride ) * (mask_y) + (1) * (mask_x); } while (0); |
377 | |
378 | while (height--) |
379 | { |
380 | dst = dst_line; |
381 | dst_line += dst_stride; |
382 | mask = mask_line; |
383 | mask_line += mask_stride; |
384 | w = width; |
385 | |
386 | while (w--) |
387 | { |
388 | ma = *mask++; |
389 | if (ma == 0xffffffff) |
390 | { |
391 | if (srca == 0xff) |
392 | *dst = src; |
393 | else |
394 | *dst = over (src, *dst); |
395 | } |
396 | else if (ma) |
397 | { |
398 | d = *dst; |
399 | s = src; |
400 | |
401 | UN8x4_MUL_UN8x4 (s, ma)do { uint32_t r1__, r2__, r3__, t__; r1__ = (s); r2__ = (ma); do { t__ = (r1__ & 0xff) * (r2__ & 0xff); t__ |= (r1__ & 0xff0000) * ((r2__ >> 8 * 2) & 0xff); t__ += 0x800080; t__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ = t__ & 0xff00ff; } while (0); r2__ = (s) >> 8; r3__ = (ma) >> 8; do { t__ = (r2__ & 0xff) * (r3__ & 0xff); t__ |= (r2__ & 0xff0000) * ((r3__ >> 8 * 2) & 0xff); t__ += 0x800080; t__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ = t__ & 0xff00ff; } while (0); (s) = r1__ | (r2__ << 8); } while (0); |
402 | UN8x4_MUL_UN8 (ma, srca)do { uint32_t r1__, r2__, t__; r1__ = (ma); do { t__ = ((r1__ ) & 0xff00ff) * ((srca)); t__ += 0x800080; r1__ = (t__ + ( (t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff ; } while (0); r2__ = (ma) >> 8; do { t__ = ((r2__) & 0xff00ff) * ((srca)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); (ma) = r1__ | (r2__ << 8); } while (0); |
403 | ma = ~ma; |
404 | UN8x4_MUL_UN8x4_ADD_UN8x4 (d, ma, s)do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (ma); do { t__ = (r1__ & 0xff) * (r2__ & 0xff); t__ |= (r1__ & 0xff0000) * ((r2__ >> 8 * 2) & 0xff); t__ += 0x800080; t__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ = t__ & 0xff00ff; } while (0); r2__ = (s) & 0xff00ff ; do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = ((d) >> 8); r3__ = ((ma) >> 8); do { t__ = (r2__ & 0xff) * (r3__ & 0xff); t__ |= (r2__ & 0xff0000 ) * ((r3__ >> 8 * 2) & 0xff); t__ += 0x800080; t__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ = t__ & 0xff00ff; } while (0); r3__ = ((s) >> 8) & 0xff00ff; do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ( (t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff) ; } while (0); (d) = r1__ | (r2__ << 8); } while (0); |
405 | |
406 | *dst = d; |
407 | } |
408 | |
409 | dst++; |
410 | } |
411 | } |
412 | } |
413 | |
414 | static void |
415 | fast_composite_over_n_8_0888 (pixman_implementation_t *imp, |
416 | pixman_composite_info_t *info) |
417 | { |
418 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
419 | uint32_t src, srca; |
420 | uint8_t *dst_line, *dst; |
421 | uint32_t d; |
422 | uint8_t *mask_line, *mask, m; |
423 | int dst_stride, mask_stride; |
424 | int32_t w; |
425 | |
426 | src = _pixman_image_get_solid (imp, src_image, dest_image->bits.format); |
427 | |
428 | srca = src >> 24; |
429 | if (src == 0) |
430 | return; |
431 | |
432 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint8_t, dst_stride, dst_line, 3)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t); (dst_line) = ((uint8_t *) __bits__) + (dst_stride ) * (dest_y) + (3) * (dest_x); } while (0); |
433 | PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t, mask_stride, mask_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = mask_image ->bits.bits; __stride__ = mask_image->bits.rowstride; ( mask_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__) + (mask_stride ) * (mask_y) + (1) * (mask_x); } while (0); |
434 | |
435 | while (height--) |
436 | { |
437 | dst = dst_line; |
438 | dst_line += dst_stride; |
439 | mask = mask_line; |
440 | mask_line += mask_stride; |
441 | w = width; |
442 | |
443 | while (w--) |
444 | { |
445 | m = *mask++; |
446 | if (m == 0xff) |
447 | { |
448 | if (srca == 0xff) |
449 | { |
450 | d = src; |
451 | } |
452 | else |
453 | { |
454 | d = fetch_24 (dst); |
455 | d = over (src, d); |
456 | } |
457 | store_24 (dst, d); |
458 | } |
459 | else if (m) |
460 | { |
461 | d = over (in (src, m), fetch_24 (dst)); |
462 | store_24 (dst, d); |
463 | } |
464 | dst += 3; |
465 | } |
466 | } |
467 | } |
468 | |
469 | static void |
470 | fast_composite_over_n_8_0565 (pixman_implementation_t *imp, |
471 | pixman_composite_info_t *info) |
472 | { |
473 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
474 | uint32_t src, srca; |
475 | uint16_t *dst_line, *dst; |
476 | uint32_t d; |
477 | uint8_t *mask_line, *mask, m; |
478 | int dst_stride, mask_stride; |
479 | int32_t w; |
480 | |
481 | src = _pixman_image_get_solid (imp, src_image, dest_image->bits.format); |
482 | |
483 | srca = src >> 24; |
484 | if (src == 0) |
485 | return; |
486 | |
487 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint16_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
488 | PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t, mask_stride, mask_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = mask_image ->bits.bits; __stride__ = mask_image->bits.rowstride; ( mask_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__) + (mask_stride ) * (mask_y) + (1) * (mask_x); } while (0); |
489 | |
490 | while (height--) |
491 | { |
492 | dst = dst_line; |
493 | dst_line += dst_stride; |
494 | mask = mask_line; |
495 | mask_line += mask_stride; |
496 | w = width; |
497 | |
498 | while (w--) |
499 | { |
500 | m = *mask++; |
501 | if (m == 0xff) |
502 | { |
503 | if (srca == 0xff) |
504 | { |
505 | d = src; |
506 | } |
507 | else |
508 | { |
509 | d = *dst; |
510 | d = over (src, convert_0565_to_0888 (d)); |
511 | } |
512 | *dst = convert_8888_to_0565 (d); |
513 | } |
514 | else if (m) |
515 | { |
516 | d = *dst; |
517 | d = over (in (src, m), convert_0565_to_0888 (d)); |
518 | *dst = convert_8888_to_0565 (d); |
519 | } |
520 | dst++; |
521 | } |
522 | } |
523 | } |
524 | |
525 | static void |
526 | fast_composite_over_n_8888_0565_ca (pixman_implementation_t *imp, |
527 | pixman_composite_info_t *info) |
528 | { |
529 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
530 | uint32_t src, srca, s; |
531 | uint16_t src16; |
532 | uint16_t *dst_line, *dst; |
533 | uint32_t d; |
534 | uint32_t *mask_line, *mask, ma; |
535 | int dst_stride, mask_stride; |
536 | int32_t w; |
537 | |
538 | src = _pixman_image_get_solid (imp, src_image, dest_image->bits.format); |
539 | |
540 | srca = src >> 24; |
541 | if (src == 0) |
542 | return; |
543 | |
544 | src16 = convert_8888_to_0565 (src); |
545 | |
546 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint16_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
547 | PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint32_t, mask_stride, mask_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = mask_image ->bits.bits; __stride__ = mask_image->bits.rowstride; ( mask_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (mask_line) = ((uint32_t *) __bits__) + (mask_stride ) * (mask_y) + (1) * (mask_x); } while (0); |
548 | |
549 | while (height--) |
550 | { |
551 | dst = dst_line; |
552 | dst_line += dst_stride; |
553 | mask = mask_line; |
554 | mask_line += mask_stride; |
555 | w = width; |
556 | |
557 | while (w--) |
558 | { |
559 | ma = *mask++; |
560 | if (ma == 0xffffffff) |
561 | { |
562 | if (srca == 0xff) |
563 | { |
564 | *dst = src16; |
565 | } |
566 | else |
567 | { |
568 | d = *dst; |
569 | d = over (src, convert_0565_to_0888 (d)); |
570 | *dst = convert_8888_to_0565 (d); |
571 | } |
572 | } |
573 | else if (ma) |
574 | { |
575 | d = *dst; |
576 | d = convert_0565_to_0888 (d); |
577 | |
578 | s = src; |
579 | |
580 | UN8x4_MUL_UN8x4 (s, ma)do { uint32_t r1__, r2__, r3__, t__; r1__ = (s); r2__ = (ma); do { t__ = (r1__ & 0xff) * (r2__ & 0xff); t__ |= (r1__ & 0xff0000) * ((r2__ >> 8 * 2) & 0xff); t__ += 0x800080; t__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ = t__ & 0xff00ff; } while (0); r2__ = (s) >> 8; r3__ = (ma) >> 8; do { t__ = (r2__ & 0xff) * (r3__ & 0xff); t__ |= (r2__ & 0xff0000) * ((r3__ >> 8 * 2) & 0xff); t__ += 0x800080; t__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ = t__ & 0xff00ff; } while (0); (s) = r1__ | (r2__ << 8); } while (0); |
581 | UN8x4_MUL_UN8 (ma, srca)do { uint32_t r1__, r2__, t__; r1__ = (ma); do { t__ = ((r1__ ) & 0xff00ff) * ((srca)); t__ += 0x800080; r1__ = (t__ + ( (t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff ; } while (0); r2__ = (ma) >> 8; do { t__ = ((r2__) & 0xff00ff) * ((srca)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); (ma) = r1__ | (r2__ << 8); } while (0); |
582 | ma = ~ma; |
583 | UN8x4_MUL_UN8x4_ADD_UN8x4 (d, ma, s)do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (ma); do { t__ = (r1__ & 0xff) * (r2__ & 0xff); t__ |= (r1__ & 0xff0000) * ((r2__ >> 8 * 2) & 0xff); t__ += 0x800080; t__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ = t__ & 0xff00ff; } while (0); r2__ = (s) & 0xff00ff ; do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = ((d) >> 8); r3__ = ((ma) >> 8); do { t__ = (r2__ & 0xff) * (r3__ & 0xff); t__ |= (r2__ & 0xff0000 ) * ((r3__ >> 8 * 2) & 0xff); t__ += 0x800080; t__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ = t__ & 0xff00ff; } while (0); r3__ = ((s) >> 8) & 0xff00ff; do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ( (t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff) ; } while (0); (d) = r1__ | (r2__ << 8); } while (0); |
584 | |
585 | *dst = convert_8888_to_0565 (d); |
586 | } |
587 | dst++; |
588 | } |
589 | } |
590 | } |
591 | |
592 | static void |
593 | fast_composite_over_8888_8888 (pixman_implementation_t *imp, |
594 | pixman_composite_info_t *info) |
595 | { |
596 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
597 | uint32_t *dst_line, *dst; |
598 | uint32_t *src_line, *src, s; |
599 | int dst_stride, src_stride; |
600 | uint8_t a; |
601 | int32_t w; |
602 | |
603 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
604 | PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_line) = ((uint32_t *) __bits__) + (src_stride) * (src_y ) + (1) * (src_x); } while (0); |
605 | |
606 | while (height--) |
607 | { |
608 | dst = dst_line; |
609 | dst_line += dst_stride; |
610 | src = src_line; |
611 | src_line += src_stride; |
612 | w = width; |
613 | |
614 | while (w--) |
615 | { |
616 | s = *src++; |
617 | a = s >> 24; |
618 | if (a == 0xff) |
619 | *dst = s; |
620 | else if (s) |
621 | *dst = over (s, *dst); |
622 | dst++; |
623 | } |
624 | } |
625 | } |
626 | |
627 | static void |
628 | fast_composite_src_x888_8888 (pixman_implementation_t *imp, |
629 | pixman_composite_info_t *info) |
630 | { |
631 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
632 | uint32_t *dst_line, *dst; |
633 | uint32_t *src_line, *src; |
634 | int dst_stride, src_stride; |
635 | int32_t w; |
636 | |
637 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
638 | PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_line) = ((uint32_t *) __bits__) + (src_stride) * (src_y ) + (1) * (src_x); } while (0); |
639 | |
640 | while (height--) |
641 | { |
642 | dst = dst_line; |
643 | dst_line += dst_stride; |
644 | src = src_line; |
645 | src_line += src_stride; |
646 | w = width; |
647 | |
648 | while (w--) |
649 | *dst++ = (*src++) | 0xff000000; |
650 | } |
651 | } |
652 | |
653 | #if 0 |
654 | static void |
655 | fast_composite_over_8888_0888 (pixman_implementation_t *imp, |
656 | pixman_composite_info_t *info) |
657 | { |
658 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
659 | uint8_t *dst_line, *dst; |
660 | uint32_t d; |
661 | uint32_t *src_line, *src, s; |
662 | uint8_t a; |
663 | int dst_stride, src_stride; |
664 | int32_t w; |
665 | |
666 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint8_t, dst_stride, dst_line, 3)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t); (dst_line) = ((uint8_t *) __bits__) + (dst_stride ) * (dest_y) + (3) * (dest_x); } while (0); |
667 | PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_line) = ((uint32_t *) __bits__) + (src_stride) * (src_y ) + (1) * (src_x); } while (0); |
668 | |
669 | while (height--) |
670 | { |
671 | dst = dst_line; |
672 | dst_line += dst_stride; |
673 | src = src_line; |
674 | src_line += src_stride; |
675 | w = width; |
676 | |
677 | while (w--) |
678 | { |
679 | s = *src++; |
680 | a = s >> 24; |
681 | if (a) |
682 | { |
683 | if (a == 0xff) |
684 | d = s; |
685 | else |
686 | d = over (s, fetch_24 (dst)); |
687 | |
688 | store_24 (dst, d); |
689 | } |
690 | dst += 3; |
691 | } |
692 | } |
693 | } |
694 | #endif |
695 | |
696 | static void |
697 | fast_composite_over_8888_0565 (pixman_implementation_t *imp, |
698 | pixman_composite_info_t *info) |
699 | { |
700 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
701 | uint16_t *dst_line, *dst; |
702 | uint32_t d; |
703 | uint32_t *src_line, *src, s; |
704 | uint8_t a; |
705 | int dst_stride, src_stride; |
706 | int32_t w; |
707 | |
708 | PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_line) = ((uint32_t *) __bits__) + (src_stride) * (src_y ) + (1) * (src_x); } while (0); |
709 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint16_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
710 | |
711 | while (height--) |
712 | { |
713 | dst = dst_line; |
714 | dst_line += dst_stride; |
715 | src = src_line; |
716 | src_line += src_stride; |
717 | w = width; |
718 | |
719 | while (w--) |
720 | { |
721 | s = *src++; |
722 | a = s >> 24; |
723 | if (s) |
724 | { |
725 | if (a == 0xff) |
726 | { |
727 | d = s; |
728 | } |
729 | else |
730 | { |
731 | d = *dst; |
732 | d = over (s, convert_0565_to_0888 (d)); |
733 | } |
734 | *dst = convert_8888_to_0565 (d); |
735 | } |
736 | dst++; |
737 | } |
738 | } |
739 | } |
740 | |
741 | static void |
742 | fast_composite_add_8_8 (pixman_implementation_t *imp, |
743 | pixman_composite_info_t *info) |
744 | { |
745 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
746 | uint8_t *dst_line, *dst; |
747 | uint8_t *src_line, *src; |
748 | int dst_stride, src_stride; |
749 | int32_t w; |
750 | uint8_t s, d; |
751 | uint16_t t; |
752 | |
753 | PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint8_t, src_stride, src_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t ); (src_line) = ((uint8_t *) __bits__) + (src_stride) * (src_y ) + (1) * (src_x); } while (0); |
754 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint8_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t); (dst_line) = ((uint8_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
755 | |
756 | while (height--) |
757 | { |
758 | dst = dst_line; |
759 | dst_line += dst_stride; |
760 | src = src_line; |
761 | src_line += src_stride; |
762 | w = width; |
763 | |
764 | while (w--) |
765 | { |
766 | s = *src++; |
767 | if (s) |
768 | { |
769 | if (s != 0xff) |
770 | { |
771 | d = *dst; |
772 | t = d + s; |
773 | s = t | (0 - (t >> 8)); |
774 | } |
775 | *dst = s; |
776 | } |
777 | dst++; |
778 | } |
779 | } |
780 | } |
781 | |
782 | static void |
783 | fast_composite_add_0565_0565 (pixman_implementation_t *imp, |
784 | pixman_composite_info_t *info) |
785 | { |
786 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
787 | uint16_t *dst_line, *dst; |
788 | uint32_t d; |
789 | uint16_t *src_line, *src; |
790 | uint32_t s; |
791 | int dst_stride, src_stride; |
792 | int32_t w; |
793 | |
794 | PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint16_t, src_stride, src_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t ); (src_line) = ((uint16_t *) __bits__) + (src_stride) * (src_y ) + (1) * (src_x); } while (0); |
795 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint16_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
796 | |
797 | while (height--) |
798 | { |
799 | dst = dst_line; |
800 | dst_line += dst_stride; |
801 | src = src_line; |
802 | src_line += src_stride; |
803 | w = width; |
804 | |
805 | while (w--) |
806 | { |
807 | s = *src++; |
808 | if (s) |
809 | { |
810 | d = *dst; |
811 | s = convert_0565_to_8888 (s); |
812 | if (d) |
813 | { |
814 | d = convert_0565_to_8888 (d); |
815 | UN8x4_ADD_UN8x4 (s, d)do { uint32_t r1__, r2__, r3__, t__; r1__ = (s) & 0xff00ff ; r2__ = (d) & 0xff00ff; do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0); r2__ = ((s) >> 8) & 0xff00ff ; r3__ = ((d) >> 8) & 0xff00ff; do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); s = r1__ | (r2__ << 8); } while (0); |
816 | } |
817 | *dst = convert_8888_to_0565 (s); |
818 | } |
819 | dst++; |
820 | } |
821 | } |
822 | } |
823 | |
824 | static void |
825 | fast_composite_add_8888_8888 (pixman_implementation_t *imp, |
826 | pixman_composite_info_t *info) |
827 | { |
828 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
829 | uint32_t *dst_line, *dst; |
830 | uint32_t *src_line, *src; |
831 | int dst_stride, src_stride; |
832 | int32_t w; |
833 | uint32_t s, d; |
834 | |
835 | PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_line) = ((uint32_t *) __bits__) + (src_stride) * (src_y ) + (1) * (src_x); } while (0); |
836 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
837 | |
838 | while (height--) |
839 | { |
840 | dst = dst_line; |
841 | dst_line += dst_stride; |
842 | src = src_line; |
843 | src_line += src_stride; |
844 | w = width; |
845 | |
846 | while (w--) |
847 | { |
848 | s = *src++; |
849 | if (s) |
850 | { |
851 | if (s != 0xffffffff) |
852 | { |
853 | d = *dst; |
854 | if (d) |
855 | UN8x4_ADD_UN8x4 (s, d)do { uint32_t r1__, r2__, r3__, t__; r1__ = (s) & 0xff00ff ; r2__ = (d) & 0xff00ff; do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0); r2__ = ((s) >> 8) & 0xff00ff ; r3__ = ((d) >> 8) & 0xff00ff; do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); s = r1__ | (r2__ << 8); } while (0); |
856 | } |
857 | *dst = s; |
858 | } |
859 | dst++; |
860 | } |
861 | } |
862 | } |
863 | |
864 | static void |
865 | fast_composite_add_n_8_8 (pixman_implementation_t *imp, |
866 | pixman_composite_info_t *info) |
867 | { |
868 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
869 | uint8_t *dst_line, *dst; |
870 | uint8_t *mask_line, *mask; |
871 | int dst_stride, mask_stride; |
872 | int32_t w; |
873 | uint32_t src; |
874 | uint8_t sa; |
875 | |
876 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint8_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t); (dst_line) = ((uint8_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
877 | PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t, mask_stride, mask_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = mask_image ->bits.bits; __stride__ = mask_image->bits.rowstride; ( mask_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__) + (mask_stride ) * (mask_y) + (1) * (mask_x); } while (0); |
878 | src = _pixman_image_get_solid (imp, src_image, dest_image->bits.format); |
879 | sa = (src >> 24); |
880 | |
881 | while (height--) |
882 | { |
883 | dst = dst_line; |
884 | dst_line += dst_stride; |
885 | mask = mask_line; |
886 | mask_line += mask_stride; |
887 | w = width; |
888 | |
889 | while (w--) |
890 | { |
891 | uint16_t tmp; |
892 | uint16_t a; |
893 | uint32_t m, d; |
894 | uint32_t r; |
895 | |
896 | a = *mask++; |
897 | d = *dst; |
898 | |
899 | m = MUL_UN8 (sa, a, tmp)((tmp) = (sa) * (uint16_t)(a) + 0x80, ((((tmp) >> 8 ) + (tmp) ) >> 8 )); |
900 | r = ADD_UN8 (m, d, tmp)((tmp) = (m) + (d), (uint32_t) (uint8_t) ((tmp) | (0 - ((tmp) >> 8)))); |
901 | |
902 | *dst++ = r; |
903 | } |
904 | } |
905 | } |
906 | |
907 | #ifdef WORDS_BIGENDIAN |
908 | #define CREATE_BITMASK(n)(1U << (n)) (0x80000000 >> (n)) |
909 | #define UPDATE_BITMASK(n)((n) << 1) ((n) >> 1) |
910 | #else |
911 | #define CREATE_BITMASK(n)(1U << (n)) (1U << (n)) |
912 | #define UPDATE_BITMASK(n)((n) << 1) ((n) << 1) |
913 | #endif |
914 | |
915 | #define TEST_BIT(p, n)(*((p) + ((n) >> 5)) & (1U << ((n) & 31)) ) \ |
916 | (*((p) + ((n) >> 5)) & CREATE_BITMASK ((n) & 31)(1U << ((n) & 31))) |
917 | #define SET_BIT(p, n)do { *((p) + ((n) >> 5)) |= (1U << ((n) & 31) ); } while (0); \ |
918 | do { *((p) + ((n) >> 5)) |= CREATE_BITMASK ((n) & 31)(1U << ((n) & 31)); } while (0); |
919 | |
920 | static void |
921 | fast_composite_add_1_1 (pixman_implementation_t *imp, |
922 | pixman_composite_info_t *info) |
923 | { |
924 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
925 | uint32_t *dst_line, *dst; |
926 | uint32_t *src_line, *src; |
927 | int dst_stride, src_stride; |
928 | int32_t w; |
929 | |
930 | PIXMAN_IMAGE_GET_LINE (src_image, 0, src_y, uint32_t,do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_line) = ((uint32_t *) __bits__) + (src_stride) * (src_y ) + (1) * (0); } while (0) |
931 | src_stride, src_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_line) = ((uint32_t *) __bits__) + (src_stride) * (src_y ) + (1) * (0); } while (0); |
932 | PIXMAN_IMAGE_GET_LINE (dest_image, 0, dest_y, uint32_t,do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (0); } while (0) |
933 | dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (0); } while (0); |
934 | |
935 | while (height--) |
936 | { |
937 | dst = dst_line; |
938 | dst_line += dst_stride; |
939 | src = src_line; |
940 | src_line += src_stride; |
941 | w = width; |
942 | |
943 | while (w--) |
944 | { |
945 | /* |
946 | * TODO: improve performance by processing uint32_t data instead |
947 | * of individual bits |
948 | */ |
949 | if (TEST_BIT (src, src_x + w)(*((src) + ((src_x + w) >> 5)) & (1U << ((src_x + w) & 31)))) |
950 | SET_BIT (dst, dest_x + w)do { *((dst) + ((dest_x + w) >> 5)) |= (1U << ((dest_x + w) & 31)); } while (0);; |
951 | } |
952 | } |
953 | } |
954 | |
955 | static void |
956 | fast_composite_over_n_1_8888 (pixman_implementation_t *imp, |
957 | pixman_composite_info_t *info) |
958 | { |
959 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
960 | uint32_t src, srca; |
961 | uint32_t *dst, *dst_line; |
962 | uint32_t *mask, *mask_line; |
963 | int mask_stride, dst_stride; |
964 | uint32_t bitcache, bitmask; |
965 | int32_t w; |
966 | |
967 | if (width <= 0) |
968 | return; |
969 | |
970 | src = _pixman_image_get_solid (imp, src_image, dest_image->bits.format); |
971 | srca = src >> 24; |
972 | if (src == 0) |
973 | return; |
974 | |
975 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint32_t,do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0) |
976 | dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
977 | PIXMAN_IMAGE_GET_LINE (mask_image, 0, mask_y, uint32_t,do { uint32_t *__bits__; int __stride__; __bits__ = mask_image ->bits.bits; __stride__ = mask_image->bits.rowstride; ( mask_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (mask_line) = ((uint32_t *) __bits__) + (mask_stride ) * (mask_y) + (1) * (0); } while (0) |
978 | mask_stride, mask_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = mask_image ->bits.bits; __stride__ = mask_image->bits.rowstride; ( mask_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (mask_line) = ((uint32_t *) __bits__) + (mask_stride ) * (mask_y) + (1) * (0); } while (0); |
979 | mask_line += mask_x >> 5; |
980 | |
981 | if (srca == 0xff) |
982 | { |
983 | while (height--) |
984 | { |
985 | dst = dst_line; |
986 | dst_line += dst_stride; |
987 | mask = mask_line; |
988 | mask_line += mask_stride; |
989 | w = width; |
990 | |
991 | bitcache = *mask++; |
992 | bitmask = CREATE_BITMASK (mask_x & 31)(1U << (mask_x & 31)); |
993 | |
994 | while (w--) |
995 | { |
996 | if (bitmask == 0) |
997 | { |
998 | bitcache = *mask++; |
999 | bitmask = CREATE_BITMASK (0)(1U << (0)); |
1000 | } |
1001 | if (bitcache & bitmask) |
1002 | *dst = src; |
1003 | bitmask = UPDATE_BITMASK (bitmask)((bitmask) << 1); |
1004 | dst++; |
1005 | } |
1006 | } |
1007 | } |
1008 | else |
1009 | { |
1010 | while (height--) |
1011 | { |
1012 | dst = dst_line; |
1013 | dst_line += dst_stride; |
1014 | mask = mask_line; |
1015 | mask_line += mask_stride; |
1016 | w = width; |
1017 | |
1018 | bitcache = *mask++; |
1019 | bitmask = CREATE_BITMASK (mask_x & 31)(1U << (mask_x & 31)); |
1020 | |
1021 | while (w--) |
1022 | { |
1023 | if (bitmask == 0) |
1024 | { |
1025 | bitcache = *mask++; |
1026 | bitmask = CREATE_BITMASK (0)(1U << (0)); |
1027 | } |
1028 | if (bitcache & bitmask) |
1029 | *dst = over (src, *dst); |
1030 | bitmask = UPDATE_BITMASK (bitmask)((bitmask) << 1); |
1031 | dst++; |
1032 | } |
1033 | } |
1034 | } |
1035 | } |
1036 | |
1037 | static void |
1038 | fast_composite_over_n_1_0565 (pixman_implementation_t *imp, |
1039 | pixman_composite_info_t *info) |
1040 | { |
1041 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
1042 | uint32_t src, srca; |
1043 | uint16_t *dst, *dst_line; |
1044 | uint32_t *mask, *mask_line; |
1045 | int mask_stride, dst_stride; |
1046 | uint32_t bitcache, bitmask; |
1047 | int32_t w; |
1048 | uint32_t d; |
1049 | uint16_t src565; |
1050 | |
1051 | if (width <= 0) |
1052 | return; |
1053 | |
1054 | src = _pixman_image_get_solid (imp, src_image, dest_image->bits.format); |
1055 | srca = src >> 24; |
1056 | if (src == 0) |
1057 | return; |
1058 | |
1059 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint16_t,do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0) |
1060 | dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
1061 | PIXMAN_IMAGE_GET_LINE (mask_image, 0, mask_y, uint32_t,do { uint32_t *__bits__; int __stride__; __bits__ = mask_image ->bits.bits; __stride__ = mask_image->bits.rowstride; ( mask_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (mask_line) = ((uint32_t *) __bits__) + (mask_stride ) * (mask_y) + (1) * (0); } while (0) |
1062 | mask_stride, mask_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = mask_image ->bits.bits; __stride__ = mask_image->bits.rowstride; ( mask_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (mask_line) = ((uint32_t *) __bits__) + (mask_stride ) * (mask_y) + (1) * (0); } while (0); |
1063 | mask_line += mask_x >> 5; |
1064 | |
1065 | if (srca == 0xff) |
1066 | { |
1067 | src565 = convert_8888_to_0565 (src); |
1068 | while (height--) |
1069 | { |
1070 | dst = dst_line; |
1071 | dst_line += dst_stride; |
1072 | mask = mask_line; |
1073 | mask_line += mask_stride; |
1074 | w = width; |
1075 | |
1076 | bitcache = *mask++; |
1077 | bitmask = CREATE_BITMASK (mask_x & 31)(1U << (mask_x & 31)); |
1078 | |
1079 | while (w--) |
1080 | { |
1081 | if (bitmask == 0) |
1082 | { |
1083 | bitcache = *mask++; |
1084 | bitmask = CREATE_BITMASK (0)(1U << (0)); |
1085 | } |
1086 | if (bitcache & bitmask) |
1087 | *dst = src565; |
1088 | bitmask = UPDATE_BITMASK (bitmask)((bitmask) << 1); |
1089 | dst++; |
1090 | } |
1091 | } |
1092 | } |
1093 | else |
1094 | { |
1095 | while (height--) |
1096 | { |
1097 | dst = dst_line; |
1098 | dst_line += dst_stride; |
1099 | mask = mask_line; |
1100 | mask_line += mask_stride; |
1101 | w = width; |
1102 | |
1103 | bitcache = *mask++; |
1104 | bitmask = CREATE_BITMASK (mask_x & 31)(1U << (mask_x & 31)); |
1105 | |
1106 | while (w--) |
1107 | { |
1108 | if (bitmask == 0) |
1109 | { |
1110 | bitcache = *mask++; |
1111 | bitmask = CREATE_BITMASK (0)(1U << (0)); |
1112 | } |
1113 | if (bitcache & bitmask) |
1114 | { |
1115 | d = over (src, convert_0565_to_0888 (*dst)); |
1116 | *dst = convert_8888_to_0565 (d); |
1117 | } |
1118 | bitmask = UPDATE_BITMASK (bitmask)((bitmask) << 1); |
1119 | dst++; |
1120 | } |
1121 | } |
1122 | } |
1123 | } |
1124 | |
1125 | /* |
1126 | * Simple bitblt |
1127 | */ |
1128 | |
1129 | static void |
1130 | fast_composite_solid_fill (pixman_implementation_t *imp, |
1131 | pixman_composite_info_t *info) |
1132 | { |
1133 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
1134 | uint32_t src; |
1135 | |
1136 | src = _pixman_image_get_solid (imp, src_image, dest_image->bits.format); |
1137 | |
1138 | if (dest_image->bits.format == PIXMAN_a1) |
1139 | { |
1140 | src = src >> 31; |
1141 | } |
1142 | else if (dest_image->bits.format == PIXMAN_a8) |
1143 | { |
1144 | src = src >> 24; |
1145 | } |
1146 | else if (dest_image->bits.format == PIXMAN_r5g6b5 || |
1147 | dest_image->bits.format == PIXMAN_b5g6r5) |
1148 | { |
1149 | src = convert_8888_to_0565 (src); |
1150 | } |
1151 | |
1152 | pixman_fill_moz_pixman_fill (dest_image->bits.bits, dest_image->bits.rowstride, |
1153 | PIXMAN_FORMAT_BPP (dest_image->bits.format)(((dest_image->bits.format >> (24)) & ((1 << (8)) - 1)) << ((dest_image->bits.format >> 22 ) & 3)), |
1154 | dest_x, dest_y, |
1155 | width, height, |
1156 | src); |
1157 | } |
1158 | |
1159 | static void |
1160 | fast_composite_src_memcpy (pixman_implementation_t *imp, |
1161 | pixman_composite_info_t *info) |
1162 | { |
1163 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
1164 | int bpp = PIXMAN_FORMAT_BPP (dest_image->bits.format)(((dest_image->bits.format >> (24)) & ((1 << (8)) - 1)) << ((dest_image->bits.format >> 22 ) & 3)) / 8; |
1165 | uint32_t n_bytes = width * bpp; |
1166 | int dst_stride, src_stride; |
1167 | uint8_t *dst; |
1168 | uint8_t *src; |
1169 | |
1170 | src_stride = src_image->bits.rowstride * 4; |
1171 | dst_stride = dest_image->bits.rowstride * 4; |
1172 | |
1173 | src = (uint8_t *)src_image->bits.bits + src_y * src_stride + src_x * bpp; |
1174 | dst = (uint8_t *)dest_image->bits.bits + dest_y * dst_stride + dest_x * bpp; |
1175 | |
1176 | while (height--) |
1177 | { |
1178 | memcpy (dst, src, n_bytes); |
1179 | |
1180 | dst += dst_stride; |
1181 | src += src_stride; |
1182 | } |
1183 | } |
1184 | |
1185 | FAST_NEAREST (8888_8888_cover, 8888, 8888, uint32_t, uint32_t, SRC, COVER)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_cover_SRC (uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_SRC == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_SRC != PIXMAN_OP_SRC && PIXMAN_OP_SRC != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (-1 == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s1 = *(src + x1); x2 = ((int) ((vx) >> 16)); vx += unit_x ; if (-1 == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff ) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff ; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0) ; (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_8888 ( s2); } else if (s2) { d = convert_8888_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); *dst++ = convert_8888_to_8888 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_cover_SRC_8888_8888_cover_SRC_wrapper ( const uint8_t *mask, uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_8888_cover_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_8888_cover_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint32_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint32_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (-1 == PIXMAN_REPEAT_NORMAL) { max_vy = ((pixman_fixed_t ) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed); repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); } if (-1 == PIXMAN_REPEAT_PAD || -1 == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (-1 == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); if (-1 == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD , &y, src_image->bits.height); src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_8888_cover_SRC_8888_8888_cover_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_8888_cover_SRC_8888_8888_cover_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_cover_SRC_8888_8888_cover_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (-1 == PIXMAN_REPEAT_NONE ) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_8888_cover_SRC_8888_8888_cover_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_8888_cover_SRC_8888_8888_cover_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_8888_cover_SRC_8888_8888_cover_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_cover_SRC_8888_8888_cover_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_8888_cover_SRC_8888_8888_cover_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1186 | FAST_NEAREST (8888_8888_none, 8888, 8888, uint32_t, uint32_t, SRC, NONE)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_none_SRC (uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_SRC == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_SRC != PIXMAN_OP_SRC && PIXMAN_OP_SRC != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ((int ) ((vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff ) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff ; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0) ; (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_8888 ( s2); } else if (s2) { d = convert_8888_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); *dst++ = convert_8888_to_8888 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_none_SRC_8888_8888_none_SRC_wrapper ( const uint8_t *mask, uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_8888_none_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_8888_none_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint32_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint32_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL ) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_8888_8888_none_SRC_8888_8888_none_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_8888_none_SRC_8888_8888_none_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_none_SRC_8888_8888_none_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NONE ) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_8888_none_SRC_8888_8888_none_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_8888_none_SRC_8888_8888_none_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_8888_none_SRC_8888_8888_none_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_none_SRC_8888_8888_none_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_8888_none_SRC_8888_8888_none_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1187 | FAST_NEAREST (8888_8888_pad, 8888, 8888, uint32_t, uint32_t, SRC, PAD)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_pad_SRC (uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_SRC == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_SRC != PIXMAN_OP_SRC && PIXMAN_OP_SRC != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ((int) (( vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL ) { while (vx >= 0) vx -= src_width_fixed; } s2 = *(src + x2 ); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_8888 (s2); } else if (s2) { d = convert_8888_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); *dst++ = convert_8888_to_8888 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_pad_SRC_8888_8888_pad_SRC_wrapper ( const uint8_t *mask, uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_8888_pad_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_8888_pad_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint32_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint32_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_8888_8888_pad_SRC_8888_8888_pad_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_8888_pad_SRC_8888_8888_pad_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_pad_SRC_8888_8888_pad_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_8888_pad_SRC_8888_8888_pad_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_8888_pad_SRC_8888_8888_pad_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_8888_pad_SRC_8888_8888_pad_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_pad_SRC_8888_8888_pad_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_8888_pad_SRC_8888_8888_pad_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1188 | FAST_NEAREST (8888_8888_normal, 8888, 8888, uint32_t, uint32_t, SRC, NORMAL)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_normal_SRC (uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_SRC == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_SRC != PIXMAN_OP_SRC && PIXMAN_OP_SRC != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { while ( vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ( (int) ((vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff ) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff ; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0) ; (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_8888 ( s2); } else if (s2) { d = convert_8888_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); *dst++ = convert_8888_to_8888 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_normal_SRC_8888_8888_normal_SRC_wrapper ( const uint8_t *mask, uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_8888_normal_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_8888_normal_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint32_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint32_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { max_vy = ((pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL ) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_8888_8888_normal_SRC_8888_8888_normal_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_8888_normal_SRC_8888_8888_normal_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_normal_SRC_8888_8888_normal_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NONE) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_8888_normal_SRC_8888_8888_normal_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_8888_normal_SRC_8888_8888_normal_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_8888_normal_SRC_8888_8888_normal_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_normal_SRC_8888_8888_normal_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_8888_normal_SRC_8888_8888_normal_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1189 | FAST_NEAREST (x888_8888_cover, x888, 8888, uint32_t, uint32_t, SRC, COVER)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_x888_8888_cover_SRC (uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_SRC == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_SRC != PIXMAN_OP_SRC && PIXMAN_OP_SRC != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (-1 == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s1 = *(src + x1); x2 = ((int) ((vx) >> 16)); vx += unit_x ; if (-1 == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = 0xff; a2 = 0xff; if (a1 == 0xff) { *dst = convert_x888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_x888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; if (a2 == 0xff) { *dst = convert_x888_to_8888 (s2); } else if (s2) { d = convert_8888_to_8888 (*dst); s2 = convert_x888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_x888_to_8888 (s1); *dst++ = convert_x888_to_8888 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = 0xff ; if (a1 == 0xff) { *dst = convert_x888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_x888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a1)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_x888_to_8888 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_x888_8888_cover_SRC_x888_8888_cover_SRC_wrapper ( const uint8_t *mask, uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_x888_8888_cover_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_x888_8888_cover_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint32_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint32_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (-1 == PIXMAN_REPEAT_NORMAL) { max_vy = ((pixman_fixed_t ) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed); repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); } if (-1 == PIXMAN_REPEAT_PAD || -1 == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (-1 == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); if (-1 == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD , &y, src_image->bits.height); src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_x888_8888_cover_SRC_x888_8888_cover_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_x888_8888_cover_SRC_x888_8888_cover_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_x888_8888_cover_SRC_x888_8888_cover_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (-1 == PIXMAN_REPEAT_NONE ) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_x888_8888_cover_SRC_x888_8888_cover_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_x888_8888_cover_SRC_x888_8888_cover_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_x888_8888_cover_SRC_x888_8888_cover_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_x888_8888_cover_SRC_x888_8888_cover_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_x888_8888_cover_SRC_x888_8888_cover_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1190 | FAST_NEAREST (x888_8888_pad, x888, 8888, uint32_t, uint32_t, SRC, PAD)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_x888_8888_pad_SRC (uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_SRC == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_SRC != PIXMAN_OP_SRC && PIXMAN_OP_SRC != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ((int) (( vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL ) { while (vx >= 0) vx -= src_width_fixed; } s2 = *(src + x2 ); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = 0xff; a2 = 0xff ; if (a1 == 0xff) { *dst = convert_x888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_x888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a1)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; if (a2 == 0xff) { *dst = convert_x888_to_8888 (s2); } else if ( s2) { d = convert_8888_to_8888 (*dst); s2 = convert_x888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_x888_to_8888 (s1); *dst++ = convert_x888_to_8888 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = 0xff ; if (a1 == 0xff) { *dst = convert_x888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_x888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a1)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_x888_to_8888 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_x888_8888_pad_SRC_x888_8888_pad_SRC_wrapper ( const uint8_t *mask, uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_x888_8888_pad_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_x888_8888_pad_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint32_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint32_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_x888_8888_pad_SRC_x888_8888_pad_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_x888_8888_pad_SRC_x888_8888_pad_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_x888_8888_pad_SRC_x888_8888_pad_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_x888_8888_pad_SRC_x888_8888_pad_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_x888_8888_pad_SRC_x888_8888_pad_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_x888_8888_pad_SRC_x888_8888_pad_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_x888_8888_pad_SRC_x888_8888_pad_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_x888_8888_pad_SRC_x888_8888_pad_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1191 | FAST_NEAREST (x888_8888_normal, x888, 8888, uint32_t, uint32_t, SRC, NORMAL)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_x888_8888_normal_SRC (uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_SRC == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_SRC != PIXMAN_OP_SRC && PIXMAN_OP_SRC != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { while ( vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ( (int) ((vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = 0xff; a2 = 0xff; if (a1 == 0xff) { *dst = convert_x888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_x888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; if (a2 == 0xff) { *dst = convert_x888_to_8888 (s2); } else if (s2) { d = convert_8888_to_8888 (*dst); s2 = convert_x888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_x888_to_8888 (s1); *dst++ = convert_x888_to_8888 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = 0xff ; if (a1 == 0xff) { *dst = convert_x888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_x888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a1)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_x888_to_8888 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_x888_8888_normal_SRC_x888_8888_normal_SRC_wrapper ( const uint8_t *mask, uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_x888_8888_normal_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_x888_8888_normal_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint32_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint32_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { max_vy = ((pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL ) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_x888_8888_normal_SRC_x888_8888_normal_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_x888_8888_normal_SRC_x888_8888_normal_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_x888_8888_normal_SRC_x888_8888_normal_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NONE) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_x888_8888_normal_SRC_x888_8888_normal_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_x888_8888_normal_SRC_x888_8888_normal_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_x888_8888_normal_SRC_x888_8888_normal_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_x888_8888_normal_SRC_x888_8888_normal_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_x888_8888_normal_SRC_x888_8888_normal_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1192 | FAST_NEAREST (8888_8888_cover, 8888, 8888, uint32_t, uint32_t, OVER, COVER)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_cover_OVER (uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_OVER == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_OVER != PIXMAN_OP_SRC && PIXMAN_OP_OVER != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (-1 == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s1 = *(src + x1); x2 = ((int) ((vx) >> 16)); vx += unit_x ; if (-1 == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff ) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff ; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0) ; (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_8888 ( s2); } else if (s2) { d = convert_8888_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); *dst++ = convert_8888_to_8888 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_cover_OVER_8888_8888_cover_OVER_wrapper ( const uint8_t *mask, uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_8888_cover_OVER (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_8888_cover_OVER (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint32_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint32_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (-1 == PIXMAN_REPEAT_NORMAL) { max_vy = ((pixman_fixed_t ) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed); repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); } if (-1 == PIXMAN_REPEAT_PAD || -1 == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (-1 == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); if (-1 == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD , &y, src_image->bits.height); src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_8888_cover_OVER_8888_8888_cover_OVER_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_8888_cover_OVER_8888_8888_cover_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_cover_OVER_8888_8888_cover_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (-1 == PIXMAN_REPEAT_NONE ) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_8888_cover_OVER_8888_8888_cover_OVER_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_8888_cover_OVER_8888_8888_cover_OVER_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_8888_cover_OVER_8888_8888_cover_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_cover_OVER_8888_8888_cover_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_8888_cover_OVER_8888_8888_cover_OVER_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1193 | FAST_NEAREST (8888_8888_none, 8888, 8888, uint32_t, uint32_t, OVER, NONE)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_none_OVER (uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_OVER == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_OVER != PIXMAN_OP_SRC && PIXMAN_OP_OVER != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ((int ) ((vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff ) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff ; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0) ; (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_8888 ( s2); } else if (s2) { d = convert_8888_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); *dst++ = convert_8888_to_8888 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_none_OVER_8888_8888_none_OVER_wrapper ( const uint8_t *mask, uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_8888_none_OVER (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_8888_none_OVER (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint32_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint32_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL ) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_8888_8888_none_OVER_8888_8888_none_OVER_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_8888_none_OVER_8888_8888_none_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_none_OVER_8888_8888_none_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NONE ) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_8888_none_OVER_8888_8888_none_OVER_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_8888_none_OVER_8888_8888_none_OVER_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_8888_none_OVER_8888_8888_none_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_none_OVER_8888_8888_none_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_8888_none_OVER_8888_8888_none_OVER_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1194 | FAST_NEAREST (8888_8888_pad, 8888, 8888, uint32_t, uint32_t, OVER, PAD)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_pad_OVER (uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_OVER == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_OVER != PIXMAN_OP_SRC && PIXMAN_OP_OVER != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ((int) (( vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL ) { while (vx >= 0) vx -= src_width_fixed; } s2 = *(src + x2 ); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_8888 (s2); } else if (s2) { d = convert_8888_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); *dst++ = convert_8888_to_8888 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_pad_OVER_8888_8888_pad_OVER_wrapper ( const uint8_t *mask, uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_8888_pad_OVER (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_8888_pad_OVER (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint32_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint32_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_8888_8888_pad_OVER_8888_8888_pad_OVER_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_8888_pad_OVER_8888_8888_pad_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_pad_OVER_8888_8888_pad_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_8888_pad_OVER_8888_8888_pad_OVER_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_8888_pad_OVER_8888_8888_pad_OVER_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_8888_pad_OVER_8888_8888_pad_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_pad_OVER_8888_8888_pad_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_8888_pad_OVER_8888_8888_pad_OVER_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1195 | FAST_NEAREST (8888_8888_normal, 8888, 8888, uint32_t, uint32_t, OVER, NORMAL)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_normal_OVER (uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_OVER == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_OVER != PIXMAN_OP_SRC && PIXMAN_OP_OVER != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { while ( vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ( (int) ((vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff ) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff ; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0) ; (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_8888 ( s2); } else if (s2) { d = convert_8888_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); *dst++ = convert_8888_to_8888 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_8888 (s1); } else if (s1) { d = convert_8888_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_8888 (d); } dst++; } else { *dst++ = convert_8888_to_8888 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_8888_normal_OVER_8888_8888_normal_OVER_wrapper ( const uint8_t *mask, uint32_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_8888_normal_OVER (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_8888_normal_OVER (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint32_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint32_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { max_vy = ((pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL ) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_8888_8888_normal_OVER_8888_8888_normal_OVER_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_8888_normal_OVER_8888_8888_normal_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_normal_OVER_8888_8888_normal_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NONE) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_8888_normal_OVER_8888_8888_normal_OVER_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_8888_normal_OVER_8888_8888_normal_OVER_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_8888_normal_OVER_8888_8888_normal_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_8888_normal_OVER_8888_8888_normal_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_8888_normal_OVER_8888_8888_normal_OVER_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1196 | FAST_NEAREST (8888_565_cover, 8888, 0565, uint32_t, uint16_t, SRC, COVER)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_cover_SRC (uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_SRC == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_SRC != PIXMAN_OP_SRC && PIXMAN_OP_SRC != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (-1 == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s1 = *(src + x1); x2 = ((int) ((vx) >> 16)); vx += unit_x ; if (-1 == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff ) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff ; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0) ; (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_0565 ( s2); } else if (s2) { d = convert_0565_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); *dst++ = convert_8888_to_0565 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_cover_SRC_8888_565_cover_SRC_wrapper ( const uint8_t *mask, uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_565_cover_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_565_cover_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (-1 == PIXMAN_REPEAT_NORMAL) { max_vy = ((pixman_fixed_t ) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed); repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); } if (-1 == PIXMAN_REPEAT_PAD || -1 == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (-1 == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); if (-1 == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD , &y, src_image->bits.height); src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_565_cover_SRC_8888_565_cover_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_565_cover_SRC_8888_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_cover_SRC_8888_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (-1 == PIXMAN_REPEAT_NONE ) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_565_cover_SRC_8888_565_cover_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_565_cover_SRC_8888_565_cover_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_565_cover_SRC_8888_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_cover_SRC_8888_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_565_cover_SRC_8888_565_cover_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1197 | FAST_NEAREST (8888_565_none, 8888, 0565, uint32_t, uint16_t, SRC, NONE)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_none_SRC (uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_SRC == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_SRC != PIXMAN_OP_SRC && PIXMAN_OP_SRC != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ((int ) ((vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff ) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff ; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0) ; (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_0565 ( s2); } else if (s2) { d = convert_0565_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); *dst++ = convert_8888_to_0565 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_none_SRC_8888_565_none_SRC_wrapper ( const uint8_t *mask, uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_565_none_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_565_none_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL ) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_8888_565_none_SRC_8888_565_none_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_565_none_SRC_8888_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_none_SRC_8888_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NONE ) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_565_none_SRC_8888_565_none_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_565_none_SRC_8888_565_none_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_565_none_SRC_8888_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_none_SRC_8888_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_565_none_SRC_8888_565_none_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1198 | FAST_NEAREST (8888_565_pad, 8888, 0565, uint32_t, uint16_t, SRC, PAD)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_pad_SRC (uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_SRC == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_SRC != PIXMAN_OP_SRC && PIXMAN_OP_SRC != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ((int) (( vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL ) { while (vx >= 0) vx -= src_width_fixed; } s2 = *(src + x2 ); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_0565 (s2); } else if (s2) { d = convert_0565_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); *dst++ = convert_8888_to_0565 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_pad_SRC_8888_565_pad_SRC_wrapper ( const uint8_t *mask, uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_565_pad_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_565_pad_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_8888_565_pad_SRC_8888_565_pad_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_565_pad_SRC_8888_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_pad_SRC_8888_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_565_pad_SRC_8888_565_pad_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_565_pad_SRC_8888_565_pad_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_565_pad_SRC_8888_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_pad_SRC_8888_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_565_pad_SRC_8888_565_pad_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1199 | FAST_NEAREST (8888_565_normal, 8888, 0565, uint32_t, uint16_t, SRC, NORMAL)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_normal_SRC (uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_SRC == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_SRC != PIXMAN_OP_SRC && PIXMAN_OP_SRC != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { while ( vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ( (int) ((vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff ) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff ; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0) ; (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_0565 ( s2); } else if (s2) { d = convert_0565_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); *dst++ = convert_8888_to_0565 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_normal_SRC_8888_565_normal_SRC_wrapper ( const uint8_t *mask, uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_565_normal_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_565_normal_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { max_vy = ((pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL ) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_8888_565_normal_SRC_8888_565_normal_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_565_normal_SRC_8888_565_normal_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_normal_SRC_8888_565_normal_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NONE) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_565_normal_SRC_8888_565_normal_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_565_normal_SRC_8888_565_normal_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_565_normal_SRC_8888_565_normal_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_normal_SRC_8888_565_normal_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_565_normal_SRC_8888_565_normal_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1200 | FAST_NEAREST (565_565_normal, 0565, 0565, uint16_t, uint16_t, SRC, NORMAL)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_565_565_normal_SRC (uint16_t *dst, const uint16_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint16_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_SRC == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_SRC != PIXMAN_OP_SRC && PIXMAN_OP_SRC != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { while ( vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ( (int) ((vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = 0xff; a2 = 0xff; if (a1 == 0xff) { *dst = convert_0565_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_0565_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; if (a2 == 0xff) { *dst = convert_0565_to_0565 (s2); } else if (s2) { d = convert_0565_to_8888 (*dst); s2 = convert_0565_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_0565_to_0565 (s1); *dst++ = convert_0565_to_0565 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_SRC == PIXMAN_OP_OVER) { a1 = 0xff ; if (a1 == 0xff) { *dst = convert_0565_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_0565_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a1)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_0565_to_0565 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_565_565_normal_SRC_565_565_normal_SRC_wrapper ( const uint8_t *mask, uint16_t *dst, const uint16_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_565_565_normal_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_565_565_normal_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint16_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint16_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t ); (src_first_line) = ((uint16_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { max_vy = ((pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL ) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_565_565_normal_SRC_565_565_normal_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_565_565_normal_SRC_565_565_normal_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_normal_SRC_565_565_normal_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NONE) { static const uint16_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_565_565_normal_SRC_565_565_normal_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_565_565_normal_SRC_565_565_normal_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_565_565_normal_SRC_565_565_normal_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_normal_SRC_565_565_normal_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_565_565_normal_SRC_565_565_normal_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1201 | FAST_NEAREST (8888_565_cover, 8888, 0565, uint32_t, uint16_t, OVER, COVER)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_cover_OVER (uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_OVER == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_OVER != PIXMAN_OP_SRC && PIXMAN_OP_OVER != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (-1 == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s1 = *(src + x1); x2 = ((int) ((vx) >> 16)); vx += unit_x ; if (-1 == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff ) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff ; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0) ; (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_0565 ( s2); } else if (s2) { d = convert_0565_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); *dst++ = convert_8888_to_0565 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_cover_OVER_8888_565_cover_OVER_wrapper ( const uint8_t *mask, uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_565_cover_OVER (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_565_cover_OVER (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (-1 == PIXMAN_REPEAT_NORMAL) { max_vy = ((pixman_fixed_t ) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed); repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); } if (-1 == PIXMAN_REPEAT_PAD || -1 == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (-1 == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); if (-1 == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD , &y, src_image->bits.height); src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_565_cover_OVER_8888_565_cover_OVER_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_565_cover_OVER_8888_565_cover_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_cover_OVER_8888_565_cover_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (-1 == PIXMAN_REPEAT_NONE ) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_565_cover_OVER_8888_565_cover_OVER_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_565_cover_OVER_8888_565_cover_OVER_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_565_cover_OVER_8888_565_cover_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_cover_OVER_8888_565_cover_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_565_cover_OVER_8888_565_cover_OVER_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1202 | FAST_NEAREST (8888_565_none, 8888, 0565, uint32_t, uint16_t, OVER, NONE)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_none_OVER (uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_OVER == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_OVER != PIXMAN_OP_SRC && PIXMAN_OP_OVER != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ((int ) ((vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff ) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff ; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0) ; (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_0565 ( s2); } else if (s2) { d = convert_0565_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); *dst++ = convert_8888_to_0565 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_none_OVER_8888_565_none_OVER_wrapper ( const uint8_t *mask, uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_565_none_OVER (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_565_none_OVER (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL ) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_8888_565_none_OVER_8888_565_none_OVER_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_565_none_OVER_8888_565_none_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_none_OVER_8888_565_none_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NONE ) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_565_none_OVER_8888_565_none_OVER_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_565_none_OVER_8888_565_none_OVER_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_565_none_OVER_8888_565_none_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_none_OVER_8888_565_none_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_565_none_OVER_8888_565_none_OVER_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1203 | FAST_NEAREST (8888_565_pad, 8888, 0565, uint32_t, uint16_t, OVER, PAD)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_pad_OVER (uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_OVER == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_OVER != PIXMAN_OP_SRC && PIXMAN_OP_OVER != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ((int) (( vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL ) { while (vx >= 0) vx -= src_width_fixed; } s2 = *(src + x2 ); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_0565 (s2); } else if (s2) { d = convert_0565_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); *dst++ = convert_8888_to_0565 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_pad_OVER_8888_565_pad_OVER_wrapper ( const uint8_t *mask, uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_565_pad_OVER (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_565_pad_OVER (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_8888_565_pad_OVER_8888_565_pad_OVER_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_565_pad_OVER_8888_565_pad_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_pad_OVER_8888_565_pad_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_565_pad_OVER_8888_565_pad_OVER_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_565_pad_OVER_8888_565_pad_OVER_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_565_pad_OVER_8888_565_pad_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_pad_OVER_8888_565_pad_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_565_pad_OVER_8888_565_pad_OVER_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1204 | FAST_NEAREST (8888_565_normal, 8888, 0565, uint32_t, uint16_t, OVER, NORMAL)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_normal_OVER (uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t src_width_fixed, pixman_bool_t fully_transparent_src) { uint32_t d; uint32_t s1, s2; uint8_t a1, a2; int x1, x2; if (PIXMAN_OP_OVER == PIXMAN_OP_OVER && fully_transparent_src) return; if (PIXMAN_OP_OVER != PIXMAN_OP_SRC && PIXMAN_OP_OVER != PIXMAN_OP_OVER) abort(); while ( (w -= 2) >= 0) { x1 = ((int) ((vx) >> 16)); vx += unit_x ; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { while ( vx >= 0) vx -= src_width_fixed; } s1 = *(src + x1); x2 = ( (int) ((vx) >> 16)); vx += unit_x; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { while (vx >= 0) vx -= src_width_fixed ; } s2 = *(src + x2); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ((s1) >> 24); a2 = ((s2) >> 24); if (a1 == 0xff ) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff ; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080 ; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)); t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0) ; (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; if (a2 == 0xff) { *dst = convert_8888_to_0565 ( s2); } else if (s2) { d = convert_0565_to_8888 (*dst); s2 = convert_8888_to_8888 (s2); a2 ^= 0xff; do { uint32_t r1__, r2__, r3__, t__; r1__ = (d); r2__ = (s2) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff ) * ((a2)); t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff); } while (0) ; r2__ = (d) >> 8; r3__ = ((s2) >> 8) & 0xff00ff ; do { t__ = ((r2__) & 0xff00ff) * ((a2)); t__ += 0x800080 ; r2__ = (t__ + ((t__ >> 8) & 0xff00ff)) >> 8 ; r2__ &= 0xff00ff; } while (0); do { t__ = ((r2__) + (r3__ )); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); *dst++ = convert_8888_to_0565 (s2); } } if (w & 1) { x1 = ((int) ((vx) >> 16)); s1 = *(src + x1); if (PIXMAN_OP_OVER == PIXMAN_OP_OVER) { a1 = ( (s1) >> 24); if (a1 == 0xff) { *dst = convert_8888_to_0565 (s1); } else if (s1) { d = convert_0565_to_8888 (*dst); s1 = convert_8888_to_8888 (s1); a1 ^= 0xff; do { uint32_t r1__, r2__ , r3__, t__; r1__ = (d); r2__ = (s1) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((a1)); t__ += 0x800080; r1__ = ( t__ + ((t__ >> 8) & 0xff00ff)) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ((r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r1__ = (t__ & 0xff00ff ); } while (0); r2__ = (d) >> 8; r3__ = ((s1) >> 8 ) & 0xff00ff; do { t__ = ((r2__) & 0xff00ff) * ((a1)) ; t__ += 0x800080; r2__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r2__ &= 0xff00ff; } while (0); do { t__ = ( (r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r2__ = (t__ & 0xff00ff); } while (0); (d) = r1__ | (r2__ << 8); } while (0); *dst = convert_8888_to_0565 (d); } dst++; } else { *dst++ = convert_8888_to_0565 (s1); } } } static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_8888_565_normal_OVER_8888_565_normal_OVER_wrapper ( const uint8_t *mask, uint16_t *dst, const uint32_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_8888_565_normal_OVER (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_8888_565_normal_OVER (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint32_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint32_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_first_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL) { max_vy = ((pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NORMAL ) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_8888_565_normal_OVER_8888_565_normal_OVER_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_8888_565_normal_OVER_8888_565_normal_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_normal_OVER_8888_565_normal_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_NORMAL == PIXMAN_REPEAT_NONE) { static const uint32_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_8888_565_normal_OVER_8888_565_normal_OVER_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_8888_565_normal_OVER_8888_565_normal_OVER_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_8888_565_normal_OVER_8888_565_normal_OVER_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_8888_565_normal_OVER_8888_565_normal_OVER_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_8888_565_normal_OVER_8888_565_normal_OVER_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1205 | |
1206 | #define REPEAT_MIN_WIDTH32 32 |
1207 | |
1208 | static void |
1209 | fast_composite_tiled_repeat (pixman_implementation_t *imp, |
1210 | pixman_composite_info_t *info) |
1211 | { |
1212 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
1213 | pixman_composite_func_t func; |
1214 | pixman_format_code_t mask_format; |
1215 | uint32_t src_flags, mask_flags; |
1216 | int32_t sx, sy; |
1217 | int32_t width_remain; |
1218 | int32_t num_pixels; |
1219 | int32_t src_width; |
1220 | int32_t i, j; |
1221 | pixman_image_t extended_src_image; |
1222 | uint32_t extended_src[REPEAT_MIN_WIDTH32 * 2]; |
1223 | pixman_bool_t need_src_extension; |
1224 | uint32_t *src_line; |
1225 | int32_t src_stride; |
1226 | int32_t src_bpp; |
1227 | pixman_composite_info_t info2 = *info; |
1228 | |
1229 | src_flags = (info->src_flags & ~FAST_PATH_NORMAL_REPEAT((1 << 15) | (1 << 3) | (1 << 4))) | |
1230 | FAST_PATH_SAMPLES_COVER_CLIP_NEAREST(1 << 23); |
1231 | |
1232 | if (mask_image) |
1233 | { |
1234 | mask_format = mask_image->common.extended_format_code; |
1235 | mask_flags = info->mask_flags; |
1236 | } |
1237 | else |
1238 | { |
1239 | mask_format = PIXMAN_null(((0) << 24) | ((0) << 16) | ((0) << 12) | ( (0) << 8) | ((0) << 4) | ((0))); |
1240 | mask_flags = FAST_PATH_IS_OPAQUE(1 << 13); |
1241 | } |
1242 | |
1243 | _pixman_implementation_lookup_composite ( |
1244 | imp->toplevel, info->op, |
1245 | src_image->common.extended_format_code, src_flags, |
1246 | mask_format, mask_flags, |
1247 | dest_image->common.extended_format_code, info->dest_flags, |
1248 | &imp, &func); |
1249 | |
1250 | src_bpp = PIXMAN_FORMAT_BPP (src_image->bits.format)(((src_image->bits.format >> (24)) & ((1 << (8)) - 1)) << ((src_image->bits.format >> 22) & 3)); |
1251 | |
1252 | if (src_image->bits.width < REPEAT_MIN_WIDTH32 && |
1253 | (src_bpp == 32 || src_bpp == 16 || src_bpp == 8) && |
1254 | !src_image->bits.indexed) |
1255 | { |
1256 | sx = src_x; |
1257 | sx = MOD (sx, src_image->bits.width)((sx) < 0 ? ((src_image->bits.width) - ((-(sx) - 1) % ( src_image->bits.width))) - 1 : (sx) % (src_image->bits. width)); |
1258 | sx += width; |
1259 | src_width = 0; |
1260 | |
1261 | while (src_width < REPEAT_MIN_WIDTH32 && src_width <= sx) |
1262 | src_width += src_image->bits.width; |
1263 | |
1264 | src_stride = (src_width * (src_bpp >> 3) + 3) / (int) sizeof (uint32_t); |
1265 | |
1266 | /* Initialize/validate stack-allocated temporary image */ |
1267 | _pixman_bits_image_init (&extended_src_image, src_image->bits.format, |
1268 | src_width, 1, &extended_src[0], src_stride, |
1269 | FALSE0); |
1270 | _pixman_image_validate (&extended_src_image); |
1271 | |
1272 | info2.src_image = &extended_src_image; |
1273 | need_src_extension = TRUE1; |
1274 | } |
1275 | else |
1276 | { |
1277 | src_width = src_image->bits.width; |
1278 | need_src_extension = FALSE0; |
1279 | } |
1280 | |
1281 | sx = src_x; |
1282 | sy = src_y; |
1283 | |
1284 | while (--height >= 0) |
1285 | { |
1286 | sx = MOD (sx, src_width)((sx) < 0 ? ((src_width) - ((-(sx) - 1) % (src_width))) - 1 : (sx) % (src_width)); |
1287 | sy = MOD (sy, src_image->bits.height)((sy) < 0 ? ((src_image->bits.height) - ((-(sy) - 1) % ( src_image->bits.height))) - 1 : (sy) % (src_image->bits .height)); |
1288 | |
1289 | if (need_src_extension) |
1290 | { |
1291 | if (src_bpp == 32) |
1292 | { |
1293 | PIXMAN_IMAGE_GET_LINE (src_image, 0, sy, uint32_t, src_stride, src_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_line) = ((uint32_t *) __bits__) + (src_stride) * (sy) + (1) * (0); } while (0); |
1294 | |
1295 | for (i = 0; i < src_width; ) |
1296 | { |
1297 | for (j = 0; j < src_image->bits.width; j++, i++) |
1298 | extended_src[i] = src_line[j]; |
1299 | } |
1300 | } |
1301 | else if (src_bpp == 16) |
1302 | { |
1303 | uint16_t *src_line_16; |
1304 | |
1305 | PIXMAN_IMAGE_GET_LINE (src_image, 0, sy, uint16_t, src_stride,do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t ); (src_line_16) = ((uint16_t *) __bits__) + (src_stride) * ( sy) + (1) * (0); } while (0) |
1306 | src_line_16, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t ); (src_line_16) = ((uint16_t *) __bits__) + (src_stride) * ( sy) + (1) * (0); } while (0); |
1307 | src_line = (uint32_t*)src_line_16; |
1308 | |
1309 | for (i = 0; i < src_width; ) |
1310 | { |
1311 | for (j = 0; j < src_image->bits.width; j++, i++) |
1312 | ((uint16_t*)extended_src)[i] = ((uint16_t*)src_line)[j]; |
1313 | } |
1314 | } |
1315 | else if (src_bpp == 8) |
1316 | { |
1317 | uint8_t *src_line_8; |
1318 | |
1319 | PIXMAN_IMAGE_GET_LINE (src_image, 0, sy, uint8_t, src_stride,do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t ); (src_line_8) = ((uint8_t *) __bits__) + (src_stride) * (sy ) + (1) * (0); } while (0) |
1320 | src_line_8, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t ); (src_line_8) = ((uint8_t *) __bits__) + (src_stride) * (sy ) + (1) * (0); } while (0); |
1321 | src_line = (uint32_t*)src_line_8; |
1322 | |
1323 | for (i = 0; i < src_width; ) |
1324 | { |
1325 | for (j = 0; j < src_image->bits.width; j++, i++) |
1326 | ((uint8_t*)extended_src)[i] = ((uint8_t*)src_line)[j]; |
1327 | } |
1328 | } |
1329 | |
1330 | info2.src_y = 0; |
1331 | } |
1332 | else |
1333 | { |
1334 | info2.src_y = sy; |
1335 | } |
1336 | |
1337 | width_remain = width; |
1338 | |
1339 | while (width_remain > 0) |
1340 | { |
1341 | num_pixels = src_width - sx; |
1342 | |
1343 | if (num_pixels > width_remain) |
1344 | num_pixels = width_remain; |
1345 | |
1346 | info2.src_x = sx; |
1347 | info2.width = num_pixels; |
1348 | info2.height = 1; |
1349 | |
1350 | func (imp, &info2); |
1351 | |
1352 | width_remain -= num_pixels; |
1353 | info2.mask_x += num_pixels; |
1354 | info2.dest_x += num_pixels; |
1355 | sx = 0; |
1356 | } |
1357 | |
1358 | sx = src_x; |
1359 | sy++; |
1360 | info2.mask_x = info->mask_x; |
1361 | info2.mask_y++; |
1362 | info2.dest_x = info->dest_x; |
1363 | info2.dest_y++; |
1364 | } |
1365 | |
1366 | if (need_src_extension) |
1367 | _pixman_image_fini (&extended_src_image); |
1368 | } |
1369 | |
1370 | /* Use more unrolling for src_0565_0565 because it is typically CPU bound */ |
1371 | static force_inline__inline__ __attribute__ ((__always_inline__)) void |
1372 | scaled_nearest_scanline_565_565_SRC (uint16_t * dst, |
1373 | const uint16_t * src, |
1374 | int32_t w, |
1375 | pixman_fixed_t vx, |
1376 | pixman_fixed_t unit_x, |
1377 | pixman_fixed_t max_vx, |
1378 | pixman_bool_t fully_transparent_src) |
1379 | { |
1380 | uint16_t tmp1, tmp2, tmp3, tmp4; |
1381 | while ((w -= 4) >= 0) |
1382 | { |
1383 | tmp1 = *(src + pixman_fixed_to_int (vx)((int) ((vx) >> 16))); |
1384 | vx += unit_x; |
1385 | tmp2 = *(src + pixman_fixed_to_int (vx)((int) ((vx) >> 16))); |
1386 | vx += unit_x; |
1387 | tmp3 = *(src + pixman_fixed_to_int (vx)((int) ((vx) >> 16))); |
1388 | vx += unit_x; |
1389 | tmp4 = *(src + pixman_fixed_to_int (vx)((int) ((vx) >> 16))); |
1390 | vx += unit_x; |
1391 | *dst++ = tmp1; |
1392 | *dst++ = tmp2; |
1393 | *dst++ = tmp3; |
1394 | *dst++ = tmp4; |
1395 | } |
1396 | if (w & 2) |
1397 | { |
1398 | tmp1 = *(src + pixman_fixed_to_int (vx)((int) ((vx) >> 16))); |
1399 | vx += unit_x; |
1400 | tmp2 = *(src + pixman_fixed_to_int (vx)((int) ((vx) >> 16))); |
1401 | vx += unit_x; |
1402 | *dst++ = tmp1; |
1403 | *dst++ = tmp2; |
1404 | } |
1405 | if (w & 1) |
1406 | *dst = *(src + pixman_fixed_to_int (vx)((int) ((vx) >> 16))); |
1407 | } |
1408 | |
1409 | FAST_NEAREST_MAINLOOP (565_565_cover_SRC,static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper ( const uint8_t *mask, uint16_t *dst, const uint16_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_565_565_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_565_565_cover_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint16_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint16_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t ); (src_first_line) = ((uint16_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (-1 == PIXMAN_REPEAT_NORMAL) { max_vy = ((pixman_fixed_t ) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed); repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); } if (-1 == PIXMAN_REPEAT_PAD || -1 == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (-1 == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); if (-1 == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD , &y, src_image->bits.height); src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (-1 == PIXMAN_REPEAT_NONE ) { static const uint16_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1410 | scaled_nearest_scanline_565_565_SRC,static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper ( const uint8_t *mask, uint16_t *dst, const uint16_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_565_565_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_565_565_cover_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint16_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint16_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t ); (src_first_line) = ((uint16_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (-1 == PIXMAN_REPEAT_NORMAL) { max_vy = ((pixman_fixed_t ) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed); repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); } if (-1 == PIXMAN_REPEAT_PAD || -1 == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (-1 == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); if (-1 == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD , &y, src_image->bits.height); src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (-1 == PIXMAN_REPEAT_NONE ) { static const uint16_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1411 | uint16_t, uint16_t, COVER)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper ( const uint8_t *mask, uint16_t *dst, const uint16_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_565_565_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_565_565_cover_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint16_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint16_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t ); (src_first_line) = ((uint16_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (-1 == PIXMAN_REPEAT_NORMAL) { max_vy = ((pixman_fixed_t ) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed); repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); } if (-1 == PIXMAN_REPEAT_PAD || -1 == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (-1 == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL , &vy, max_vy); if (-1 == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD , &y, src_image->bits.height); src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (-1 == PIXMAN_REPEAT_NONE ) { static const uint16_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_565_565_SRC_565_565_cover_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1412 | FAST_NEAREST_MAINLOOP (565_565_none_SRC,static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper ( const uint8_t *mask, uint16_t *dst, const uint16_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_565_565_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_565_565_none_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint16_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint16_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t ); (src_first_line) = ((uint16_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL ) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NONE ) { static const uint16_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1413 | scaled_nearest_scanline_565_565_SRC,static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper ( const uint8_t *mask, uint16_t *dst, const uint16_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_565_565_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_565_565_none_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint16_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint16_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t ); (src_first_line) = ((uint16_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL ) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NONE ) { static const uint16_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1414 | uint16_t, uint16_t, NONE)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper ( const uint8_t *mask, uint16_t *dst, const uint16_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_565_565_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_565_565_none_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint16_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint16_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t ); (src_first_line) = ((uint16_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NORMAL ) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_NONE == PIXMAN_REPEAT_NONE ) { static const uint16_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_565_565_SRC_565_565_none_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1415 | FAST_NEAREST_MAINLOOP (565_565_pad_SRC,static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper ( const uint8_t *mask, uint16_t *dst, const uint16_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_565_565_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_565_565_pad_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint16_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint16_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t ); (src_first_line) = ((uint16_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { static const uint16_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1416 | scaled_nearest_scanline_565_565_SRC,static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper ( const uint8_t *mask, uint16_t *dst, const uint16_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_565_565_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_565_565_pad_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint16_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint16_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t ); (src_first_line) = ((uint16_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { static const uint16_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1417 | uint16_t, uint16_t, PAD)static __inline__ __attribute__ ((__always_inline__)) void scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper ( const uint8_t *mask, uint16_t *dst, const uint16_t *src, int32_t w, pixman_fixed_t vx, pixman_fixed_t unit_x, pixman_fixed_t max_vx , pixman_bool_t fully_transparent_src) { scaled_nearest_scanline_565_565_SRC (dst, src, w, vx, unit_x, max_vx, fully_transparent_src); } static void fast_composite_scaled_nearest_565_565_pad_SRC (pixman_implementation_t *imp, pixman_composite_info_t *info) { __attribute__((unused )) pixman_op_t op = info->op; __attribute__((unused)) pixman_image_t * src_image = info->src_image; __attribute__((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info->dest_image; __attribute__((unused)) int32_t src_x = info->src_x; __attribute__((unused)) int32_t src_y = info->src_y; __attribute__((unused)) int32_t mask_x = info ->mask_x; __attribute__((unused)) int32_t mask_y = info-> mask_y; __attribute__((unused)) int32_t dest_x = info->dest_x ; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__ ((unused)) int32_t width = info->width; __attribute__((unused )) int32_t height = info->height; uint16_t *dst_line; uint8_t *mask_line; uint16_t *src_first_line; int y; pixman_fixed_t src_width_fixed = ((pixman_fixed_t) ((uint32_t) (src_image->bits.width) << 16)); pixman_fixed_t max_vy; pixman_vector_t v; pixman_fixed_t vx, vy; pixman_fixed_t unit_x, unit_y; int32_t left_pad, right_pad ; uint16_t *src; uint16_t *dst; uint8_t solid_mask; const uint8_t *mask = &solid_mask; int src_stride, mask_stride, dst_stride ; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); if (0) { if (0) solid_mask = _pixman_image_get_solid (imp, mask_image, dest_image->bits .format); else do { uint32_t *__bits__; int __stride__; __bits__ = mask_image->bits.bits; __stride__ = mask_image->bits .rowstride; (mask_stride) = __stride__ * (int) sizeof (uint32_t ) / (int) sizeof (uint8_t); (mask_line) = ((uint8_t *) __bits__ ) + (mask_stride) * (mask_y) + (1) * (mask_x); } while (0); } do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t ); (src_first_line) = ((uint16_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); v.vector[0] = ((pixman_fixed_t ) ((uint32_t) (src_x) << 16)) + (((pixman_fixed_t) ((uint32_t ) (1) << 16))) / 2; v.vector[1] = ((pixman_fixed_t) ((uint32_t ) (src_y) << 16)) + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; v.vector[2] = (((pixman_fixed_t) ((uint32_t) (1) << 16))); if (!_moz_pixman_transform_point_3d (src_image->common .transform, &v)) return; unit_x = src_image->common.transform ->matrix[0][0]; unit_y = src_image->common.transform-> matrix[1][1]; v.vector[0] -= ((pixman_fixed_t) 1); v.vector[1 ] -= ((pixman_fixed_t) 1); vx = v.vector[0]; vy = v.vector[1] ; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) { max_vy = ( (pixman_fixed_t) ((uint32_t) (src_image->bits.height) << 16)); repeat (PIXMAN_REPEAT_NORMAL, &vx, src_width_fixed ); repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); } if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD || PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { pad_repeat_get_scanline_bounds (src_image->bits.width, vx, unit_x, &width, &left_pad, &right_pad); vx += left_pad * unit_x; } while (--height >= 0) { dst = dst_line ; dst_line += dst_stride; if (0 && !0) { mask = mask_line ; mask_line += mask_stride; } y = ((int) ((vy) >> 16)); vy += unit_y; if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NORMAL) repeat (PIXMAN_REPEAT_NORMAL, &vy, max_vy); if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_PAD) { repeat (PIXMAN_REPEAT_PAD, &y, src_image ->bits.height); src = src_first_line + src_stride * y; if ( left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask, dst, src + src_image->bits.width - src_image->bits .width + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 0); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, src + src_image->bits.width, right_pad, -((pixman_fixed_t) 1) , 0, src_width_fixed, 0); } } else if (PIXMAN_REPEAT_PAD == PIXMAN_REPEAT_NONE ) { static const uint16_t zero[1] = { 0 }; if (y < 0 || y >= src_image->bits.height) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask, dst, zero + 1, left_pad + width + right_pad, -((pixman_fixed_t ) 1), 0, src_width_fixed, 1); continue; } src = src_first_line + src_stride * y; if (left_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask, dst, zero + 1, left_pad, -((pixman_fixed_t) 1), 0, src_width_fixed , 1); } if (width > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad), dst + left_pad, src + src_image-> bits.width, width, vx - src_width_fixed, unit_x, src_width_fixed , 0); } if (right_pad > 0) { scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask + (0 ? 0 : left_pad + width), dst + left_pad + width, zero + 1, right_pad, -((pixman_fixed_t) 1), 0, src_width_fixed, 1 ); } } else { src = src_first_line + src_stride * y; scaled_nearest_scanline_565_565_SRC_565_565_pad_SRC_wrapper (mask, dst, src + src_image->bits.width, width, vx - src_width_fixed , unit_x, src_width_fixed, 0); } } } |
1418 | |
1419 | static force_inline__inline__ __attribute__ ((__always_inline__)) uint32_t |
1420 | fetch_nearest (pixman_repeat_t src_repeat, |
1421 | pixman_format_code_t format, |
1422 | uint32_t *src, int x, int src_width) |
1423 | { |
1424 | if (repeat (src_repeat, &x, src_width)) |
1425 | { |
1426 | if (format == PIXMAN_x8r8g8b8 || format == PIXMAN_x8b8g8r8) |
1427 | return *(src + x) | 0xff000000; |
1428 | else |
1429 | return *(src + x); |
1430 | } |
1431 | else |
1432 | { |
1433 | return 0; |
1434 | } |
1435 | } |
1436 | |
1437 | static force_inline__inline__ __attribute__ ((__always_inline__)) void |
1438 | combine_over (uint32_t s, uint32_t *dst) |
1439 | { |
1440 | if (s) |
1441 | { |
1442 | uint8_t ia = 0xff - (s >> 24); |
1443 | |
1444 | if (ia) |
1445 | UN8x4_MUL_UN8_ADD_UN8x4 (*dst, ia, s)do { uint32_t r1__, r2__, r3__, t__; r1__ = (*dst); r2__ = (s ) & 0xff00ff; do { t__ = ((r1__) & 0xff00ff) * ((ia)) ; t__ += 0x800080; r1__ = (t__ + ((t__ >> 8) & 0xff00ff )) >> 8; r1__ &= 0xff00ff; } while (0); do { t__ = ( (r1__) + (r2__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff ); r1__ = (t__ & 0xff00ff); } while (0); r2__ = (*dst) >> 8; r3__ = ((s) >> 8) & 0xff00ff; do { t__ = ((r2__ ) & 0xff00ff) * ((ia)); t__ += 0x800080; r2__ = (t__ + (( t__ >> 8) & 0xff00ff)) >> 8; r2__ &= 0xff00ff ; } while (0); do { t__ = ((r2__) + (r3__)); t__ |= 0x1000100 - ((t__ >> 8) & 0xff00ff); r2__ = (t__ & 0xff00ff ); } while (0); (*dst) = r1__ | (r2__ << 8); } while (0 ); |
1446 | else |
1447 | *dst = s; |
1448 | } |
1449 | } |
1450 | |
1451 | static force_inline__inline__ __attribute__ ((__always_inline__)) void |
1452 | combine_src (uint32_t s, uint32_t *dst) |
1453 | { |
1454 | *dst = s; |
1455 | } |
1456 | |
1457 | static void |
1458 | fast_composite_scaled_nearest (pixman_implementation_t *imp, |
1459 | pixman_composite_info_t *info) |
1460 | { |
1461 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; |
1462 | uint32_t *dst_line; |
1463 | uint32_t *src_line; |
1464 | int dst_stride, src_stride; |
1465 | int src_width, src_height; |
1466 | pixman_repeat_t src_repeat; |
1467 | pixman_fixed_t unit_x, unit_y; |
1468 | pixman_format_code_t src_format; |
1469 | pixman_vector_t v; |
1470 | pixman_fixed_t vy; |
1471 | |
1472 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, uint32_t, dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); |
1473 | /* pass in 0 instead of src_x and src_y because src_x and src_y need to be |
1474 | * transformed from destination space to source space |
1475 | */ |
1476 | PIXMAN_IMAGE_GET_LINE (src_image, 0, 0, uint32_t, src_stride, src_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t ); (src_line) = ((uint32_t *) __bits__) + (src_stride) * (0) + (1) * (0); } while (0); |
1477 | |
1478 | /* reference point is the center of the pixel */ |
1479 | v.vector[0] = pixman_int_to_fixed (src_x)((pixman_fixed_t) ((uint32_t) (src_x) << 16)) + pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
1480 | v.vector[1] = pixman_int_to_fixed (src_y)((pixman_fixed_t) ((uint32_t) (src_y) << 16)) + pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
1481 | v.vector[2] = pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))); |
1482 | |
1483 | if (!pixman_transform_point_3d_moz_pixman_transform_point_3d (src_image->common.transform, &v)) |
1484 | return; |
1485 | |
1486 | unit_x = src_image->common.transform->matrix[0][0]; |
1487 | unit_y = src_image->common.transform->matrix[1][1]; |
1488 | |
1489 | /* Round down to closest integer, ensuring that 0.5 rounds to 0, not 1 */ |
1490 | v.vector[0] -= pixman_fixed_e((pixman_fixed_t) 1); |
1491 | v.vector[1] -= pixman_fixed_e((pixman_fixed_t) 1); |
1492 | |
1493 | src_height = src_image->bits.height; |
1494 | src_width = src_image->bits.width; |
1495 | src_repeat = src_image->common.repeat; |
1496 | src_format = src_image->bits.format; |
1497 | |
1498 | vy = v.vector[1]; |
1499 | while (height--) |
1500 | { |
1501 | pixman_fixed_t vx = v.vector[0]; |
1502 | int y = pixman_fixed_to_int (vy)((int) ((vy) >> 16)); |
1503 | uint32_t *dst = dst_line; |
1504 | |
1505 | dst_line += dst_stride; |
1506 | |
1507 | /* adjust the y location by a unit vector in the y direction |
1508 | * this is equivalent to transforming y+1 of the destination point to source space */ |
1509 | vy += unit_y; |
1510 | |
1511 | if (!repeat (src_repeat, &y, src_height)) |
1512 | { |
1513 | if (op == PIXMAN_OP_SRC) |
1514 | memset (dst, 0, sizeof (*dst) * width); |
1515 | } |
1516 | else |
1517 | { |
1518 | int w = width; |
1519 | |
1520 | uint32_t *src = src_line + y * src_stride; |
1521 | |
1522 | while (w >= 2) |
1523 | { |
1524 | uint32_t s1, s2; |
1525 | int x1, x2; |
1526 | |
1527 | x1 = pixman_fixed_to_int (vx)((int) ((vx) >> 16)); |
1528 | vx += unit_x; |
1529 | |
1530 | x2 = pixman_fixed_to_int (vx)((int) ((vx) >> 16)); |
1531 | vx += unit_x; |
1532 | |
1533 | w -= 2; |
1534 | |
1535 | s1 = fetch_nearest (src_repeat, src_format, src, x1, src_width); |
1536 | s2 = fetch_nearest (src_repeat, src_format, src, x2, src_width); |
1537 | |
1538 | if (op == PIXMAN_OP_OVER) |
1539 | { |
1540 | combine_over (s1, dst++); |
1541 | combine_over (s2, dst++); |
1542 | } |
1543 | else |
1544 | { |
1545 | combine_src (s1, dst++); |
1546 | combine_src (s2, dst++); |
1547 | } |
1548 | } |
1549 | |
1550 | while (w--) |
1551 | { |
1552 | uint32_t s; |
1553 | int x; |
1554 | |
1555 | x = pixman_fixed_to_int (vx)((int) ((vx) >> 16)); |
1556 | vx += unit_x; |
1557 | |
1558 | s = fetch_nearest (src_repeat, src_format, src, x, src_width); |
1559 | |
1560 | if (op == PIXMAN_OP_OVER) |
1561 | combine_over (s, dst++); |
1562 | else |
1563 | combine_src (s, dst++); |
1564 | } |
1565 | } |
1566 | } |
1567 | } |
1568 | |
1569 | #define CACHE_LINE_SIZE64 64 |
1570 | |
1571 | #define FAST_SIMPLE_ROTATE(suffix, pix_type)static void blt_rotated_90_trivial_suffix (pix_type *dst, int dst_stride, const pix_type *src, int src_stride, int w, int h ) { int x, y; for (y = 0; y < h; y++) { const pix_type *s = src + (h - y - 1); pix_type *d = dst + dst_stride * y; for ( x = 0; x < w; x++) { *d++ = *s; s += src_stride; } } } static void blt_rotated_270_trivial_suffix (pix_type *dst, int dst_stride , const pix_type *src, int src_stride, int w, int h) { int x, y; for (y = 0; y < h; y++) { const pix_type *s = src + src_stride * (w - 1) + y; pix_type *d = dst + dst_stride * y; for (x = 0 ; x < w; x++) { *d++ = *s; s -= src_stride; } } } static void blt_rotated_90_suffix (pix_type *dst, int dst_stride, const pix_type *src, int src_stride, int W, int H) { int x; int leading_pixels = 0, trailing_pixels = 0; const int TILE_SIZE = 64 / sizeof( pix_type); if ((uintptr_t)dst & (64 - 1)) { leading_pixels = TILE_SIZE - (((uintptr_t)dst & (64 - 1)) / sizeof(pix_type )); if (leading_pixels > W) leading_pixels = W; blt_rotated_90_trivial_suffix ( dst, dst_stride, src, src_stride, leading_pixels, H); dst += leading_pixels; src += leading_pixels * src_stride; W -= leading_pixels ; } if ((uintptr_t)(dst + W) & (64 - 1)) { trailing_pixels = (((uintptr_t)(dst + W) & (64 - 1)) / sizeof(pix_type)) ; if (trailing_pixels > W) trailing_pixels = W; W -= trailing_pixels ; } for (x = 0; x < W; x += TILE_SIZE) { blt_rotated_90_trivial_suffix ( dst + x, dst_stride, src + src_stride * x, src_stride, TILE_SIZE , H); } if (trailing_pixels) { blt_rotated_90_trivial_suffix ( dst + W, dst_stride, src + W * src_stride, src_stride, trailing_pixels , H); } } static void blt_rotated_270_suffix (pix_type *dst, int dst_stride, const pix_type *src, int src_stride, int W, int H ) { int x; int leading_pixels = 0, trailing_pixels = 0; const int TILE_SIZE = 64 / sizeof(pix_type); if ((uintptr_t)dst & (64 - 1)) { leading_pixels = TILE_SIZE - (((uintptr_t)dst & (64 - 1)) / sizeof(pix_type)); if (leading_pixels > W) leading_pixels = W; blt_rotated_270_trivial_suffix ( dst, dst_stride, src + src_stride * (W - leading_pixels), src_stride, leading_pixels , H); dst += leading_pixels; W -= leading_pixels; } if ((uintptr_t )(dst + W) & (64 - 1)) { trailing_pixels = (((uintptr_t)( dst + W) & (64 - 1)) / sizeof(pix_type)); if (trailing_pixels > W) trailing_pixels = W; W -= trailing_pixels; src += trailing_pixels * src_stride; } for (x = 0; x < W; x += TILE_SIZE) { blt_rotated_270_trivial_suffix ( dst + x, dst_stride, src + src_stride * (W - x - TILE_SIZE ), src_stride, TILE_SIZE, H); } if (trailing_pixels) { blt_rotated_270_trivial_suffix ( dst + W, dst_stride, src - trailing_pixels * src_stride, src_stride , trailing_pixels, H); } } static void fast_composite_rotate_90_suffix (pixman_implementation_t *imp, pixman_composite_info_t *info ) { __attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; pix_type *dst_line; pix_type *src_line; int dst_stride , src_stride; int src_x_t, src_y_t; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image->bits.bits; __stride__ = dest_image->bits.rowstride; (dst_stride) = __stride__ * ( int) sizeof (uint32_t) / (int) sizeof (pix_type); (dst_line) = ((pix_type *) __bits__) + (dst_stride) * (dest_y) + (1) * (dest_x ); } while (0); src_x_t = -src_y + ((int) ((src_image->common .transform->matrix[0][2] + (((pixman_fixed_t) ((uint32_t) ( 1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)) - height; src_y_t = src_x + ((int) ((src_image->common.transform ->matrix[1][2] + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)); do { uint32_t *__bits__; int __stride__; __bits__ = src_image->bits.bits ; __stride__ = src_image->bits.rowstride; (src_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (pix_type); (src_line ) = ((pix_type *) __bits__) + (src_stride) * (src_y_t) + (1) * (src_x_t); } while (0); blt_rotated_90_suffix (dst_line, dst_stride , src_line, src_stride, width, height); } static void fast_composite_rotate_270_suffix (pixman_implementation_t *imp, pixman_composite_info_t *info ) { __attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; pix_type *dst_line; pix_type *src_line; int dst_stride , src_stride; int src_x_t, src_y_t; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image->bits.bits; __stride__ = dest_image->bits.rowstride; (dst_stride) = __stride__ * ( int) sizeof (uint32_t) / (int) sizeof (pix_type); (dst_line) = ((pix_type *) __bits__) + (dst_stride) * (dest_y) + (1) * (dest_x ); } while (0); src_x_t = src_y + ((int) ((src_image->common .transform->matrix[0][2] + (((pixman_fixed_t) ((uint32_t) ( 1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)); src_y_t = -src_x + ((int) ((src_image->common.transform->matrix [1][2] + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)) - width; do { uint32_t *__bits__; int __stride__; __bits__ = src_image->bits.bits ; __stride__ = src_image->bits.rowstride; (src_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (pix_type); (src_line ) = ((pix_type *) __bits__) + (src_stride) * (src_y_t) + (1) * (src_x_t); } while (0); blt_rotated_270_suffix (dst_line, dst_stride , src_line, src_stride, width, height); } \ |
1572 | \ |
1573 | static void \ |
1574 | blt_rotated_90_trivial_##suffix (pix_type *dst, \ |
1575 | int dst_stride, \ |
1576 | const pix_type *src, \ |
1577 | int src_stride, \ |
1578 | int w, \ |
1579 | int h) \ |
1580 | { \ |
1581 | int x, y; \ |
1582 | for (y = 0; y < h; y++) \ |
1583 | { \ |
1584 | const pix_type *s = src + (h - y - 1); \ |
1585 | pix_type *d = dst + dst_stride * y; \ |
1586 | for (x = 0; x < w; x++) \ |
1587 | { \ |
1588 | *d++ = *s; \ |
1589 | s += src_stride; \ |
1590 | } \ |
1591 | } \ |
1592 | } \ |
1593 | \ |
1594 | static void \ |
1595 | blt_rotated_270_trivial_##suffix (pix_type *dst, \ |
1596 | int dst_stride, \ |
1597 | const pix_type *src, \ |
1598 | int src_stride, \ |
1599 | int w, \ |
1600 | int h) \ |
1601 | { \ |
1602 | int x, y; \ |
1603 | for (y = 0; y < h; y++) \ |
1604 | { \ |
1605 | const pix_type *s = src + src_stride * (w - 1) + y; \ |
1606 | pix_type *d = dst + dst_stride * y; \ |
1607 | for (x = 0; x < w; x++) \ |
1608 | { \ |
1609 | *d++ = *s; \ |
1610 | s -= src_stride; \ |
1611 | } \ |
1612 | } \ |
1613 | } \ |
1614 | \ |
1615 | static void \ |
1616 | blt_rotated_90_##suffix (pix_type *dst, \ |
1617 | int dst_stride, \ |
1618 | const pix_type *src, \ |
1619 | int src_stride, \ |
1620 | int W, \ |
1621 | int H) \ |
1622 | { \ |
1623 | int x; \ |
1624 | int leading_pixels = 0, trailing_pixels = 0; \ |
1625 | const int TILE_SIZE = CACHE_LINE_SIZE64 / sizeof(pix_type); \ |
1626 | \ |
1627 | /* \ |
1628 | * split processing into handling destination as TILE_SIZExH cache line \ |
1629 | * aligned vertical stripes (optimistically assuming that destination \ |
1630 | * stride is a multiple of cache line, if not - it will be just a bit \ |
1631 | * slower) \ |
1632 | */ \ |
1633 | \ |
1634 | if ((uintptr_t)dst & (CACHE_LINE_SIZE64 - 1)) \ |
1635 | { \ |
1636 | leading_pixels = TILE_SIZE - (((uintptr_t)dst & \ |
1637 | (CACHE_LINE_SIZE64 - 1)) / sizeof(pix_type)); \ |
1638 | if (leading_pixels > W) \ |
1639 | leading_pixels = W; \ |
1640 | \ |
1641 | /* unaligned leading part NxH (where N < TILE_SIZE) */ \ |
1642 | blt_rotated_90_trivial_##suffix ( \ |
1643 | dst, \ |
1644 | dst_stride, \ |
1645 | src, \ |
1646 | src_stride, \ |
1647 | leading_pixels, \ |
1648 | H); \ |
1649 | \ |
1650 | dst += leading_pixels; \ |
1651 | src += leading_pixels * src_stride; \ |
1652 | W -= leading_pixels; \ |
1653 | } \ |
1654 | \ |
1655 | if ((uintptr_t)(dst + W) & (CACHE_LINE_SIZE64 - 1)) \ |
1656 | { \ |
1657 | trailing_pixels = (((uintptr_t)(dst + W) & \ |
1658 | (CACHE_LINE_SIZE64 - 1)) / sizeof(pix_type)); \ |
1659 | if (trailing_pixels > W) \ |
1660 | trailing_pixels = W; \ |
1661 | W -= trailing_pixels; \ |
1662 | } \ |
1663 | \ |
1664 | for (x = 0; x < W; x += TILE_SIZE) \ |
1665 | { \ |
1666 | /* aligned middle part TILE_SIZExH */ \ |
1667 | blt_rotated_90_trivial_##suffix ( \ |
1668 | dst + x, \ |
1669 | dst_stride, \ |
1670 | src + src_stride * x, \ |
1671 | src_stride, \ |
1672 | TILE_SIZE, \ |
1673 | H); \ |
1674 | } \ |
1675 | \ |
1676 | if (trailing_pixels) \ |
1677 | { \ |
1678 | /* unaligned trailing part NxH (where N < TILE_SIZE) */ \ |
1679 | blt_rotated_90_trivial_##suffix ( \ |
1680 | dst + W, \ |
1681 | dst_stride, \ |
1682 | src + W * src_stride, \ |
1683 | src_stride, \ |
1684 | trailing_pixels, \ |
1685 | H); \ |
1686 | } \ |
1687 | } \ |
1688 | \ |
1689 | static void \ |
1690 | blt_rotated_270_##suffix (pix_type *dst, \ |
1691 | int dst_stride, \ |
1692 | const pix_type *src, \ |
1693 | int src_stride, \ |
1694 | int W, \ |
1695 | int H) \ |
1696 | { \ |
1697 | int x; \ |
1698 | int leading_pixels = 0, trailing_pixels = 0; \ |
1699 | const int TILE_SIZE = CACHE_LINE_SIZE64 / sizeof(pix_type); \ |
1700 | \ |
1701 | /* \ |
1702 | * split processing into handling destination as TILE_SIZExH cache line \ |
1703 | * aligned vertical stripes (optimistically assuming that destination \ |
1704 | * stride is a multiple of cache line, if not - it will be just a bit \ |
1705 | * slower) \ |
1706 | */ \ |
1707 | \ |
1708 | if ((uintptr_t)dst & (CACHE_LINE_SIZE64 - 1)) \ |
1709 | { \ |
1710 | leading_pixels = TILE_SIZE - (((uintptr_t)dst & \ |
1711 | (CACHE_LINE_SIZE64 - 1)) / sizeof(pix_type)); \ |
1712 | if (leading_pixels > W) \ |
1713 | leading_pixels = W; \ |
1714 | \ |
1715 | /* unaligned leading part NxH (where N < TILE_SIZE) */ \ |
1716 | blt_rotated_270_trivial_##suffix ( \ |
1717 | dst, \ |
1718 | dst_stride, \ |
1719 | src + src_stride * (W - leading_pixels), \ |
1720 | src_stride, \ |
1721 | leading_pixels, \ |
1722 | H); \ |
1723 | \ |
1724 | dst += leading_pixels; \ |
1725 | W -= leading_pixels; \ |
1726 | } \ |
1727 | \ |
1728 | if ((uintptr_t)(dst + W) & (CACHE_LINE_SIZE64 - 1)) \ |
1729 | { \ |
1730 | trailing_pixels = (((uintptr_t)(dst + W) & \ |
1731 | (CACHE_LINE_SIZE64 - 1)) / sizeof(pix_type)); \ |
1732 | if (trailing_pixels > W) \ |
1733 | trailing_pixels = W; \ |
1734 | W -= trailing_pixels; \ |
1735 | src += trailing_pixels * src_stride; \ |
1736 | } \ |
1737 | \ |
1738 | for (x = 0; x < W; x += TILE_SIZE) \ |
1739 | { \ |
1740 | /* aligned middle part TILE_SIZExH */ \ |
1741 | blt_rotated_270_trivial_##suffix ( \ |
1742 | dst + x, \ |
1743 | dst_stride, \ |
1744 | src + src_stride * (W - x - TILE_SIZE), \ |
1745 | src_stride, \ |
1746 | TILE_SIZE, \ |
1747 | H); \ |
1748 | } \ |
1749 | \ |
1750 | if (trailing_pixels) \ |
1751 | { \ |
1752 | /* unaligned trailing part NxH (where N < TILE_SIZE) */ \ |
1753 | blt_rotated_270_trivial_##suffix ( \ |
1754 | dst + W, \ |
1755 | dst_stride, \ |
1756 | src - trailing_pixels * src_stride, \ |
1757 | src_stride, \ |
1758 | trailing_pixels, \ |
1759 | H); \ |
1760 | } \ |
1761 | } \ |
1762 | \ |
1763 | static void \ |
1764 | fast_composite_rotate_90_##suffix (pixman_implementation_t *imp, \ |
1765 | pixman_composite_info_t *info) \ |
1766 | { \ |
1767 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; \ |
1768 | pix_type *dst_line; \ |
1769 | pix_type *src_line; \ |
1770 | int dst_stride, src_stride; \ |
1771 | int src_x_t, src_y_t; \ |
1772 | \ |
1773 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, pix_type, \do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (pix_type); (dst_line) = ((pix_type *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0) |
1774 | dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (pix_type); (dst_line) = ((pix_type *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); \ |
1775 | src_x_t = -src_y + pixman_fixed_to_int ( \((int) ((src_image->common.transform->matrix[0][2] + (( (pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t ) 1)) >> 16)) |
1776 | src_image->common.transform->matrix[0][2] + \((int) ((src_image->common.transform->matrix[0][2] + (( (pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t ) 1)) >> 16)) |
1777 | pixman_fixed_1 / 2 - pixman_fixed_e)((int) ((src_image->common.transform->matrix[0][2] + (( (pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t ) 1)) >> 16)) - height;\ |
1778 | src_y_t = src_x + pixman_fixed_to_int ( \((int) ((src_image->common.transform->matrix[1][2] + (( (pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t ) 1)) >> 16)) |
1779 | src_image->common.transform->matrix[1][2] + \((int) ((src_image->common.transform->matrix[1][2] + (( (pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t ) 1)) >> 16)) |
1780 | pixman_fixed_1 / 2 - pixman_fixed_e)((int) ((src_image->common.transform->matrix[1][2] + (( (pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t ) 1)) >> 16)); \ |
1781 | PIXMAN_IMAGE_GET_LINE (src_image, src_x_t, src_y_t, pix_type, \do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (pix_type ); (src_line) = ((pix_type *) __bits__) + (src_stride) * (src_y_t ) + (1) * (src_x_t); } while (0) |
1782 | src_stride, src_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (pix_type ); (src_line) = ((pix_type *) __bits__) + (src_stride) * (src_y_t ) + (1) * (src_x_t); } while (0); \ |
1783 | blt_rotated_90_##suffix (dst_line, dst_stride, src_line, src_stride, \ |
1784 | width, height); \ |
1785 | } \ |
1786 | \ |
1787 | static void \ |
1788 | fast_composite_rotate_270_##suffix (pixman_implementation_t *imp, \ |
1789 | pixman_composite_info_t *info) \ |
1790 | { \ |
1791 | PIXMAN_COMPOSITE_ARGS (info)__attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; \ |
1792 | pix_type *dst_line; \ |
1793 | pix_type *src_line; \ |
1794 | int dst_stride, src_stride; \ |
1795 | int src_x_t, src_y_t; \ |
1796 | \ |
1797 | PIXMAN_IMAGE_GET_LINE (dest_image, dest_x, dest_y, pix_type, \do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (pix_type); (dst_line) = ((pix_type *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0) |
1798 | dst_stride, dst_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = dest_image ->bits.bits; __stride__ = dest_image->bits.rowstride; ( dst_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (pix_type); (dst_line) = ((pix_type *) __bits__) + (dst_stride ) * (dest_y) + (1) * (dest_x); } while (0); \ |
1799 | src_x_t = src_y + pixman_fixed_to_int ( \((int) ((src_image->common.transform->matrix[0][2] + (( (pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t ) 1)) >> 16)) |
1800 | src_image->common.transform->matrix[0][2] + \((int) ((src_image->common.transform->matrix[0][2] + (( (pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t ) 1)) >> 16)) |
1801 | pixman_fixed_1 / 2 - pixman_fixed_e)((int) ((src_image->common.transform->matrix[0][2] + (( (pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t ) 1)) >> 16)); \ |
1802 | src_y_t = -src_x + pixman_fixed_to_int ( \((int) ((src_image->common.transform->matrix[1][2] + (( (pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t ) 1)) >> 16)) |
1803 | src_image->common.transform->matrix[1][2] + \((int) ((src_image->common.transform->matrix[1][2] + (( (pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t ) 1)) >> 16)) |
1804 | pixman_fixed_1 / 2 - pixman_fixed_e)((int) ((src_image->common.transform->matrix[1][2] + (( (pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t ) 1)) >> 16)) - width; \ |
1805 | PIXMAN_IMAGE_GET_LINE (src_image, src_x_t, src_y_t, pix_type, \do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (pix_type ); (src_line) = ((pix_type *) __bits__) + (src_stride) * (src_y_t ) + (1) * (src_x_t); } while (0) |
1806 | src_stride, src_line, 1)do { uint32_t *__bits__; int __stride__; __bits__ = src_image ->bits.bits; __stride__ = src_image->bits.rowstride; (src_stride ) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (pix_type ); (src_line) = ((pix_type *) __bits__) + (src_stride) * (src_y_t ) + (1) * (src_x_t); } while (0); \ |
1807 | blt_rotated_270_##suffix (dst_line, dst_stride, src_line, src_stride, \ |
1808 | width, height); \ |
1809 | } |
1810 | |
1811 | FAST_SIMPLE_ROTATE (8, uint8_t)static void blt_rotated_90_trivial_8 (uint8_t *dst, int dst_stride , const uint8_t *src, int src_stride, int w, int h) { int x, y ; for (y = 0; y < h; y++) { const uint8_t *s = src + (h - y - 1); uint8_t *d = dst + dst_stride * y; for (x = 0; x < w ; x++) { *d++ = *s; s += src_stride; } } } static void blt_rotated_270_trivial_8 (uint8_t *dst, int dst_stride, const uint8_t *src, int src_stride , int w, int h) { int x, y; for (y = 0; y < h; y++) { const uint8_t *s = src + src_stride * (w - 1) + y; uint8_t *d = dst + dst_stride * y; for (x = 0; x < w; x++) { *d++ = *s; s -= src_stride; } } } static void blt_rotated_90_8 (uint8_t *dst , int dst_stride, const uint8_t *src, int src_stride, int W, int H) { int x; int leading_pixels = 0, trailing_pixels = 0; const int TILE_SIZE = 64 / sizeof(uint8_t); if ((uintptr_t)dst & (64 - 1)) { leading_pixels = TILE_SIZE - (((uintptr_t)dst & (64 - 1)) / sizeof(uint8_t)); if (leading_pixels > W) leading_pixels = W; blt_rotated_90_trivial_8 ( dst, dst_stride, src, src_stride , leading_pixels, H); dst += leading_pixels; src += leading_pixels * src_stride; W -= leading_pixels; } if ((uintptr_t)(dst + W ) & (64 - 1)) { trailing_pixels = (((uintptr_t)(dst + W) & (64 - 1)) / sizeof(uint8_t)); if (trailing_pixels > W) trailing_pixels = W; W -= trailing_pixels; } for (x = 0; x < W; x += TILE_SIZE ) { blt_rotated_90_trivial_8 ( dst + x, dst_stride, src + src_stride * x, src_stride, TILE_SIZE, H); } if (trailing_pixels) { blt_rotated_90_trivial_8 ( dst + W, dst_stride, src + W * src_stride, src_stride, trailing_pixels , H); } } static void blt_rotated_270_8 (uint8_t *dst, int dst_stride , const uint8_t *src, int src_stride, int W, int H) { int x; int leading_pixels = 0, trailing_pixels = 0; const int TILE_SIZE = 64 / sizeof(uint8_t); if ((uintptr_t)dst & (64 - 1)) { leading_pixels = TILE_SIZE - (((uintptr_t)dst & (64 - 1) ) / sizeof(uint8_t)); if (leading_pixels > W) leading_pixels = W; blt_rotated_270_trivial_8 ( dst, dst_stride, src + src_stride * (W - leading_pixels), src_stride, leading_pixels, H); dst += leading_pixels; W -= leading_pixels; } if ((uintptr_t)(dst + W) & (64 - 1)) { trailing_pixels = (((uintptr_t)(dst + W ) & (64 - 1)) / sizeof(uint8_t)); if (trailing_pixels > W) trailing_pixels = W; W -= trailing_pixels; src += trailing_pixels * src_stride; } for (x = 0; x < W; x += TILE_SIZE) { blt_rotated_270_trivial_8 ( dst + x, dst_stride, src + src_stride * (W - x - TILE_SIZE ), src_stride, TILE_SIZE, H); } if (trailing_pixels) { blt_rotated_270_trivial_8 ( dst + W, dst_stride, src - trailing_pixels * src_stride, src_stride , trailing_pixels, H); } } static void fast_composite_rotate_90_8 (pixman_implementation_t *imp, pixman_composite_info_t *info ) { __attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; uint8_t *dst_line; uint8_t *src_line; int dst_stride , src_stride; int src_x_t, src_y_t; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image->bits.bits; __stride__ = dest_image->bits.rowstride; (dst_stride) = __stride__ * ( int) sizeof (uint32_t) / (int) sizeof (uint8_t); (dst_line) = ((uint8_t *) __bits__) + (dst_stride) * (dest_y) + (1) * (dest_x ); } while (0); src_x_t = -src_y + ((int) ((src_image->common .transform->matrix[0][2] + (((pixman_fixed_t) ((uint32_t) ( 1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)) - height; src_y_t = src_x + ((int) ((src_image->common.transform ->matrix[1][2] + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)); do { uint32_t *__bits__; int __stride__; __bits__ = src_image->bits.bits ; __stride__ = src_image->bits.rowstride; (src_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t); (src_line ) = ((uint8_t *) __bits__) + (src_stride) * (src_y_t) + (1) * (src_x_t); } while (0); blt_rotated_90_8 (dst_line, dst_stride , src_line, src_stride, width, height); } static void fast_composite_rotate_270_8 (pixman_implementation_t *imp, pixman_composite_info_t *info ) { __attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; uint8_t *dst_line; uint8_t *src_line; int dst_stride , src_stride; int src_x_t, src_y_t; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image->bits.bits; __stride__ = dest_image->bits.rowstride; (dst_stride) = __stride__ * ( int) sizeof (uint32_t) / (int) sizeof (uint8_t); (dst_line) = ((uint8_t *) __bits__) + (dst_stride) * (dest_y) + (1) * (dest_x ); } while (0); src_x_t = src_y + ((int) ((src_image->common .transform->matrix[0][2] + (((pixman_fixed_t) ((uint32_t) ( 1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)); src_y_t = -src_x + ((int) ((src_image->common.transform->matrix [1][2] + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)) - width; do { uint32_t *__bits__; int __stride__; __bits__ = src_image->bits.bits ; __stride__ = src_image->bits.rowstride; (src_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint8_t); (src_line ) = ((uint8_t *) __bits__) + (src_stride) * (src_y_t) + (1) * (src_x_t); } while (0); blt_rotated_270_8 (dst_line, dst_stride , src_line, src_stride, width, height); } |
1812 | FAST_SIMPLE_ROTATE (565, uint16_t)static void blt_rotated_90_trivial_565 (uint16_t *dst, int dst_stride , const uint16_t *src, int src_stride, int w, int h) { int x, y; for (y = 0; y < h; y++) { const uint16_t *s = src + (h - y - 1); uint16_t *d = dst + dst_stride * y; for (x = 0; x < w; x++) { *d++ = *s; s += src_stride; } } } static void blt_rotated_270_trivial_565 (uint16_t *dst, int dst_stride, const uint16_t *src, int src_stride , int w, int h) { int x, y; for (y = 0; y < h; y++) { const uint16_t *s = src + src_stride * (w - 1) + y; uint16_t *d = dst + dst_stride * y; for (x = 0; x < w; x++) { *d++ = *s; s -= src_stride; } } } static void blt_rotated_90_565 (uint16_t * dst, int dst_stride, const uint16_t *src, int src_stride, int W, int H) { int x; int leading_pixels = 0, trailing_pixels = 0; const int TILE_SIZE = 64 / sizeof(uint16_t); if ((uintptr_t )dst & (64 - 1)) { leading_pixels = TILE_SIZE - (((uintptr_t )dst & (64 - 1)) / sizeof(uint16_t)); if (leading_pixels > W) leading_pixels = W; blt_rotated_90_trivial_565 ( dst, dst_stride , src, src_stride, leading_pixels, H); dst += leading_pixels; src += leading_pixels * src_stride; W -= leading_pixels; } if ((uintptr_t)(dst + W) & (64 - 1)) { trailing_pixels = (( (uintptr_t)(dst + W) & (64 - 1)) / sizeof(uint16_t)); if ( trailing_pixels > W) trailing_pixels = W; W -= trailing_pixels ; } for (x = 0; x < W; x += TILE_SIZE) { blt_rotated_90_trivial_565 ( dst + x, dst_stride, src + src_stride * x, src_stride, TILE_SIZE , H); } if (trailing_pixels) { blt_rotated_90_trivial_565 ( dst + W, dst_stride, src + W * src_stride, src_stride, trailing_pixels , H); } } static void blt_rotated_270_565 (uint16_t *dst, int dst_stride, const uint16_t *src, int src_stride, int W, int H ) { int x; int leading_pixels = 0, trailing_pixels = 0; const int TILE_SIZE = 64 / sizeof(uint16_t); if ((uintptr_t)dst & (64 - 1)) { leading_pixels = TILE_SIZE - (((uintptr_t)dst & (64 - 1)) / sizeof(uint16_t)); if (leading_pixels > W) leading_pixels = W; blt_rotated_270_trivial_565 ( dst, dst_stride, src + src_stride * (W - leading_pixels), src_stride, leading_pixels, H); dst += leading_pixels; W -= leading_pixels; } if ((uintptr_t)(dst + W) & (64 - 1)) { trailing_pixels = (((uintptr_t)(dst + W ) & (64 - 1)) / sizeof(uint16_t)); if (trailing_pixels > W) trailing_pixels = W; W -= trailing_pixels; src += trailing_pixels * src_stride; } for (x = 0; x < W; x += TILE_SIZE) { blt_rotated_270_trivial_565 ( dst + x, dst_stride, src + src_stride * (W - x - TILE_SIZE ), src_stride, TILE_SIZE, H); } if (trailing_pixels) { blt_rotated_270_trivial_565 ( dst + W, dst_stride, src - trailing_pixels * src_stride, src_stride , trailing_pixels, H); } } static void fast_composite_rotate_90_565 (pixman_implementation_t *imp, pixman_composite_info_t *info ) { __attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; uint16_t *dst_line; uint16_t *src_line; int dst_stride , src_stride; int src_x_t, src_y_t; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image->bits.bits; __stride__ = dest_image->bits.rowstride; (dst_stride) = __stride__ * ( int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride) * (dest_y) + (1) * (dest_x ); } while (0); src_x_t = -src_y + ((int) ((src_image->common .transform->matrix[0][2] + (((pixman_fixed_t) ((uint32_t) ( 1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)) - height; src_y_t = src_x + ((int) ((src_image->common.transform ->matrix[1][2] + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)); do { uint32_t *__bits__; int __stride__; __bits__ = src_image->bits.bits ; __stride__ = src_image->bits.rowstride; (src_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (src_line ) = ((uint16_t *) __bits__) + (src_stride) * (src_y_t) + (1) * (src_x_t); } while (0); blt_rotated_90_565 (dst_line, dst_stride , src_line, src_stride, width, height); } static void fast_composite_rotate_270_565 (pixman_implementation_t *imp, pixman_composite_info_t *info ) { __attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; uint16_t *dst_line; uint16_t *src_line; int dst_stride , src_stride; int src_x_t, src_y_t; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image->bits.bits; __stride__ = dest_image->bits.rowstride; (dst_stride) = __stride__ * ( int) sizeof (uint32_t) / (int) sizeof (uint16_t); (dst_line) = ((uint16_t *) __bits__) + (dst_stride) * (dest_y) + (1) * (dest_x ); } while (0); src_x_t = src_y + ((int) ((src_image->common .transform->matrix[0][2] + (((pixman_fixed_t) ((uint32_t) ( 1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)); src_y_t = -src_x + ((int) ((src_image->common.transform->matrix [1][2] + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)) - width; do { uint32_t *__bits__; int __stride__; __bits__ = src_image->bits.bits ; __stride__ = src_image->bits.rowstride; (src_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint16_t); (src_line ) = ((uint16_t *) __bits__) + (src_stride) * (src_y_t) + (1) * (src_x_t); } while (0); blt_rotated_270_565 (dst_line, dst_stride , src_line, src_stride, width, height); } |
1813 | FAST_SIMPLE_ROTATE (8888, uint32_t)static void blt_rotated_90_trivial_8888 (uint32_t *dst, int dst_stride , const uint32_t *src, int src_stride, int w, int h) { int x, y; for (y = 0; y < h; y++) { const uint32_t *s = src + (h - y - 1); uint32_t *d = dst + dst_stride * y; for (x = 0; x < w; x++) { *d++ = *s; s += src_stride; } } } static void blt_rotated_270_trivial_8888 (uint32_t *dst, int dst_stride, const uint32_t *src, int src_stride , int w, int h) { int x, y; for (y = 0; y < h; y++) { const uint32_t *s = src + src_stride * (w - 1) + y; uint32_t *d = dst + dst_stride * y; for (x = 0; x < w; x++) { *d++ = *s; s -= src_stride; } } } static void blt_rotated_90_8888 (uint32_t * dst, int dst_stride, const uint32_t *src, int src_stride, int W, int H) { int x; int leading_pixels = 0, trailing_pixels = 0; const int TILE_SIZE = 64 / sizeof(uint32_t); if ((uintptr_t )dst & (64 - 1)) { leading_pixels = TILE_SIZE - (((uintptr_t )dst & (64 - 1)) / sizeof(uint32_t)); if (leading_pixels > W) leading_pixels = W; blt_rotated_90_trivial_8888 ( dst, dst_stride , src, src_stride, leading_pixels, H); dst += leading_pixels; src += leading_pixels * src_stride; W -= leading_pixels; } if ((uintptr_t)(dst + W) & (64 - 1)) { trailing_pixels = (( (uintptr_t)(dst + W) & (64 - 1)) / sizeof(uint32_t)); if ( trailing_pixels > W) trailing_pixels = W; W -= trailing_pixels ; } for (x = 0; x < W; x += TILE_SIZE) { blt_rotated_90_trivial_8888 ( dst + x, dst_stride, src + src_stride * x, src_stride, TILE_SIZE , H); } if (trailing_pixels) { blt_rotated_90_trivial_8888 ( dst + W, dst_stride, src + W * src_stride, src_stride, trailing_pixels , H); } } static void blt_rotated_270_8888 (uint32_t *dst, int dst_stride, const uint32_t *src, int src_stride, int W, int H ) { int x; int leading_pixels = 0, trailing_pixels = 0; const int TILE_SIZE = 64 / sizeof(uint32_t); if ((uintptr_t)dst & (64 - 1)) { leading_pixels = TILE_SIZE - (((uintptr_t)dst & (64 - 1)) / sizeof(uint32_t)); if (leading_pixels > W) leading_pixels = W; blt_rotated_270_trivial_8888 ( dst, dst_stride, src + src_stride * (W - leading_pixels), src_stride, leading_pixels, H); dst += leading_pixels; W -= leading_pixels; } if ((uintptr_t)(dst + W) & (64 - 1)) { trailing_pixels = (((uintptr_t)(dst + W ) & (64 - 1)) / sizeof(uint32_t)); if (trailing_pixels > W) trailing_pixels = W; W -= trailing_pixels; src += trailing_pixels * src_stride; } for (x = 0; x < W; x += TILE_SIZE) { blt_rotated_270_trivial_8888 ( dst + x, dst_stride, src + src_stride * (W - x - TILE_SIZE ), src_stride, TILE_SIZE, H); } if (trailing_pixels) { blt_rotated_270_trivial_8888 ( dst + W, dst_stride, src - trailing_pixels * src_stride, src_stride , trailing_pixels, H); } } static void fast_composite_rotate_90_8888 (pixman_implementation_t *imp, pixman_composite_info_t *info ) { __attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; uint32_t *dst_line; uint32_t *src_line; int dst_stride , src_stride; int src_x_t, src_y_t; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image->bits.bits; __stride__ = dest_image->bits.rowstride; (dst_stride) = __stride__ * ( int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride) * (dest_y) + (1) * (dest_x ); } while (0); src_x_t = -src_y + ((int) ((src_image->common .transform->matrix[0][2] + (((pixman_fixed_t) ((uint32_t) ( 1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)) - height; src_y_t = src_x + ((int) ((src_image->common.transform ->matrix[1][2] + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)); do { uint32_t *__bits__; int __stride__; __bits__ = src_image->bits.bits ; __stride__ = src_image->bits.rowstride; (src_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (src_line ) = ((uint32_t *) __bits__) + (src_stride) * (src_y_t) + (1) * (src_x_t); } while (0); blt_rotated_90_8888 (dst_line, dst_stride , src_line, src_stride, width, height); } static void fast_composite_rotate_270_8888 (pixman_implementation_t *imp, pixman_composite_info_t *info ) { __attribute__((unused)) pixman_op_t op = info->op; __attribute__ ((unused)) pixman_image_t * src_image = info->src_image; __attribute__ ((unused)) pixman_image_t * mask_image = info->mask_image; __attribute__((unused)) pixman_image_t * dest_image = info-> dest_image; __attribute__((unused)) int32_t src_x = info-> src_x; __attribute__((unused)) int32_t src_y = info->src_y ; __attribute__((unused)) int32_t mask_x = info->mask_x; __attribute__ ((unused)) int32_t mask_y = info->mask_y; __attribute__((unused )) int32_t dest_x = info->dest_x; __attribute__((unused)) int32_t dest_y = info->dest_y; __attribute__((unused)) int32_t width = info->width; __attribute__((unused)) int32_t height = info ->height; uint32_t *dst_line; uint32_t *src_line; int dst_stride , src_stride; int src_x_t, src_y_t; do { uint32_t *__bits__; int __stride__; __bits__ = dest_image->bits.bits; __stride__ = dest_image->bits.rowstride; (dst_stride) = __stride__ * ( int) sizeof (uint32_t) / (int) sizeof (uint32_t); (dst_line) = ((uint32_t *) __bits__) + (dst_stride) * (dest_y) + (1) * (dest_x ); } while (0); src_x_t = src_y + ((int) ((src_image->common .transform->matrix[0][2] + (((pixman_fixed_t) ((uint32_t) ( 1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)); src_y_t = -src_x + ((int) ((src_image->common.transform->matrix [1][2] + (((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2 - ((pixman_fixed_t) 1)) >> 16)) - width; do { uint32_t *__bits__; int __stride__; __bits__ = src_image->bits.bits ; __stride__ = src_image->bits.rowstride; (src_stride) = __stride__ * (int) sizeof (uint32_t) / (int) sizeof (uint32_t); (src_line ) = ((uint32_t *) __bits__) + (src_stride) * (src_y_t) + (1) * (src_x_t); } while (0); blt_rotated_270_8888 (dst_line, dst_stride , src_line, src_stride, width, height); } |
1814 | |
1815 | static const pixman_fast_path_t c_fast_paths[] = |
1816 | { |
1817 | PIXMAN_STD_FAST_PATH (OVER, solid, a8, r5g6b5, fast_composite_over_n_8_0565){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8, ((PIXMAN_a8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_r5g6b5, ( (1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_8_0565 }, |
1818 | PIXMAN_STD_FAST_PATH (OVER, solid, a8, b5g6r5, fast_composite_over_n_8_0565){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8, ((PIXMAN_a8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_b5g6r5, ( (1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_8_0565 }, |
1819 | PIXMAN_STD_FAST_PATH (OVER, solid, a8, r8g8b8, fast_composite_over_n_8_0888){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8, ((PIXMAN_a8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_r8g8b8, ( (1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_8_0888 }, |
1820 | PIXMAN_STD_FAST_PATH (OVER, solid, a8, b8g8r8, fast_composite_over_n_8_0888){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8, ((PIXMAN_a8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_b8g8r8, ( (1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_8_0888 }, |
1821 | PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8r8g8b8, fast_composite_over_n_8_8888){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8, ((PIXMAN_a8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_8_8888 }, |
1822 | PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8r8g8b8, fast_composite_over_n_8_8888){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8, ((PIXMAN_a8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_8_8888 }, |
1823 | PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8b8g8r8, fast_composite_over_n_8_8888){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8, ((PIXMAN_a8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_8_8888 }, |
1824 | PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8b8g8r8, fast_composite_over_n_8_8888){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8, ((PIXMAN_a8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_8_8888 }, |
1825 | PIXMAN_STD_FAST_PATH (OVER, solid, a1, a8r8g8b8, fast_composite_over_n_1_8888){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a1, ((PIXMAN_a1 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a1 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_1_8888 }, |
1826 | PIXMAN_STD_FAST_PATH (OVER, solid, a1, x8r8g8b8, fast_composite_over_n_1_8888){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a1, ((PIXMAN_a1 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a1 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_1_8888 }, |
1827 | PIXMAN_STD_FAST_PATH (OVER, solid, a1, a8b8g8r8, fast_composite_over_n_1_8888){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a1, ((PIXMAN_a1 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a1 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_1_8888 }, |
1828 | PIXMAN_STD_FAST_PATH (OVER, solid, a1, x8b8g8r8, fast_composite_over_n_1_8888){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a1, ((PIXMAN_a1 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a1 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_1_8888 }, |
1829 | PIXMAN_STD_FAST_PATH (OVER, solid, a1, r5g6b5, fast_composite_over_n_1_0565){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a1, ((PIXMAN_a1 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a1 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_r5g6b5, ( (1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_1_0565 }, |
1830 | PIXMAN_STD_FAST_PATH (OVER, solid, a1, b5g6r5, fast_composite_over_n_1_0565){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a1, ((PIXMAN_a1 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a1 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_b5g6r5, ( (1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_1_0565 }, |
1831 | PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, a8r8g8b8, fast_composite_over_n_8888_8888_ca){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8r8g8b8, ((PIXMAN_a8r8g8b8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8r8g8b8 == (((0) << 24) | ((1) << 16) | ((0) << 12 ) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 8))) , PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_8888_8888_ca }, |
1832 | PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, x8r8g8b8, fast_composite_over_n_8888_8888_ca){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8r8g8b8, ((PIXMAN_a8r8g8b8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8r8g8b8 == (((0) << 24) | ((1) << 16) | ((0) << 12 ) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 8))) , PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_8888_8888_ca }, |
1833 | PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, r5g6b5, fast_composite_over_n_8888_0565_ca){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8r8g8b8, ((PIXMAN_a8r8g8b8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8r8g8b8 == (((0) << 24) | ((1) << 16) | ((0) << 12 ) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 8))) , PIXMAN_r5g6b5, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_8888_0565_ca }, |
1834 | PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, a8b8g8r8, fast_composite_over_n_8888_8888_ca){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8b8g8r8, ((PIXMAN_a8b8g8r8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8b8g8r8 == (((0) << 24) | ((1) << 16) | ((0) << 12 ) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 8))) , PIXMAN_a8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_8888_8888_ca }, |
1835 | PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, x8b8g8r8, fast_composite_over_n_8888_8888_ca){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8b8g8r8, ((PIXMAN_a8b8g8r8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8b8g8r8 == (((0) << 24) | ((1) << 16) | ((0) << 12 ) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 8))) , PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_8888_8888_ca }, |
1836 | PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, b5g6r5, fast_composite_over_n_8888_0565_ca){ PIXMAN_OP_OVER, (((0) << 24) | ((1) << 16) | (( 0) << 12) | ((0) << 8) | ((0) << 4) | ((0)) ), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8b8g8r8, ((PIXMAN_a8b8g8r8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8b8g8r8 == (((0) << 24) | ((1) << 16) | ((0) << 12 ) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 8))) , PIXMAN_b5g6r5, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_n_8888_0565_ca }, |
1837 | PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, a8, x8r8g8b8, fast_composite_over_x888_8_8888){ PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_x8r8g8b8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8, ((PIXMAN_a8 == (((0) << 24) | ((0) << 16) | ((0) << 12 ) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6 )) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ( (0) << 12) | ((0) << 8) | ((0) << 4) | ((0) ))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0) ))) | (1 << 9))), PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_x888_8_8888 }, |
1838 | PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, a8, a8r8g8b8, fast_composite_over_x888_8_8888){ PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_x8r8g8b8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8, ((PIXMAN_a8 == (((0) << 24) | ((0) << 16) | ((0) << 12 ) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6 )) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ( (0) << 12) | ((0) << 8) | ((0) << 4) | ((0) ))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0) ))) | (1 << 9))), PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_x888_8_8888 }, |
1839 | PIXMAN_STD_FAST_PATH (OVER, x8b8g8r8, a8, x8b8g8r8, fast_composite_over_x888_8_8888){ PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_x8b8g8r8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8, ((PIXMAN_a8 == (((0) << 24) | ((0) << 16) | ((0) << 12 ) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6 )) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ( (0) << 12) | ((0) << 8) | ((0) << 4) | ((0) ))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0) ))) | (1 << 9))), PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_x888_8_8888 }, |
1840 | PIXMAN_STD_FAST_PATH (OVER, x8b8g8r8, a8, a8b8g8r8, fast_composite_over_x888_8_8888){ PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_x8b8g8r8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8, ((PIXMAN_a8 == (((0) << 24) | ((0) << 16) | ((0) << 12 ) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6 )) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ( (0) << 12) | ((0) << 8) | ((0) << 4) | ((0) ))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0) ))) | (1 << 9))), PIXMAN_a8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_x888_8_8888 }, |
1841 | PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, a8r8g8b8, fast_composite_over_8888_8888){ PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8r8g8b8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_8888_8888 }, |
1842 | PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, x8r8g8b8, fast_composite_over_8888_8888){ PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8r8g8b8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_8888_8888 }, |
1843 | PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, r5g6b5, fast_composite_over_8888_0565){ PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8r8g8b8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_r5g6b5, ( (1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_8888_0565 }, |
1844 | PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, a8b8g8r8, fast_composite_over_8888_8888){ PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8b8g8r8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_8888_8888 }, |
1845 | PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, x8b8g8r8, fast_composite_over_8888_8888){ PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8b8g8r8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_8888_8888 }, |
1846 | PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, b5g6r5, fast_composite_over_8888_0565){ PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8b8g8r8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_b5g6r5, ( (1 << 5) | (1 << 1) | (1 << 6)), fast_composite_over_8888_0565 }, |
1847 | PIXMAN_STD_FAST_PATH (ADD, r5g6b5, null, r5g6b5, fast_composite_add_0565_0565){ PIXMAN_OP_ADD, PIXMAN_r5g6b5, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_r5g6b5 == ( ((0) << 24) | ((1) << 16) | ((0) << 12) | ( (0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_r5g6b5, ( (1 << 5) | (1 << 1) | (1 << 6)), fast_composite_add_0565_0565 }, |
1848 | PIXMAN_STD_FAST_PATH (ADD, b5g6r5, null, b5g6r5, fast_composite_add_0565_0565){ PIXMAN_OP_ADD, PIXMAN_b5g6r5, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_b5g6r5 == ( ((0) << 24) | ((1) << 16) | ((0) << 12) | ( (0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_b5g6r5, ( (1 << 5) | (1 << 1) | (1 << 6)), fast_composite_add_0565_0565 }, |
1849 | PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, null, a8r8g8b8, fast_composite_add_8888_8888){ PIXMAN_OP_ADD, PIXMAN_a8r8g8b8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8r8g8b8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_add_8888_8888 }, |
1850 | PIXMAN_STD_FAST_PATH (ADD, a8b8g8r8, null, a8b8g8r8, fast_composite_add_8888_8888){ PIXMAN_OP_ADD, PIXMAN_a8b8g8r8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8b8g8r8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_add_8888_8888 }, |
1851 | PIXMAN_STD_FAST_PATH (ADD, a8, null, a8, fast_composite_add_8_8){ PIXMAN_OP_ADD, PIXMAN_a8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24) | ((0) << 16 ) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_add_8_8 }, |
1852 | PIXMAN_STD_FAST_PATH (ADD, a1, null, a1, fast_composite_add_1_1){ PIXMAN_OP_ADD, PIXMAN_a1, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a1 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24) | ((0) << 16 ) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a1, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_add_1_1 }, |
1853 | PIXMAN_STD_FAST_PATH_CA (ADD, solid, a8r8g8b8, a8r8g8b8, fast_composite_add_n_8888_8888_ca){ PIXMAN_OP_ADD, (((0) << 24) | ((1) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8r8g8b8, ((PIXMAN_a8r8g8b8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8r8g8b8 == (((0) << 24) | ((1) << 16) | ((0) << 12 ) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 8))) , PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_add_n_8888_8888_ca }, |
1854 | PIXMAN_STD_FAST_PATH (ADD, solid, a8, a8, fast_composite_add_n_8_8){ PIXMAN_OP_ADD, (((0) << 24) | ((1) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8, ((PIXMAN_a8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_add_n_8_8 }, |
1855 | PIXMAN_STD_FAST_PATH (SRC, solid, null, a8r8g8b8, fast_composite_solid_fill){ PIXMAN_OP_SRC, (((0) << 24) | ((1) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24) | ((0) << 16 ) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_solid_fill }, |
1856 | PIXMAN_STD_FAST_PATH (SRC, solid, null, x8r8g8b8, fast_composite_solid_fill){ PIXMAN_OP_SRC, (((0) << 24) | ((1) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24) | ((0) << 16 ) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_solid_fill }, |
1857 | PIXMAN_STD_FAST_PATH (SRC, solid, null, a8b8g8r8, fast_composite_solid_fill){ PIXMAN_OP_SRC, (((0) << 24) | ((1) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24) | ((0) << 16 ) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_solid_fill }, |
1858 | PIXMAN_STD_FAST_PATH (SRC, solid, null, x8b8g8r8, fast_composite_solid_fill){ PIXMAN_OP_SRC, (((0) << 24) | ((1) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24) | ((0) << 16 ) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_solid_fill }, |
1859 | PIXMAN_STD_FAST_PATH (SRC, solid, null, a1, fast_composite_solid_fill){ PIXMAN_OP_SRC, (((0) << 24) | ((1) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24) | ((0) << 16 ) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a1, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_solid_fill }, |
1860 | PIXMAN_STD_FAST_PATH (SRC, solid, null, a8, fast_composite_solid_fill){ PIXMAN_OP_SRC, (((0) << 24) | ((1) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24) | ((0) << 16 ) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_solid_fill }, |
1861 | PIXMAN_STD_FAST_PATH (SRC, solid, null, r5g6b5, fast_composite_solid_fill){ PIXMAN_OP_SRC, (((0) << 24) | ((1) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24) | ((0) << 16 ) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_r5g6b5, ((1 << 5) | ( 1 << 1) | (1 << 6)), fast_composite_solid_fill }, |
1862 | PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, a8r8g8b8, fast_composite_src_x888_8888){ PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_x8r8g8b8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_x888_8888 }, |
1863 | PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, a8b8g8r8, fast_composite_src_x888_8888){ PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_x8b8g8r8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_x888_8888 }, |
1864 | PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, x8r8g8b8, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8r8g8b8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1865 | PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, a8r8g8b8, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8r8g8b8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1866 | PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, x8r8g8b8, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_x8r8g8b8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1867 | PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, x8b8g8r8, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8b8g8r8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1868 | PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, a8b8g8r8, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8b8g8r8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1869 | PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, x8b8g8r8, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_x8b8g8r8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1870 | PIXMAN_STD_FAST_PATH (SRC, b8g8r8a8, null, b8g8r8x8, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_b8g8r8a8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_b8g8r8a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_b8g8r8x8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1871 | PIXMAN_STD_FAST_PATH (SRC, b8g8r8a8, null, b8g8r8a8, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_b8g8r8a8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_b8g8r8a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_b8g8r8a8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1872 | PIXMAN_STD_FAST_PATH (SRC, b8g8r8x8, null, b8g8r8x8, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_b8g8r8x8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_b8g8r8x8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_b8g8r8x8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1873 | PIXMAN_STD_FAST_PATH (SRC, r5g6b5, null, r5g6b5, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_r5g6b5, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_r5g6b5 == ( ((0) << 24) | ((1) << 16) | ((0) << 12) | ( (0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_r5g6b5, ( (1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1874 | PIXMAN_STD_FAST_PATH (SRC, b5g6r5, null, b5g6r5, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_b5g6r5, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_b5g6r5 == ( ((0) << 24) | ((1) << 16) | ((0) << 12) | ( (0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_b5g6r5, ( (1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1875 | PIXMAN_STD_FAST_PATH (SRC, r8g8b8, null, r8g8b8, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_r8g8b8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_r8g8b8 == ( ((0) << 24) | ((1) << 16) | ((0) << 12) | ( (0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_r8g8b8, ( (1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1876 | PIXMAN_STD_FAST_PATH (SRC, b8g8r8, null, b8g8r8, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_b8g8r8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_b8g8r8 == ( ((0) << 24) | ((1) << 16) | ((0) << 12) | ( (0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_b8g8r8, ( (1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1877 | PIXMAN_STD_FAST_PATH (SRC, x1r5g5b5, null, x1r5g5b5, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_x1r5g5b5, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_x1r5g5b5 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_x1r5g5b5, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1878 | PIXMAN_STD_FAST_PATH (SRC, a1r5g5b5, null, x1r5g5b5, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_a1r5g5b5, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a1r5g5b5 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24 ) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : (( ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_x1r5g5b5, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1879 | PIXMAN_STD_FAST_PATH (SRC, a8, null, a8, fast_composite_src_memcpy){ PIXMAN_OP_SRC, PIXMAN_a8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24) | ((0) << 16 ) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_src_memcpy }, |
1880 | PIXMAN_STD_FAST_PATH (IN, a8, null, a8, fast_composite_in_8_8){ PIXMAN_OP_IN, PIXMAN_a8, (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), (((0) << 24) | ((0) << 16 ) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_in_8_8 }, |
1881 | PIXMAN_STD_FAST_PATH (IN, solid, a8, a8, fast_composite_in_n_8_8){ PIXMAN_OP_IN, (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), (((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (((((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))) == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))), PIXMAN_a8, ((PIXMAN_a8 == (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0)))) ? 0 : ((((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | ((PIXMAN_a8 == (((0) << 24) | ((1) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0)))) ? 0 : ((1 << 23) | (1 << 11) | (1 << 0)))) | (1 << 9))), PIXMAN_a8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_in_n_8_8 }, |
1882 | |
1883 | SIMPLE_NEAREST_FAST_PATH (SRC, x8r8g8b8, x8r8g8b8, 8888_8888){ PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_cover_SRC , }, { PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 14) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_none_SRC, }, { PIXMAN_OP_SRC , PIXMAN_x8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | ( 1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0))), 0, PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_pad_SRC , }, { PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_normal_SRC, }, |
1884 | SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8, 8888_8888){ PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_cover_SRC , }, { PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 14) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_none_SRC, }, { PIXMAN_OP_SRC , PIXMAN_a8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | ( 1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0))), 0, PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_pad_SRC , }, { PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_normal_SRC, }, |
1885 | SIMPLE_NEAREST_FAST_PATH (SRC, x8b8g8r8, x8b8g8r8, 8888_8888){ PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_cover_SRC , }, { PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 14) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_none_SRC, }, { PIXMAN_OP_SRC , PIXMAN_x8b8g8r8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | ( 1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0))), 0, PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_pad_SRC , }, { PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_normal_SRC, }, |
1886 | SIMPLE_NEAREST_FAST_PATH (SRC, a8b8g8r8, x8b8g8r8, 8888_8888){ PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_cover_SRC , }, { PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 14) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_none_SRC, }, { PIXMAN_OP_SRC , PIXMAN_a8b8g8r8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | ( 1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0))), 0, PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_pad_SRC , }, { PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_normal_SRC, }, |
1887 | |
1888 | SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8, 8888_8888){ PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_cover_SRC , }, { PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 14) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_none_SRC, }, { PIXMAN_OP_SRC , PIXMAN_a8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | ( 1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0))), 0, PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_pad_SRC , }, { PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_normal_SRC, }, |
1889 | SIMPLE_NEAREST_FAST_PATH (SRC, a8b8g8r8, a8b8g8r8, 8888_8888){ PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_cover_SRC , }, { PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 14) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_a8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_none_SRC, }, { PIXMAN_OP_SRC , PIXMAN_a8b8g8r8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | ( 1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0))), 0, PIXMAN_a8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_pad_SRC , }, { PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_a8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_normal_SRC, }, |
1890 | |
1891 | SIMPLE_NEAREST_FAST_PATH (SRC, x8r8g8b8, r5g6b5, 8888_565){ PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_r5g6b5 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_565_cover_SRC , }, { PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 14) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_r5g6b5, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_565_none_SRC, }, { PIXMAN_OP_SRC , PIXMAN_x8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | ( 1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0))), 0, PIXMAN_r5g6b5, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_565_pad_SRC , }, { PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_r5g6b5, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_565_normal_SRC, }, |
1892 | SIMPLE_NEAREST_FAST_PATH (SRC, a8r8g8b8, r5g6b5, 8888_565){ PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_r5g6b5 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_565_cover_SRC , }, { PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 14) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_r5g6b5, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_565_none_SRC, }, { PIXMAN_OP_SRC , PIXMAN_a8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | ( 1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0))), 0, PIXMAN_r5g6b5, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_565_pad_SRC , }, { PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_r5g6b5, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_565_normal_SRC, }, |
1893 | |
1894 | SIMPLE_NEAREST_FAST_PATH (SRC, r5g6b5, r5g6b5, 565_565){ PIXMAN_OP_SRC, PIXMAN_r5g6b5, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_r5g6b5 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_565_565_cover_SRC , }, { PIXMAN_OP_SRC, PIXMAN_r5g6b5, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (( 1 << 14) | (1 << 3) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_r5g6b5 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_565_565_none_SRC , }, { PIXMAN_OP_SRC, PIXMAN_r5g6b5, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (( 1 << 15) | (1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_r5g6b5 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_565_565_pad_SRC , }, { PIXMAN_OP_SRC, PIXMAN_r5g6b5, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (( 1 << 15) | (1 << 3) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_r5g6b5 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_565_565_normal_SRC , }, |
1895 | |
1896 | SIMPLE_NEAREST_FAST_PATH_COVER (SRC, x8r8g8b8, a8r8g8b8, x888_8888){ PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_x888_8888_cover_SRC , }, |
1897 | SIMPLE_NEAREST_FAST_PATH_COVER (SRC, x8b8g8r8, a8b8g8r8, x888_8888){ PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_x888_8888_cover_SRC , }, |
1898 | SIMPLE_NEAREST_FAST_PATH_PAD (SRC, x8r8g8b8, a8r8g8b8, x888_8888){ PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (( 1 << 15) | (1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_x888_8888_pad_SRC , }, |
1899 | SIMPLE_NEAREST_FAST_PATH_PAD (SRC, x8b8g8r8, a8b8g8r8, x888_8888){ PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (( 1 << 15) | (1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_x888_8888_pad_SRC , }, |
1900 | SIMPLE_NEAREST_FAST_PATH_NORMAL (SRC, x8r8g8b8, a8r8g8b8, x888_8888){ PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (( 1 << 15) | (1 << 3) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_x888_8888_normal_SRC , }, |
1901 | SIMPLE_NEAREST_FAST_PATH_NORMAL (SRC, x8b8g8r8, a8b8g8r8, x888_8888){ PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (( 1 << 15) | (1 << 3) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_x888_8888_normal_SRC , }, |
1902 | |
1903 | SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8, 8888_8888){ PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_cover_OVER , }, { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, (((1 << 10) | ( 1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 14) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_none_OVER, }, { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (( 1 << 15) | (1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_pad_OVER , }, { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, (((1 << 10) | ( 1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_normal_OVER, }, |
1904 | SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, x8b8g8r8, 8888_8888){ PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_cover_OVER , }, { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, (((1 << 10) | ( 1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 14) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_none_OVER, }, { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (( 1 << 15) | (1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_pad_OVER , }, { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, (((1 << 10) | ( 1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_x8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_normal_OVER, }, |
1905 | SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8, 8888_8888){ PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_cover_OVER , }, { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, (((1 << 10) | ( 1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 14) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_none_OVER, }, { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (( 1 << 15) | (1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_pad_OVER , }, { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, (((1 << 10) | ( 1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_normal_OVER, }, |
1906 | SIMPLE_NEAREST_FAST_PATH (OVER, a8b8g8r8, a8b8g8r8, 8888_8888){ PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_cover_OVER , }, { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, (((1 << 10) | ( 1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 14) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_a8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_none_OVER, }, { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (( 1 << 15) | (1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_pad_OVER , }, { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, (((1 << 10) | ( 1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_a8b8g8r8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_8888_normal_OVER, }, |
1907 | |
1908 | SIMPLE_NEAREST_FAST_PATH (OVER, a8r8g8b8, r5g6b5, 8888_565){ PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | (1 << 23), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_r5g6b5 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_565_cover_OVER , }, { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, (((1 << 10) | ( 1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 14) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_r5g6b5, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_565_none_OVER, }, { PIXMAN_OP_OVER , PIXMAN_a8r8g8b8, (((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | ( 1 << 14) | (1 << 4)) | (1 << 16)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0))), 0, PIXMAN_r5g6b5, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_565_pad_OVER , }, { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, (((1 << 10) | ( 1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)) | ((1 << 15) | (1 << 3) | (1 << 4)) | ( 1 << 16)), (((0) << 24) | ((0) << 16) | ((0 ) << 12) | ((0) << 8) | ((0) << 4) | ((0))) , 0, PIXMAN_r5g6b5, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest_8888_565_normal_OVER, }, |
1909 | |
1910 | #define NEAREST_FAST_PATH(op,s,d){ PIXMAN_OP_op, PIXMAN_s, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8 ) | ((0) << 4) | ((0))), 0, PIXMAN_d, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , } \ |
1911 | { PIXMAN_OP_ ## op, \ |
1912 | PIXMAN_ ## s, SCALED_NEAREST_FLAGS((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), \ |
1913 | PIXMAN_null(((0) << 24) | ((0) << 16) | ((0) << 12) | ( (0) << 8) | ((0) << 4) | ((0))), 0, \ |
1914 | PIXMAN_ ## d, FAST_PATH_STD_DEST_FLAGS((1 << 5) | (1 << 1) | (1 << 6)), \ |
1915 | fast_composite_scaled_nearest, \ |
1916 | } |
1917 | |
1918 | NEAREST_FAST_PATH (SRC, x8r8g8b8, x8r8g8b8){ PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1919 | NEAREST_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8){ PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1920 | NEAREST_FAST_PATH (SRC, x8b8g8r8, x8b8g8r8){ PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1921 | NEAREST_FAST_PATH (SRC, a8b8g8r8, x8b8g8r8){ PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1922 | |
1923 | NEAREST_FAST_PATH (SRC, x8r8g8b8, a8r8g8b8){ PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1924 | NEAREST_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8){ PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1925 | NEAREST_FAST_PATH (SRC, x8b8g8r8, a8b8g8r8){ PIXMAN_OP_SRC, PIXMAN_x8b8g8r8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1926 | NEAREST_FAST_PATH (SRC, a8b8g8r8, a8b8g8r8){ PIXMAN_OP_SRC, PIXMAN_a8b8g8r8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1927 | |
1928 | NEAREST_FAST_PATH (OVER, x8r8g8b8, x8r8g8b8){ PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1929 | NEAREST_FAST_PATH (OVER, a8r8g8b8, x8r8g8b8){ PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1930 | NEAREST_FAST_PATH (OVER, x8b8g8r8, x8b8g8r8){ PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1931 | NEAREST_FAST_PATH (OVER, a8b8g8r8, x8b8g8r8){ PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1932 | |
1933 | NEAREST_FAST_PATH (OVER, x8r8g8b8, a8r8g8b8){ PIXMAN_OP_OVER, PIXMAN_x8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1934 | NEAREST_FAST_PATH (OVER, a8r8g8b8, a8r8g8b8){ PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8r8g8b8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1935 | NEAREST_FAST_PATH (OVER, x8b8g8r8, a8b8g8r8){ PIXMAN_OP_OVER, PIXMAN_x8b8g8r8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1936 | NEAREST_FAST_PATH (OVER, a8b8g8r8, a8b8g8r8){ PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, ((1 << 10) | (1 << 1) | (1 << 11) | (1 << 5) | (1 << 6)), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8b8g8r8 , ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_scaled_nearest , }, |
1937 | |
1938 | #define SIMPLE_ROTATE_FLAGS(angle)(FAST_PATH_ROTATE_angle_TRANSFORM | (1 << 11) | (1 << 23) | ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6))) \ |
1939 | (FAST_PATH_ROTATE_ ## angle ## _TRANSFORM | \ |
1940 | FAST_PATH_NEAREST_FILTER(1 << 11) | \ |
1941 | FAST_PATH_SAMPLES_COVER_CLIP_NEAREST(1 << 23) | \ |
1942 | FAST_PATH_STANDARD_FLAGS((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6))) |
1943 | |
1944 | #define SIMPLE_ROTATE_FAST_PATH(op,s,d,suffix){ PIXMAN_OP_op, PIXMAN_s, ((1 << 20) | (1 << 11) | (1 << 23) | ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6))), (((0) << 24) | ((0) << 16 ) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_d, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_rotate_90_suffix, }, { PIXMAN_OP_op, PIXMAN_s , ((1 << 22) | (1 << 11) | (1 << 23) | ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6))), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_d, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_rotate_270_suffix , } \ |
1945 | { PIXMAN_OP_ ## op, \ |
1946 | PIXMAN_ ## s, SIMPLE_ROTATE_FLAGS (90)((1 << 20) | (1 << 11) | (1 << 23) | ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6))), \ |
1947 | PIXMAN_null(((0) << 24) | ((0) << 16) | ((0) << 12) | ( (0) << 8) | ((0) << 4) | ((0))), 0, \ |
1948 | PIXMAN_ ## d, FAST_PATH_STD_DEST_FLAGS((1 << 5) | (1 << 1) | (1 << 6)), \ |
1949 | fast_composite_rotate_90_##suffix, \ |
1950 | }, \ |
1951 | { PIXMAN_OP_ ## op, \ |
1952 | PIXMAN_ ## s, SIMPLE_ROTATE_FLAGS (270)((1 << 22) | (1 << 11) | (1 << 23) | ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6))), \ |
1953 | PIXMAN_null(((0) << 24) | ((0) << 16) | ((0) << 12) | ( (0) << 8) | ((0) << 4) | ((0))), 0, \ |
1954 | PIXMAN_ ## d, FAST_PATH_STD_DEST_FLAGS((1 << 5) | (1 << 1) | (1 << 6)), \ |
1955 | fast_composite_rotate_270_##suffix, \ |
1956 | } |
1957 | |
1958 | SIMPLE_ROTATE_FAST_PATH (SRC, a8r8g8b8, a8r8g8b8, 8888){ PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, ((1 << 20) | (1 << 11) | (1 << 23) | ((1 << 2) | (1 << 5) | ( 1 << 1) | (1 << 6))), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))), 0, PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_rotate_90_8888, }, { PIXMAN_OP_SRC , PIXMAN_a8r8g8b8, ((1 << 22) | (1 << 11) | (1 << 23) | ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6))), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_rotate_270_8888, }, |
1959 | SIMPLE_ROTATE_FAST_PATH (SRC, a8r8g8b8, x8r8g8b8, 8888){ PIXMAN_OP_SRC, PIXMAN_a8r8g8b8, ((1 << 20) | (1 << 11) | (1 << 23) | ((1 << 2) | (1 << 5) | ( 1 << 1) | (1 << 6))), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))), 0, PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_rotate_90_8888, }, { PIXMAN_OP_SRC , PIXMAN_a8r8g8b8, ((1 << 22) | (1 << 11) | (1 << 23) | ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6))), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_rotate_270_8888, }, |
1960 | SIMPLE_ROTATE_FAST_PATH (SRC, x8r8g8b8, x8r8g8b8, 8888){ PIXMAN_OP_SRC, PIXMAN_x8r8g8b8, ((1 << 20) | (1 << 11) | (1 << 23) | ((1 << 2) | (1 << 5) | ( 1 << 1) | (1 << 6))), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))), 0, PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_rotate_90_8888, }, { PIXMAN_OP_SRC , PIXMAN_x8r8g8b8, ((1 << 22) | (1 << 11) | (1 << 23) | ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6))), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_x8r8g8b8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_rotate_270_8888, }, |
1961 | SIMPLE_ROTATE_FAST_PATH (SRC, r5g6b5, r5g6b5, 565){ PIXMAN_OP_SRC, PIXMAN_r5g6b5, ((1 << 20) | (1 << 11) | (1 << 23) | ((1 << 2) | (1 << 5) | ( 1 << 1) | (1 << 6))), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4 ) | ((0))), 0, PIXMAN_r5g6b5, ((1 << 5) | (1 << 1 ) | (1 << 6)), fast_composite_rotate_90_565, }, { PIXMAN_OP_SRC , PIXMAN_r5g6b5, ((1 << 22) | (1 << 11) | (1 << 23) | ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6))), (((0) << 24) | ((0) << 16) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_r5g6b5, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_rotate_270_565, }, |
1962 | SIMPLE_ROTATE_FAST_PATH (SRC, a8, a8, 8){ PIXMAN_OP_SRC, PIXMAN_a8, ((1 << 20) | (1 << 11 ) | (1 << 23) | ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6))), (((0) << 24) | ((0) << 16 ) | ((0) << 12) | ((0) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_rotate_90_8, }, { PIXMAN_OP_SRC, PIXMAN_a8 , ((1 << 22) | (1 << 11) | (1 << 23) | ((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6))), ((( 0) << 24) | ((0) << 16) | ((0) << 12) | ((0 ) << 8) | ((0) << 4) | ((0))), 0, PIXMAN_a8, ((1 << 5) | (1 << 1) | (1 << 6)), fast_composite_rotate_270_8 , }, |
1963 | |
1964 | /* Simple repeat fast path entry. */ |
1965 | { PIXMAN_OP_any(PIXMAN_N_OPERATORS + 1), |
1966 | PIXMAN_any(((0) << 24) | ((5) << 16) | ((0) << 12) | ( (0) << 8) | ((0) << 4) | ((0))), |
1967 | (FAST_PATH_STANDARD_FLAGS((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | FAST_PATH_ID_TRANSFORM(1 << 0) | FAST_PATH_BITS_IMAGE(1 << 25) | |
1968 | FAST_PATH_NORMAL_REPEAT((1 << 15) | (1 << 3) | (1 << 4))), |
1969 | PIXMAN_any(((0) << 24) | ((5) << 16) | ((0) << 12) | ( (0) << 8) | ((0) << 4) | ((0))), 0, |
1970 | PIXMAN_any(((0) << 24) | ((5) << 16) | ((0) << 12) | ( (0) << 8) | ((0) << 4) | ((0))), FAST_PATH_STD_DEST_FLAGS((1 << 5) | (1 << 1) | (1 << 6)), |
1971 | fast_composite_tiled_repeat |
1972 | }, |
1973 | |
1974 | { PIXMAN_OP_NONE }, |
1975 | }; |
1976 | |
1977 | #ifdef WORDS_BIGENDIAN |
1978 | #define A1_FILL_MASK(n, offs)(((1U << (n)) - 1) << (offs)) (((1U << (n)) - 1) << (32 - (offs) - (n))) |
1979 | #else |
1980 | #define A1_FILL_MASK(n, offs)(((1U << (n)) - 1) << (offs)) (((1U << (n)) - 1) << (offs)) |
1981 | #endif |
1982 | |
1983 | static force_inline__inline__ __attribute__ ((__always_inline__)) void |
1984 | pixman_fill1_line (uint32_t *dst, int offs, int width, int v) |
1985 | { |
1986 | if (offs) |
1987 | { |
1988 | int leading_pixels = 32 - offs; |
1989 | if (leading_pixels >= width) |
1990 | { |
1991 | if (v) |
1992 | *dst |= A1_FILL_MASK (width, offs)(((1U << (width)) - 1) << (offs)); |
1993 | else |
1994 | *dst &= ~A1_FILL_MASK (width, offs)(((1U << (width)) - 1) << (offs)); |
1995 | return; |
1996 | } |
1997 | else |
1998 | { |
1999 | if (v) |
2000 | *dst++ |= A1_FILL_MASK (leading_pixels, offs)(((1U << (leading_pixels)) - 1) << (offs)); |
2001 | else |
2002 | *dst++ &= ~A1_FILL_MASK (leading_pixels, offs)(((1U << (leading_pixels)) - 1) << (offs)); |
2003 | width -= leading_pixels; |
2004 | } |
2005 | } |
2006 | while (width >= 32) |
2007 | { |
2008 | if (v) |
2009 | *dst++ = 0xFFFFFFFF; |
2010 | else |
2011 | *dst++ = 0; |
2012 | width -= 32; |
2013 | } |
2014 | if (width > 0) |
2015 | { |
2016 | if (v) |
2017 | *dst |= A1_FILL_MASK (width, 0)(((1U << (width)) - 1) << (0)); |
2018 | else |
2019 | *dst &= ~A1_FILL_MASK (width, 0)(((1U << (width)) - 1) << (0)); |
2020 | } |
2021 | } |
2022 | |
2023 | static void |
2024 | pixman_fill1 (uint32_t *bits, |
2025 | int stride, |
2026 | int x, |
2027 | int y, |
2028 | int width, |
2029 | int height, |
2030 | uint32_t filler) |
2031 | { |
2032 | uint32_t *dst = bits + y * stride + (x >> 5); |
2033 | int offs = x & 31; |
2034 | |
2035 | if (filler & 1) |
2036 | { |
2037 | while (height--) |
2038 | { |
2039 | pixman_fill1_line (dst, offs, width, 1); |
2040 | dst += stride; |
2041 | } |
2042 | } |
2043 | else |
2044 | { |
2045 | while (height--) |
2046 | { |
2047 | pixman_fill1_line (dst, offs, width, 0); |
2048 | dst += stride; |
2049 | } |
2050 | } |
2051 | } |
2052 | |
2053 | static void |
2054 | pixman_fill8 (uint32_t *bits, |
2055 | int stride, |
2056 | int x, |
2057 | int y, |
2058 | int width, |
2059 | int height, |
2060 | uint32_t filler) |
2061 | { |
2062 | int byte_stride = stride * (int) sizeof (uint32_t); |
2063 | uint8_t *dst = (uint8_t *) bits; |
2064 | uint8_t v = filler & 0xff; |
2065 | int i; |
2066 | |
2067 | dst = dst + y * byte_stride + x; |
2068 | |
2069 | while (height--) |
2070 | { |
2071 | for (i = 0; i < width; ++i) |
2072 | dst[i] = v; |
2073 | |
2074 | dst += byte_stride; |
2075 | } |
2076 | } |
2077 | |
2078 | static void |
2079 | pixman_fill16 (uint32_t *bits, |
2080 | int stride, |
2081 | int x, |
2082 | int y, |
2083 | int width, |
2084 | int height, |
2085 | uint32_t filler) |
2086 | { |
2087 | int short_stride = |
2088 | (stride * (int)sizeof (uint32_t)) / (int)sizeof (uint16_t); |
2089 | uint16_t *dst = (uint16_t *)bits; |
2090 | uint16_t v = filler & 0xffff; |
2091 | int i; |
2092 | |
2093 | dst = dst + y * short_stride + x; |
2094 | |
2095 | while (height--) |
2096 | { |
2097 | for (i = 0; i < width; ++i) |
2098 | dst[i] = v; |
2099 | |
2100 | dst += short_stride; |
2101 | } |
2102 | } |
2103 | |
2104 | static void |
2105 | pixman_fill32 (uint32_t *bits, |
2106 | int stride, |
2107 | int x, |
2108 | int y, |
2109 | int width, |
2110 | int height, |
2111 | uint32_t filler) |
2112 | { |
2113 | int i; |
2114 | |
2115 | bits = bits + y * stride + x; |
2116 | |
2117 | while (height--) |
2118 | { |
2119 | for (i = 0; i < width; ++i) |
2120 | bits[i] = filler; |
2121 | |
2122 | bits += stride; |
2123 | } |
2124 | } |
2125 | |
2126 | static pixman_bool_t |
2127 | fast_path_fill (pixman_implementation_t *imp, |
2128 | uint32_t * bits, |
2129 | int stride, |
2130 | int bpp, |
2131 | int x, |
2132 | int y, |
2133 | int width, |
2134 | int height, |
2135 | uint32_t filler) |
2136 | { |
2137 | switch (bpp) |
2138 | { |
2139 | case 1: |
2140 | pixman_fill1 (bits, stride, x, y, width, height, filler); |
2141 | break; |
2142 | |
2143 | case 8: |
2144 | pixman_fill8 (bits, stride, x, y, width, height, filler); |
2145 | break; |
2146 | |
2147 | case 16: |
2148 | pixman_fill16 (bits, stride, x, y, width, height, filler); |
2149 | break; |
2150 | |
2151 | case 32: |
2152 | pixman_fill32 (bits, stride, x, y, width, height, filler); |
2153 | break; |
2154 | |
2155 | default: |
2156 | return FALSE0; |
2157 | } |
2158 | |
2159 | return TRUE1; |
2160 | } |
2161 | |
2162 | /*****************************************************************************/ |
2163 | |
2164 | static uint32_t * |
2165 | fast_fetch_r5g6b5 (pixman_iter_t *iter, const uint32_t *mask) |
2166 | { |
2167 | int32_t w = iter->width; |
2168 | uint32_t *dst = iter->buffer; |
2169 | const uint16_t *src = (const uint16_t *)iter->bits; |
2170 | |
2171 | iter->bits += iter->stride; |
2172 | |
2173 | /* Align the source buffer at 4 bytes boundary */ |
2174 | if (w > 0 && ((uintptr_t)src & 3)) |
2175 | { |
2176 | *dst++ = convert_0565_to_8888 (*src++); |
2177 | w--; |
2178 | } |
2179 | /* Process two pixels per iteration */ |
2180 | while ((w -= 2) >= 0) |
2181 | { |
2182 | uint32_t sr, sb, sg, t0, t1; |
2183 | uint32_t s = *(const uint32_t *)src; |
2184 | src += 2; |
2185 | sr = (s >> 8) & 0x00F800F8; |
2186 | sb = (s << 3) & 0x00F800F8; |
2187 | sg = (s >> 3) & 0x00FC00FC; |
2188 | sr |= sr >> 5; |
2189 | sb |= sb >> 5; |
2190 | sg |= sg >> 6; |
2191 | t0 = ((sr << 16) & 0x00FF0000) | ((sg << 8) & 0x0000FF00) | |
2192 | (sb & 0xFF) | 0xFF000000; |
2193 | t1 = (sr & 0x00FF0000) | ((sg >> 8) & 0x0000FF00) | |
2194 | (sb >> 16) | 0xFF000000; |
2195 | #ifdef WORDS_BIGENDIAN |
2196 | *dst++ = t1; |
2197 | *dst++ = t0; |
2198 | #else |
2199 | *dst++ = t0; |
2200 | *dst++ = t1; |
2201 | #endif |
2202 | } |
2203 | if (w & 1) |
2204 | { |
2205 | *dst = convert_0565_to_8888 (*src); |
2206 | } |
2207 | |
2208 | return iter->buffer; |
2209 | } |
2210 | |
2211 | static uint32_t * |
2212 | fast_dest_fetch_noop (pixman_iter_t *iter, const uint32_t *mask) |
2213 | { |
2214 | iter->bits += iter->stride; |
2215 | return iter->buffer; |
2216 | } |
2217 | |
2218 | /* Helper function for a workaround, which tries to ensure that 0x1F001F |
2219 | * constant is always allocated in a register on RISC architectures. |
2220 | */ |
2221 | static force_inline__inline__ __attribute__ ((__always_inline__)) uint32_t |
2222 | convert_8888_to_0565_workaround (uint32_t s, uint32_t x1F001F) |
2223 | { |
2224 | uint32_t a, b; |
2225 | a = (s >> 3) & x1F001F; |
2226 | b = s & 0xFC00; |
2227 | a |= a >> 5; |
2228 | a |= b >> 5; |
2229 | return a; |
2230 | } |
2231 | |
2232 | static void |
2233 | fast_write_back_r5g6b5 (pixman_iter_t *iter) |
2234 | { |
2235 | int32_t w = iter->width; |
2236 | uint16_t *dst = (uint16_t *)(iter->bits - iter->stride); |
2237 | const uint32_t *src = iter->buffer; |
2238 | /* Workaround to ensure that x1F001F variable is allocated in a register */ |
2239 | static volatile uint32_t volatile_x1F001F = 0x1F001F; |
2240 | uint32_t x1F001F = volatile_x1F001F; |
2241 | |
2242 | while ((w -= 4) >= 0) |
2243 | { |
2244 | uint32_t s1 = *src++; |
2245 | uint32_t s2 = *src++; |
2246 | uint32_t s3 = *src++; |
2247 | uint32_t s4 = *src++; |
2248 | *dst++ = convert_8888_to_0565_workaround (s1, x1F001F); |
2249 | *dst++ = convert_8888_to_0565_workaround (s2, x1F001F); |
2250 | *dst++ = convert_8888_to_0565_workaround (s3, x1F001F); |
2251 | *dst++ = convert_8888_to_0565_workaround (s4, x1F001F); |
2252 | } |
2253 | if (w & 2) |
2254 | { |
2255 | *dst++ = convert_8888_to_0565_workaround (*src++, x1F001F); |
2256 | *dst++ = convert_8888_to_0565_workaround (*src++, x1F001F); |
2257 | } |
2258 | if (w & 1) |
2259 | { |
2260 | *dst = convert_8888_to_0565_workaround (*src, x1F001F); |
2261 | } |
2262 | } |
2263 | |
2264 | typedef struct |
2265 | { |
2266 | int y; |
2267 | uint64_t * buffer; |
2268 | } line_t; |
2269 | |
2270 | typedef struct |
2271 | { |
2272 | line_t lines[2]; |
2273 | pixman_fixed_t y; |
2274 | pixman_fixed_t x; |
2275 | uint64_t data[1]; |
2276 | } bilinear_info_t; |
2277 | |
2278 | static void |
2279 | fetch_horizontal (bits_image_t *image, line_t *line, |
2280 | int y, pixman_fixed_t x, pixman_fixed_t ux, int n) |
2281 | { |
2282 | uint32_t *bits = image->bits + y * image->rowstride; |
2283 | int i; |
2284 | |
2285 | for (i = 0; i < n; ++i) |
2286 | { |
2287 | int x0 = pixman_fixed_to_int (x)((int) ((x) >> 16)); |
2288 | int x1 = x0 + 1; |
2289 | int32_t dist_x; |
2290 | |
2291 | uint32_t left = *(bits + x0); |
2292 | uint32_t right = *(bits + x1); |
2293 | |
2294 | dist_x = pixman_fixed_to_bilinear_weight (x); |
2295 | dist_x <<= (8 - BILINEAR_INTERPOLATION_BITS7); |
2296 | |
2297 | #if SIZEOF_LONG <= 4 |
2298 | { |
2299 | uint32_t lag, rag, ag; |
2300 | uint32_t lrb, rrb, rb; |
2301 | |
2302 | lag = (left & 0xff00ff00) >> 8; |
2303 | rag = (right & 0xff00ff00) >> 8; |
2304 | ag = (lag << 8) + dist_x * (rag - lag); |
2305 | |
2306 | lrb = (left & 0x00ff00ff); |
2307 | rrb = (right & 0x00ff00ff); |
2308 | rb = (lrb << 8) + dist_x * (rrb - lrb); |
2309 | |
2310 | *((uint32_t *)(line->buffer + i)) = ag; |
2311 | *((uint32_t *)(line->buffer + i) + 1) = rb; |
2312 | } |
2313 | #else |
2314 | { |
2315 | uint64_t lagrb, ragrb; |
2316 | uint32_t lag, rag; |
2317 | uint32_t lrb, rrb; |
2318 | |
2319 | lag = (left & 0xff00ff00); |
2320 | lrb = (left & 0x00ff00ff); |
2321 | rag = (right & 0xff00ff00); |
2322 | rrb = (right & 0x00ff00ff); |
2323 | lagrb = (((uint64_t)lag) << 24) | lrb; |
2324 | ragrb = (((uint64_t)rag) << 24) | rrb; |
2325 | |
2326 | line->buffer[i] = (lagrb << 8) + dist_x * (ragrb - lagrb); |
2327 | } |
2328 | #endif |
2329 | |
2330 | x += ux; |
2331 | } |
2332 | |
2333 | line->y = y; |
2334 | } |
2335 | |
2336 | static uint32_t * |
2337 | fast_fetch_bilinear_cover (pixman_iter_t *iter, const uint32_t *mask) |
2338 | { |
2339 | pixman_fixed_t fx, ux; |
2340 | bilinear_info_t *info = iter->data; |
2341 | line_t *line0, *line1; |
2342 | int y0, y1; |
2343 | int32_t dist_y; |
2344 | int i; |
2345 | |
2346 | COMPILE_TIME_ASSERT (BILINEAR_INTERPOLATION_BITS < 8)do { typedef int compile_time_assertion [(7 < 8)?1:-1]; } while (0); |
2347 | |
2348 | fx = info->x; |
2349 | ux = iter->image->common.transform->matrix[0][0]; |
2350 | |
2351 | y0 = pixman_fixed_to_int (info->y)((int) ((info->y) >> 16)); |
2352 | y1 = y0 + 1; |
2353 | dist_y = pixman_fixed_to_bilinear_weight (info->y); |
2354 | dist_y <<= (8 - BILINEAR_INTERPOLATION_BITS7); |
2355 | |
2356 | line0 = &info->lines[y0 & 0x01]; |
2357 | line1 = &info->lines[y1 & 0x01]; |
2358 | |
2359 | if (line0->y != y0) |
2360 | { |
2361 | fetch_horizontal ( |
2362 | &iter->image->bits, line0, y0, fx, ux, iter->width); |
2363 | } |
2364 | |
2365 | if (line1->y != y1) |
2366 | { |
2367 | fetch_horizontal ( |
2368 | &iter->image->bits, line1, y1, fx, ux, iter->width); |
2369 | } |
2370 | |
2371 | for (i = 0; i < iter->width; ++i) |
2372 | { |
2373 | #if SIZEOF_LONG <= 4 |
2374 | uint32_t ta, tr, tg, tb; |
2375 | uint32_t ba, br, bg, bb; |
2376 | uint32_t tag, trb; |
2377 | uint32_t bag, brb; |
2378 | uint32_t a, r, g, b; |
2379 | |
2380 | tag = *((uint32_t *)(line0->buffer + i)); |
2381 | trb = *((uint32_t *)(line0->buffer + i) + 1); |
2382 | bag = *((uint32_t *)(line1->buffer + i)); |
2383 | brb = *((uint32_t *)(line1->buffer + i) + 1); |
2384 | |
2385 | ta = tag >> 16; |
2386 | ba = bag >> 16; |
2387 | a = (ta << 8) + dist_y * (ba - ta); |
2388 | |
2389 | tr = trb >> 16; |
2390 | br = brb >> 16; |
2391 | r = (tr << 8) + dist_y * (br - tr); |
2392 | |
2393 | tg = tag & 0xffff; |
2394 | bg = bag & 0xffff; |
2395 | g = (tg << 8) + dist_y * (bg - tg); |
2396 | |
2397 | tb = trb & 0xffff; |
2398 | bb = brb & 0xffff; |
2399 | b = (tb << 8) + dist_y * (bb - tb); |
2400 | |
2401 | a = (a << 8) & 0xff000000; |
2402 | r = (r << 0) & 0x00ff0000; |
2403 | g = (g >> 8) & 0x0000ff00; |
2404 | b = (b >> 16) & 0x000000ff; |
2405 | #else |
2406 | uint64_t top = line0->buffer[i]; |
2407 | uint64_t bot = line1->buffer[i]; |
2408 | uint64_t tar = (top & 0xffff0000ffff0000ULL) >> 16; |
2409 | uint64_t bar = (bot & 0xffff0000ffff0000ULL) >> 16; |
2410 | uint64_t tgb = (top & 0x0000ffff0000ffffULL); |
2411 | uint64_t bgb = (bot & 0x0000ffff0000ffffULL); |
2412 | uint64_t ar, gb; |
2413 | uint32_t a, r, g, b; |
2414 | |
2415 | ar = (tar << 8) + dist_y * (bar - tar); |
2416 | gb = (tgb << 8) + dist_y * (bgb - tgb); |
2417 | |
2418 | a = ((ar >> 24) & 0xff000000); |
2419 | r = ((ar >> 0) & 0x00ff0000); |
2420 | g = ((gb >> 40) & 0x0000ff00); |
2421 | b = ((gb >> 16) & 0x000000ff); |
2422 | #endif |
2423 | |
2424 | iter->buffer[i] = a | r | g | b; |
2425 | } |
2426 | |
2427 | info->y += iter->image->common.transform->matrix[1][1]; |
2428 | |
2429 | return iter->buffer; |
2430 | } |
2431 | |
2432 | static void |
2433 | bilinear_cover_iter_fini (pixman_iter_t *iter) |
2434 | { |
2435 | free (iter->data); |
2436 | } |
2437 | |
2438 | static void |
2439 | fast_bilinear_cover_iter_init (pixman_iter_t *iter, const pixman_iter_info_t *iter_info) |
2440 | { |
2441 | int width = iter->width; |
2442 | bilinear_info_t *info; |
2443 | pixman_vector_t v; |
2444 | |
2445 | /* Reference point is the center of the pixel */ |
2446 | v.vector[0] = pixman_int_to_fixed (iter->x)((pixman_fixed_t) ((uint32_t) (iter->x) << 16)) + pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
2447 | v.vector[1] = pixman_int_to_fixed (iter->y)((pixman_fixed_t) ((uint32_t) (iter->y) << 16)) + pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
2448 | v.vector[2] = pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))); |
2449 | |
2450 | if (!pixman_transform_point_3d_moz_pixman_transform_point_3d (iter->image->common.transform, &v)) |
2451 | goto fail; |
2452 | |
2453 | info = malloc (sizeof (*info) + (2 * width - 1) * sizeof (uint64_t)); |
2454 | if (!info) |
2455 | goto fail; |
2456 | |
2457 | info->x = v.vector[0] - pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
2458 | info->y = v.vector[1] - pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
2459 | |
2460 | /* It is safe to set the y coordinates to -1 initially |
2461 | * because COVER_CLIP_BILINEAR ensures that we will only |
2462 | * be asked to fetch lines in the [0, height) interval |
2463 | */ |
2464 | info->lines[0].y = -1; |
2465 | info->lines[0].buffer = &(info->data[0]); |
2466 | info->lines[1].y = -1; |
2467 | info->lines[1].buffer = &(info->data[width]); |
2468 | |
2469 | iter->get_scanline = fast_fetch_bilinear_cover; |
2470 | iter->fini = bilinear_cover_iter_fini; |
2471 | |
2472 | iter->data = info; |
2473 | return; |
2474 | |
2475 | fail: |
2476 | /* Something went wrong, either a bad matrix or OOM; in such cases, |
2477 | * we don't guarantee any particular rendering. |
2478 | */ |
2479 | _pixman_log_error ( |
2480 | FUNC((const char*) (__PRETTY_FUNCTION__)), "Allocation failure or bad matrix, skipping rendering\n"); |
2481 | |
2482 | iter->get_scanline = _pixman_iter_get_scanline_noop; |
2483 | iter->fini = NULL((void*)0); |
2484 | } |
2485 | |
2486 | static uint32_t * |
2487 | bits_image_fetch_bilinear_no_repeat_8888 (pixman_iter_t *iter, |
2488 | const uint32_t *mask) |
2489 | { |
2490 | |
2491 | pixman_image_t * ima = iter->image; |
2492 | int offset = iter->x; |
2493 | int line = iter->y++; |
2494 | int width = iter->width; |
2495 | uint32_t * buffer = iter->buffer; |
2496 | |
2497 | bits_image_t *bits = &ima->bits; |
2498 | pixman_fixed_t x_top, x_bottom, x; |
2499 | pixman_fixed_t ux_top, ux_bottom, ux; |
2500 | pixman_vector_t v; |
2501 | uint32_t top_mask, bottom_mask; |
2502 | uint32_t *top_row; |
2503 | uint32_t *bottom_row; |
2504 | uint32_t *end; |
2505 | uint32_t zero[2] = { 0, 0 }; |
2506 | uint32_t one = 1; |
2507 | int y, y1, y2; |
2508 | int disty; |
2509 | int mask_inc; |
2510 | int w; |
2511 | |
2512 | /* reference point is the center of the pixel */ |
2513 | v.vector[0] = pixman_int_to_fixed (offset)((pixman_fixed_t) ((uint32_t) (offset) << 16)) + pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
2514 | v.vector[1] = pixman_int_to_fixed (line)((pixman_fixed_t) ((uint32_t) (line) << 16)) + pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
2515 | v.vector[2] = pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))); |
2516 | |
2517 | if (!pixman_transform_point_3d_moz_pixman_transform_point_3d (bits->common.transform, &v)) |
2518 | return iter->buffer; |
2519 | |
2520 | ux = ux_top = ux_bottom = bits->common.transform->matrix[0][0]; |
Although the value stored to 'ux_top' is used in the enclosing expression, the value is never actually read from 'ux_top' | |
2521 | x = x_top = x_bottom = v.vector[0] - pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16)))/2; |
2522 | |
2523 | y = v.vector[1] - pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16)))/2; |
2524 | disty = pixman_fixed_to_bilinear_weight (y); |
2525 | |
2526 | /* Load the pointers to the first and second lines from the source |
2527 | * image that bilinear code must read. |
2528 | * |
2529 | * The main trick in this code is about the check if any line are |
2530 | * outside of the image; |
2531 | * |
2532 | * When I realize that a line (any one) is outside, I change |
2533 | * the pointer to a dummy area with zeros. Once I change this, I |
2534 | * must be sure the pointer will not change, so I set the |
2535 | * variables to each pointer increments inside the loop. |
2536 | */ |
2537 | y1 = pixman_fixed_to_int (y)((int) ((y) >> 16)); |
2538 | y2 = y1 + 1; |
2539 | |
2540 | if (y1 < 0 || y1 >= bits->height) |
2541 | { |
2542 | top_row = zero; |
2543 | x_top = 0; |
2544 | ux_top = 0; |
2545 | } |
2546 | else |
2547 | { |
2548 | top_row = bits->bits + y1 * bits->rowstride; |
2549 | x_top = x; |
2550 | ux_top = ux; |
2551 | } |
2552 | |
2553 | if (y2 < 0 || y2 >= bits->height) |
2554 | { |
2555 | bottom_row = zero; |
2556 | x_bottom = 0; |
2557 | ux_bottom = 0; |
2558 | } |
2559 | else |
2560 | { |
2561 | bottom_row = bits->bits + y2 * bits->rowstride; |
2562 | x_bottom = x; |
2563 | ux_bottom = ux; |
2564 | } |
2565 | |
2566 | /* Instead of checking whether the operation uses the mast in |
2567 | * each loop iteration, verify this only once and prepare the |
2568 | * variables to make the code smaller inside the loop. |
2569 | */ |
2570 | if (!mask) |
2571 | { |
2572 | mask_inc = 0; |
2573 | mask = &one; |
2574 | } |
2575 | else |
2576 | { |
2577 | /* If have a mask, prepare the variables to check it */ |
2578 | mask_inc = 1; |
2579 | } |
2580 | |
2581 | /* If both are zero, then the whole thing is zero */ |
2582 | if (top_row == zero && bottom_row == zero) |
2583 | { |
2584 | memset (buffer, 0, width * sizeof (uint32_t)); |
2585 | return iter->buffer; |
2586 | } |
2587 | else if (bits->format == PIXMAN_x8r8g8b8) |
2588 | { |
2589 | if (top_row == zero) |
2590 | { |
2591 | top_mask = 0; |
2592 | bottom_mask = 0xff000000; |
2593 | } |
2594 | else if (bottom_row == zero) |
2595 | { |
2596 | top_mask = 0xff000000; |
2597 | bottom_mask = 0; |
2598 | } |
2599 | else |
2600 | { |
2601 | top_mask = 0xff000000; |
2602 | bottom_mask = 0xff000000; |
2603 | } |
2604 | } |
2605 | else |
2606 | { |
2607 | top_mask = 0; |
2608 | bottom_mask = 0; |
2609 | } |
2610 | |
2611 | end = buffer + width; |
2612 | |
2613 | /* Zero fill to the left of the image */ |
2614 | while (buffer < end && x < pixman_fixed_minus_1(((pixman_fixed_t) ((uint32_t) (-1) << 16)))) |
2615 | { |
2616 | *buffer++ = 0; |
2617 | x += ux; |
2618 | x_top += ux_top; |
2619 | x_bottom += ux_bottom; |
2620 | mask += mask_inc; |
2621 | } |
2622 | |
2623 | /* Left edge |
2624 | */ |
2625 | while (buffer < end && x < 0) |
2626 | { |
2627 | uint32_t tr, br; |
2628 | int32_t distx; |
2629 | |
2630 | tr = top_row[pixman_fixed_to_int (x_top)((int) ((x_top) >> 16)) + 1] | top_mask; |
2631 | br = bottom_row[pixman_fixed_to_int (x_bottom)((int) ((x_bottom) >> 16)) + 1] | bottom_mask; |
2632 | |
2633 | distx = pixman_fixed_to_bilinear_weight (x); |
2634 | |
2635 | *buffer++ = bilinear_interpolation (0, tr, 0, br, distx, disty); |
2636 | |
2637 | x += ux; |
2638 | x_top += ux_top; |
2639 | x_bottom += ux_bottom; |
2640 | mask += mask_inc; |
2641 | } |
2642 | |
2643 | /* Main part */ |
2644 | w = pixman_int_to_fixed (bits->width - 1)((pixman_fixed_t) ((uint32_t) (bits->width - 1) << 16 )); |
2645 | |
2646 | while (buffer < end && x < w) |
2647 | { |
2648 | if (*mask) |
2649 | { |
2650 | uint32_t tl, tr, bl, br; |
2651 | int32_t distx; |
2652 | |
2653 | tl = top_row [pixman_fixed_to_int (x_top)((int) ((x_top) >> 16))] | top_mask; |
2654 | tr = top_row [pixman_fixed_to_int (x_top)((int) ((x_top) >> 16)) + 1] | top_mask; |
2655 | bl = bottom_row [pixman_fixed_to_int (x_bottom)((int) ((x_bottom) >> 16))] | bottom_mask; |
2656 | br = bottom_row [pixman_fixed_to_int (x_bottom)((int) ((x_bottom) >> 16)) + 1] | bottom_mask; |
2657 | |
2658 | distx = pixman_fixed_to_bilinear_weight (x); |
2659 | |
2660 | *buffer = bilinear_interpolation (tl, tr, bl, br, distx, disty); |
2661 | } |
2662 | |
2663 | buffer++; |
2664 | x += ux; |
2665 | x_top += ux_top; |
2666 | x_bottom += ux_bottom; |
2667 | mask += mask_inc; |
2668 | } |
2669 | |
2670 | /* Right Edge */ |
2671 | w = pixman_int_to_fixed (bits->width)((pixman_fixed_t) ((uint32_t) (bits->width) << 16)); |
2672 | while (buffer < end && x < w) |
2673 | { |
2674 | if (*mask) |
2675 | { |
2676 | uint32_t tl, bl; |
2677 | int32_t distx; |
2678 | |
2679 | tl = top_row [pixman_fixed_to_int (x_top)((int) ((x_top) >> 16))] | top_mask; |
2680 | bl = bottom_row [pixman_fixed_to_int (x_bottom)((int) ((x_bottom) >> 16))] | bottom_mask; |
2681 | |
2682 | distx = pixman_fixed_to_bilinear_weight (x); |
2683 | |
2684 | *buffer = bilinear_interpolation (tl, 0, bl, 0, distx, disty); |
2685 | } |
2686 | |
2687 | buffer++; |
2688 | x += ux; |
2689 | x_top += ux_top; |
2690 | x_bottom += ux_bottom; |
2691 | mask += mask_inc; |
2692 | } |
2693 | |
2694 | /* Zero fill to the left of the image */ |
2695 | while (buffer < end) |
2696 | *buffer++ = 0; |
2697 | |
2698 | return iter->buffer; |
2699 | } |
2700 | |
2701 | typedef uint32_t (* convert_pixel_t) (const uint8_t *row, int x); |
2702 | |
2703 | static force_inline__inline__ __attribute__ ((__always_inline__)) void |
2704 | bits_image_fetch_separable_convolution_affine (pixman_image_t * image, |
2705 | int offset, |
2706 | int line, |
2707 | int width, |
2708 | uint32_t * buffer, |
2709 | const uint32_t * mask, |
2710 | |
2711 | convert_pixel_t convert_pixel, |
2712 | pixman_format_code_t format, |
2713 | pixman_repeat_t repeat_mode) |
2714 | { |
2715 | bits_image_t *bits = &image->bits; |
2716 | pixman_fixed_t *params = image->common.filter_params; |
2717 | int cwidth = pixman_fixed_to_int (params[0])((int) ((params[0]) >> 16)); |
2718 | int cheight = pixman_fixed_to_int (params[1])((int) ((params[1]) >> 16)); |
2719 | int x_off = ((cwidth << 16) - pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16)))) >> 1; |
2720 | int y_off = ((cheight << 16) - pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16)))) >> 1; |
2721 | int x_phase_bits = pixman_fixed_to_int (params[2])((int) ((params[2]) >> 16)); |
2722 | int y_phase_bits = pixman_fixed_to_int (params[3])((int) ((params[3]) >> 16)); |
2723 | int x_phase_shift = 16 - x_phase_bits; |
2724 | int y_phase_shift = 16 - y_phase_bits; |
2725 | pixman_fixed_t vx, vy; |
2726 | pixman_fixed_t ux, uy; |
2727 | pixman_vector_t v; |
2728 | int k; |
2729 | |
2730 | /* reference point is the center of the pixel */ |
2731 | v.vector[0] = pixman_int_to_fixed (offset)((pixman_fixed_t) ((uint32_t) (offset) << 16)) + pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
2732 | v.vector[1] = pixman_int_to_fixed (line)((pixman_fixed_t) ((uint32_t) (line) << 16)) + pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
2733 | v.vector[2] = pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))); |
2734 | |
2735 | if (!pixman_transform_point_3d_moz_pixman_transform_point_3d (image->common.transform, &v)) |
2736 | return; |
2737 | |
2738 | ux = image->common.transform->matrix[0][0]; |
2739 | uy = image->common.transform->matrix[1][0]; |
2740 | |
2741 | vx = v.vector[0]; |
2742 | vy = v.vector[1]; |
2743 | |
2744 | for (k = 0; k < width; ++k) |
2745 | { |
2746 | pixman_fixed_t *y_params; |
2747 | int satot, srtot, sgtot, sbtot; |
2748 | pixman_fixed_t x, y; |
2749 | int32_t x1, x2, y1, y2; |
2750 | int32_t px, py; |
2751 | int i, j; |
2752 | |
2753 | if (mask && !mask[k]) |
2754 | goto next; |
2755 | |
2756 | /* Round x and y to the middle of the closest phase before continuing. This |
2757 | * ensures that the convolution matrix is aligned right, since it was |
2758 | * positioned relative to a particular phase (and not relative to whatever |
2759 | * exact fraction we happen to get here). |
2760 | */ |
2761 | x = ((vx >> x_phase_shift) << x_phase_shift) + ((1 << x_phase_shift) >> 1); |
2762 | y = ((vy >> y_phase_shift) << y_phase_shift) + ((1 << y_phase_shift) >> 1); |
2763 | |
2764 | px = (x & 0xffff) >> x_phase_shift; |
2765 | py = (y & 0xffff) >> y_phase_shift; |
2766 | |
2767 | x1 = pixman_fixed_to_int (x - pixman_fixed_e - x_off)((int) ((x - ((pixman_fixed_t) 1) - x_off) >> 16)); |
2768 | y1 = pixman_fixed_to_int (y - pixman_fixed_e - y_off)((int) ((y - ((pixman_fixed_t) 1) - y_off) >> 16)); |
2769 | x2 = x1 + cwidth; |
2770 | y2 = y1 + cheight; |
2771 | |
2772 | satot = srtot = sgtot = sbtot = 0; |
2773 | |
2774 | y_params = params + 4 + (1 << x_phase_bits) * cwidth + py * cheight; |
2775 | |
2776 | for (i = y1; i < y2; ++i) |
2777 | { |
2778 | pixman_fixed_t fy = *y_params++; |
2779 | |
2780 | if (fy) |
2781 | { |
2782 | pixman_fixed_t *x_params = params + 4 + px * cwidth; |
2783 | |
2784 | for (j = x1; j < x2; ++j) |
2785 | { |
2786 | pixman_fixed_t fx = *x_params++; |
2787 | int rx = j; |
2788 | int ry = i; |
2789 | |
2790 | if (fx) |
2791 | { |
2792 | pixman_fixed_t f; |
2793 | uint32_t pixel, mask; |
2794 | uint8_t *row; |
2795 | |
2796 | mask = PIXMAN_FORMAT_A (format)(((format >> (12)) & ((1 << (4)) - 1)) << ((format >> 22) & 3))? 0 : 0xff000000; |
2797 | |
2798 | if (repeat_mode != PIXMAN_REPEAT_NONE) |
2799 | { |
2800 | repeat (repeat_mode, &rx, bits->width); |
2801 | repeat (repeat_mode, &ry, bits->height); |
2802 | |
2803 | row = (uint8_t *)(bits->bits + bits->rowstride * ry); |
2804 | pixel = convert_pixel (row, rx) | mask; |
2805 | } |
2806 | else |
2807 | { |
2808 | if (rx < 0 || ry < 0 || rx >= bits->width || ry >= bits->height) |
2809 | { |
2810 | pixel = 0; |
2811 | } |
2812 | else |
2813 | { |
2814 | row = (uint8_t *)(bits->bits + bits->rowstride * ry); |
2815 | pixel = convert_pixel (row, rx) | mask; |
2816 | } |
2817 | } |
2818 | |
2819 | f = ((pixman_fixed_32_32_t)fx * fy + 0x8000) >> 16; |
2820 | srtot += (int)RED_8 (pixel)(((pixel) >> 8 * 2) & 0xff) * f; |
2821 | sgtot += (int)GREEN_8 (pixel)(((pixel) >> 8) & 0xff) * f; |
2822 | sbtot += (int)BLUE_8 (pixel)((pixel) & 0xff) * f; |
2823 | satot += (int)ALPHA_8 (pixel)((pixel) >> 8 * 3) * f; |
2824 | } |
2825 | } |
2826 | } |
2827 | } |
2828 | |
2829 | satot = (satot + 0x8000) >> 16; |
2830 | srtot = (srtot + 0x8000) >> 16; |
2831 | sgtot = (sgtot + 0x8000) >> 16; |
2832 | sbtot = (sbtot + 0x8000) >> 16; |
2833 | |
2834 | satot = CLIP (satot, 0, 0xff)((satot) < (0) ? (0) : ((satot) > (0xff) ? (0xff) : (satot ))); |
2835 | srtot = CLIP (srtot, 0, 0xff)((srtot) < (0) ? (0) : ((srtot) > (0xff) ? (0xff) : (srtot ))); |
2836 | sgtot = CLIP (sgtot, 0, 0xff)((sgtot) < (0) ? (0) : ((sgtot) > (0xff) ? (0xff) : (sgtot ))); |
2837 | sbtot = CLIP (sbtot, 0, 0xff)((sbtot) < (0) ? (0) : ((sbtot) > (0xff) ? (0xff) : (sbtot ))); |
2838 | |
2839 | buffer[k] = (satot << 24) | (srtot << 16) | (sgtot << 8) | (sbtot << 0); |
2840 | |
2841 | next: |
2842 | vx += ux; |
2843 | vy += uy; |
2844 | } |
2845 | } |
2846 | |
2847 | static const uint32_t zero[2] = { 0, 0 }; |
2848 | |
2849 | static force_inline__inline__ __attribute__ ((__always_inline__)) void |
2850 | bits_image_fetch_bilinear_affine (pixman_image_t * image, |
2851 | int offset, |
2852 | int line, |
2853 | int width, |
2854 | uint32_t * buffer, |
2855 | const uint32_t * mask, |
2856 | |
2857 | convert_pixel_t convert_pixel, |
2858 | pixman_format_code_t format, |
2859 | pixman_repeat_t repeat_mode) |
2860 | { |
2861 | pixman_fixed_t x, y; |
2862 | pixman_fixed_t ux, uy; |
2863 | pixman_vector_t v; |
2864 | bits_image_t *bits = &image->bits; |
2865 | int i; |
2866 | |
2867 | /* reference point is the center of the pixel */ |
2868 | v.vector[0] = pixman_int_to_fixed (offset)((pixman_fixed_t) ((uint32_t) (offset) << 16)) + pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
2869 | v.vector[1] = pixman_int_to_fixed (line)((pixman_fixed_t) ((uint32_t) (line) << 16)) + pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
2870 | v.vector[2] = pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))); |
2871 | |
2872 | if (!pixman_transform_point_3d_moz_pixman_transform_point_3d (image->common.transform, &v)) |
2873 | return; |
2874 | |
2875 | ux = image->common.transform->matrix[0][0]; |
2876 | uy = image->common.transform->matrix[1][0]; |
2877 | |
2878 | x = v.vector[0]; |
2879 | y = v.vector[1]; |
2880 | |
2881 | for (i = 0; i < width; ++i) |
2882 | { |
2883 | int x1, y1, x2, y2; |
2884 | uint32_t tl, tr, bl, br; |
2885 | int32_t distx, disty; |
2886 | int width = image->bits.width; |
2887 | int height = image->bits.height; |
2888 | const uint8_t *row1; |
2889 | const uint8_t *row2; |
2890 | |
2891 | if (mask && !mask[i]) |
2892 | goto next; |
2893 | |
2894 | x1 = x - pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
2895 | y1 = y - pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
2896 | |
2897 | distx = pixman_fixed_to_bilinear_weight (x1); |
2898 | disty = pixman_fixed_to_bilinear_weight (y1); |
2899 | |
2900 | y1 = pixman_fixed_to_int (y1)((int) ((y1) >> 16)); |
2901 | y2 = y1 + 1; |
2902 | x1 = pixman_fixed_to_int (x1)((int) ((x1) >> 16)); |
2903 | x2 = x1 + 1; |
2904 | |
2905 | if (repeat_mode != PIXMAN_REPEAT_NONE) |
2906 | { |
2907 | uint32_t mask; |
2908 | |
2909 | mask = PIXMAN_FORMAT_A (format)(((format >> (12)) & ((1 << (4)) - 1)) << ((format >> 22) & 3))? 0 : 0xff000000; |
2910 | |
2911 | repeat (repeat_mode, &x1, width); |
2912 | repeat (repeat_mode, &y1, height); |
2913 | repeat (repeat_mode, &x2, width); |
2914 | repeat (repeat_mode, &y2, height); |
2915 | |
2916 | row1 = (uint8_t *)(bits->bits + bits->rowstride * y1); |
2917 | row2 = (uint8_t *)(bits->bits + bits->rowstride * y2); |
2918 | |
2919 | tl = convert_pixel (row1, x1) | mask; |
2920 | tr = convert_pixel (row1, x2) | mask; |
2921 | bl = convert_pixel (row2, x1) | mask; |
2922 | br = convert_pixel (row2, x2) | mask; |
2923 | } |
2924 | else |
2925 | { |
2926 | uint32_t mask1, mask2; |
2927 | int bpp; |
2928 | |
2929 | /* Note: PIXMAN_FORMAT_BPP() returns an unsigned value, |
2930 | * which means if you use it in expressions, those |
2931 | * expressions become unsigned themselves. Since |
2932 | * the variables below can be negative in some cases, |
2933 | * that will lead to crashes on 64 bit architectures. |
2934 | * |
2935 | * So this line makes sure bpp is signed |
2936 | */ |
2937 | bpp = PIXMAN_FORMAT_BPP (format)(((format >> (24)) & ((1 << (8)) - 1)) << ((format >> 22) & 3)); |
2938 | |
2939 | if (x1 >= width || x2 < 0 || y1 >= height || y2 < 0) |
2940 | { |
2941 | buffer[i] = 0; |
2942 | goto next; |
2943 | } |
2944 | |
2945 | if (y2 == 0) |
2946 | { |
2947 | row1 = (const uint8_t *)zero; |
2948 | mask1 = 0; |
2949 | } |
2950 | else |
2951 | { |
2952 | row1 = (uint8_t *)(bits->bits + bits->rowstride * y1); |
2953 | row1 += bpp / 8 * x1; |
2954 | |
2955 | mask1 = PIXMAN_FORMAT_A (format)(((format >> (12)) & ((1 << (4)) - 1)) << ((format >> 22) & 3))? 0 : 0xff000000; |
2956 | } |
2957 | |
2958 | if (y1 == height - 1) |
2959 | { |
2960 | row2 = (const uint8_t *)zero; |
2961 | mask2 = 0; |
2962 | } |
2963 | else |
2964 | { |
2965 | row2 = (uint8_t *)(bits->bits + bits->rowstride * y2); |
2966 | row2 += bpp / 8 * x1; |
2967 | |
2968 | mask2 = PIXMAN_FORMAT_A (format)(((format >> (12)) & ((1 << (4)) - 1)) << ((format >> 22) & 3))? 0 : 0xff000000; |
2969 | } |
2970 | |
2971 | if (x2 == 0) |
2972 | { |
2973 | tl = 0; |
2974 | bl = 0; |
2975 | } |
2976 | else |
2977 | { |
2978 | tl = convert_pixel (row1, 0) | mask1; |
2979 | bl = convert_pixel (row2, 0) | mask2; |
2980 | } |
2981 | |
2982 | if (x1 == width - 1) |
2983 | { |
2984 | tr = 0; |
2985 | br = 0; |
2986 | } |
2987 | else |
2988 | { |
2989 | tr = convert_pixel (row1, 1) | mask1; |
2990 | br = convert_pixel (row2, 1) | mask2; |
2991 | } |
2992 | } |
2993 | |
2994 | buffer[i] = bilinear_interpolation ( |
2995 | tl, tr, bl, br, distx, disty); |
2996 | |
2997 | next: |
2998 | x += ux; |
2999 | y += uy; |
3000 | } |
3001 | } |
3002 | |
3003 | static force_inline__inline__ __attribute__ ((__always_inline__)) void |
3004 | bits_image_fetch_nearest_affine (pixman_image_t * image, |
3005 | int offset, |
3006 | int line, |
3007 | int width, |
3008 | uint32_t * buffer, |
3009 | const uint32_t * mask, |
3010 | |
3011 | convert_pixel_t convert_pixel, |
3012 | pixman_format_code_t format, |
3013 | pixman_repeat_t repeat_mode) |
3014 | { |
3015 | pixman_fixed_t x, y; |
3016 | pixman_fixed_t ux, uy; |
3017 | pixman_vector_t v; |
3018 | bits_image_t *bits = &image->bits; |
3019 | int i; |
3020 | |
3021 | /* reference point is the center of the pixel */ |
3022 | v.vector[0] = pixman_int_to_fixed (offset)((pixman_fixed_t) ((uint32_t) (offset) << 16)) + pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
3023 | v.vector[1] = pixman_int_to_fixed (line)((pixman_fixed_t) ((uint32_t) (line) << 16)) + pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))) / 2; |
3024 | v.vector[2] = pixman_fixed_1(((pixman_fixed_t) ((uint32_t) (1) << 16))); |
3025 | |
3026 | if (!pixman_transform_point_3d_moz_pixman_transform_point_3d (image->common.transform, &v)) |
3027 | return; |
3028 | |
3029 | ux = image->common.transform->matrix[0][0]; |
3030 | uy = image->common.transform->matrix[1][0]; |
3031 | |
3032 | x = v.vector[0]; |
3033 | y = v.vector[1]; |
3034 | |
3035 | for (i = 0; i < width; ++i) |
3036 | { |
3037 | int width, height, x0, y0; |
3038 | const uint8_t *row; |
3039 | |
3040 | if (mask && !mask[i]) |
3041 | goto next; |
3042 | |
3043 | width = image->bits.width; |
3044 | height = image->bits.height; |
3045 | x0 = pixman_fixed_to_int (x - pixman_fixed_e)((int) ((x - ((pixman_fixed_t) 1)) >> 16)); |
3046 | y0 = pixman_fixed_to_int (y - pixman_fixed_e)((int) ((y - ((pixman_fixed_t) 1)) >> 16)); |
3047 | |
3048 | if (repeat_mode == PIXMAN_REPEAT_NONE && |
3049 | (y0 < 0 || y0 >= height || x0 < 0 || x0 >= width)) |
3050 | { |
3051 | buffer[i] = 0; |
3052 | } |
3053 | else |
3054 | { |
3055 | uint32_t mask = PIXMAN_FORMAT_A (format)(((format >> (12)) & ((1 << (4)) - 1)) << ((format >> 22) & 3))? 0 : 0xff000000; |
3056 | |
3057 | if (repeat_mode != PIXMAN_REPEAT_NONE) |
3058 | { |
3059 | repeat (repeat_mode, &x0, width); |
3060 | repeat (repeat_mode, &y0, height); |
3061 | } |
3062 | |
3063 | row = (uint8_t *)(bits->bits + bits->rowstride * y0); |
3064 | |
3065 | buffer[i] = convert_pixel (row, x0) | mask; |
3066 | } |
3067 | |
3068 | next: |
3069 | x += ux; |
3070 | y += uy; |
3071 | } |
3072 | } |
3073 | |
3074 | static force_inline__inline__ __attribute__ ((__always_inline__)) uint32_t |
3075 | convert_a8r8g8b8 (const uint8_t *row, int x) |
3076 | { |
3077 | return *(((uint32_t *)row) + x); |
3078 | } |
3079 | |
3080 | static force_inline__inline__ __attribute__ ((__always_inline__)) uint32_t |
3081 | convert_x8r8g8b8 (const uint8_t *row, int x) |
3082 | { |
3083 | return *(((uint32_t *)row) + x); |
3084 | } |
3085 | |
3086 | static force_inline__inline__ __attribute__ ((__always_inline__)) uint32_t |
3087 | convert_a8 (const uint8_t *row, int x) |
3088 | { |
3089 | return (uint32_t) *(row + x) << 24; |
3090 | } |
3091 | |
3092 | static force_inline__inline__ __attribute__ ((__always_inline__)) uint32_t |
3093 | convert_r5g6b5 (const uint8_t *row, int x) |
3094 | { |
3095 | return convert_0565_to_0888 (*((uint16_t *)row + x)); |
3096 | } |
3097 | |
3098 | #define MAKE_SEPARABLE_CONVOLUTION_FETCHER(name, format, repeat_mode)static uint32_t * bits_image_fetch_separable_convolution_affine_name (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_format, PIXMAN_format, repeat_mode ); return iter->buffer; } \ |
3099 | static uint32_t * \ |
3100 | bits_image_fetch_separable_convolution_affine_ ## name (pixman_iter_t *iter, \ |
3101 | const uint32_t * mask) \ |
3102 | { \ |
3103 | bits_image_fetch_separable_convolution_affine ( \ |
3104 | iter->image, \ |
3105 | iter->x, iter->y++, \ |
3106 | iter->width, \ |
3107 | iter->buffer, mask, \ |
3108 | convert_ ## format, \ |
3109 | PIXMAN_ ## format, \ |
3110 | repeat_mode); \ |
3111 | \ |
3112 | return iter->buffer; \ |
3113 | } |
3114 | |
3115 | #define MAKE_BILINEAR_FETCHER(name, format, repeat_mode)static uint32_t * bits_image_fetch_bilinear_affine_name (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_format, PIXMAN_format, repeat_mode ); return iter->buffer; } \ |
3116 | static uint32_t * \ |
3117 | bits_image_fetch_bilinear_affine_ ## name (pixman_iter_t *iter, \ |
3118 | const uint32_t * mask) \ |
3119 | { \ |
3120 | bits_image_fetch_bilinear_affine (iter->image, \ |
3121 | iter->x, iter->y++, \ |
3122 | iter->width, \ |
3123 | iter->buffer, mask, \ |
3124 | convert_ ## format, \ |
3125 | PIXMAN_ ## format, \ |
3126 | repeat_mode); \ |
3127 | return iter->buffer; \ |
3128 | } |
3129 | |
3130 | #define MAKE_NEAREST_FETCHER(name, format, repeat_mode)static uint32_t * bits_image_fetch_nearest_affine_name (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_format, PIXMAN_format, repeat_mode ); return iter->buffer; } \ |
3131 | static uint32_t * \ |
3132 | bits_image_fetch_nearest_affine_ ## name (pixman_iter_t *iter, \ |
3133 | const uint32_t * mask) \ |
3134 | { \ |
3135 | bits_image_fetch_nearest_affine (iter->image, \ |
3136 | iter->x, iter->y++, \ |
3137 | iter->width, \ |
3138 | iter->buffer, mask, \ |
3139 | convert_ ## format, \ |
3140 | PIXMAN_ ## format, \ |
3141 | repeat_mode); \ |
3142 | return iter->buffer; \ |
3143 | } |
3144 | |
3145 | #define MAKE_FETCHERS(name, format, repeat_mode)static uint32_t * bits_image_fetch_nearest_affine_name (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_format, PIXMAN_format, repeat_mode ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_name (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_format, PIXMAN_format, repeat_mode ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_name (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_format, PIXMAN_format, repeat_mode ); return iter->buffer; } \ |
3146 | MAKE_NEAREST_FETCHER (name, format, repeat_mode)static uint32_t * bits_image_fetch_nearest_affine_name (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_format, PIXMAN_format, repeat_mode ); return iter->buffer; } \ |
3147 | MAKE_BILINEAR_FETCHER (name, format, repeat_mode)static uint32_t * bits_image_fetch_bilinear_affine_name (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_format, PIXMAN_format, repeat_mode ); return iter->buffer; } \ |
3148 | MAKE_SEPARABLE_CONVOLUTION_FETCHER (name, format, repeat_mode)static uint32_t * bits_image_fetch_separable_convolution_affine_name (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_format, PIXMAN_format, repeat_mode ); return iter->buffer; } |
3149 | |
3150 | MAKE_FETCHERS (pad_a8r8g8b8, a8r8g8b8, PIXMAN_REPEAT_PAD)static uint32_t * bits_image_fetch_nearest_affine_pad_a8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_REPEAT_PAD ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_pad_a8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_REPEAT_PAD ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_pad_a8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_REPEAT_PAD ); return iter->buffer; } |
3151 | MAKE_FETCHERS (none_a8r8g8b8, a8r8g8b8, PIXMAN_REPEAT_NONE)static uint32_t * bits_image_fetch_nearest_affine_none_a8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_REPEAT_NONE ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_none_a8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_REPEAT_NONE ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_none_a8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_REPEAT_NONE ); return iter->buffer; } |
3152 | MAKE_FETCHERS (reflect_a8r8g8b8, a8r8g8b8, PIXMAN_REPEAT_REFLECT)static uint32_t * bits_image_fetch_nearest_affine_reflect_a8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_REPEAT_REFLECT ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_reflect_a8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_REPEAT_REFLECT ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_reflect_a8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_REPEAT_REFLECT ); return iter->buffer; } |
3153 | MAKE_FETCHERS (normal_a8r8g8b8, a8r8g8b8, PIXMAN_REPEAT_NORMAL)static uint32_t * bits_image_fetch_nearest_affine_normal_a8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_REPEAT_NORMAL ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_normal_a8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_REPEAT_NORMAL ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_normal_a8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8r8g8b8, PIXMAN_a8r8g8b8, PIXMAN_REPEAT_NORMAL ); return iter->buffer; } |
3154 | MAKE_FETCHERS (pad_x8r8g8b8, x8r8g8b8, PIXMAN_REPEAT_PAD)static uint32_t * bits_image_fetch_nearest_affine_pad_x8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_x8r8g8b8, PIXMAN_x8r8g8b8, PIXMAN_REPEAT_PAD ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_pad_x8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_x8r8g8b8, PIXMAN_x8r8g8b8, PIXMAN_REPEAT_PAD ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_pad_x8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_x8r8g8b8, PIXMAN_x8r8g8b8, PIXMAN_REPEAT_PAD ); return iter->buffer; } |
3155 | MAKE_FETCHERS (none_x8r8g8b8, x8r8g8b8, PIXMAN_REPEAT_NONE)static uint32_t * bits_image_fetch_nearest_affine_none_x8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_x8r8g8b8, PIXMAN_x8r8g8b8, PIXMAN_REPEAT_NONE ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_none_x8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_x8r8g8b8, PIXMAN_x8r8g8b8, PIXMAN_REPEAT_NONE ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_none_x8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_x8r8g8b8, PIXMAN_x8r8g8b8, PIXMAN_REPEAT_NONE ); return iter->buffer; } |
3156 | MAKE_FETCHERS (reflect_x8r8g8b8, x8r8g8b8, PIXMAN_REPEAT_REFLECT)static uint32_t * bits_image_fetch_nearest_affine_reflect_x8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_x8r8g8b8, PIXMAN_x8r8g8b8, PIXMAN_REPEAT_REFLECT ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_reflect_x8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_x8r8g8b8, PIXMAN_x8r8g8b8, PIXMAN_REPEAT_REFLECT ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_reflect_x8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_x8r8g8b8, PIXMAN_x8r8g8b8, PIXMAN_REPEAT_REFLECT ); return iter->buffer; } |
3157 | MAKE_FETCHERS (normal_x8r8g8b8, x8r8g8b8, PIXMAN_REPEAT_NORMAL)static uint32_t * bits_image_fetch_nearest_affine_normal_x8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_x8r8g8b8, PIXMAN_x8r8g8b8, PIXMAN_REPEAT_NORMAL ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_normal_x8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_x8r8g8b8, PIXMAN_x8r8g8b8, PIXMAN_REPEAT_NORMAL ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_normal_x8r8g8b8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_x8r8g8b8, PIXMAN_x8r8g8b8, PIXMAN_REPEAT_NORMAL ); return iter->buffer; } |
3158 | MAKE_FETCHERS (pad_a8, a8, PIXMAN_REPEAT_PAD)static uint32_t * bits_image_fetch_nearest_affine_pad_a8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8, PIXMAN_a8, PIXMAN_REPEAT_PAD); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_pad_a8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8, PIXMAN_a8, PIXMAN_REPEAT_PAD); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_pad_a8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8, PIXMAN_a8, PIXMAN_REPEAT_PAD); return iter->buffer; } |
3159 | MAKE_FETCHERS (none_a8, a8, PIXMAN_REPEAT_NONE)static uint32_t * bits_image_fetch_nearest_affine_none_a8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8, PIXMAN_a8, PIXMAN_REPEAT_NONE) ; return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_none_a8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8, PIXMAN_a8, PIXMAN_REPEAT_NONE) ; return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_none_a8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8, PIXMAN_a8, PIXMAN_REPEAT_NONE) ; return iter->buffer; } |
3160 | MAKE_FETCHERS (reflect_a8, a8, PIXMAN_REPEAT_REFLECT)static uint32_t * bits_image_fetch_nearest_affine_reflect_a8 ( pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8, PIXMAN_a8, PIXMAN_REPEAT_REFLECT ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_reflect_a8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8, PIXMAN_a8, PIXMAN_REPEAT_REFLECT ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_reflect_a8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8, PIXMAN_a8, PIXMAN_REPEAT_REFLECT ); return iter->buffer; } |
3161 | MAKE_FETCHERS (normal_a8, a8, PIXMAN_REPEAT_NORMAL)static uint32_t * bits_image_fetch_nearest_affine_normal_a8 ( pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8, PIXMAN_a8, PIXMAN_REPEAT_NORMAL ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_normal_a8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8, PIXMAN_a8, PIXMAN_REPEAT_NORMAL ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_normal_a8 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_a8, PIXMAN_a8, PIXMAN_REPEAT_NORMAL ); return iter->buffer; } |
3162 | MAKE_FETCHERS (pad_r5g6b5, r5g6b5, PIXMAN_REPEAT_PAD)static uint32_t * bits_image_fetch_nearest_affine_pad_r5g6b5 ( pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_r5g6b5, PIXMAN_r5g6b5, PIXMAN_REPEAT_PAD ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_pad_r5g6b5 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_r5g6b5, PIXMAN_r5g6b5, PIXMAN_REPEAT_PAD ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_pad_r5g6b5 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_r5g6b5, PIXMAN_r5g6b5, PIXMAN_REPEAT_PAD ); return iter->buffer; } |
3163 | MAKE_FETCHERS (none_r5g6b5, r5g6b5, PIXMAN_REPEAT_NONE)static uint32_t * bits_image_fetch_nearest_affine_none_r5g6b5 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_r5g6b5, PIXMAN_r5g6b5, PIXMAN_REPEAT_NONE ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_none_r5g6b5 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_r5g6b5, PIXMAN_r5g6b5, PIXMAN_REPEAT_NONE ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_none_r5g6b5 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_r5g6b5, PIXMAN_r5g6b5, PIXMAN_REPEAT_NONE ); return iter->buffer; } |
3164 | MAKE_FETCHERS (reflect_r5g6b5, r5g6b5, PIXMAN_REPEAT_REFLECT)static uint32_t * bits_image_fetch_nearest_affine_reflect_r5g6b5 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_r5g6b5, PIXMAN_r5g6b5, PIXMAN_REPEAT_REFLECT ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_reflect_r5g6b5 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_r5g6b5, PIXMAN_r5g6b5, PIXMAN_REPEAT_REFLECT ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_reflect_r5g6b5 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_r5g6b5, PIXMAN_r5g6b5, PIXMAN_REPEAT_REFLECT ); return iter->buffer; } |
3165 | MAKE_FETCHERS (normal_r5g6b5, r5g6b5, PIXMAN_REPEAT_NORMAL)static uint32_t * bits_image_fetch_nearest_affine_normal_r5g6b5 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_nearest_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_r5g6b5, PIXMAN_r5g6b5, PIXMAN_REPEAT_NORMAL ); return iter->buffer; } static uint32_t * bits_image_fetch_bilinear_affine_normal_r5g6b5 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_bilinear_affine (iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_r5g6b5, PIXMAN_r5g6b5, PIXMAN_REPEAT_NORMAL ); return iter->buffer; } static uint32_t * bits_image_fetch_separable_convolution_affine_normal_r5g6b5 (pixman_iter_t *iter, const uint32_t * mask) { bits_image_fetch_separable_convolution_affine ( iter->image, iter->x, iter->y++, iter->width, iter ->buffer, mask, convert_r5g6b5, PIXMAN_r5g6b5, PIXMAN_REPEAT_NORMAL ); return iter->buffer; } |
3166 | |
3167 | #define IMAGE_FLAGS(((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (1 << 0) | (1 << 25) | (1 << 23)) \ |
3168 | (FAST_PATH_STANDARD_FLAGS((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | FAST_PATH_ID_TRANSFORM(1 << 0) | \ |
3169 | FAST_PATH_BITS_IMAGE(1 << 25) | FAST_PATH_SAMPLES_COVER_CLIP_NEAREST(1 << 23)) |
3170 | |
3171 | static const pixman_iter_info_t fast_iters[] = |
3172 | { |
3173 | { PIXMAN_r5g6b5, IMAGE_FLAGS(((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | (1 << 0) | (1 << 25) | (1 << 23)), ITER_NARROW | ITER_SRC, |
3174 | _pixman_iter_init_bits_stride, fast_fetch_r5g6b5, NULL((void*)0) }, |
3175 | |
3176 | { PIXMAN_r5g6b5, FAST_PATH_STD_DEST_FLAGS((1 << 5) | (1 << 1) | (1 << 6)), |
3177 | ITER_NARROW | ITER_DEST, |
3178 | _pixman_iter_init_bits_stride, |
3179 | fast_fetch_r5g6b5, fast_write_back_r5g6b5 }, |
3180 | |
3181 | { PIXMAN_r5g6b5, FAST_PATH_STD_DEST_FLAGS((1 << 5) | (1 << 1) | (1 << 6)), |
3182 | ITER_NARROW | ITER_DEST | ITER_IGNORE_RGB | ITER_IGNORE_ALPHA, |
3183 | _pixman_iter_init_bits_stride, |
3184 | fast_dest_fetch_noop, fast_write_back_r5g6b5 }, |
3185 | |
3186 | { PIXMAN_a8r8g8b8, |
3187 | (FAST_PATH_STANDARD_FLAGS((1 << 2) | (1 << 5) | (1 << 1) | (1 << 6)) | |
3188 | FAST_PATH_SCALE_TRANSFORM(1 << 10) | |
3189 | FAST_PATH_BILINEAR_FILTER(1 << 19) | |
3190 | FAST_PATH_SAMPLES_COVER_CLIP_BILINEAR(1 << 24)), |
3191 | ITER_NARROW | ITER_SRC, |
3192 | fast_bilinear_cover_iter_init, |
3193 | NULL((void*)0), NULL((void*)0) |
3194 | }, |
3195 | |
3196 | #define FAST_BILINEAR_FLAGS((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 16) | (1 << 18) | ((1 << 14) | (1 << 3) | (1 << 4)) | (1 << 19)) \ |
3197 | (FAST_PATH_NO_ALPHA_MAP(1 << 1) | \ |
3198 | FAST_PATH_NO_ACCESSORS(1 << 5) | \ |
3199 | FAST_PATH_HAS_TRANSFORM(1 << 12) | \ |
3200 | FAST_PATH_AFFINE_TRANSFORM(1 << 17) | \ |
3201 | FAST_PATH_X_UNIT_POSITIVE(1 << 16) | \ |
3202 | FAST_PATH_Y_UNIT_ZERO(1 << 18) | \ |
3203 | FAST_PATH_NONE_REPEAT((1 << 14) | (1 << 3) | (1 << 4)) | \ |
3204 | FAST_PATH_BILINEAR_FILTER(1 << 19)) |
3205 | |
3206 | { PIXMAN_a8r8g8b8, |
3207 | FAST_BILINEAR_FLAGS((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 16) | (1 << 18) | ((1 << 14) | (1 << 3) | (1 << 4)) | (1 << 19)), |
3208 | ITER_NARROW | ITER_SRC, |
3209 | NULL((void*)0), bits_image_fetch_bilinear_no_repeat_8888, NULL((void*)0) |
3210 | }, |
3211 | |
3212 | { PIXMAN_x8r8g8b8, |
3213 | FAST_BILINEAR_FLAGS((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 16) | (1 << 18) | ((1 << 14) | (1 << 3) | (1 << 4)) | (1 << 19)), |
3214 | ITER_NARROW | ITER_SRC, |
3215 | NULL((void*)0), bits_image_fetch_bilinear_no_repeat_8888, NULL((void*)0) |
3216 | }, |
3217 | |
3218 | #define GENERAL_BILINEAR_FLAGS((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 19)) \ |
3219 | (FAST_PATH_NO_ALPHA_MAP(1 << 1) | \ |
3220 | FAST_PATH_NO_ACCESSORS(1 << 5) | \ |
3221 | FAST_PATH_HAS_TRANSFORM(1 << 12) | \ |
3222 | FAST_PATH_AFFINE_TRANSFORM(1 << 17) | \ |
3223 | FAST_PATH_BILINEAR_FILTER(1 << 19)) |
3224 | |
3225 | #define GENERAL_NEAREST_FLAGS((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) \ |
3226 | (FAST_PATH_NO_ALPHA_MAP(1 << 1) | \ |
3227 | FAST_PATH_NO_ACCESSORS(1 << 5) | \ |
3228 | FAST_PATH_HAS_TRANSFORM(1 << 12) | \ |
3229 | FAST_PATH_AFFINE_TRANSFORM(1 << 17) | \ |
3230 | FAST_PATH_NEAREST_FILTER(1 << 11)) |
3231 | |
3232 | #define GENERAL_SEPARABLE_CONVOLUTION_FLAGS((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) \ |
3233 | (FAST_PATH_NO_ALPHA_MAP(1 << 1) | \ |
3234 | FAST_PATH_NO_ACCESSORS(1 << 5) | \ |
3235 | FAST_PATH_HAS_TRANSFORM(1 << 12) | \ |
3236 | FAST_PATH_AFFINE_TRANSFORM(1 << 17) | \ |
3237 | FAST_PATH_SEPARABLE_CONVOLUTION_FILTER(1 << 26)) |
3238 | |
3239 | #define SEPARABLE_CONVOLUTION_AFFINE_FAST_PATH(name, format, repeat){ PIXMAN_format, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | FAST_PATH_repeat_REPEAT , ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_name , ((void*)0) }, \ |
3240 | { PIXMAN_ ## format, \ |
3241 | GENERAL_SEPARABLE_CONVOLUTION_FLAGS((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | FAST_PATH_ ## repeat ## _REPEAT, \ |
3242 | ITER_NARROW | ITER_SRC, \ |
3243 | NULL((void*)0), bits_image_fetch_separable_convolution_affine_ ## name, NULL((void*)0) \ |
3244 | }, |
3245 | |
3246 | #define BILINEAR_AFFINE_FAST_PATH(name, format, repeat){ PIXMAN_format, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 19)) | FAST_PATH_repeat_REPEAT , ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_bilinear_affine_name , ((void*)0), }, \ |
3247 | { PIXMAN_ ## format, \ |
3248 | GENERAL_BILINEAR_FLAGS((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 19)) | FAST_PATH_ ## repeat ## _REPEAT, \ |
3249 | ITER_NARROW | ITER_SRC, \ |
3250 | NULL((void*)0), bits_image_fetch_bilinear_affine_ ## name, NULL((void*)0), \ |
3251 | }, |
3252 | |
3253 | #define NEAREST_AFFINE_FAST_PATH(name, format, repeat){ PIXMAN_format, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | FAST_PATH_repeat_REPEAT , ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_nearest_affine_name , ((void*)0) }, \ |
3254 | { PIXMAN_ ## format, \ |
3255 | GENERAL_NEAREST_FLAGS((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | FAST_PATH_ ## repeat ## _REPEAT, \ |
3256 | ITER_NARROW | ITER_SRC, \ |
3257 | NULL((void*)0), bits_image_fetch_nearest_affine_ ## name, NULL((void*)0) \ |
3258 | }, |
3259 | |
3260 | #define AFFINE_FAST_PATHS(name, format, repeat){ PIXMAN_format, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | FAST_PATH_repeat_REPEAT , ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_nearest_affine_name , ((void*)0) }, { PIXMAN_format, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 19)) | FAST_PATH_repeat_REPEAT , ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_bilinear_affine_name , ((void*)0), }, { PIXMAN_format, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | FAST_PATH_repeat_REPEAT , ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_name , ((void*)0) }, \ |
3261 | NEAREST_AFFINE_FAST_PATH(name, format, repeat){ PIXMAN_format, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | FAST_PATH_repeat_REPEAT , ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_nearest_affine_name , ((void*)0) }, \ |
3262 | BILINEAR_AFFINE_FAST_PATH(name, format, repeat){ PIXMAN_format, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 19)) | FAST_PATH_repeat_REPEAT , ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_bilinear_affine_name , ((void*)0), }, \ |
3263 | SEPARABLE_CONVOLUTION_AFFINE_FAST_PATH(name, format, repeat){ PIXMAN_format, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | FAST_PATH_repeat_REPEAT , ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_name , ((void*)0) }, |
3264 | |
3265 | AFFINE_FAST_PATHS (pad_a8r8g8b8, a8r8g8b8, PAD){ PIXMAN_a8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | ((1 << 15) | (1 << 14) | (1 << 4)), ITER_NARROW | ITER_SRC, ( (void*)0), bits_image_fetch_nearest_affine_pad_a8r8g8b8, ((void *)0) }, { PIXMAN_a8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 19)) | ((1 << 15) | (1 << 14) | (1 << 4)), ITER_NARROW | ITER_SRC , ((void*)0), bits_image_fetch_bilinear_affine_pad_a8r8g8b8, ( (void*)0), }, { PIXMAN_a8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | ( (1 << 15) | (1 << 14) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_pad_a8r8g8b8 , ((void*)0) }, |
3266 | AFFINE_FAST_PATHS (none_a8r8g8b8, a8r8g8b8, NONE){ PIXMAN_a8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | ((1 << 14) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, (( void*)0), bits_image_fetch_nearest_affine_none_a8r8g8b8, ((void *)0) }, { PIXMAN_a8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 19)) | ((1 << 14) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC , ((void*)0), bits_image_fetch_bilinear_affine_none_a8r8g8b8, ((void*)0), }, { PIXMAN_a8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | ( (1 << 14) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_none_a8r8g8b8 , ((void*)0) }, |
3267 | AFFINE_FAST_PATHS (reflect_a8r8g8b8, a8r8g8b8, REFLECT){ PIXMAN_a8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | ((1 << 15) | (1 << 14) | (1 << 3)), ITER_NARROW | ITER_SRC, ( (void*)0), bits_image_fetch_nearest_affine_reflect_a8r8g8b8, ( (void*)0) }, { PIXMAN_a8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 19)) | ( (1 << 15) | (1 << 14) | (1 << 3)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_bilinear_affine_reflect_a8r8g8b8 , ((void*)0), }, { PIXMAN_a8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | ( (1 << 15) | (1 << 14) | (1 << 3)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_reflect_a8r8g8b8 , ((void*)0) }, |
3268 | AFFINE_FAST_PATHS (normal_a8r8g8b8, a8r8g8b8, NORMAL){ PIXMAN_a8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | ((1 << 15) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, (( void*)0), bits_image_fetch_nearest_affine_normal_a8r8g8b8, (( void*)0) }, { PIXMAN_a8r8g8b8, ((1 << 1) | (1 << 5 ) | (1 << 12) | (1 << 17) | (1 << 19)) | (( 1 << 15) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_bilinear_affine_normal_a8r8g8b8 , ((void*)0), }, { PIXMAN_a8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | ( (1 << 15) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_normal_a8r8g8b8 , ((void*)0) }, |
3269 | AFFINE_FAST_PATHS (pad_x8r8g8b8, x8r8g8b8, PAD){ PIXMAN_x8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | ((1 << 15) | (1 << 14) | (1 << 4)), ITER_NARROW | ITER_SRC, ( (void*)0), bits_image_fetch_nearest_affine_pad_x8r8g8b8, ((void *)0) }, { PIXMAN_x8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 19)) | ((1 << 15) | (1 << 14) | (1 << 4)), ITER_NARROW | ITER_SRC , ((void*)0), bits_image_fetch_bilinear_affine_pad_x8r8g8b8, ( (void*)0), }, { PIXMAN_x8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | ( (1 << 15) | (1 << 14) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_pad_x8r8g8b8 , ((void*)0) }, |
3270 | AFFINE_FAST_PATHS (none_x8r8g8b8, x8r8g8b8, NONE){ PIXMAN_x8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | ((1 << 14) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, (( void*)0), bits_image_fetch_nearest_affine_none_x8r8g8b8, ((void *)0) }, { PIXMAN_x8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 19)) | ((1 << 14) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC , ((void*)0), bits_image_fetch_bilinear_affine_none_x8r8g8b8, ((void*)0), }, { PIXMAN_x8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | ( (1 << 14) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_none_x8r8g8b8 , ((void*)0) }, |
3271 | AFFINE_FAST_PATHS (reflect_x8r8g8b8, x8r8g8b8, REFLECT){ PIXMAN_x8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | ((1 << 15) | (1 << 14) | (1 << 3)), ITER_NARROW | ITER_SRC, ( (void*)0), bits_image_fetch_nearest_affine_reflect_x8r8g8b8, ( (void*)0) }, { PIXMAN_x8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 19)) | ( (1 << 15) | (1 << 14) | (1 << 3)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_bilinear_affine_reflect_x8r8g8b8 , ((void*)0), }, { PIXMAN_x8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | ( (1 << 15) | (1 << 14) | (1 << 3)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_reflect_x8r8g8b8 , ((void*)0) }, |
3272 | AFFINE_FAST_PATHS (normal_x8r8g8b8, x8r8g8b8, NORMAL){ PIXMAN_x8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | ((1 << 15) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, (( void*)0), bits_image_fetch_nearest_affine_normal_x8r8g8b8, (( void*)0) }, { PIXMAN_x8r8g8b8, ((1 << 1) | (1 << 5 ) | (1 << 12) | (1 << 17) | (1 << 19)) | (( 1 << 15) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_bilinear_affine_normal_x8r8g8b8 , ((void*)0), }, { PIXMAN_x8r8g8b8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | ( (1 << 15) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_normal_x8r8g8b8 , ((void*)0) }, |
3273 | AFFINE_FAST_PATHS (pad_a8, a8, PAD){ PIXMAN_a8, ((1 << 1) | (1 << 5) | (1 << 12 ) | (1 << 17) | (1 << 11)) | ((1 << 15) | ( 1 << 14) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void *)0), bits_image_fetch_nearest_affine_pad_a8, ((void*)0) }, { PIXMAN_a8, ((1 << 1) | (1 << 5) | (1 << 12 ) | (1 << 17) | (1 << 19)) | ((1 << 15) | ( 1 << 14) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void *)0), bits_image_fetch_bilinear_affine_pad_a8, ((void*)0), }, { PIXMAN_a8, ((1 << 1) | (1 << 5) | (1 << 12 ) | (1 << 17) | (1 << 26)) | ((1 << 15) | ( 1 << 14) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void *)0), bits_image_fetch_separable_convolution_affine_pad_a8, ( (void*)0) }, |
3274 | AFFINE_FAST_PATHS (none_a8, a8, NONE){ PIXMAN_a8, ((1 << 1) | (1 << 5) | (1 << 12 ) | (1 << 17) | (1 << 11)) | ((1 << 14) | ( 1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void *)0), bits_image_fetch_nearest_affine_none_a8, ((void*)0) }, { PIXMAN_a8, ((1 << 1) | (1 << 5) | (1 << 12 ) | (1 << 17) | (1 << 19)) | ((1 << 14) | ( 1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void *)0), bits_image_fetch_bilinear_affine_none_a8, ((void*)0), } , { PIXMAN_a8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | ((1 << 14) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, (( void*)0), bits_image_fetch_separable_convolution_affine_none_a8 , ((void*)0) }, |
3275 | AFFINE_FAST_PATHS (reflect_a8, a8, REFLECT){ PIXMAN_a8, ((1 << 1) | (1 << 5) | (1 << 12 ) | (1 << 17) | (1 << 11)) | ((1 << 15) | ( 1 << 14) | (1 << 3)), ITER_NARROW | ITER_SRC, ((void *)0), bits_image_fetch_nearest_affine_reflect_a8, ((void*)0) } , { PIXMAN_a8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 19)) | ((1 << 15) | (1 << 14) | (1 << 3)), ITER_NARROW | ITER_SRC, ( (void*)0), bits_image_fetch_bilinear_affine_reflect_a8, ((void *)0), }, { PIXMAN_a8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | ((1 << 15) | (1 << 14) | (1 << 3)), ITER_NARROW | ITER_SRC, ( (void*)0), bits_image_fetch_separable_convolution_affine_reflect_a8 , ((void*)0) }, |
3276 | AFFINE_FAST_PATHS (normal_a8, a8, NORMAL){ PIXMAN_a8, ((1 << 1) | (1 << 5) | (1 << 12 ) | (1 << 17) | (1 << 11)) | ((1 << 15) | ( 1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void *)0), bits_image_fetch_nearest_affine_normal_a8, ((void*)0) } , { PIXMAN_a8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 19)) | ((1 << 15) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, (( void*)0), bits_image_fetch_bilinear_affine_normal_a8, ((void* )0), }, { PIXMAN_a8, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | ((1 << 15) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, (( void*)0), bits_image_fetch_separable_convolution_affine_normal_a8 , ((void*)0) }, |
3277 | AFFINE_FAST_PATHS (pad_r5g6b5, r5g6b5, PAD){ PIXMAN_r5g6b5, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | ((1 << 15) | (1 << 14) | (1 << 4)), ITER_NARROW | ITER_SRC, ( (void*)0), bits_image_fetch_nearest_affine_pad_r5g6b5, ((void *)0) }, { PIXMAN_r5g6b5, ((1 << 1) | (1 << 5) | ( 1 << 12) | (1 << 17) | (1 << 19)) | ((1 << 15) | (1 << 14) | (1 << 4)), ITER_NARROW | ITER_SRC , ((void*)0), bits_image_fetch_bilinear_affine_pad_r5g6b5, (( void*)0), }, { PIXMAN_r5g6b5, ((1 << 1) | (1 << 5 ) | (1 << 12) | (1 << 17) | (1 << 26)) | (( 1 << 15) | (1 << 14) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_pad_r5g6b5 , ((void*)0) }, |
3278 | AFFINE_FAST_PATHS (none_r5g6b5, r5g6b5, NONE){ PIXMAN_r5g6b5, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | ((1 << 14) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, (( void*)0), bits_image_fetch_nearest_affine_none_r5g6b5, ((void *)0) }, { PIXMAN_r5g6b5, ((1 << 1) | (1 << 5) | ( 1 << 12) | (1 << 17) | (1 << 19)) | ((1 << 14) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC , ((void*)0), bits_image_fetch_bilinear_affine_none_r5g6b5, ( (void*)0), }, { PIXMAN_r5g6b5, ((1 << 1) | (1 << 5 ) | (1 << 12) | (1 << 17) | (1 << 26)) | (( 1 << 14) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_none_r5g6b5 , ((void*)0) }, |
3279 | AFFINE_FAST_PATHS (reflect_r5g6b5, r5g6b5, REFLECT){ PIXMAN_r5g6b5, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | ((1 << 15) | (1 << 14) | (1 << 3)), ITER_NARROW | ITER_SRC, ( (void*)0), bits_image_fetch_nearest_affine_reflect_r5g6b5, (( void*)0) }, { PIXMAN_r5g6b5, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 19)) | ((1 << 15) | (1 << 14) | (1 << 3)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_bilinear_affine_reflect_r5g6b5 , ((void*)0), }, { PIXMAN_r5g6b5, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | ( (1 << 15) | (1 << 14) | (1 << 3)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_reflect_r5g6b5 , ((void*)0) }, |
3280 | AFFINE_FAST_PATHS (normal_r5g6b5, r5g6b5, NORMAL){ PIXMAN_r5g6b5, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 11)) | ((1 << 15) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, (( void*)0), bits_image_fetch_nearest_affine_normal_r5g6b5, ((void *)0) }, { PIXMAN_r5g6b5, ((1 << 1) | (1 << 5) | ( 1 << 12) | (1 << 17) | (1 << 19)) | ((1 << 15) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC , ((void*)0), bits_image_fetch_bilinear_affine_normal_r5g6b5, ((void*)0), }, { PIXMAN_r5g6b5, ((1 << 1) | (1 << 5) | (1 << 12) | (1 << 17) | (1 << 26)) | ( (1 << 15) | (1 << 3) | (1 << 4)), ITER_NARROW | ITER_SRC, ((void*)0), bits_image_fetch_separable_convolution_affine_normal_r5g6b5 , ((void*)0) }, |
3281 | |
3282 | { PIXMAN_null(((0) << 24) | ((0) << 16) | ((0) << 12) | ( (0) << 8) | ((0) << 4) | ((0))) }, |
3283 | }; |
3284 | |
3285 | pixman_implementation_t * |
3286 | _pixman_implementation_create_fast_path (pixman_implementation_t *fallback) |
3287 | { |
3288 | pixman_implementation_t *imp = _pixman_implementation_create (fallback, c_fast_paths); |
3289 | |
3290 | imp->fill = fast_path_fill; |
3291 | imp->iter_info = fast_iters; |
3292 | |
3293 | return imp; |
3294 | } |