Arm-2D  
2D Image Processing Library for Cortex-M Processors
arm_2d_transform.h
1/*
2 * Copyright (C) 2010-2024 Arm Limited or its affiliates. All rights reserved.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Licensed under the Apache License, Version 2.0 (the License); you may
7 * not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19/* ----------------------------------------------------------------------
20 * Project: Arm-2D Library
21 * Title: #include "arm_2d_transform.h"
22 * Description: Public header file to contain the APIs for transform
23 *
24 * $Date: 01 Aug 2024
25 * $Revision: V.2.0.1
26 *
27 * Target Processor: Cortex-M cores
28 * -------------------------------------------------------------------- */
29
30#ifndef __ARM_2D_TRANSFORM_H__
31#define __ARM_2D_TRANSFORM_H__
32
33/*============================ INCLUDES ======================================*/
34
35#include "arm_2d_types.h"
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
41#if defined(__clang__)
42# pragma clang diagnostic push
43# pragma clang diagnostic ignored "-Wunknown-warning-option"
44# pragma clang diagnostic ignored "-Wreserved-identifier"
45# pragma clang diagnostic ignored "-Wsign-conversion"
46# pragma clang diagnostic ignored "-Wpadded"
47# pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments"
48#endif
49
50/*============================ MACROS ========================================*/
51/*!
52 * \addtogroup Deprecated
53 * @{
54 */
55#define arm_2d_op_rotate_t arm_2d_op_trans_t
56#define arm_2d_op_rotate_opacity_t arm_2d_op_trans_opa_t
57/*! @} */
58
59/*!
60 * \addtogroup Deprecated
61 * @{
62 */
63
64#define arm_2dp_gray8_tile_transform_with_opacity_prepare \
65 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare
66
67#define arm_2dp_rgb565_tile_transform_with_opacity_prepare \
68 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare
69
70#define arm_2dp_cccn888_tile_transform_with_opacity_prepare \
71 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare
72
73#define arm_2dp_gray8_tile_transform_prepare \
74 arm_2dp_gray8_tile_transform_with_colour_keying_prepare
75
76#define arm_2dp_rgb565_tile_transform_prepare \
77 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare
78
79#define arm_2dp_cccn888_tile_transform_prepare \
80 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare
81
82#define arm_2dp_tile_rotate arm_2dp_tile_transform
83
84#define arm_2dp_gray8_tile_rotate_prepare \
85 arm_2dp_gray8_tile_transform_with_colour_keying_prepare
86
87#define arm_2dp_rgb565_tile_rotate_prepare \
88 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare
89
90#define arm_2dp_cccn888_tile_rotate_prepare \
91 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare
92
93#define arm_2d_rgb888_tile_rotation_prepare \
94 arm_2d_cccn888_tile_rotation_prepare
95
96#define arm_2d_gray8_tile_rotation_prepare \
97 arm_2d_gray8_tile_rotation_with_colour_keying_prepare
98
99#define arm_2d_rgb565_tile_rotation_prepare \
100 arm_2d_rgb565_tile_rotation_with_colour_keying_prepare
101
102#define arm_2d_cccn888_tile_rotation_prepare \
103 arm_2d_cccn888_tile_rotation_with_colour_keying_prepare
104
105#define arm_2dp_gray8_tile_rotate_with_opacity_prepare \
106 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare
107
108#define arm_2dp_rgb565_tile_rotate_with_opacity_prepare \
109 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare
110
111#define arm_2dp_cccn888_tile_rotate_with_opacity_prepare \
112 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare
113
114#define arm_2d_gray8_tile_rotation_with_alpha_prepare \
115 arm_2d_gray8_tile_rotation_with_opacity_prepare
116
117#define arm_2d_rgb565_tile_rotation_with_alpha_prepare \
118 arm_2d_rgb565_tile_rotation_with_opacity_prepare
119
120#define arm_2d_rgb888_tile_rotation_with_alpha_prepare \
121 arm_2d_rgb888_tile_rotation_with_opacity_prepare
122
123#define arm_2d_cccn888_tile_rotation_with_alpha_prepare \
124 arm_2d_cccn888_tile_rotation_with_opacity_prepare
125
126#define arm_2d_rgb888_tile_rotation_with_opacity_prepare \
127 arm_2d_cccn888_tile_rotation_with_opacity_prepare
128
129#define arm_2dp_gray8_tile_rotation \
130 arm_2dp_gray8_tile_rotation_with_colour_keying
131
132#define arm_2dp_rgb565_tile_rotation \
133 arm_2dp_rgb565_tile_rotation_with_colour_keying
134
135#define arm_2dp_cccn888_tile_rotation \
136 arm_2dp_cccn888_tile_rotation_with_colour_keying
137
138#define arm_2d_gray8_tile_rotation \
139 arm_2d_gray8_tile_rotation_with_colour_keying
140
141#define arm_2d_rgb565_tile_rotation \
142 arm_2d_rgb565_tile_rotation_with_colour_keying
143
144#define arm_2d_cccn888_tile_rotation \
145 arm_2d_cccn888_tile_rotation_with_colour_keying
146
147#define arm_2d_rgb888_tile_rotation_with_colour_keying \
148 arm_2d_cccn888_tile_rotation_with_colour_keying
149
150#define arm_2dp_gray8_tile_rotation_with_alpha \
151 arm_2dp_gray8_tile_rotation_with_opacity
152
153#define arm_2dp_rgb565_tile_rotation_with_alpha \
154 arm_2dp_rgb565_tile_rotation_with_opacity
155
156#define arm_2dp_rgb888_tile_rotation_with_alpha \
157 arm_2dp_cccn888_tile_rotation_with_opacity
158
159#define arm_2dp_rgb888_tile_rotation_with_opacity \
160 arm_2dp_cccn888_tile_rotation_with_opacity
161
162#define arm_2dp_cccn888_tile_rotation_with_alpha \
163 arm_2dp_cccn888_tile_rotation_with_opacity
164
165#define arm_2d_gray8_tile_rotation_with_alpha \
166 arm_2d_gray8_tile_rotation_with_opacity
167
168#define arm_2d_rgb565_tile_rotation_with_alpha \
169 arm_2d_rgb565_tile_rotation_with_opacity
170
171#define arm_2d_rgb888_tile_rotation_with_alpha \
172 arm_2d_rgb888_tile_rotation_with_opacity
173
174#define arm_2d_cccn888_tile_rotation_with_alpha \
175 arm_2d_cccn888_tile_rotation_with_opacity
176
177#define arm_2d_rgb888_tile_rotation_with_opacity \
178 arm_2d_cccn888_tile_rotation_with_opacity
179
180#define arm_2d_gray8_tile_transform_prepare \
181 arm_2d_gray8_tile_transform_with_colour_keying_prepare
182
183#define arm_2d_rgb565_tile_transform_prepare \
184 arm_2d_rgb565_tile_transform_with_colour_keying_prepare
185
186#define arm_2d_cccn888_tile_transform_prepare \
187 arm_2d_cccn888_tile_transform_with_colour_keying_prepare
188
189#define arm_2d_rgb888_tile_transform_prepare \
190 arm_2d_cccn888_tile_transform_prepare
191
192#define arm_2d_gray8_tile_transform_with_alpha_prepare \
193 arm_2d_gray8_tile_transform_with_opacity_prepare
194
195#define arm_2d_rgb565_tile_transform_with_alpha_prepare \
196 arm_2d_rgb565_tile_transform_with_opacity_prepare
197
198#define arm_2d_rgb888_tile_transform_with_alpha_prepare \
199 arm_2d_rgb888_tile_transform_with_opacity_prepare
200
201#define arm_2d_cccn888_tile_transform_with_alpha_prepare \
202 arm_2d_cccn888_tile_transform_with_opacity_prepare
203
204#define arm_2d_rgb888_tile_transform_with_opacity_prepare \
205 arm_2d_cccn888_tile_transform_with_opacity_prepare
206
207#define arm_2d_gray8_tile_transform_with_alpha \
208 arm_2d_gray8_tile_transform_with_opacity
209
210#define arm_2d_rgb565_tile_transform_with_alpha \
211 arm_2d_rgb565_tile_transform_with_opacity
212
213#define arm_2d_rgb888_tile_transform_with_alpha \
214 arm_2d_rgb888_tile_transform_with_opacity
215
216#define arm_2d_cccn888_tile_transform_with_alpha \
217 arm_2d_cccn888_tile_transform_with_opacity
218
219#define arm_2d_rgb888_tile_transform_with_opacity \
220 arm_2d_cccn888_tile_transform_with_opacity
221
222#define arm_2dp_gray8_tile_transform \
223 arm_2dp_gray8_tile_transform_with_colour_keying
224
225#define arm_2dp_rgb565_tile_transform \
226 arm_2dp_rgb565_tile_transform_with_colour_keying
227
228#define arm_2dp_cccn888_tile_transform \
229 arm_2dp_cccn888_tile_transform_with_colour_keying
230
231#define arm_2d_gray8_tile_transform \
232 arm_2d_gray8_tile_transform_with_colour_keying
233
234#define arm_2d_rgb565_tile_transform \
235 arm_2d_rgb565_tile_transform_with_colour_keying
236
237#define arm_2d_cccn888_tile_transform \
238 arm_2d_cccn888_tile_transform_with_colour_keying
239
240#define arm_2dp_gray8_tile_transform_with_alpha \
241 arm_2dp_gray8_tile_transform_with_opacity
242
243#define arm_2dp_rgb565_tile_transform_with_alpha \
244 arm_2dp_rgb565_tile_transform_with_opacity
245
246#define arm_2dp_rgb888_tile_transform_with_alpha \
247 arm_2dp_rgb888_tile_transform_with_opacity
248
249#define arm_2dp_cccn888_tile_transform_with_alpha \
250 arm_2dp_cccn888_tile_transform_with_opacity
251
252#define arm_2dp_rgb888_tile_transform_with_opacity \
253 arm_2dp_cccn888_tile_transform_with_opacity
254
255#define arm_2d_gray8_tile_scaling_prepare \
256 arm_2d_gray8_tile_scaling_with_colour_keying_prepare
257
258#define arm_2d_rgb565_tile_scaling_prepare \
259 arm_2d_rgb565_tile_scaling_with_colour_keying_prepare
260
261#define arm_2d_cccn888_tile_scaling_prepare \
262 arm_2d_cccn888_tile_scaling_with_colour_keying_prepare
263
264#define arm_2d_rgb888_tile_scaling_prepare \
265 arm_2d_cccn888_tile_scaling_with_colour_keying_prepare
266
267
268#define arm_2d_gray8_tile_scaling_with_alpha_prepare \
269 arm_2d_gray8_tile_scaling_with_opacity_prepare
270
271#define arm_2d_rgb565_tile_scaling_with_alpha_prepare \
272 arm_2d_rgb565_tile_scaling_with_opacity_prepare
273
274#define arm_2d_rgb888_tile_scaling_with_alpha_prepare \
275 arm_2d_rgb888_tile_scaling_with_opacity_prepare
276
277#define arm_2d_cccn888_tile_scaling_with_alpha_prepare \
278 arm_2d_cccn888_tile_scaling_with_opacity_prepare
279
280#define arm_2d_rgb888_tile_scaling_with_opacity_prepare \
281 arm_2d_cccn888_tile_scaling_with_opacity_prepare
282
283#define arm_2dp_gray8_tile_scaling_with_alpha \
284 arm_2dp_gray8_tile_scaling_with_opacity
285
286#define arm_2dp_rgb565_tile_scaling_with_alpha \
287 arm_2dp_rgb565_tile_scaling_with_opacity
288
289#define arm_2dp_rgb888_tile_scaling_with_alpha \
290 arm_2dp_rgb888_tile_scaling_with_opacity
291
292#define arm_2dp_cccn888_tile_scaling_with_alpha \
293 arm_2dp_cccn888_tile_scaling_with_opacity
294
295#define arm_2dp_rgb888_tile_scaling_with_opacity \
296 arm_2dp_cccn888_tile_scaling_with_opacity
297
298#define arm_2d_gray8_tile_scaling_with_alpha \
299 arm_2d_gray8_tile_scaling_with_opacity
300
301#define arm_2d_rgb565_tile_scaling_with_alpha \
302 arm_2d_rgb565_tile_scaling_with_opacity
303
304#define arm_2d_rgb888_tile_scaling_with_alpha \
305 arm_2d_rgb888_tile_scaling_with_opacity
306
307#define arm_2d_cccn888_tile_scaling_with_alpha \
308 arm_2d_cccn888_tile_scaling_with_opacity
309
310#define arm_2d_rgb888_tile_scaling_with_opacity \
311 arm_2d_cccn888_tile_scaling_with_opacity
312
313#define arm_2dp_gray8_tile_scaling \
314 arm_2dp_gray8_tile_scaling_with_colour_keying
315
316#define arm_2dp_rgb565_tile_scaling \
317 arm_2dp_rgb565_tile_scaling_with_colour_keying
318
319#define arm_2dp_cccn888_tile_scaling \
320 arm_2dp_cccn888_tile_scaling_with_colour_keying
321
322#define arm_2d_gray8_tile_scaling \
323 arm_2d_gray8_tile_scaling_with_colour_keying
324
325#define arm_2d_rgb565_tile_scaling \
326 arm_2d_rgb565_tile_scaling_with_colour_keying
327
328#define arm_2d_cccn888_tile_scaling \
329 arm_2d_cccn888_tile_scaling_with_colour_keying
330
331#define arm_2d_rgb888_tile_scaling \
332 arm_2d_cccn888_tile_scaling_with_colour_keying
333
334/*! @} */
335
336/*!
337 * \addtogroup gTransform 5 Transform Operations
338 * @{
339 */
340
341/*============================ MACROFIED FUNCTIONS ===========================*/
342
343/*----------------------------------------------------------------------------*
344 * API wrappers: Rotation *
345 *----------------------------------------------------------------------------*/
346
347#define arm_2d_gray8_tile_rotation_with_colour_keying_prepare( __SRC_TILE_ADDR,\
348 __CENTRE, \
349 __ANGLE, \
350 __MSK_COLOUR) \
351 arm_2dp_gray8_tile_transform_with_colour_keying_prepare( NULL, \
352 (__SRC_TILE_ADDR), \
353 (__CENTRE), \
354 (float)(__ANGLE), \
355 1.0f, \
356 (__MSK_COLOUR))
357
358#define arm_2d_rgb565_tile_rotation_with_colour_keying_prepare( __SRC_TILE_ADDR,\
359 __CENTRE, \
360 __ANGLE, \
361 __MSK_COLOUR) \
362 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare( NULL, \
363 (__SRC_TILE_ADDR), \
364 (__CENTRE), \
365 (float)(__ANGLE), \
366 1.0f, \
367 (__MSK_COLOUR))
368
369#define arm_2d_cccn888_tile_rotation_with_colour_keying_prepare(__SRC_TILE_ADDR,\
370 __CENTRE, \
371 __ANGLE, \
372 __MSK_COLOUR) \
373 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare( NULL, \
374 (__SRC_TILE_ADDR), \
375 (__CENTRE), \
376 (float)(__ANGLE), \
377 1.0f, \
378 (__MSK_COLOUR))
379
380#define arm_2d_gray8_tile_rotation_only_prepare(__SRC_TILE_ADDR, \
381 __CENTRE, \
382 __ANGLE) \
383 arm_2dp_gray8_tile_transform_only_prepare( NULL, \
384 (__SRC_TILE_ADDR), \
385 (__CENTRE), \
386 (float)(__ANGLE), \
387 1.0f)
388
389#define arm_2d_rgb565_tile_rotation_only_prepare( __SRC_TILE_ADDR, \
390 __CENTRE, \
391 __ANGLE) \
392 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare( NULL, \
393 (__SRC_TILE_ADDR), \
394 (__CENTRE), \
395 (float)(__ANGLE), \
396 1.0f)
397
398#define arm_2d_cccn888_tile_rotation_only_prepare( __SRC_TILE_ADDR, \
399 __CENTRE, \
400 __ANGLE) \
401 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare( NULL, \
402 (__SRC_TILE_ADDR), \
403 (__CENTRE), \
404 (float)(__ANGLE), \
405 1.0f)
406
407#define arm_2d_gray8_tile_rotation_with_opacity_prepare( \
408 __SRC_TILE_ADDR, \
409 __CENTRE, \
410 __ANGLE, \
411 __MSK_COLOUR, \
412 __OPACITY) \
413 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare(\
414 NULL, \
415 (__SRC_TILE_ADDR), \
416 (__CENTRE), \
417 (float)(__ANGLE), \
418 1.0f, \
419 (__MSK_COLOUR), \
420 (__OPACITY))
421
422#define arm_2d_rgb565_tile_rotation_with_opacity_prepare( \
423 __SRC_TILE_ADDR, \
424 __CENTRE, \
425 __ANGLE, \
426 __MSK_COLOUR, \
427 __OPACITY) \
428 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare(\
429 NULL, \
430 (__SRC_TILE_ADDR), \
431 (__CENTRE), \
432 (float)(__ANGLE), \
433 1.0f, \
434 (__MSK_COLOUR), \
435 (__OPACITY))
436
437
438#define arm_2d_cccn888_tile_rotation_with_opacity_prepare( \
439 __SRC_TILE_ADDR, \
440 __CENTRE, \
441 __ANGLE, \
442 __MSK_COLOUR, \
443 __OPACITY) \
444 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare(\
445 NULL, \
446 (__SRC_TILE_ADDR), \
447 (__CENTRE), \
448 (float)(__ANGLE), \
449 1.0f, \
450 (__MSK_COLOUR), \
451 (__OPACITY))
452
453
454#define arm_2d_gray8_tile_rotation_only_with_opacity_prepare( \
455 __SRC_TILE_ADDR, \
456 __CENTRE, \
457 __ANGLE, \
458 __OPACITY) \
459 arm_2dp_gray8_tile_transform_only_with_opacity_prepare( \
460 NULL, \
461 (__SRC_TILE_ADDR), \
462 (__CENTRE), \
463 (float)(__ANGLE), \
464 1.0f, \
465 (__OPACITY))
466
467#define arm_2d_rgb565_tile_rotation_only_with_opacity_prepare( \
468 __SRC_TILE_ADDR, \
469 __CENTRE, \
470 __ANGLE, \
471 __OPACITY) \
472 arm_2dp_rgb565_tile_transform_only_with_opacity_prepare( \
473 NULL, \
474 (__SRC_TILE_ADDR), \
475 (__CENTRE), \
476 (float)(__ANGLE), \
477 1.0f, \
478 (__OPACITY))
479
480#define arm_2d_cccn888_tile_rotation_only_with_opacity_prepare( \
481 __SRC_TILE_ADDR, \
482 __CENTRE, \
483 __ANGLE, \
484 __OPACITY) \
485 arm_2dp_cccn888_tile_transform_only_with_opacity_prepare( \
486 NULL, \
487 (__SRC_TILE_ADDR), \
488 (__CENTRE), \
489 (float)(__ANGLE), \
490 1.0f, \
491 (__OPACITY))
492
493
494#define arm_2d_gray8_tile_rotation_with_src_mask_prepare( \
495 __SRC_TILE_ADDR, \
496 __SRC_MASK_ADDR, \
497 __CENTRE, \
498 __ANGLE) \
499 arm_2dp_gray8_tile_transform_with_src_mask_prepare( NULL, \
500 (__SRC_TILE_ADDR), \
501 (__SRC_MASK_ADDR), \
502 (__CENTRE), \
503 (float)(__ANGLE), \
504 1.0f)
505
506#define arm_2d_rgb565_tile_rotation_with_src_mask_prepare( \
507 __SRC_TILE_ADDR, \
508 __SRC_MASK_ADDR, \
509 __CENTRE, \
510 __ANGLE) \
511 arm_2dp_rgb565_tile_transform_with_src_mask_prepare( NULL, \
512 (__SRC_TILE_ADDR), \
513 (__SRC_MASK_ADDR), \
514 (__CENTRE), \
515 (float)(__ANGLE), \
516 1.0f)
517
518#define arm_2d_cccn888_tile_rotation_with_src_mask_prepare( \
519 __SRC_TILE_ADDR, \
520 __SRC_MASK_ADDR, \
521 __CENTRE, \
522 __ANGLE) \
523 arm_2dp_cccn888_tile_transform_with_src_mask_prepare( NULL, \
524 (__SRC_TILE_ADDR), \
525 (__SRC_MASK_ADDR), \
526 (__CENTRE), \
527 (float)(__ANGLE), \
528 1.0f)
529
530#define arm_2d_gray8_tile_rotation_with_src_mask_and_opacity_prepare( \
531 __SRC_TILE_ADDR, \
532 __SRC_MASK_ADDR, \
533 __CENTRE, \
534 __ANGLE, \
535 __OPACITY) \
536 arm_2dp_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
537 NULL, \
538 (__SRC_TILE_ADDR), \
539 (__SRC_MASK_ADDR), \
540 (__CENTRE), \
541 (float)(__ANGLE), \
542 1.0f, \
543 (__OPACITY))
544
545#define arm_2d_rgb565_tile_rotation_with_src_mask_and_opacity_prepare( \
546 __SRC_TILE_ADDR, \
547 __SRC_MASK_ADDR, \
548 __CENTRE, \
549 __ANGLE, \
550 __OPACITY) \
551 arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
552 NULL, \
553 (__SRC_TILE_ADDR), \
554 (__SRC_MASK_ADDR), \
555 (__CENTRE), \
556 (float)(__ANGLE), \
557 1.0f, \
558 (__OPACITY))
559
560#define arm_2d_cccn888_tile_rotation_with_src_mask_and_opacity_prepare( \
561 __SRC_TILE_ADDR, \
562 __SRC_MASK_ADDR, \
563 __CENTRE, \
564 __ANGLE, \
565 __OPACITY) \
566 arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
567 NULL, \
568 (__SRC_TILE_ADDR), \
569 (__SRC_MASK_ADDR), \
570 (__CENTRE), \
571 (float)(__ANGLE), \
572 1.0f, \
573 (__OPACITY))
574
575#define arm_2d_tile_rotate( __DES_TILE_ADDR, \
576 __DES_REGION_ADDR, \
577 __DES_CENTRE_ADDR) \
578 arm_2dp_tile_transform(NULL, \
579 (__DES_TILE_ADDR), \
580 (__DES_REGION_ADDR), \
581 (__DES_CENTRE_ADDR))
582
583/* following macro APIs rely on the boolean variable bIsNewFrame.
584 * Please make sure you have define it with the correct name and the
585 * corresponding value. If you don't use the PFB interfaces for neight
586 * the low level rendering nor the high level GUI drawing, please find
587 * such variable with the value "true".
588 */
589
590#define arm_2dp_gray8_tile_rotation_with_colour_keying( __CB_ADDR, \
591 __SRC_TILE_ADDR, \
592 __DES_TILE_ADDR, \
593 __DES_REGION_ADDR, \
594 __CENTRE, \
595 __ANGLE, \
596 __MSK_COLOUR, \
597 ...) \
598 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
599 arm_2dp_gray8_tile_transform_with_colour_keying_prepare( \
600 (__CB_ADDR), \
601 (__SRC_TILE_ADDR), \
602 (__CENTRE), \
603 (__ANGLE), \
604 1.0f, \
605 (__MSK_COLOUR)); \
606 }; \
607 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
608 (__DES_TILE_ADDR), \
609 (__DES_REGION_ADDR), \
610 (NULL,##__VA_ARGS__)); \
611 })
612
613#define arm_2dp_rgb565_tile_rotation_with_colour_keying(__CB_ADDR, \
614 __SRC_TILE_ADDR, \
615 __DES_TILE_ADDR, \
616 __DES_REGION_ADDR, \
617 __CENTRE, \
618 __ANGLE, \
619 __MSK_COLOUR, \
620 ...) \
621 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
622 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare( \
623 (__CB_ADDR), \
624 (__SRC_TILE_ADDR), \
625 (__CENTRE), \
626 (__ANGLE), \
627 1.0f, \
628 (__MSK_COLOUR)); \
629 }; \
630 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
631 (__DES_TILE_ADDR), \
632 (__DES_REGION_ADDR), \
633 (NULL,##__VA_ARGS__)); \
634 })
635
636
637#define arm_2dp_cccn888_tile_rotation_with_colour_keying(__CB_ADDR, \
638 __SRC_TILE_ADDR, \
639 __DES_TILE_ADDR, \
640 __DES_REGION_ADDR, \
641 __CENTRE, \
642 __ANGLE, \
643 __MSK_COLOUR, \
644 ...) \
645 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
646 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare( \
647 (__CB_ADDR), \
648 (__SRC_TILE_ADDR), \
649 (__CENTRE), \
650 (__ANGLE), \
651 1.0f, \
652 (__MSK_COLOUR)); \
653 }; \
654 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
655 (__DES_TILE_ADDR), \
656 (__DES_REGION_ADDR), \
657 (NULL,##__VA_ARGS__)); \
658 })
659
660#define arm_2dp_gray8_tile_rotation_only( __CB_ADDR, \
661 __SRC_TILE_ADDR, \
662 __DES_TILE_ADDR, \
663 __DES_REGION_ADDR, \
664 __CENTRE, \
665 __ANGLE, \
666 ...) \
667 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
668 arm_2dp_gray8_tile_transform_only_prepare( \
669 (__CB_ADDR), \
670 (__SRC_TILE_ADDR), \
671 (__CENTRE), \
672 (__ANGLE), \
673 1.0f); \
674 }; \
675 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
676 (__DES_TILE_ADDR), \
677 (__DES_REGION_ADDR), \
678 (NULL,##__VA_ARGS__)); \
679 })
680
681#define arm_2dp_rgb565_tile_rotation_only( __CB_ADDR, \
682 __SRC_TILE_ADDR, \
683 __DES_TILE_ADDR, \
684 __DES_REGION_ADDR, \
685 __CENTRE, \
686 __ANGLE, \
687 ...) \
688 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
689 arm_2dp_rgb565_tile_transform_only_prepare( \
690 (__CB_ADDR), \
691 (__SRC_TILE_ADDR), \
692 (__CENTRE), \
693 (__ANGLE), \
694 1.0f); \
695 }; \
696 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
697 (__DES_TILE_ADDR), \
698 (__DES_REGION_ADDR), \
699 (NULL,##__VA_ARGS__)); \
700 })
701
702
703#define arm_2dp_cccn888_tile_rotation_only( __CB_ADDR, \
704 __SRC_TILE_ADDR, \
705 __DES_TILE_ADDR, \
706 __DES_REGION_ADDR, \
707 __CENTRE, \
708 __ANGLE, \
709 ...) \
710 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
711 arm_2dp_cccn888_tile_transform_only_prepare( \
712 (__CB_ADDR), \
713 (__SRC_TILE_ADDR), \
714 (__CENTRE), \
715 (__ANGLE), \
716 1.0f); \
717 }; \
718 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
719 (__DES_TILE_ADDR), \
720 (__DES_REGION_ADDR), \
721 (NULL,##__VA_ARGS__)); \
722 })
723
724#define arm_2dp_gray8_tile_rotation_with_opacity( \
725 __CB_ADDR, \
726 __SRC_TILE_ADDR, \
727 __DES_TILE_ADDR, \
728 __DES_REGION_ADDR, \
729 __CENTRE, \
730 __ANGLE, \
731 __MSK_COLOUR, \
732 __OPACITY,...) \
733 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
734 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare(\
735 (__CB_ADDR), \
736 (__SRC_TILE_ADDR), \
737 (__CENTRE), \
738 (__ANGLE), \
739 1.0f, \
740 (__MSK_COLOUR), \
741 (__OPACITY)); \
742 }; \
743 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
744 (__DES_TILE_ADDR), \
745 (__DES_REGION_ADDR), \
746 (NULL,##__VA_ARGS__)); \
747 })
748
749
750#define arm_2dp_rgb565_tile_rotation_with_opacity( \
751 __CB_ADDR, \
752 __SRC_TILE_ADDR, \
753 __DES_TILE_ADDR, \
754 __DES_REGION_ADDR, \
755 __CENTRE, \
756 __ANGLE, \
757 __MSK_COLOUR, \
758 __OPACITY,...) \
759 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
760 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare(\
761 (__CB_ADDR), \
762 (__SRC_TILE_ADDR), \
763 (__CENTRE), \
764 (__ANGLE), \
765 1.0f, \
766 (__MSK_COLOUR), \
767 (__OPACITY)); \
768 }; \
769 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
770 (__DES_TILE_ADDR), \
771 (__DES_REGION_ADDR), \
772 (NULL,##__VA_ARGS__)); \
773 })
774
775#define arm_2dp_cccn888_tile_rotation_with_opacity( \
776 __CB_ADDR, \
777 __SRC_TILE_ADDR, \
778 __DES_TILE_ADDR, \
779 __DES_REGION_ADDR, \
780 __CENTRE, \
781 __ANGLE, \
782 __MSK_COLOUR, \
783 __OPACITY, ...) \
784 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
785 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare(\
786 (__CB_ADDR), \
787 (__SRC_TILE_ADDR), \
788 (__CENTRE), \
789 (__ANGLE), \
790 1.0f, \
791 (__MSK_COLOUR), \
792 (__OPACITY)); \
793 }; \
794 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
795 (__DES_TILE_ADDR), \
796 (__DES_REGION_ADDR), \
797 (NULL,##__VA_ARGS__)); \
798 })
799
800#define arm_2dp_gray8_tile_rotation_only_with_opacity( \
801 __CB_ADDR, \
802 __SRC_TILE_ADDR, \
803 __DES_TILE_ADDR, \
804 __DES_REGION_ADDR, \
805 __CENTRE, \
806 __ANGLE, \
807 __OPACITY, ...) \
808 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
809 arm_2dp_gray8_tile_transform_only_with_opacity_prepare( \
810 (__CB_ADDR), \
811 (__SRC_TILE_ADDR), \
812 (__CENTRE), \
813 (__ANGLE), \
814 1.0f, \
815 (__OPACITY)); \
816 }; \
817 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
818 (__DES_TILE_ADDR), \
819 (__DES_REGION_ADDR), \
820 (NULL,##__VA_ARGS__)); \
821 })
822
823#define arm_2dp_rgb565_tile_rotation_only_with_opacity( \
824 __CB_ADDR, \
825 __SRC_TILE_ADDR, \
826 __DES_TILE_ADDR, \
827 __DES_REGION_ADDR, \
828 __CENTRE, \
829 __ANGLE, \
830 __OPACITY, ...) \
831 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
832 arm_2dp_rgb565_tile_transform_only_with_opacity_prepare( \
833 (__CB_ADDR), \
834 (__SRC_TILE_ADDR), \
835 (__CENTRE), \
836 (__ANGLE), \
837 1.0f, \
838 (__OPACITY)); \
839 }; \
840 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
841 (__DES_TILE_ADDR), \
842 (__DES_REGION_ADDR), \
843 (NULL,##__VA_ARGS__)); \
844 })
845
846#define arm_2dp_cccn888_tile_rotation_only_with_opacity( \
847 __CB_ADDR, \
848 __SRC_TILE_ADDR, \
849 __DES_TILE_ADDR, \
850 __DES_REGION_ADDR, \
851 __CENTRE, \
852 __ANGLE, \
853 __OPACITY, ...) \
854 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
855 arm_2dp_cccn888_tile_transform_only_with_opacity_prepare( \
856 (__CB_ADDR), \
857 (__SRC_TILE_ADDR), \
858 (__CENTRE), \
859 (__ANGLE), \
860 1.0f, \
861 (__OPACITY)); \
862 }; \
863 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
864 (__DES_TILE_ADDR), \
865 (__DES_REGION_ADDR), \
866 (NULL,##__VA_ARGS__)); \
867 })
868
869#define arm_2dp_gray8_tile_rotation_with_src_mask( \
870 __CB_ADDR, \
871 __SRC_TILE_ADDR, \
872 __SRC_MASK_ADDR, \
873 __DES_TILE_ADDR, \
874 __DES_REGION_ADDR, \
875 __CENTRE, \
876 __ANGLE, \
877 ...) \
878 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
879 arm_2dp_gray8_tile_transform_with_src_mask_prepare( \
880 (__CB_ADDR), \
881 (__SRC_TILE_ADDR), \
882 (__SRC_MASK_ADDR), \
883 (__CENTRE), \
884 (__ANGLE), \
885 1.0f); \
886 }; \
887 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
888 (__DES_TILE_ADDR), \
889 (__DES_REGION_ADDR), \
890 (NULL,##__VA_ARGS__)); \
891 })
892
893#define arm_2dp_rgb565_tile_rotation_with_src_mask( \
894 __CB_ADDR, \
895 __SRC_TILE_ADDR, \
896 __SRC_MASK_ADDR, \
897 __DES_TILE_ADDR, \
898 __DES_REGION_ADDR, \
899 __CENTRE, \
900 __ANGLE, \
901 ...) \
902 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
903 arm_2dp_rgb565_tile_transform_with_src_mask_prepare( \
904 (__CB_ADDR), \
905 (__SRC_TILE_ADDR), \
906 (__SRC_MASK_ADDR), \
907 (__CENTRE), \
908 (__ANGLE), \
909 1.0f); \
910 }; \
911 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
912 (__DES_TILE_ADDR), \
913 (__DES_REGION_ADDR), \
914 (NULL,##__VA_ARGS__)); \
915 })
916
917#define arm_2dp_cccn888_tile_rotation_with_src_mask( \
918 __CB_ADDR, \
919 __SRC_TILE_ADDR, \
920 __SRC_MASK_ADDR, \
921 __DES_TILE_ADDR, \
922 __DES_REGION_ADDR, \
923 __CENTRE, \
924 __ANGLE, \
925 ...) \
926 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
927 arm_2dp_cccn888_tile_transform_with_src_mask_prepare( \
928 (__CB_ADDR), \
929 (__SRC_TILE_ADDR), \
930 (__SRC_MASK_ADDR), \
931 (__CENTRE), \
932 (__ANGLE), \
933 1.0f); \
934 }; \
935 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
936 (__DES_TILE_ADDR), \
937 (__DES_REGION_ADDR), \
938 (NULL,##__VA_ARGS__)); \
939 })
940
941#define arm_2dp_gray8_tile_rotation_with_src_mask_and_opacity( \
942 __CB_ADDR, \
943 __SRC_TILE_ADDR, \
944 __SRC_MASK_ADDR, \
945 __DES_TILE_ADDR, \
946 __DES_REGION_ADDR, \
947 __CENTRE, \
948 __ANGLE, \
949 __OPACITY, \
950 ...) \
951 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
952 arm_2dp_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
953 (__CB_ADDR), \
954 (__SRC_TILE_ADDR), \
955 (__SRC_MASK_ADDR), \
956 (__CENTRE), \
957 (__ANGLE), \
958 1.0f, \
959 (__OPACITY)); \
960 }; \
961 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
962 (__DES_TILE_ADDR), \
963 (__DES_REGION_ADDR), \
964 (NULL,##__VA_ARGS__)); \
965 })
966
967#define arm_2dp_rgb565_tile_rotation_with_src_mask_and_opacity( \
968 __CB_ADDR, \
969 __SRC_TILE_ADDR, \
970 __SRC_MASK_ADDR, \
971 __DES_TILE_ADDR, \
972 __DES_REGION_ADDR, \
973 __CENTRE, \
974 __ANGLE, \
975 __OPACITY, \
976 ...) \
977 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
978 arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
979 (__CB_ADDR), \
980 (__SRC_TILE_ADDR), \
981 (__SRC_MASK_ADDR), \
982 (__CENTRE), \
983 (__ANGLE), \
984 1.0f, \
985 (__OPACITY)); \
986 }; \
987 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
988 (__DES_TILE_ADDR), \
989 (__DES_REGION_ADDR), \
990 (NULL,##__VA_ARGS__)); \
991 })
992
993#define arm_2dp_cccn888_tile_rotation_with_src_mask_and_opacity( \
994 __CB_ADDR, \
995 __SRC_TILE_ADDR, \
996 __SRC_MASK_ADDR, \
997 __DES_TILE_ADDR, \
998 __DES_REGION_ADDR, \
999 __CENTRE, \
1000 __ANGLE, \
1001 __OPACITY, \
1002 ...) \
1003 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1004 arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
1005 (__CB_ADDR), \
1006 (__SRC_TILE_ADDR), \
1007 (__SRC_MASK_ADDR), \
1008 (__CENTRE), \
1009 (__ANGLE), \
1010 1.0f, \
1011 (__OPACITY)); \
1012 }; \
1013 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1014 (__DES_TILE_ADDR), \
1015 (__DES_REGION_ADDR), \
1016 (NULL,##__VA_ARGS__)); \
1017 })
1018
1019#define arm_2d_gray8_tile_rotation_with_colour_keying( \
1020 __SRC_TILE_ADDR, \
1021 __DES_TILE_ADDR, \
1022 __DES_REGION_ADDR, \
1023 __CENTRE, \
1024 __ANGLE, \
1025 __MSK_COLOUR, ...) \
1026 ({{ \
1027 arm_2dp_gray8_tile_transform_with_colour_keying_prepare( \
1028 (NULL), \
1029 (__SRC_TILE_ADDR), \
1030 (__CENTRE), \
1031 (__ANGLE), \
1032 1.0f, \
1033 (__MSK_COLOUR)); \
1034 }; \
1035 arm_2dp_tile_transform(NULL, \
1036 (__DES_TILE_ADDR), \
1037 (__DES_REGION_ADDR), \
1038 (NULL,##__VA_ARGS__)); \
1039 })
1040
1041
1042#define arm_2d_rgb565_tile_rotation_with_colour_keying( \
1043 __SRC_TILE_ADDR, \
1044 __DES_TILE_ADDR, \
1045 __DES_REGION_ADDR, \
1046 __CENTRE, \
1047 __ANGLE, \
1048 __MSK_COLOUR, ...) \
1049 ({{ \
1050 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare( \
1051 (NULL), \
1052 (__SRC_TILE_ADDR), \
1053 (__CENTRE), \
1054 (__ANGLE), \
1055 1.0f, \
1056 (__MSK_COLOUR)); \
1057 }; \
1058 arm_2dp_tile_transform(NULL, \
1059 (__DES_TILE_ADDR), \
1060 (__DES_REGION_ADDR), \
1061 (NULL,##__VA_ARGS__)); \
1062 })
1063
1064#define arm_2d_cccn888_tile_rotation_with_colour_keying( \
1065 __SRC_TILE_ADDR, \
1066 __DES_TILE_ADDR, \
1067 __DES_REGION_ADDR, \
1068 __CENTRE, \
1069 __ANGLE, \
1070 __MSK_COLOUR, ...) \
1071 ({{ \
1072 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare( \
1073 NULL, \
1074 (__SRC_TILE_ADDR), \
1075 (__CENTRE), \
1076 (__ANGLE), \
1077 1.0f, \
1078 (__MSK_COLOUR)); \
1079 }; \
1080 arm_2dp_tile_transform(NULL, \
1081 (__DES_TILE_ADDR), \
1082 (__DES_REGION_ADDR), \
1083 (NULL,##__VA_ARGS__)); \
1084 })
1085
1086
1087#define arm_2d_gray8_tile_rotation_only( \
1088 __SRC_TILE_ADDR, \
1089 __DES_TILE_ADDR, \
1090 __DES_REGION_ADDR, \
1091 __CENTRE, \
1092 __ANGLE, \
1093 ...) \
1094 ({{ \
1095 arm_2dp_gray8_tile_transform_only_prepare( \
1096 NULL, \
1097 (__SRC_TILE_ADDR), \
1098 (__CENTRE), \
1099 (__ANGLE), \
1100 1.0f); \
1101 }; \
1102 arm_2dp_tile_transform(NULL, \
1103 (__DES_TILE_ADDR), \
1104 (__DES_REGION_ADDR), \
1105 (NULL,##__VA_ARGS__)); \
1106 })
1107
1108
1109#define arm_2d_rgb565_tile_rotation_only( \
1110 __SRC_TILE_ADDR, \
1111 __DES_TILE_ADDR, \
1112 __DES_REGION_ADDR, \
1113 __CENTRE, \
1114 __ANGLE, \
1115 ...) \
1116 ({{ \
1117 arm_2dp_rgb565_tile_transform_only_prepare( \
1118 NULL, \
1119 (__SRC_TILE_ADDR), \
1120 (__CENTRE), \
1121 (__ANGLE), \
1122 1.0f); \
1123 }; \
1124 arm_2dp_tile_transform(NULL, \
1125 (__DES_TILE_ADDR), \
1126 (__DES_REGION_ADDR), \
1127 (NULL,##__VA_ARGS__)); \
1128 })
1129
1130
1131#define arm_2d_cccn888_tile_rotation_only( \
1132 __SRC_TILE_ADDR, \
1133 __DES_TILE_ADDR, \
1134 __DES_REGION_ADDR, \
1135 __CENTRE, \
1136 __ANGLE, \
1137 ...) \
1138 ({{ \
1139 arm_2dp_cccn888_tile_transform_only_prepare( \
1140 NULL, \
1141 (__SRC_TILE_ADDR), \
1142 (__CENTRE), \
1143 (__ANGLE), \
1144 1.0f); \
1145 }; \
1146 arm_2dp_tile_transform(NULL, \
1147 (__DES_TILE_ADDR), \
1148 (__DES_REGION_ADDR), \
1149 (NULL,##__VA_ARGS__)); \
1150 })
1151
1152#define arm_2d_gray8_tile_rotation_with_opacity( \
1153 __SRC_TILE_ADDR, \
1154 __DES_TILE_ADDR, \
1155 __DES_REGION_ADDR, \
1156 __CENTRE, \
1157 __ANGLE, \
1158 __MSK_COLOUR, \
1159 __OPACITY, ...) \
1160 ({{ \
1161 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare(\
1162 NULL, \
1163 (__SRC_TILE_ADDR), \
1164 (__CENTRE), \
1165 (__ANGLE), \
1166 1.0f, \
1167 (__MSK_COLOUR), \
1168 (__OPACITY)); \
1169 }; \
1170 arm_2dp_tile_transform(NULL, \
1171 (__DES_TILE_ADDR), \
1172 (__DES_REGION_ADDR), \
1173 (NULL,##__VA_ARGS__)); \
1174 })
1175
1176#define arm_2d_rgb565_tile_rotation_with_opacity( \
1177 __SRC_TILE_ADDR, \
1178 __DES_TILE_ADDR, \
1179 __DES_REGION_ADDR, \
1180 __CENTRE, \
1181 __ANGLE, \
1182 __MSK_COLOUR, \
1183 __OPACITY, ...) \
1184 ({{ \
1185 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare(\
1186 NULL, \
1187 (__SRC_TILE_ADDR), \
1188 (__CENTRE), \
1189 (__ANGLE), \
1190 1.0f, \
1191 (__MSK_COLOUR), \
1192 (__OPACITY)); \
1193 }; \
1194 arm_2dp_tile_transform(NULL, \
1195 (__DES_TILE_ADDR), \
1196 (__DES_REGION_ADDR), \
1197 (NULL,##__VA_ARGS__)); \
1198 })
1199
1200#define arm_2d_cccn888_tile_rotation_with_opacity( \
1201 __SRC_TILE_ADDR, \
1202 __DES_TILE_ADDR, \
1203 __DES_REGION_ADDR, \
1204 __CENTRE, \
1205 __ANGLE, \
1206 __MSK_COLOUR, \
1207 __OPACITY, ...) \
1208 ({{ \
1209 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare(\
1210 NULL, \
1211 (__SRC_TILE_ADDR), \
1212 (__CENTRE), \
1213 (__ANGLE), \
1214 1.0f, \
1215 (__MSK_COLOUR), \
1216 (__OPACITY)); \
1217 }; \
1218 arm_2dp_tile_transform(NULL, \
1219 (__DES_TILE_ADDR), \
1220 (__DES_REGION_ADDR), \
1221 (NULL,##__VA_ARGS__)); \
1222 })
1223
1224#define arm_2d_gray8_tile_rotation_only_with_opacity( \
1225 __SRC_TILE_ADDR, \
1226 __DES_TILE_ADDR, \
1227 __DES_REGION_ADDR, \
1228 __CENTRE, \
1229 __ANGLE, \
1230 __OPACITY, ...) \
1231 ({{ \
1232 arm_2dp_gray8_tile_transform_only_with_opacity_prepare( \
1233 NULL, \
1234 (__SRC_TILE_ADDR), \
1235 (__CENTRE), \
1236 (__ANGLE), \
1237 1.0f, \
1238 (__OPACITY)); \
1239 }; \
1240 arm_2dp_tile_transform(NULL, \
1241 (__DES_TILE_ADDR), \
1242 (__DES_REGION_ADDR), \
1243 (NULL,##__VA_ARGS__)); \
1244 })
1245
1246#define arm_2d_rgb565_tile_rotation_only_with_opacity( \
1247 __SRC_TILE_ADDR, \
1248 __DES_TILE_ADDR, \
1249 __DES_REGION_ADDR, \
1250 __CENTRE, \
1251 __ANGLE, \
1252 __OPACITY, ...) \
1253 ({{ \
1254 arm_2dp_rgb565_tile_transform_only_with_opacity_prepare( \
1255 NULL, \
1256 (__SRC_TILE_ADDR), \
1257 (__CENTRE), \
1258 (__ANGLE), \
1259 1.0f, \
1260 (__OPACITY)); \
1261 }; \
1262 arm_2dp_tile_transform(NULL, \
1263 (__DES_TILE_ADDR), \
1264 (__DES_REGION_ADDR), \
1265 (NULL,##__VA_ARGS__)); \
1266 })
1267
1268#define arm_2d_cccn888_tile_rotation_only_with_opacity( \
1269 __SRC_TILE_ADDR, \
1270 __DES_TILE_ADDR, \
1271 __DES_REGION_ADDR, \
1272 __CENTRE, \
1273 __ANGLE, \
1274 __OPACITY, ...) \
1275 ({{ \
1276 arm_2dp_cccn888_tile_transform_only_with_opacity_prepare( \
1277 NULL, \
1278 (__SRC_TILE_ADDR), \
1279 (__CENTRE), \
1280 (__ANGLE), \
1281 1.0f, \
1282 (__OPACITY)); \
1283 }; \
1284 arm_2dp_tile_transform(NULL, \
1285 (__DES_TILE_ADDR), \
1286 (__DES_REGION_ADDR), \
1287 (NULL,##__VA_ARGS__)); \
1288 })
1289
1290#define arm_2d_gray8_tile_rotation_with_src_mask( \
1291 __SRC_TILE_ADDR, \
1292 __SRC_MASK_ADDR, \
1293 __DES_TILE_ADDR, \
1294 __DES_REGION_ADDR, \
1295 __CENTRE, \
1296 __ANGLE, \
1297 ...) \
1298 ({{ \
1299 arm_2dp_gray8_tile_transform_with_src_mask_prepare( \
1300 (NULL), \
1301 (__SRC_TILE_ADDR), \
1302 (__SRC_MASK_ADDR), \
1303 (__CENTRE), \
1304 (__ANGLE), \
1305 1.0f); \
1306 }; \
1307 arm_2dp_tile_transform(NULL, \
1308 (__DES_TILE_ADDR), \
1309 (__DES_REGION_ADDR), \
1310 (NULL,##__VA_ARGS__)); \
1311 })
1312
1313#define arm_2d_rgb565_tile_rotation_with_src_mask( \
1314 __SRC_TILE_ADDR, \
1315 __SRC_MASK_ADDR, \
1316 __DES_TILE_ADDR, \
1317 __DES_REGION_ADDR, \
1318 __CENTRE, \
1319 __ANGLE, \
1320 ...) \
1321 ({{ \
1322 arm_2dp_rgb565_tile_transform_with_src_mask_prepare( \
1323 (NULL), \
1324 (__SRC_TILE_ADDR), \
1325 (__SRC_MASK_ADDR), \
1326 (__CENTRE), \
1327 (__ANGLE), \
1328 1.0f); \
1329 }; \
1330 arm_2dp_tile_transform(NULL, \
1331 (__DES_TILE_ADDR), \
1332 (__DES_REGION_ADDR), \
1333 (NULL,##__VA_ARGS__)); \
1334 })
1335
1336#define arm_2d_cccn888_tile_rotation_with_src_mask( \
1337 __SRC_TILE_ADDR, \
1338 __SRC_MASK_ADDR, \
1339 __DES_TILE_ADDR, \
1340 __DES_REGION_ADDR, \
1341 __CENTRE, \
1342 __ANGLE, \
1343 ...) \
1344 ({{ \
1345 arm_2dp_cccn888_tile_transform_with_src_mask_prepare( \
1346 (NULL), \
1347 (__SRC_TILE_ADDR), \
1348 (__SRC_MASK_ADDR), \
1349 (__CENTRE), \
1350 (__ANGLE), \
1351 1.0f); \
1352 }; \
1353 arm_2dp_tile_transform(NULL, \
1354 (__DES_TILE_ADDR), \
1355 (__DES_REGION_ADDR), \
1356 (NULL,##__VA_ARGS__)); \
1357 })
1358
1359#define arm_2d_gray8_tile_rotation_with_src_mask_and_opacity( \
1360 __SRC_TILE_ADDR, \
1361 __SRC_MASK_ADDR, \
1362 __DES_TILE_ADDR, \
1363 __DES_REGION_ADDR, \
1364 __CENTRE, \
1365 __ANGLE, \
1366 __OPACITY, \
1367 ...) \
1368 ({{ \
1369 arm_2dp_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
1370 (NULL), \
1371 (__SRC_TILE_ADDR), \
1372 (__SRC_MASK_ADDR), \
1373 (__CENTRE), \
1374 (__ANGLE), \
1375 1.0f, \
1376 (__OPACITY)); \
1377 }; \
1378 arm_2dp_tile_transform(NULL, \
1379 (__DES_TILE_ADDR), \
1380 (__DES_REGION_ADDR), \
1381 (NULL,##__VA_ARGS__)); \
1382 })
1383
1384#define arm_2d_rgb565_tile_rotation_with_src_mask_and_opacity( \
1385 __SRC_TILE_ADDR, \
1386 __SRC_MASK_ADDR, \
1387 __DES_TILE_ADDR, \
1388 __DES_REGION_ADDR, \
1389 __CENTRE, \
1390 __ANGLE, \
1391 __OPACITY, \
1392 ...) \
1393 ({{ \
1394 arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
1395 (NULL), \
1396 (__SRC_TILE_ADDR), \
1397 (__SRC_MASK_ADDR), \
1398 (__CENTRE), \
1399 (__ANGLE), \
1400 1.0f, \
1401 (__OPACITY)); \
1402 }; \
1403 arm_2dp_tile_transform(NULL, \
1404 (__DES_TILE_ADDR), \
1405 (__DES_REGION_ADDR), \
1406 (NULL,##__VA_ARGS__)); \
1407 })
1408
1409#define arm_2d_cccn888_tile_rotation_with_src_mask_and_opacity( \
1410 __SRC_TILE_ADDR, \
1411 __SRC_MASK_ADDR, \
1412 __DES_TILE_ADDR, \
1413 __DES_REGION_ADDR, \
1414 __CENTRE, \
1415 __ANGLE, \
1416 __OPACITY, \
1417 ...) \
1418 ({{ \
1419 arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
1420 (NULL), \
1421 (__SRC_TILE_ADDR), \
1422 (__SRC_MASK_ADDR), \
1423 (__CENTRE), \
1424 (__ANGLE), \
1425 1.0f, \
1426 (__OPACITY)); \
1427 }; \
1428 arm_2dp_tile_transform(NULL, \
1429 (__DES_TILE_ADDR), \
1430 (__DES_REGION_ADDR), \
1431 (NULL,##__VA_ARGS__)); \
1432 })
1433
1434/*----------------------------------------------------------------------------*
1435 * API wrappers: Transform *
1436 *----------------------------------------------------------------------------*/
1437
1438#define arm_2d_gray8_tile_transform_with_colour_keying_prepare( __SRC_TILE_ADDR,\
1439 __CENTRE, \
1440 __ANGLE, \
1441 __SCALE, \
1442 __MSK_COLOUR) \
1443 arm_2dp_gray8_tile_transform_with_colour_keying_prepare( NULL, \
1444 (__SRC_TILE_ADDR), \
1445 (__CENTRE), \
1446 (float)(__ANGLE), \
1447 (float)(__SCALE), \
1448 (__MSK_COLOUR))
1449
1450#define arm_2d_rgb565_tile_transform_with_colour_keying_prepare(__SRC_TILE_ADDR,\
1451 __CENTRE, \
1452 __ANGLE, \
1453 __SCALE, \
1454 __MSK_COLOUR) \
1455 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare( NULL, \
1456 (__SRC_TILE_ADDR), \
1457 (__CENTRE), \
1458 (float)(__ANGLE), \
1459 (float)(__SCALE), \
1460 (__MSK_COLOUR))
1461
1462
1463#define arm_2d_cccn888_tile_transform_with_colour_keying_prepare( \
1464 __SRC_TILE_ADDR,\
1465 __CENTRE, \
1466 __ANGLE, \
1467 __SCALE, \
1468 __MSK_COLOUR) \
1469 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare( NULL, \
1470 (__SRC_TILE_ADDR), \
1471 (__CENTRE), \
1472 (float)(__ANGLE), \
1473 (float)(__SCALE), \
1474 (__MSK_COLOUR))
1475
1476#define arm_2d_gray8_tile_transform_only_prepare( __SRC_TILE_ADDR, \
1477 __CENTRE, \
1478 __ANGLE, \
1479 __SCALE) \
1480 arm_2dp_gray8_tile_transform_only_prepare( NULL, \
1481 (__SRC_TILE_ADDR), \
1482 (__CENTRE), \
1483 (float)(__ANGLE), \
1484 (float)(__SCALE))
1485
1486#define arm_2d_rgb565_tile_transform_only_prepare( __SRC_TILE_ADDR, \
1487 __CENTRE, \
1488 __ANGLE, \
1489 __SCALE) \
1490 arm_2dp_rgb565_tile_transform_only_prepare( NULL, \
1491 (__SRC_TILE_ADDR), \
1492 (__CENTRE), \
1493 (float)(__ANGLE), \
1494 (float)(__SCALE))
1495
1496#define arm_2d_cccn888_tile_transform_only_prepare( __SRC_TILE_ADDR, \
1497 __CENTRE, \
1498 __ANGLE, \
1499 __SCALE) \
1500 arm_2dp_cccn888_tile_transform_only_prepare( NULL, \
1501 (__SRC_TILE_ADDR), \
1502 (__CENTRE), \
1503 (float)(__ANGLE), \
1504 (float)(__SCALE))
1505
1506#define arm_2d_gray8_tile_transform_with_opacity_prepare( \
1507 __SRC_TILE_ADDR, \
1508 __CENTRE, \
1509 __ANGLE, \
1510 __SCALE, \
1511 __MSK_COLOUR, \
1512 __OPACITY) \
1513 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare(\
1514 NULL, \
1515 (__SRC_TILE_ADDR), \
1516 (__CENTRE), \
1517 (float)(__ANGLE), \
1518 (float)(__SCALE), \
1519 (__MSK_COLOUR), \
1520 (__OPACITY))
1521
1522#define arm_2d_rgb565_tile_transform_with_opacity_prepare( \
1523 __SRC_TILE_ADDR, \
1524 __CENTRE, \
1525 __ANGLE, \
1526 __SCALE, \
1527 __MSK_COLOUR, \
1528 __OPACITY) \
1529 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare(\
1530 NULL, \
1531 (__SRC_TILE_ADDR), \
1532 (__CENTRE), \
1533 (float)(__ANGLE), \
1534 (float)(__SCALE), \
1535 (__MSK_COLOUR), \
1536 (__OPACITY))
1537
1538#define arm_2d_cccn888_tile_transform_with_opacity_prepare( \
1539 __SRC_TILE_ADDR, \
1540 __CENTRE, \
1541 __ANGLE, \
1542 __SCALE, \
1543 __MSK_COLOUR, \
1544 __OPACITY) \
1545 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare(\
1546 NULL, \
1547 (__SRC_TILE_ADDR), \
1548 (__CENTRE), \
1549 (float)(__ANGLE), \
1550 (float)(__SCALE), \
1551 (__MSK_COLOUR), \
1552 (__OPACITY))
1553
1554#define arm_2d_gray8_tile_transform_only_with_opacity_prepare( \
1555 __SRC_TILE_ADDR, \
1556 __CENTRE, \
1557 __ANGLE, \
1558 __SCALE, \
1559 __OPACITY) \
1560 arm_2dp_gray8_tile_transform_only_with_opacity_prepare( \
1561 NULL, \
1562 (__SRC_TILE_ADDR), \
1563 (__CENTRE), \
1564 (float)(__ANGLE), \
1565 (float)(__SCALE), \
1566 (__OPACITY))
1567
1568#define arm_2d_rgb565_tile_transform_only_with_opacity_prepare( \
1569 __SRC_TILE_ADDR, \
1570 __CENTRE, \
1571 __ANGLE, \
1572 __SCALE, \
1573 __OPACITY) \
1574 arm_2dp_rgb565_tile_transform_only_with_opacity_prepare( \
1575 NULL, \
1576 (__SRC_TILE_ADDR), \
1577 (__CENTRE), \
1578 (float)(__ANGLE), \
1579 (float)(__SCALE), \
1580 (__OPACITY))
1581
1582#define arm_2d_cccn888_tile_transform_only_with_opacity_prepare( \
1583 __SRC_TILE_ADDR, \
1584 __CENTRE, \
1585 __ANGLE, \
1586 __SCALE, \
1587 __OPACITY) \
1588 arm_2dp_cccn888_tile_transform_only_with_opacity_prepare( \
1589 NULL, \
1590 (__SRC_TILE_ADDR), \
1591 (__CENTRE), \
1592 (float)(__ANGLE), \
1593 (float)(__SCALE), \
1594 (__OPACITY))
1595
1596
1597#define arm_2d_gray8_tile_transform_with_src_mask_prepare( \
1598 __SRC_TILE_ADDR, \
1599 __SRC_MASK_ADDR, \
1600 __CENTRE, \
1601 __ANGLE, \
1602 __SCALE) \
1603 arm_2dp_gray8_tile_transform_with_src_mask_prepare( NULL, \
1604 (__SRC_TILE_ADDR), \
1605 (__SRC_MASK_ADDR), \
1606 (__CENTRE), \
1607 (float)(__ANGLE), \
1608 (float)(__SCALE))
1609
1610#define arm_2d_rgb565_tile_transform_with_src_mask_prepare( \
1611 __SRC_TILE_ADDR, \
1612 __SRC_MASK_ADDR, \
1613 __CENTRE, \
1614 __ANGLE, \
1615 __SCALE) \
1616 arm_2dp_rgb565_tile_transform_with_src_mask_prepare( NULL, \
1617 (__SRC_TILE_ADDR), \
1618 (__SRC_MASK_ADDR), \
1619 (__CENTRE), \
1620 (float)(__ANGLE), \
1621 (float)(__SCALE))
1622
1623#define arm_2d_cccn888_tile_transform_with_src_mask_prepare( \
1624 __SRC_TILE_ADDR, \
1625 __SRC_MASK_ADDR, \
1626 __CENTRE, \
1627 __ANGLE, \
1628 __SCALE) \
1629 arm_2dp_cccn888_tile_transform_with_src_mask_prepare( NULL, \
1630 (__SRC_TILE_ADDR), \
1631 (__SRC_MASK_ADDR), \
1632 (__CENTRE), \
1633 (float)(__ANGLE), \
1634 (float)(__SCALE))
1635
1636#define arm_2d_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
1637 __SRC_TILE_ADDR, \
1638 __SRC_MASK_ADDR, \
1639 __CENTRE, \
1640 __ANGLE, \
1641 __SCALE, \
1642 __OPACITY) \
1643 arm_2dp_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
1644 NULL, \
1645 (__SRC_TILE_ADDR), \
1646 (__SRC_MASK_ADDR), \
1647 (__CENTRE), \
1648 (float)(__ANGLE), \
1649 (float)(__SCALE), \
1650 (__OPACITY))
1651
1652#define arm_2d_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
1653 __SRC_TILE_ADDR, \
1654 __SRC_MASK_ADDR, \
1655 __CENTRE, \
1656 __ANGLE, \
1657 __SCALE, \
1658 __OPACITY) \
1659 arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
1660 NULL, \
1661 (__SRC_TILE_ADDR), \
1662 (__SRC_MASK_ADDR), \
1663 (__CENTRE), \
1664 (float)(__ANGLE), \
1665 (float)(__SCALE), \
1666 (__OPACITY))
1667
1668#define arm_2d_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
1669 __SRC_TILE_ADDR, \
1670 __SRC_MASK_ADDR, \
1671 __CENTRE, \
1672 __ANGLE, \
1673 __SCALE, \
1674 __OPACITY) \
1675 arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
1676 NULL, \
1677 (__SRC_TILE_ADDR), \
1678 (__SRC_MASK_ADDR), \
1679 (__CENTRE), \
1680 (float)(__ANGLE), \
1681 (float)(__SCALE), \
1682 (__OPACITY))
1683
1684#define arm_2d_tile_transform( __DES_TILE_ADDR, \
1685 __DES_REGION_ADDR, \
1686 __DES_CENTRE_ADDR) \
1687 arm_2dp_tile_transform(NULL, \
1688 (__DES_TILE_ADDR), \
1689 (__DES_REGION_ADDR), \
1690 (__DES_CENTRE_ADDR))
1691
1692
1693/* following macro APIs rely on the boolean variable bIsNewFrame.
1694 * Please make sure you have define it with the correct name and the
1695 * corresponding value. If you don't use the PFB interfaces for neither
1696 * the low level rendering nor the high level GUI drawing, please find
1697 * such variable with the value "true".
1698 */
1699
1700#define arm_2dp_gray8_tile_transform_with_colour_keying(__CB_ADDR, \
1701 __SRC_TILE_ADDR, \
1702 __DES_TILE_ADDR, \
1703 __DES_REGION_ADDR, \
1704 __CENTRE, \
1705 __ANGLE, \
1706 __SCALE, \
1707 __MSK_COLOUR, \
1708 ...) \
1709 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1710 arm_2dp_gray8_tile_transform_with_colour_keying_prepare( \
1711 (__CB_ADDR), \
1712 (__SRC_TILE_ADDR), \
1713 (__CENTRE), \
1714 (float)(__ANGLE), \
1715 (float)(__SCALE), \
1716 (__MSK_COLOUR)); \
1717 }; \
1718 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1719 (__DES_TILE_ADDR), \
1720 (__DES_REGION_ADDR), \
1721 (NULL,##__VA_ARGS__)); \
1722 })
1723
1724#define arm_2dp_rgb565_tile_transform_with_colour_keying( __CB_ADDR, \
1725 __SRC_TILE_ADDR, \
1726 __DES_TILE_ADDR, \
1727 __DES_REGION_ADDR, \
1728 __CENTRE, \
1729 __ANGLE, \
1730 __SCALE, \
1731 __MSK_COLOUR, \
1732 ...) \
1733 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1734 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare( \
1735 (__CB_ADDR), \
1736 (__SRC_TILE_ADDR), \
1737 (__CENTRE), \
1738 (float)(__ANGLE), \
1739 (float)(__SCALE), \
1740 (__MSK_COLOUR)); \
1741 }; \
1742 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1743 (__DES_TILE_ADDR), \
1744 (__DES_REGION_ADDR), \
1745 (NULL,##__VA_ARGS__)); \
1746 })
1747
1748
1749#define arm_2dp_cccn888_tile_transform_with_colour_keying( __CB_ADDR, \
1750 __SRC_TILE_ADDR, \
1751 __DES_TILE_ADDR, \
1752 __DES_REGION_ADDR, \
1753 __CENTRE, \
1754 __ANGLE, \
1755 __SCALE, \
1756 __MSK_COLOUR, \
1757 ...) \
1758 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1759 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare( \
1760 (__CB_ADDR), \
1761 (__SRC_TILE_ADDR), \
1762 (__CENTRE), \
1763 (float)(__ANGLE), \
1764 (float)(__SCALE), \
1765 (__MSK_COLOUR)); \
1766 }; \
1767 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1768 (__DES_TILE_ADDR), \
1769 (__DES_REGION_ADDR), \
1770 (NULL,##__VA_ARGS__)); \
1771 })
1772
1773#define arm_2dp_gray8_tile_transform_only( __CB_ADDR, \
1774 __SRC_TILE_ADDR, \
1775 __DES_TILE_ADDR, \
1776 __DES_REGION_ADDR, \
1777 __CENTRE, \
1778 __ANGLE, \
1779 __SCALE, \
1780 ...) \
1781 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1782 arm_2dp_gray8_tile_transform_only_prepare( \
1783 (__CB_ADDR), \
1784 (__SRC_TILE_ADDR), \
1785 (__CENTRE), \
1786 (float)(__ANGLE), \
1787 (float)(__SCALE)); \
1788 }; \
1789 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1790 (__DES_TILE_ADDR), \
1791 (__DES_REGION_ADDR), \
1792 (NULL,##__VA_ARGS__)); \
1793 })
1794
1795#define arm_2dp_rgb565_tile_transform_only( __CB_ADDR, \
1796 __SRC_TILE_ADDR, \
1797 __DES_TILE_ADDR, \
1798 __DES_REGION_ADDR, \
1799 __CENTRE, \
1800 __ANGLE, \
1801 __SCALE, \
1802 ...) \
1803 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1804 arm_2dp_rgb565_tile_transform_only_prepare( \
1805 (__CB_ADDR), \
1806 (__SRC_TILE_ADDR), \
1807 (__CENTRE), \
1808 (float)(__ANGLE), \
1809 (float)(__SCALE)); \
1810 }; \
1811 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1812 (__DES_TILE_ADDR), \
1813 (__DES_REGION_ADDR), \
1814 (NULL,##__VA_ARGS__)); \
1815 })
1816
1817#define arm_2dp_cccn888_tile_transform_only(__CB_ADDR, \
1818 __SRC_TILE_ADDR, \
1819 __DES_TILE_ADDR, \
1820 __DES_REGION_ADDR, \
1821 __CENTRE, \
1822 __ANGLE, \
1823 __SCALE, \
1824 ...) \
1825 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1826 arm_2dp_cccn888_tile_transform_only_prepare( \
1827 (__CB_ADDR), \
1828 (__SRC_TILE_ADDR), \
1829 (__CENTRE), \
1830 (float)(__ANGLE), \
1831 (float)(__SCALE)); \
1832 }; \
1833 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1834 (__DES_TILE_ADDR), \
1835 (__DES_REGION_ADDR), \
1836 (NULL,##__VA_ARGS__)); \
1837 })
1838
1839
1840#define arm_2d_gray8_tile_transform_only( __SRC_TILE_ADDR, \
1841 __DES_TILE_ADDR, \
1842 __DES_REGION_ADDR, \
1843 __CENTRE, \
1844 __ANGLE, \
1845 __SCALE, \
1846 ...) \
1847 ({ \
1848 arm_2dp_gray8_tile_transform_only_prepare( \
1849 NULL, \
1850 (__SRC_TILE_ADDR), \
1851 (__CENTRE), \
1852 (float)(__ANGLE), \
1853 (float)(__SCALE)); \
1854 arm_2dp_tile_transform(NULL, \
1855 (__DES_TILE_ADDR), \
1856 (__DES_REGION_ADDR), \
1857 (NULL,##__VA_ARGS__)); \
1858 })
1859
1860#define arm_2d_rgb565_tile_transform_only( __SRC_TILE_ADDR, \
1861 __DES_TILE_ADDR, \
1862 __DES_REGION_ADDR, \
1863 __CENTRE, \
1864 __ANGLE, \
1865 __SCALE, \
1866 ...) \
1867 ({ \
1868 arm_2dp_rgb565_tile_transform_only_prepare( \
1869 NULL, \
1870 (__SRC_TILE_ADDR), \
1871 (__CENTRE), \
1872 (float)(__ANGLE), \
1873 (float)(__SCALE)); \
1874 arm_2dp_tile_transform(NULL, \
1875 (__DES_TILE_ADDR), \
1876 (__DES_REGION_ADDR), \
1877 (NULL,##__VA_ARGS__)); \
1878 })
1879
1880#define arm_2d_cccn888_tile_transform_only( __SRC_TILE_ADDR, \
1881 __DES_TILE_ADDR, \
1882 __DES_REGION_ADDR, \
1883 __CENTRE, \
1884 __ANGLE, \
1885 __SCALE, \
1886 ...) \
1887 ({ \
1888 arm_2dp_cccn888_tile_transform_only_prepare( \
1889 NULL, \
1890 (__SRC_TILE_ADDR), \
1891 (__CENTRE), \
1892 (float)(__ANGLE), \
1893 (float)(__SCALE)); \
1894 arm_2dp_tile_transform(NULL, \
1895 (__DES_TILE_ADDR), \
1896 (__DES_REGION_ADDR), \
1897 (NULL,##__VA_ARGS__)); \
1898 })
1899
1900#define arm_2dp_gray8_tile_transform_with_opacity( \
1901 __CB_ADDR, \
1902 __SRC_TILE_ADDR, \
1903 __DES_TILE_ADDR, \
1904 __DES_REGION_ADDR, \
1905 __CENTRE, \
1906 __ANGLE, \
1907 __SCALE, \
1908 __MSK_COLOUR, \
1909 __OPACITY,...) \
1910 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1911 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare(\
1912 (__CB_ADDR), \
1913 (__SRC_TILE_ADDR), \
1914 (__CENTRE), \
1915 (float)(__ANGLE), \
1916 (float)(__SCALE), \
1917 (__MSK_COLOUR), \
1918 (__OPACITY)); \
1919 }; \
1920 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1921 (__DES_TILE_ADDR), \
1922 (__DES_REGION_ADDR), \
1923 (NULL,##__VA_ARGS__)); \
1924 })
1925
1926
1927#define arm_2dp_rgb565_tile_transform_with_opacity( \
1928 __CB_ADDR, \
1929 __SRC_TILE_ADDR, \
1930 __DES_TILE_ADDR, \
1931 __DES_REGION_ADDR, \
1932 __CENTRE, \
1933 __ANGLE, \
1934 __SCALE, \
1935 __MSK_COLOUR, \
1936 __OPACITY,...) \
1937 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1938 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare(\
1939 (__CB_ADDR), \
1940 (__SRC_TILE_ADDR), \
1941 (__CENTRE), \
1942 (float)(__ANGLE), \
1943 (float)(__SCALE), \
1944 (__MSK_COLOUR), \
1945 (__OPACITY)); \
1946 }; \
1947 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1948 (__DES_TILE_ADDR), \
1949 (__DES_REGION_ADDR), \
1950 (NULL,##__VA_ARGS__)); \
1951 })
1952
1953#define arm_2dp_cccn888_tile_transform_with_opacity( \
1954 __CB_ADDR, \
1955 __SRC_TILE_ADDR, \
1956 __DES_TILE_ADDR, \
1957 __DES_REGION_ADDR, \
1958 __CENTRE, \
1959 __ANGLE, \
1960 __SCALE, \
1961 __MSK_COLOUR, \
1962 __OPACITY, ...) \
1963 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1964 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare(\
1965 (__CB_ADDR), \
1966 (__SRC_TILE_ADDR), \
1967 (__CENTRE), \
1968 (float)(__ANGLE), \
1969 (float)(__SCALE), \
1970 (__MSK_COLOUR), \
1971 (__OPACITY)); \
1972 }; \
1973 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1974 (__DES_TILE_ADDR), \
1975 (__DES_REGION_ADDR), \
1976 (NULL,##__VA_ARGS__)); \
1977 })
1978
1979#define arm_2dp_gray8_tile_transform_only_with_opacity( \
1980 __CB_ADDR, \
1981 __SRC_TILE_ADDR, \
1982 __DES_TILE_ADDR, \
1983 __DES_REGION_ADDR, \
1984 __CENTRE, \
1985 __ANGLE, \
1986 __SCALE, \
1987 __OPACITY, ...) \
1988 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1989 arm_2dp_gray8_tile_transform_only_with_opacity_prepare( \
1990 (__CB_ADDR), \
1991 (__SRC_TILE_ADDR), \
1992 (__CENTRE), \
1993 (float)(__ANGLE), \
1994 (float)(__SCALE), \
1995 (__OPACITY)); \
1996 }; \
1997 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1998 (__DES_TILE_ADDR), \
1999 (__DES_REGION_ADDR), \
2000 (NULL,##__VA_ARGS__)); \
2001 })
2002
2003#define arm_2dp_rgb565_tile_transform_only_with_opacity( \
2004 __CB_ADDR, \
2005 __SRC_TILE_ADDR, \
2006 __DES_TILE_ADDR, \
2007 __DES_REGION_ADDR, \
2008 __CENTRE, \
2009 __ANGLE, \
2010 __SCALE, \
2011 __OPACITY, ...) \
2012 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2013 arm_2dp_rgb565_tile_transform_only_with_opacity_prepare( \
2014 (__CB_ADDR), \
2015 (__SRC_TILE_ADDR), \
2016 (__CENTRE), \
2017 (float)(__ANGLE), \
2018 (float)(__SCALE), \
2019 (__OPACITY)); \
2020 }; \
2021 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2022 (__DES_TILE_ADDR), \
2023 (__DES_REGION_ADDR), \
2024 (NULL,##__VA_ARGS__)); \
2025 })
2026
2027#define arm_2dp_cccn888_tile_transform_only_with_opacity( \
2028 __CB_ADDR, \
2029 __SRC_TILE_ADDR, \
2030 __DES_TILE_ADDR, \
2031 __DES_REGION_ADDR, \
2032 __CENTRE, \
2033 __ANGLE, \
2034 __SCALE, \
2035 __OPACITY, ...) \
2036 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2037 arm_2dp_cccn888_tile_transform_only_with_opacity_prepare( \
2038 (__CB_ADDR), \
2039 (__SRC_TILE_ADDR), \
2040 (__CENTRE), \
2041 (float)(__ANGLE), \
2042 (float)(__SCALE), \
2043 (__OPACITY)); \
2044 }; \
2045 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2046 (__DES_TILE_ADDR), \
2047 (__DES_REGION_ADDR), \
2048 (NULL,##__VA_ARGS__)); \
2049 })
2050
2051#define arm_2dp_gray8_fill_colour_with_mask_opacity_and_transform( \
2052 __CB_ADDR, \
2053 __MASK_ADDR, \
2054 __DES_TILE_ADDR, \
2055 __DES_REGION_ADDR, \
2056 __CENTRE, \
2057 __ANGLE, \
2058 __SCALE, \
2059 __MSK_COLOUR, \
2060 __OPACITY,...) \
2061 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2062 arm_2dp_gray8_fill_colour_with_mask_opacity_and_transform_prepare( \
2063 (__CB_ADDR), \
2064 (__MASK_ADDR), \
2065 (__CENTRE), \
2066 (float)(__ANGLE), \
2067 (float)(__SCALE), \
2068 (__MSK_COLOUR), \
2069 (__OPACITY)); \
2070 }; \
2071 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2072 (__DES_TILE_ADDR), \
2073 (__DES_REGION_ADDR), \
2074 (NULL,##__VA_ARGS__)); \
2075 })
2076
2077#define arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform( \
2078 __CB_ADDR, \
2079 __MASK_ADDR, \
2080 __DES_TILE_ADDR, \
2081 __DES_REGION_ADDR, \
2082 __CENTRE, \
2083 __ANGLE, \
2084 __SCALE, \
2085 __MSK_COLOUR, \
2086 __OPACITY,...) \
2087 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2088 arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare( \
2089 (__CB_ADDR), \
2090 (__MASK_ADDR), \
2091 (__CENTRE), \
2092 (float)(__ANGLE), \
2093 (float)(__SCALE), \
2094 (__MSK_COLOUR), \
2095 (__OPACITY)); \
2096 }; \
2097 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2098 (__DES_TILE_ADDR), \
2099 (__DES_REGION_ADDR), \
2100 (NULL,##__VA_ARGS__)); \
2101 })
2102
2103#define arm_2dp_rgb888_fill_colour_with_mask_opacity_and_transform( \
2104 __CB_ADDR, \
2105 __MASK_ADDR, \
2106 __DES_TILE_ADDR, \
2107 __DES_REGION_ADDR, \
2108 __CENTRE, \
2109 __ANGLE, \
2110 __SCALE, \
2111 __MSK_COLOUR, \
2112 __OPACITY,...) \
2113 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2114 arm_2dp_cccn888_fill_colour_with_mask_opacity_and_transform_prepare(\
2115 (__CB_ADDR), \
2116 (__MASK_ADDR), \
2117 (__CENTRE), \
2118 (float)(__ANGLE), \
2119 (float)(__SCALE), \
2120 (__MSK_COLOUR), \
2121 (__OPACITY)); \
2122 }; \
2123 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2124 (__DES_TILE_ADDR), \
2125 (__DES_REGION_ADDR), \
2126 (NULL,##__VA_ARGS__)); \
2127 })
2128
2129#define arm_2dp_cccn888_fill_colour_with_mask_opacity_and_transform( \
2130 __CB_ADDR, \
2131 __MASK_ADDR, \
2132 __DES_TILE_ADDR, \
2133 __DES_REGION_ADDR, \
2134 __CENTRE, \
2135 __ANGLE, \
2136 __SCALE, \
2137 __MSK_COLOUR, \
2138 __OPACITY,...) \
2139 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2140 arm_2dp_cccn888_fill_colour_with_mask_opacity_and_transform_prepare(\
2141 (__CB_ADDR), \
2142 (__MASK_ADDR), \
2143 (__CENTRE), \
2144 (float)(__ANGLE), \
2145 (float)(__SCALE), \
2146 (__MSK_COLOUR), \
2147 (__OPACITY)); \
2148 }; \
2149 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2150 (__DES_TILE_ADDR), \
2151 (__DES_REGION_ADDR), \
2152 (NULL,##__VA_ARGS__)); \
2153 })
2154
2155
2156
2157#define arm_2d_gray8_fill_colour_with_mask_opacity_and_transform( \
2158 __MASK_ADDR, \
2159 __DES_TILE_ADDR, \
2160 __DES_REGION_ADDR, \
2161 __CENTRE, \
2162 __ANGLE, \
2163 __SCALE, \
2164 __MSK_COLOUR, \
2165 __OPACITY,...) \
2166 ({arm_2dp_gray8_fill_colour_with_mask_opacity_and_transform_prepare( \
2167 (NULL), \
2168 (__MASK_ADDR), \
2169 (__CENTRE), \
2170 (float)(__ANGLE), \
2171 (float)(__SCALE), \
2172 (__MSK_COLOUR), \
2173 (__OPACITY)); \
2174 arm_2dp_tile_transform(NULL, \
2175 (__DES_TILE_ADDR), \
2176 (__DES_REGION_ADDR), \
2177 (NULL,##__VA_ARGS__));})
2178
2179#define arm_2d_rgb565_fill_colour_with_mask_opacity_and_transform( \
2180 __MASK_ADDR, \
2181 __DES_TILE_ADDR, \
2182 __DES_REGION_ADDR, \
2183 __CENTRE, \
2184 __ANGLE, \
2185 __SCALE, \
2186 __MSK_COLOUR, \
2187 __OPACITY,...) \
2188 ({arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare( \
2189 (NULL), \
2190 (__MASK_ADDR), \
2191 (__CENTRE), \
2192 (float)(__ANGLE), \
2193 (float)(__SCALE), \
2194 (__MSK_COLOUR), \
2195 (__OPACITY)); \
2196 arm_2dp_tile_transform(NULL, \
2197 (__DES_TILE_ADDR), \
2198 (__DES_REGION_ADDR), \
2199 (NULL,##__VA_ARGS__));})
2200
2201#define arm_2d_rgb888_fill_colour_with_mask_opacity_and_transform( \
2202 __MASK_ADDR, \
2203 __DES_TILE_ADDR, \
2204 __DES_REGION_ADDR, \
2205 __CENTRE, \
2206 __ANGLE, \
2207 __SCALE, \
2208 __MSK_COLOUR, \
2209 __OPACITY,...) \
2210 ({arm_2dp_cccn888_fill_colour_with_mask_opacity_and_transform_prepare(\
2211 (NULL), \
2212 (__MASK_ADDR), \
2213 (__CENTRE), \
2214 (float)(__ANGLE), \
2215 (float)(__SCALE), \
2216 (__MSK_COLOUR), \
2217 (__OPACITY)); \
2218 arm_2dp_tile_transform(NULL, \
2219 (__DES_TILE_ADDR), \
2220 (__DES_REGION_ADDR), \
2221 (NULL,##__VA_ARGS__));})
2222
2223#define arm_2d_cccn888_fill_colour_with_mask_opacity_and_transform( \
2224 __MASK_ADDR, \
2225 __DES_TILE_ADDR, \
2226 __DES_REGION_ADDR, \
2227 __CENTRE, \
2228 __ANGLE, \
2229 __SCALE, \
2230 __MSK_COLOUR, \
2231 __OPACITY,...) \
2232 ({arm_2dp_cccn888_fill_colour_with_mask_opacity_and_transform_prepare(\
2233 (NULL), \
2234 (__MASK_ADDR), \
2235 (__CENTRE), \
2236 (float)(__ANGLE), \
2237 (float)(__SCALE), \
2238 (__MSK_COLOUR), \
2239 (__OPACITY)); \
2240 arm_2dp_tile_transform(NULL, \
2241 (__DES_TILE_ADDR), \
2242 (__DES_REGION_ADDR), \
2243 (NULL,##__VA_ARGS__));})
2244
2245
2246#define arm_2dp_gray8_tile_transform_with_src_mask( \
2247 __CB_ADDR, \
2248 __SRC_TILE_ADDR, \
2249 __SRC_MASK_ADDR, \
2250 __DES_TILE_ADDR, \
2251 __DES_REGION_ADDR, \
2252 __CENTRE, \
2253 __ANGLE, \
2254 __SCALE, \
2255 ...) \
2256 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2257 arm_2dp_gray8_tile_transform_with_src_mask_prepare( \
2258 (__CB_ADDR), \
2259 (__SRC_TILE_ADDR), \
2260 (__SRC_MASK_ADDR), \
2261 (__CENTRE), \
2262 (float)(__ANGLE), \
2263 (float)(__SCALE)); \
2264 }; \
2265 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2266 (__DES_TILE_ADDR), \
2267 (__DES_REGION_ADDR), \
2268 (NULL,##__VA_ARGS__)); \
2269 })
2270
2271#define arm_2dp_rgb565_tile_transform_with_src_mask( \
2272 __CB_ADDR, \
2273 __SRC_TILE_ADDR, \
2274 __SRC_MASK_ADDR, \
2275 __DES_TILE_ADDR, \
2276 __DES_REGION_ADDR, \
2277 __CENTRE, \
2278 __ANGLE, \
2279 __SCALE, \
2280 ...) \
2281 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2282 arm_2dp_rgb565_tile_transform_with_src_mask_prepare( \
2283 (__CB_ADDR), \
2284 (__SRC_TILE_ADDR), \
2285 (__SRC_MASK_ADDR), \
2286 (__CENTRE), \
2287 (float)(__ANGLE), \
2288 (float)(__SCALE)); \
2289 }; \
2290 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2291 (__DES_TILE_ADDR), \
2292 (__DES_REGION_ADDR), \
2293 (NULL,##__VA_ARGS__)); \
2294 })
2295
2296
2297#define arm_2dp_cccn888_tile_transform_with_src_mask( \
2298 __CB_ADDR, \
2299 __SRC_TILE_ADDR, \
2300 __SRC_MASK_ADDR, \
2301 __DES_TILE_ADDR, \
2302 __DES_REGION_ADDR, \
2303 __CENTRE, \
2304 __ANGLE, \
2305 __SCALE, \
2306 ...) \
2307 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2308 arm_2dp_cccn888_tile_transform_with_src_mask_prepare( \
2309 (__CB_ADDR), \
2310 (__SRC_TILE_ADDR), \
2311 (__SRC_MASK_ADDR), \
2312 (__CENTRE), \
2313 (float)(__ANGLE), \
2314 (float)(__SCALE)); \
2315 }; \
2316 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2317 (__DES_TILE_ADDR), \
2318 (__DES_REGION_ADDR), \
2319 (NULL,##__VA_ARGS__)); \
2320 })
2321
2322#define arm_2dp_gray8_tile_transform_with_src_mask_and_opacity( \
2323 __CB_ADDR, \
2324 __SRC_TILE_ADDR, \
2325 __SRC_MASK_ADDR, \
2326 __DES_TILE_ADDR, \
2327 __DES_REGION_ADDR, \
2328 __CENTRE, \
2329 __ANGLE, \
2330 __SCALE, \
2331 __OPACITY, \
2332 ...) \
2333 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2334 arm_2dp_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
2335 (__CB_ADDR), \
2336 (__SRC_TILE_ADDR), \
2337 (__SRC_MASK_ADDR), \
2338 (__CENTRE), \
2339 (float)(__ANGLE), \
2340 (float)(__SCALE), \
2341 (__OPACITY)); \
2342 }; \
2343 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2344 (__DES_TILE_ADDR), \
2345 (__DES_REGION_ADDR), \
2346 (NULL,##__VA_ARGS__)); \
2347 })
2348
2349#define arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity( \
2350 __CB_ADDR, \
2351 __SRC_TILE_ADDR, \
2352 __SRC_MASK_ADDR, \
2353 __DES_TILE_ADDR, \
2354 __DES_REGION_ADDR, \
2355 __CENTRE, \
2356 __ANGLE, \
2357 __SCALE, \
2358 __OPACITY, \
2359 ...) \
2360 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2361 arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
2362 (__CB_ADDR), \
2363 (__SRC_TILE_ADDR), \
2364 (__SRC_MASK_ADDR), \
2365 (__CENTRE), \
2366 (float)(__ANGLE), \
2367 (float)(__SCALE), \
2368 (__OPACITY)); \
2369 }; \
2370 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2371 (__DES_TILE_ADDR), \
2372 (__DES_REGION_ADDR), \
2373 (NULL,##__VA_ARGS__)); \
2374 })
2375
2376
2377#define arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity( \
2378 __CB_ADDR, \
2379 __SRC_TILE_ADDR, \
2380 __SRC_MASK_ADDR, \
2381 __DES_TILE_ADDR, \
2382 __DES_REGION_ADDR, \
2383 __CENTRE, \
2384 __ANGLE, \
2385 __SCALE, \
2386 __OPACITY, \
2387 ...) \
2388 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2389 arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
2390 (__CB_ADDR), \
2391 (__SRC_TILE_ADDR), \
2392 (__SRC_MASK_ADDR), \
2393 (__CENTRE), \
2394 (float)(__ANGLE), \
2395 (float)(__SCALE), \
2396 (__OPACITY)); \
2397 }; \
2398 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2399 (__DES_TILE_ADDR), \
2400 (__DES_REGION_ADDR), \
2401 (NULL,##__VA_ARGS__)); \
2402 })
2403
2404#define arm_2d_gray8_tile_transform_with_colour_keying( \
2405 __SRC_TILE_ADDR, \
2406 __DES_TILE_ADDR, \
2407 __DES_REGION_ADDR, \
2408 __CENTRE, \
2409 __ANGLE, \
2410 __SCALE, \
2411 __MSK_COLOUR, ...) \
2412 ({{ \
2413 arm_2dp_gray8_tile_transform_with_colour_keying_prepare( \
2414 (NULL), \
2415 (__SRC_TILE_ADDR), \
2416 (__CENTRE), \
2417 (float)(__ANGLE), \
2418 (float)(__SCALE), \
2419 (__MSK_COLOUR)); \
2420 }; \
2421 arm_2dp_tile_transform(NULL, \
2422 (__DES_TILE_ADDR), \
2423 (__DES_REGION_ADDR), \
2424 (NULL,##__VA_ARGS__)); \
2425 })
2426
2427#define arm_2d_rgb565_tile_transform_with_colour_keying( \
2428 __SRC_TILE_ADDR, \
2429 __DES_TILE_ADDR, \
2430 __DES_REGION_ADDR, \
2431 __CENTRE, \
2432 __ANGLE, \
2433 __SCALE, \
2434 __MSK_COLOUR, ...) \
2435 ({{ \
2436 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare( \
2437 (NULL), \
2438 (__SRC_TILE_ADDR), \
2439 (__CENTRE), \
2440 (float)(__ANGLE), \
2441 (float)(__SCALE), \
2442 (__MSK_COLOUR)); \
2443 }; \
2444 arm_2dp_tile_transform(NULL, \
2445 (__DES_TILE_ADDR), \
2446 (__DES_REGION_ADDR), \
2447 (NULL,##__VA_ARGS__)); \
2448 })
2449
2450#define arm_2d_cccn888_tile_transform_with_colour_keying( \
2451 __SRC_TILE_ADDR, \
2452 __DES_TILE_ADDR, \
2453 __DES_REGION_ADDR, \
2454 __CENTRE, \
2455 __ANGLE, \
2456 __SCALE, \
2457 __MSK_COLOUR, ...) \
2458 ({{ \
2459 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare( \
2460 NULL, \
2461 (__SRC_TILE_ADDR), \
2462 (__CENTRE), \
2463 (float)(__ANGLE), \
2464 (float)(__SCALE), \
2465 (__MSK_COLOUR)); \
2466 }; \
2467 arm_2dp_tile_transform(NULL, \
2468 (__DES_TILE_ADDR), \
2469 (__DES_REGION_ADDR), \
2470 (NULL,##__VA_ARGS__)); \
2471 })
2472
2473#define arm_2d_gray8_tile_transform_with_opacity( \
2474 __SRC_TILE_ADDR, \
2475 __DES_TILE_ADDR, \
2476 __DES_REGION_ADDR, \
2477 __CENTRE, \
2478 __ANGLE, \
2479 __SCALE, \
2480 __MSK_COLOUR, \
2481 __OPACITY, ...) \
2482 ({{ \
2483 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare(\
2484 NULL, \
2485 (__SRC_TILE_ADDR), \
2486 (__CENTRE), \
2487 (float)(__ANGLE), \
2488 (float)(__SCALE), \
2489 (__MSK_COLOUR), \
2490 (__OPACITY)); \
2491 }; \
2492 arm_2dp_tile_transform(NULL, \
2493 (__DES_TILE_ADDR), \
2494 (__DES_REGION_ADDR), \
2495 (NULL,##__VA_ARGS__)); \
2496 })
2497
2498#define arm_2d_rgb565_tile_transform_with_opacity( \
2499 __SRC_TILE_ADDR, \
2500 __DES_TILE_ADDR, \
2501 __DES_REGION_ADDR, \
2502 __CENTRE, \
2503 __ANGLE, \
2504 __SCALE, \
2505 __MSK_COLOUR, \
2506 __OPACITY, ...) \
2507 ({{ \
2508 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare(\
2509 NULL, \
2510 (__SRC_TILE_ADDR), \
2511 (__CENTRE), \
2512 (float)(__ANGLE), \
2513 (float)(__SCALE), \
2514 (__MSK_COLOUR), \
2515 (__OPACITY)); \
2516 }; \
2517 arm_2dp_tile_transform(NULL, \
2518 (__DES_TILE_ADDR), \
2519 (__DES_REGION_ADDR), \
2520 (NULL,##__VA_ARGS__)); \
2521 })
2522
2523#define arm_2d_cccn888_tile_transform_with_opacity( \
2524 __SRC_TILE_ADDR, \
2525 __DES_TILE_ADDR, \
2526 __DES_REGION_ADDR, \
2527 __CENTRE, \
2528 __ANGLE, \
2529 __SCALE, \
2530 __MSK_COLOUR, \
2531 __OPACITY, ...) \
2532 ({{ \
2533 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare(\
2534 NULL, \
2535 (__SRC_TILE_ADDR), \
2536 (__CENTRE), \
2537 (float)(__ANGLE), \
2538 (float)(__SCALE), \
2539 (__MSK_COLOUR), \
2540 (__OPACITY)); \
2541 }; \
2542 arm_2dp_tile_transform(NULL, \
2543 (__DES_TILE_ADDR), \
2544 (__DES_REGION_ADDR), \
2545 (NULL,##__VA_ARGS__)); \
2546 })
2547
2548#define arm_2d_gray8_tile_transform_only_with_opacity( \
2549 __SRC_TILE_ADDR, \
2550 __DES_TILE_ADDR, \
2551 __DES_REGION_ADDR, \
2552 __CENTRE, \
2553 __ANGLE, \
2554 __SCALE, \
2555 __OPACITY, ...) \
2556 ({{ \
2557 arm_2dp_gray8_tile_transform_only_with_opacity_prepare( \
2558 NULL, \
2559 (__SRC_TILE_ADDR), \
2560 (__CENTRE), \
2561 (float)(__ANGLE), \
2562 (float)(__SCALE), \
2563 (__OPACITY)); \
2564 }; \
2565 arm_2dp_tile_transform(NULL, \
2566 (__DES_TILE_ADDR), \
2567 (__DES_REGION_ADDR), \
2568 (NULL,##__VA_ARGS__)); \
2569 })
2570
2571#define arm_2d_rgb565_tile_transform_only_with_opacity( \
2572 __SRC_TILE_ADDR, \
2573 __DES_TILE_ADDR, \
2574 __DES_REGION_ADDR, \
2575 __CENTRE, \
2576 __ANGLE, \
2577 __SCALE, \
2578 __OPACITY, ...) \
2579 ({{ \
2580 arm_2dp_rgb565_tile_transform_only_with_opacity_prepare( \
2581 NULL, \
2582 (__SRC_TILE_ADDR), \
2583 (__CENTRE), \
2584 (float)(__ANGLE), \
2585 (float)(__SCALE), \
2586 (__OPACITY)); \
2587 }; \
2588 arm_2dp_tile_transform(NULL, \
2589 (__DES_TILE_ADDR), \
2590 (__DES_REGION_ADDR), \
2591 (NULL,##__VA_ARGS__)); \
2592 })
2593
2594#define arm_2d_cccn888_tile_transform_only_with_opacity( \
2595 __SRC_TILE_ADDR, \
2596 __DES_TILE_ADDR, \
2597 __DES_REGION_ADDR, \
2598 __CENTRE, \
2599 __ANGLE, \
2600 __SCALE, \
2601 __OPACITY, ...) \
2602 ({{ \
2603 arm_2dp_cccn888_tile_transform_only_with_opacity_prepare( \
2604 NULL, \
2605 (__SRC_TILE_ADDR), \
2606 (__CENTRE), \
2607 (float)(__ANGLE), \
2608 (float)(__SCALE), \
2609 (__OPACITY)); \
2610 }; \
2611 arm_2dp_tile_transform(NULL, \
2612 (__DES_TILE_ADDR), \
2613 (__DES_REGION_ADDR), \
2614 (NULL,##__VA_ARGS__)); \
2615 })
2616
2617#define arm_2d_gray8_tile_transform_with_src_mask( \
2618 __SRC_TILE_ADDR, \
2619 __SRC_MASK_ADDR, \
2620 __DES_TILE_ADDR, \
2621 __DES_REGION_ADDR, \
2622 __CENTRE, \
2623 __ANGLE, \
2624 __SCALE, \
2625 ...) \
2626 ({{ \
2627 arm_2dp_gray8_tile_transform_with_src_mask_prepare( \
2628 (NULL), \
2629 (__SRC_TILE_ADDR), \
2630 (__SRC_MASK_ADDR), \
2631 (__CENTRE), \
2632 (float)(__ANGLE), \
2633 (float)(__SCALE)); \
2634 }; \
2635 arm_2dp_tile_transform(NULL, \
2636 (__DES_TILE_ADDR), \
2637 (__DES_REGION_ADDR), \
2638 (NULL,##__VA_ARGS__)); \
2639 })
2640
2641#define arm_2d_rgb565_tile_transform_with_src_mask( \
2642 __SRC_TILE_ADDR, \
2643 __SRC_MASK_ADDR, \
2644 __DES_TILE_ADDR, \
2645 __DES_REGION_ADDR, \
2646 __CENTRE, \
2647 __ANGLE, \
2648 __SCALE, \
2649 ...) \
2650 ({{ \
2651 arm_2dp_rgb565_tile_transform_with_src_mask_prepare( \
2652 (NULL), \
2653 (__SRC_TILE_ADDR), \
2654 (__SRC_MASK_ADDR), \
2655 (__CENTRE), \
2656 (float)(__ANGLE), \
2657 (float)(__SCALE)); \
2658 }; \
2659 arm_2dp_tile_transform(NULL, \
2660 (__DES_TILE_ADDR), \
2661 (__DES_REGION_ADDR), \
2662 (NULL,##__VA_ARGS__)); \
2663 })
2664
2665#define arm_2d_cccn888_tile_transform_with_src_mask( \
2666 __SRC_TILE_ADDR, \
2667 __SRC_MASK_ADDR, \
2668 __DES_TILE_ADDR, \
2669 __DES_REGION_ADDR, \
2670 __CENTRE, \
2671 __ANGLE, \
2672 __SCALE, \
2673 ...) \
2674 ({{ \
2675 arm_2dp_cccn888_tile_transform_with_src_mask_prepare( \
2676 (NULL), \
2677 (__SRC_TILE_ADDR), \
2678 (__SRC_MASK_ADDR), \
2679 (__CENTRE), \
2680 (float)(__ANGLE), \
2681 (float)(__SCALE)); \
2682 }; \
2683 arm_2dp_tile_transform(NULL, \
2684 (__DES_TILE_ADDR), \
2685 (__DES_REGION_ADDR), \
2686 (NULL,##__VA_ARGS__)); \
2687 })
2688
2689#define arm_2d_gray8_tile_transform_with_src_mask_and_opacity( \
2690 __SRC_TILE_ADDR, \
2691 __SRC_MASK_ADDR, \
2692 __DES_TILE_ADDR, \
2693 __DES_REGION_ADDR, \
2694 __CENTRE, \
2695 __ANGLE, \
2696 __SCALE, \
2697 __OPACITY, \
2698 ...) \
2699 ({{ \
2700 arm_2dp_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
2701 (NULL), \
2702 (__SRC_TILE_ADDR), \
2703 (__SRC_MASK_ADDR), \
2704 (__CENTRE), \
2705 (float)(__ANGLE), \
2706 (float)(__SCALE), \
2707 (__OPACITY)); \
2708 }; \
2709 arm_2dp_tile_transform(NULL, \
2710 (__DES_TILE_ADDR), \
2711 (__DES_REGION_ADDR), \
2712 (NULL,##__VA_ARGS__)); \
2713 })
2714
2715#define arm_2d_rgb565_tile_transform_with_src_mask_and_opacity( \
2716 __SRC_TILE_ADDR, \
2717 __SRC_MASK_ADDR, \
2718 __DES_TILE_ADDR, \
2719 __DES_REGION_ADDR, \
2720 __CENTRE, \
2721 __ANGLE, \
2722 __SCALE, \
2723 __OPACITY, \
2724 ...) \
2725 ({{ \
2726 arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
2727 (NULL), \
2728 (__SRC_TILE_ADDR), \
2729 (__SRC_MASK_ADDR), \
2730 (__CENTRE), \
2731 (float)(__ANGLE), \
2732 (float)(__SCALE), \
2733 (__OPACITY)); \
2734 }; \
2735 arm_2dp_tile_transform(NULL, \
2736 (__DES_TILE_ADDR), \
2737 (__DES_REGION_ADDR), \
2738 (NULL,##__VA_ARGS__)); \
2739 })
2740
2741#define arm_2d_cccn888_tile_transform_with_src_mask_and_opacity( \
2742 __SRC_TILE_ADDR, \
2743 __SRC_MASK_ADDR, \
2744 __DES_TILE_ADDR, \
2745 __DES_REGION_ADDR, \
2746 __CENTRE, \
2747 __ANGLE, \
2748 __SCALE, \
2749 __OPACITY, \
2750 ...) \
2751 ({{ \
2752 arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
2753 (NULL), \
2754 (__SRC_TILE_ADDR), \
2755 (__SRC_MASK_ADDR), \
2756 (__CENTRE), \
2757 (float)(__ANGLE), \
2758 (float)(__SCALE), \
2759 (__OPACITY)); \
2760 }; \
2761 arm_2dp_tile_transform(NULL, \
2762 (__DES_TILE_ADDR), \
2763 (__DES_REGION_ADDR), \
2764 (NULL,##__VA_ARGS__)); \
2765 })
2766
2767/*----------------------------------------------------------------------------*
2768 * API wrappers: Scaling *
2769 *----------------------------------------------------------------------------*/
2770
2771#define arm_2d_gray8_tile_scaling_with_colour_keying_prepare( __SRC_TILE_ADDR,\
2772 __CENTRE, \
2773 __SCALE, \
2774 __MSK_COLOUR) \
2775 arm_2dp_gray8_tile_transform_with_colour_keying_prepare( NULL, \
2776 (__SRC_TILE_ADDR), \
2777 (__CENTRE), \
2778 0.0f, \
2779 (float)(__SCALE), \
2780 (__MSK_COLOUR))
2781
2782#define arm_2d_rgb565_tile_scaling_with_colour_keying_prepare( __SRC_TILE_ADDR,\
2783 __CENTRE, \
2784 __SCALE, \
2785 __MSK_COLOUR) \
2786 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare( NULL, \
2787 (__SRC_TILE_ADDR), \
2788 (__CENTRE), \
2789 0.0f, \
2790 (float)(__SCALE), \
2791 (__MSK_COLOUR))
2792
2793#define arm_2d_cccn888_tile_scaling_with_colour_keying_prepare( __SRC_TILE_ADDR,\
2794 __CENTRE, \
2795 __SCALE, \
2796 __MSK_COLOUR) \
2797 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare( NULL, \
2798 (__SRC_TILE_ADDR), \
2799 (__CENTRE), \
2800 0.0f, \
2801 (float)(__SCALE), \
2802 (__MSK_COLOUR))
2803
2804#define arm_2d_gray8_tile_scaling_only_prepare( __SRC_TILE_ADDR, \
2805 __CENTRE, \
2806 __SCALE) \
2807 arm_2dp_gray8_tile_transform_only_prepare( NULL, \
2808 (__SRC_TILE_ADDR), \
2809 (__CENTRE), \
2810 0.0f, \
2811 (float)(__SCALE))
2812
2813#define arm_2d_rgb565_tile_scaling_only_prepare( __SRC_TILE_ADDR, \
2814 __CENTRE, \
2815 __SCALE) \
2816 arm_2dp_rgb565_tile_transform_only_prepare( NULL, \
2817 (__SRC_TILE_ADDR), \
2818 (__CENTRE), \
2819 0.0f, \
2820 (float)(__SCALE))
2821
2822#define arm_2d_cccn888_tile_scaling_only_prepare( __SRC_TILE_ADDR, \
2823 __CENTRE, \
2824 __SCALE) \
2825 arm_2dp_cccn888_tile_transform_only_prepare( NULL, \
2826 (__SRC_TILE_ADDR), \
2827 (__CENTRE), \
2828 0.0f, \
2829 (float)(__SCALE))
2830
2831#define arm_2d_gray8_tile_scaling_with_opacity_prepare( \
2832 __SRC_TILE_ADDR, \
2833 __CENTRE, \
2834 __SCALE, \
2835 __MSK_COLOUR, \
2836 __OPACITY) \
2837 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare(\
2838 NULL, \
2839 (__SRC_TILE_ADDR), \
2840 (__CENTRE), \
2841 0.0f, \
2842 (float)(__SCALE), \
2843 (__MSK_COLOUR), \
2844 (__OPACITY))
2845
2846#define arm_2d_rgb565_tile_scaling_with_opacity_prepare( \
2847 __SRC_TILE_ADDR, \
2848 __CENTRE, \
2849 __SCALE, \
2850 __MSK_COLOUR, \
2851 __OPACITY) \
2852 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare(\
2853 NULL, \
2854 (__SRC_TILE_ADDR), \
2855 (__CENTRE), \
2856 0.0f, \
2857 (float)(__SCALE), \
2858 (__MSK_COLOUR), \
2859 (__OPACITY))
2860
2861#define arm_2d_cccn888_tile_scaling_with_opacity_prepare( \
2862 __SRC_TILE_ADDR, \
2863 __CENTRE, \
2864 __SCALE, \
2865 __MSK_COLOUR, \
2866 __OPACITY) \
2867 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare(\
2868 NULL, \
2869 (__SRC_TILE_ADDR), \
2870 (__CENTRE), \
2871 0.0f, \
2872 (float)(__SCALE), \
2873 (__MSK_COLOUR), \
2874 (__OPACITY))
2875
2876#define arm_2d_gray8_tile_scaling_only_with_opacity_prepare( \
2877 __SRC_TILE_ADDR, \
2878 __CENTRE, \
2879 __SCALE, \
2880 __OPACITY) \
2881 arm_2dp_gray8_tile_transform_only_with_opacity_prepare( \
2882 NULL, \
2883 (__SRC_TILE_ADDR), \
2884 (__CENTRE), \
2885 0.0f, \
2886 (float)(__SCALE), \
2887 (__OPACITY))
2888
2889#define arm_2d_rgb565_tile_scaling_only_with_opacity_prepare( \
2890 __SRC_TILE_ADDR, \
2891 __CENTRE, \
2892 __SCALE, \
2893 __OPACITY) \
2894 arm_2dp_rgb565_tile_transform_only_with_opacity_prepare( \
2895 NULL, \
2896 (__SRC_TILE_ADDR), \
2897 (__CENTRE), \
2898 0.0f, \
2899 (float)(__SCALE), \
2900 (__OPACITY))
2901
2902#define arm_2d_cccn888_tile_scaling_only_with_opacity_prepare( \
2903 __SRC_TILE_ADDR, \
2904 __CENTRE, \
2905 __SCALE, \
2906 __OPACITY) \
2907 arm_2dp_cccn888_tile_transform_only_with_opacity_prepare( \
2908 NULL, \
2909 (__SRC_TILE_ADDR), \
2910 (__CENTRE), \
2911 0.0f, \
2912 (float)(__SCALE), \
2913 (__OPACITY))
2914
2915#define arm_2d_gray8_tile_scaling_with_src_mask_prepare( \
2916 __SRC_TILE_ADDR, \
2917 __SRC_MASK_ADDR, \
2918 __CENTRE, \
2919 __SCALE) \
2920 arm_2dp_gray8_tile_transform_with_src_mask_prepare( NULL, \
2921 (__SRC_TILE_ADDR), \
2922 (__SRC_MASK_ADDR), \
2923 (__CENTRE), \
2924 0.0f, \
2925 (float)(__SCALE))
2926
2927#define arm_2d_rgb565_tile_scaling_with_src_mask_prepare( \
2928 __SRC_TILE_ADDR, \
2929 __SRC_MASK_ADDR, \
2930 __CENTRE, \
2931 __SCALE) \
2932 arm_2dp_rgb565_tile_transform_with_src_mask_prepare( NULL, \
2933 (__SRC_TILE_ADDR), \
2934 (__SRC_MASK_ADDR), \
2935 (__CENTRE), \
2936 0.0f, \
2937 (float)(__SCALE))
2938
2939#define arm_2d_cccn888_tile_scaling_with_src_mask_prepare( \
2940 __SRC_TILE_ADDR, \
2941 __SRC_MASK_ADDR, \
2942 __CENTRE, \
2943 __SCALE) \
2944 arm_2dp_cccn888_tile_transform_with_src_mask_prepare( NULL, \
2945 (__SRC_TILE_ADDR), \
2946 (__SRC_MASK_ADDR), \
2947 (__CENTRE), \
2948 0.0f, \
2949 (float)(__SCALE))
2950
2951#define arm_2d_gray8_tile_scaling_with_src_mask_and_opacity_prepare( \
2952 __SRC_TILE_ADDR, \
2953 __SRC_MASK_ADDR, \
2954 __CENTRE, \
2955 __SCALE, \
2956 __OPACITY) \
2957 arm_2dp_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
2958 NULL, \
2959 (__SRC_TILE_ADDR), \
2960 (__SRC_MASK_ADDR), \
2961 (__CENTRE), \
2962 0.0f, \
2963 (float)(__SCALE), \
2964 (__OPACITY))
2965
2966#define arm_2d_rgb565_tile_scaling_with_src_mask_and_opacity_prepare( \
2967 __SRC_TILE_ADDR, \
2968 __SRC_MASK_ADDR, \
2969 __CENTRE, \
2970 __SCALE, \
2971 __OPACITY) \
2972 arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
2973 NULL, \
2974 (__SRC_TILE_ADDR), \
2975 (__SRC_MASK_ADDR), \
2976 (__CENTRE), \
2977 0.0f, \
2978 (float)(__SCALE), \
2979 (__OPACITY))
2980
2981#define arm_2d_cccn888_tile_scaling_with_src_mask_and_opacity_prepare( \
2982 __SRC_TILE_ADDR, \
2983 __SRC_MASK_ADDR, \
2984 __CENTRE, \
2985 __SCALE, \
2986 __OPACITY) \
2987 arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
2988 NULL, \
2989 (__SRC_TILE_ADDR), \
2990 (__SRC_MASK_ADDR), \
2991 (__CENTRE), \
2992 0.0f, \
2993 (float)(__SCALE), \
2994 (__OPACITY))
2995
2996#define arm_2d_tile_scale( __DES_TILE_ADDR, \
2997 __DES_REGION_ADDR, \
2998 __DES_CENTRE_ADDR) \
2999 arm_2dp_tile_transform(NULL, \
3000 (__DES_TILE_ADDR), \
3001 (__DES_REGION_ADDR), \
3002 (__DES_CENTRE_ADDR))
3003
3004
3005/* following macro APIs rely on the boolean variable bIsNewFrame.
3006 * Please make sure you have define it with the correct name and the
3007 * corresponding value. If you don't use the PFB interfaces for neither
3008 * the low level rendering nor the high level GUI drawing, please find
3009 * such variable with the value "true".
3010 */
3011
3012#define arm_2dp_gray8_tile_scaling_with_colour_keying( __CB_ADDR, \
3013 __SRC_TILE_ADDR, \
3014 __DES_TILE_ADDR, \
3015 __DES_REGION_ADDR, \
3016 __CENTRE, \
3017 __SCALE, \
3018 __MSK_COLOUR, \
3019 ...) \
3020 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3021 arm_2dp_gray8_tile_transform_with_colour_keying_prepare( \
3022 (__CB_ADDR), \
3023 (__SRC_TILE_ADDR), \
3024 (__CENTRE), \
3025 0.0f, \
3026 (__SCALE), \
3027 (__MSK_COLOUR)); \
3028 }; \
3029 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3030 (__DES_TILE_ADDR), \
3031 (__DES_REGION_ADDR), \
3032 (NULL,##__VA_ARGS__)); \
3033 })
3034
3035#define arm_2dp_rgb565_tile_scaling_with_colour_keying( __CB_ADDR, \
3036 __SRC_TILE_ADDR, \
3037 __DES_TILE_ADDR, \
3038 __DES_REGION_ADDR, \
3039 __CENTRE, \
3040 __SCALE, \
3041 __MSK_COLOUR, \
3042 ...) \
3043 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3044 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare( \
3045 (__CB_ADDR), \
3046 (__SRC_TILE_ADDR), \
3047 (__CENTRE), \
3048 0.0f, \
3049 (__SCALE), \
3050 (__MSK_COLOUR)); \
3051 }; \
3052 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3053 (__DES_TILE_ADDR), \
3054 (__DES_REGION_ADDR), \
3055 (NULL,##__VA_ARGS__)); \
3056 })
3057
3058#define arm_2dp_cccn888_tile_scaling_with_colour_keying( __CB_ADDR, \
3059 __SRC_TILE_ADDR, \
3060 __DES_TILE_ADDR, \
3061 __DES_REGION_ADDR, \
3062 __CENTRE, \
3063 __SCALE, \
3064 __MSK_COLOUR, \
3065 ...) \
3066 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3067 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare( \
3068 (__CB_ADDR), \
3069 (__SRC_TILE_ADDR), \
3070 (__CENTRE), \
3071 0.0f, \
3072 (__SCALE), \
3073 (__MSK_COLOUR)); \
3074 }; \
3075 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3076 (__DES_TILE_ADDR), \
3077 (__DES_REGION_ADDR), \
3078 (NULL,##__VA_ARGS__)); \
3079 })
3080
3081#define arm_2dp_gray8_tile_scaling_only( __CB_ADDR, \
3082 __SRC_TILE_ADDR, \
3083 __DES_TILE_ADDR, \
3084 __DES_REGION_ADDR, \
3085 __CENTRE, \
3086 __SCALE, \
3087 ...) \
3088 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3089 arm_2dp_gray8_tile_transform_only_prepare( \
3090 (__CB_ADDR), \
3091 (__SRC_TILE_ADDR), \
3092 (__CENTRE), \
3093 0.0f, \
3094 (__SCALE)); \
3095 }; \
3096 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3097 (__DES_TILE_ADDR), \
3098 (__DES_REGION_ADDR), \
3099 (NULL,##__VA_ARGS__)); \
3100 })
3101
3102#define arm_2dp_rgb565_tile_scaling_only( __CB_ADDR, \
3103 __SRC_TILE_ADDR, \
3104 __DES_TILE_ADDR, \
3105 __DES_REGION_ADDR, \
3106 __CENTRE, \
3107 __SCALE, \
3108 ...) \
3109 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3110 arm_2dp_rgb565_tile_transform_only_prepare( \
3111 (__CB_ADDR), \
3112 (__SRC_TILE_ADDR), \
3113 (__CENTRE), \
3114 0.0f, \
3115 (__SCALE)); \
3116 }; \
3117 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3118 (__DES_TILE_ADDR), \
3119 (__DES_REGION_ADDR), \
3120 (NULL,##__VA_ARGS__)); \
3121 })
3122
3123#define arm_2dp_cccn888_tile_scaling_only( __CB_ADDR, \
3124 __SRC_TILE_ADDR, \
3125 __DES_TILE_ADDR, \
3126 __DES_REGION_ADDR, \
3127 __CENTRE, \
3128 __SCALE, \
3129 ...) \
3130 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3131 arm_2dp_cccn888_tile_transform_only_prepare( \
3132 (__CB_ADDR), \
3133 (__SRC_TILE_ADDR), \
3134 (__CENTRE), \
3135 0.0f, \
3136 (__SCALE)); \
3137 }; \
3138 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3139 (__DES_TILE_ADDR), \
3140 (__DES_REGION_ADDR), \
3141 (NULL,##__VA_ARGS__)); \
3142 })
3143
3144#define arm_2dp_gray8_tile_scaling_with_opacity( \
3145 __CB_ADDR, \
3146 __SRC_TILE_ADDR, \
3147 __DES_TILE_ADDR, \
3148 __DES_REGION_ADDR, \
3149 __CENTRE, \
3150 __SCALE, \
3151 __MSK_COLOUR, \
3152 __OPACITY,...) \
3153 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3154 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare(\
3155 (__CB_ADDR), \
3156 (__SRC_TILE_ADDR), \
3157 (__CENTRE), \
3158 0.0f, \
3159 (__SCALE), \
3160 (__MSK_COLOUR), \
3161 (__OPACITY)); \
3162 }; \
3163 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3164 (__DES_TILE_ADDR), \
3165 (__DES_REGION_ADDR), \
3166 (NULL,##__VA_ARGS__)); \
3167 })
3168
3169#define arm_2dp_rgb565_tile_scaling_with_opacity( \
3170 __CB_ADDR, \
3171 __SRC_TILE_ADDR, \
3172 __DES_TILE_ADDR, \
3173 __DES_REGION_ADDR, \
3174 __CENTRE, \
3175 __SCALE, \
3176 __MSK_COLOUR, \
3177 __OPACITY,...) \
3178 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3179 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare(\
3180 (__CB_ADDR), \
3181 (__SRC_TILE_ADDR), \
3182 (__CENTRE), \
3183 0.0f, \
3184 (__SCALE), \
3185 (__MSK_COLOUR), \
3186 (__OPACITY)); \
3187 }; \
3188 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3189 (__DES_TILE_ADDR), \
3190 (__DES_REGION_ADDR), \
3191 (NULL,##__VA_ARGS__)); \
3192 })
3193
3194#define arm_2dp_cccn888_tile_scaling_with_opacity( \
3195 __CB_ADDR, \
3196 __SRC_TILE_ADDR, \
3197 __DES_TILE_ADDR, \
3198 __DES_REGION_ADDR, \
3199 __CENTRE, \
3200 __SCALE, \
3201 __MSK_COLOUR, \
3202 __OPACITY, ...) \
3203 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3204 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare(\
3205 (__CB_ADDR), \
3206 (__SRC_TILE_ADDR), \
3207 (__CENTRE), \
3208 0.0f, \
3209 (__SCALE), \
3210 (__MSK_COLOUR), \
3211 (__OPACITY)); \
3212 }; \
3213 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3214 (__DES_TILE_ADDR), \
3215 (__DES_REGION_ADDR), \
3216 (NULL,##__VA_ARGS__)); \
3217 })
3218
3219#define arm_2dp_gray8_tile_scaling_only_with_opacity( \
3220 __CB_ADDR, \
3221 __SRC_TILE_ADDR, \
3222 __DES_TILE_ADDR, \
3223 __DES_REGION_ADDR, \
3224 __CENTRE, \
3225 __SCALE, \
3226 __OPACITY, ...) \
3227 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3228 arm_2dp_gray8_tile_transform_only_with_opacity_prepare( \
3229 (__CB_ADDR), \
3230 (__SRC_TILE_ADDR), \
3231 (__CENTRE), \
3232 0.0f, \
3233 (__SCALE), \
3234 (__OPACITY)); \
3235 }; \
3236 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3237 (__DES_TILE_ADDR), \
3238 (__DES_REGION_ADDR), \
3239 (NULL,##__VA_ARGS__)); \
3240 })
3241
3242#define arm_2dp_rgb565_tile_scaling_only_with_opacity( \
3243 __CB_ADDR, \
3244 __SRC_TILE_ADDR, \
3245 __DES_TILE_ADDR, \
3246 __DES_REGION_ADDR, \
3247 __CENTRE, \
3248 __SCALE, \
3249 __OPACITY, ...) \
3250 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3251 arm_2dp_rgb565_tile_transform_only_with_opacity_prepare( \
3252 (__CB_ADDR), \
3253 (__SRC_TILE_ADDR), \
3254 (__CENTRE), \
3255 0.0f, \
3256 (__SCALE), \
3257 (__OPACITY)); \
3258 }; \
3259 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3260 (__DES_TILE_ADDR), \
3261 (__DES_REGION_ADDR), \
3262 (NULL,##__VA_ARGS__)); \
3263 })
3264
3265#define arm_2dp_cccn888_tile_scaling_only_with_opacity( \
3266 __CB_ADDR, \
3267 __SRC_TILE_ADDR, \
3268 __DES_TILE_ADDR, \
3269 __DES_REGION_ADDR, \
3270 __CENTRE, \
3271 __SCALE, \
3272 __OPACITY, ...) \
3273 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3274 arm_2dp_cccn888_tile_transform_only_with_opacity_prepare( \
3275 (__CB_ADDR), \
3276 (__SRC_TILE_ADDR), \
3277 (__CENTRE), \
3278 0.0f, \
3279 (__SCALE), \
3280 (__OPACITY)); \
3281 }; \
3282 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3283 (__DES_TILE_ADDR), \
3284 (__DES_REGION_ADDR), \
3285 (NULL,##__VA_ARGS__)); \
3286 })
3287
3288#define arm_2dp_gray8_tile_scaling_with_src_mask( \
3289 __CB_ADDR, \
3290 __SRC_TILE_ADDR, \
3291 __SRC_MASK_ADDR, \
3292 __DES_TILE_ADDR, \
3293 __DES_REGION_ADDR, \
3294 __CENTRE, \
3295 __SCALE, \
3296 ...) \
3297 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3298 arm_2dp_gray8_tile_transform_with_src_mask_prepare( \
3299 (__CB_ADDR), \
3300 (__SRC_TILE_ADDR), \
3301 (__SRC_MASK_ADDR), \
3302 (__CENTRE), \
3303 0.0f, \
3304 (__SCALE)); \
3305 }; \
3306 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3307 (__DES_TILE_ADDR), \
3308 (__DES_REGION_ADDR), \
3309 (NULL,##__VA_ARGS__)); \
3310 })
3311
3312#define arm_2dp_rgb565_tile_scaling_with_src_mask( \
3313 __CB_ADDR, \
3314 __SRC_TILE_ADDR, \
3315 __SRC_MASK_ADDR, \
3316 __DES_TILE_ADDR, \
3317 __DES_REGION_ADDR, \
3318 __CENTRE, \
3319 __SCALE, \
3320 ...) \
3321 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3322 arm_2dp_rgb565_tile_transform_with_src_mask_prepare( \
3323 (__CB_ADDR), \
3324 (__SRC_TILE_ADDR), \
3325 (__SRC_MASK_ADDR), \
3326 (__CENTRE), \
3327 0.0f, \
3328 (__SCALE)); \
3329 }; \
3330 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3331 (__DES_TILE_ADDR), \
3332 (__DES_REGION_ADDR), \
3333 (NULL,##__VA_ARGS__)); \
3334 })
3335
3336#define arm_2dp_cccn888_tile_scaling_with_src_mask( \
3337 __CB_ADDR, \
3338 __SRC_TILE_ADDR, \
3339 __SRC_MASK_ADDR, \
3340 __DES_TILE_ADDR, \
3341 __DES_REGION_ADDR, \
3342 __CENTRE, \
3343 __SCALE, \
3344 ...) \
3345 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3346 arm_2dp_cccn888_tile_transform_with_src_mask_prepare( \
3347 (__CB_ADDR), \
3348 (__SRC_TILE_ADDR), \
3349 (__SRC_MASK_ADDR), \
3350 (__CENTRE), \
3351 0.0f, \
3352 (__SCALE)); \
3353 }; \
3354 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3355 (__DES_TILE_ADDR), \
3356 (__DES_REGION_ADDR), \
3357 (NULL,##__VA_ARGS__)); \
3358 })
3359
3360#define arm_2dp_gray8_tile_scaling_with_src_mask_and_opacity( \
3361 __CB_ADDR, \
3362 __SRC_TILE_ADDR, \
3363 __SRC_MASK_ADDR, \
3364 __DES_TILE_ADDR, \
3365 __DES_REGION_ADDR, \
3366 __CENTRE, \
3367 __SCALE, \
3368 __OPACITY, \
3369 ...) \
3370 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3371 arm_2dp_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
3372 (__CB_ADDR), \
3373 (__SRC_TILE_ADDR), \
3374 (__SRC_MASK_ADDR), \
3375 (__CENTRE), \
3376 0.0f, \
3377 (__SCALE), \
3378 (__OPACITY)); \
3379 }; \
3380 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3381 (__DES_TILE_ADDR), \
3382 (__DES_REGION_ADDR), \
3383 (NULL,##__VA_ARGS__)); \
3384 })
3385
3386#define arm_2dp_rgb565_tile_scaling_with_src_mask_and_opacity( \
3387 __CB_ADDR, \
3388 __SRC_TILE_ADDR, \
3389 __SRC_MASK_ADDR, \
3390 __DES_TILE_ADDR, \
3391 __DES_REGION_ADDR, \
3392 __CENTRE, \
3393 __SCALE, \
3394 __OPACITY, \
3395 ...) \
3396 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3397 arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
3398 (__CB_ADDR), \
3399 (__SRC_TILE_ADDR), \
3400 (__SRC_MASK_ADDR), \
3401 (__CENTRE), \
3402 0.0f, \
3403 (__SCALE), \
3404 (__OPACITY)); \
3405 }; \
3406 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3407 (__DES_TILE_ADDR), \
3408 (__DES_REGION_ADDR), \
3409 (NULL,##__VA_ARGS__)); \
3410 })
3411
3412#define arm_2dp_cccn888_tile_scaling_with_src_mask_and_opacity( \
3413 __CB_ADDR, \
3414 __SRC_TILE_ADDR, \
3415 __SRC_MASK_ADDR, \
3416 __DES_TILE_ADDR, \
3417 __DES_REGION_ADDR, \
3418 __CENTRE, \
3419 __SCALE, \
3420 __OPACITY, \
3421 ...) \
3422 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3423 arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
3424 (__CB_ADDR), \
3425 (__SRC_TILE_ADDR), \
3426 (__SRC_MASK_ADDR), \
3427 (__CENTRE), \
3428 0.0f, \
3429 (__SCALE), \
3430 (__OPACITY)); \
3431 }; \
3432 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3433 (__DES_TILE_ADDR), \
3434 (__DES_REGION_ADDR), \
3435 (NULL,##__VA_ARGS__)); \
3436 })
3437
3438#define arm_2d_gray8_tile_scaling_with_colour_keying( \
3439 __SRC_TILE_ADDR, \
3440 __DES_TILE_ADDR, \
3441 __DES_REGION_ADDR, \
3442 __CENTRE, \
3443 __SCALE, \
3444 __MSK_COLOUR, ...) \
3445 ({{ \
3446 arm_2dp_gray8_tile_transform_with_colour_keying_prepare( \
3447 (NULL), \
3448 (__SRC_TILE_ADDR), \
3449 (__CENTRE), \
3450 0.0f, \
3451 (__SCALE), \
3452 (__MSK_COLOUR)); \
3453 }; \
3454 arm_2dp_tile_transform(NULL, \
3455 (__DES_TILE_ADDR), \
3456 (__DES_REGION_ADDR), \
3457 (NULL,##__VA_ARGS__)); \
3458 })
3459
3460#define arm_2d_rgb565_tile_scaling_with_colour_keying( \
3461 __SRC_TILE_ADDR, \
3462 __DES_TILE_ADDR, \
3463 __DES_REGION_ADDR, \
3464 __CENTRE, \
3465 __SCALE, \
3466 __MSK_COLOUR, ...) \
3467 ({{ \
3468 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare( \
3469 (NULL), \
3470 (__SRC_TILE_ADDR), \
3471 (__CENTRE), \
3472 0.0f, \
3473 (__SCALE), \
3474 (__MSK_COLOUR)); \
3475 }; \
3476 arm_2dp_tile_transform(NULL, \
3477 (__DES_TILE_ADDR), \
3478 (__DES_REGION_ADDR), \
3479 (NULL,##__VA_ARGS__)); \
3480 })
3481
3482#define arm_2d_cccn888_tile_scaling_with_colour_keying( \
3483 __SRC_TILE_ADDR, \
3484 __DES_TILE_ADDR, \
3485 __DES_REGION_ADDR, \
3486 __CENTRE, \
3487 __SCALE, \
3488 __MSK_COLOUR, ...) \
3489 ({{ \
3490 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare( \
3491 NULL, \
3492 (__SRC_TILE_ADDR), \
3493 (__CENTRE), \
3494 0.0f, \
3495 (__SCALE), \
3496 (__MSK_COLOUR)); \
3497 }; \
3498 arm_2dp_tile_transform(NULL, \
3499 (__DES_TILE_ADDR), \
3500 (__DES_REGION_ADDR), \
3501 (NULL,##__VA_ARGS__)); \
3502 })
3503
3504#define arm_2d_gray8_tile_scaling_only( \
3505 __SRC_TILE_ADDR, \
3506 __DES_TILE_ADDR, \
3507 __DES_REGION_ADDR, \
3508 __CENTRE, \
3509 __SCALE, \
3510 ...) \
3511 ({{ \
3512 arm_2dp_gray8_tile_transform_only_prepare( \
3513 NULL, \
3514 (__SRC_TILE_ADDR), \
3515 (__CENTRE), \
3516 0.0f, \
3517 (__SCALE)); \
3518 }; \
3519 arm_2dp_tile_transform(NULL, \
3520 (__DES_TILE_ADDR), \
3521 (__DES_REGION_ADDR), \
3522 (NULL,##__VA_ARGS__)); \
3523 })
3524
3525#define arm_2d_rgb565_tile_scaling_only( \
3526 __SRC_TILE_ADDR, \
3527 __DES_TILE_ADDR, \
3528 __DES_REGION_ADDR, \
3529 __CENTRE, \
3530 __SCALE, \
3531 ...) \
3532 ({{ \
3533 arm_2dp_rgb565_tile_transform_only_prepare( \
3534 NULL, \
3535 (__SRC_TILE_ADDR), \
3536 (__CENTRE), \
3537 0.0f, \
3538 (__SCALE)); \
3539 }; \
3540 arm_2dp_tile_transform(NULL, \
3541 (__DES_TILE_ADDR), \
3542 (__DES_REGION_ADDR), \
3543 (NULL,##__VA_ARGS__)); \
3544 })
3545
3546#define arm_2d_cccn888_tile_scaling_only( \
3547 __SRC_TILE_ADDR, \
3548 __DES_TILE_ADDR, \
3549 __DES_REGION_ADDR, \
3550 __CENTRE, \
3551 __SCALE, \
3552 ...) \
3553 ({{ \
3554 arm_2dp_cccn888_tile_transform_only_prepare( \
3555 NULL, \
3556 (__SRC_TILE_ADDR), \
3557 (__CENTRE), \
3558 0.0f, \
3559 (__SCALE)); \
3560 }; \
3561 arm_2dp_tile_transform(NULL, \
3562 (__DES_TILE_ADDR), \
3563 (__DES_REGION_ADDR), \
3564 (NULL,##__VA_ARGS__)); \
3565 })
3566
3567#define arm_2d_gray8_tile_scaling_with_opacity( \
3568 __SRC_TILE_ADDR, \
3569 __DES_TILE_ADDR, \
3570 __DES_REGION_ADDR, \
3571 __CENTRE, \
3572 __SCALE, \
3573 __MSK_COLOUR, \
3574 __OPACITY, ...) \
3575 ({{ \
3576 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare(\
3577 NULL, \
3578 (__SRC_TILE_ADDR), \
3579 (__CENTRE), \
3580 0.0f, \
3581 (__SCALE), \
3582 (__MSK_COLOUR), \
3583 (__OPACITY)); \
3584 }; \
3585 arm_2dp_tile_transform(NULL, \
3586 (__DES_TILE_ADDR), \
3587 (__DES_REGION_ADDR), \
3588 (NULL,##__VA_ARGS__)); \
3589 })
3590
3591
3592#define arm_2d_rgb565_tile_scaling_with_opacity( \
3593 __SRC_TILE_ADDR, \
3594 __DES_TILE_ADDR, \
3595 __DES_REGION_ADDR, \
3596 __CENTRE, \
3597 __SCALE, \
3598 __MSK_COLOUR, \
3599 __OPACITY, ...) \
3600 ({{ \
3601 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare(\
3602 NULL, \
3603 (__SRC_TILE_ADDR), \
3604 (__CENTRE), \
3605 0.0f, \
3606 (__SCALE), \
3607 (__MSK_COLOUR), \
3608 (__OPACITY)); \
3609 }; \
3610 arm_2dp_tile_transform(NULL, \
3611 (__DES_TILE_ADDR), \
3612 (__DES_REGION_ADDR), \
3613 (NULL,##__VA_ARGS__)); \
3614 })
3615
3616#define arm_2d_cccn888_tile_scaling_with_opacity( \
3617 __SRC_TILE_ADDR, \
3618 __DES_TILE_ADDR, \
3619 __DES_REGION_ADDR, \
3620 __CENTRE, \
3621 __SCALE, \
3622 __MSK_COLOUR, \
3623 __OPACITY, ...) \
3624 ({{ \
3625 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare(\
3626 NULL, \
3627 (__SRC_TILE_ADDR), \
3628 (__CENTRE), \
3629 0.0f, \
3630 (__SCALE), \
3631 (__MSK_COLOUR), \
3632 (__OPACITY)); \
3633 }; \
3634 arm_2dp_tile_transform(NULL, \
3635 (__DES_TILE_ADDR), \
3636 (__DES_REGION_ADDR), \
3637 (NULL,##__VA_ARGS__)); \
3638 })
3639
3640#define arm_2d_gray8_tile_scaling_only_with_opacity( \
3641 __SRC_TILE_ADDR, \
3642 __DES_TILE_ADDR, \
3643 __DES_REGION_ADDR, \
3644 __CENTRE, \
3645 __SCALE, \
3646 __OPACITY, ...) \
3647 ({{ \
3648 arm_2dp_gray8_tile_transform_only_with_opacity_prepare( \
3649 NULL, \
3650 (__SRC_TILE_ADDR), \
3651 (__CENTRE), \
3652 0.0f, \
3653 (__SCALE), \
3654 (__OPACITY)); \
3655 }; \
3656 arm_2dp_tile_transform(NULL, \
3657 (__DES_TILE_ADDR), \
3658 (__DES_REGION_ADDR), \
3659 (NULL,##__VA_ARGS__)); \
3660 })
3661
3662#define arm_2d_rgb565_tile_scaling_only_with_opacity( \
3663 __SRC_TILE_ADDR, \
3664 __DES_TILE_ADDR, \
3665 __DES_REGION_ADDR, \
3666 __CENTRE, \
3667 __SCALE, \
3668 __OPACITY, ...) \
3669 ({{ \
3670 arm_2dp_rgb565_tile_transform_only_with_opacity_prepare( \
3671 NULL, \
3672 (__SRC_TILE_ADDR), \
3673 (__CENTRE), \
3674 0.0f, \
3675 (__SCALE), \
3676 (__OPACITY)); \
3677 }; \
3678 arm_2dp_tile_transform(NULL, \
3679 (__DES_TILE_ADDR), \
3680 (__DES_REGION_ADDR), \
3681 (NULL,##__VA_ARGS__)); \
3682 })
3683
3684#define arm_2d_cccn888_tile_scaling_only_with_opacity( \
3685 __SRC_TILE_ADDR, \
3686 __DES_TILE_ADDR, \
3687 __DES_REGION_ADDR, \
3688 __CENTRE, \
3689 __SCALE, \
3690 __OPACITY, ...) \
3691 ({{ \
3692 arm_2dp_cccn888_tile_transform_only_with_opacity_prepare( \
3693 NULL, \
3694 (__SRC_TILE_ADDR), \
3695 (__CENTRE), \
3696 0.0f, \
3697 (__SCALE), \
3698 (__OPACITY)); \
3699 }; \
3700 arm_2dp_tile_transform(NULL, \
3701 (__DES_TILE_ADDR), \
3702 (__DES_REGION_ADDR), \
3703 (NULL,##__VA_ARGS__)); \
3704 })
3705
3706#define arm_2d_gray8_tile_scaling_with_src_mask( \
3707 __SRC_TILE_ADDR, \
3708 __SRC_MASK_ADDR, \
3709 __DES_TILE_ADDR, \
3710 __DES_REGION_ADDR, \
3711 __CENTRE, \
3712 __SCALE, \
3713 ...) \
3714 ({{ \
3715 arm_2dp_gray8_tile_transform_with_src_mask_prepare( \
3716 (NULL), \
3717 (__SRC_TILE_ADDR), \
3718 (__SRC_MASK_ADDR), \
3719 (__CENTRE), \
3720 0.0f, \
3721 (__SCALE)); \
3722 }; \
3723 arm_2dp_tile_transform(NULL, \
3724 (__DES_TILE_ADDR), \
3725 (__DES_REGION_ADDR), \
3726 (NULL,##__VA_ARGS__)); \
3727 })
3728
3729#define arm_2d_rgb565_tile_scaling_with_src_mask( \
3730 __SRC_TILE_ADDR, \
3731 __SRC_MASK_ADDR, \
3732 __DES_TILE_ADDR, \
3733 __DES_REGION_ADDR, \
3734 __CENTRE, \
3735 __SCALE, \
3736 ...) \
3737 ({{ \
3738 arm_2dp_rgb565_tile_transform_with_src_mask_prepare( \
3739 (NULL), \
3740 (__SRC_TILE_ADDR), \
3741 (__SRC_MASK_ADDR), \
3742 (__CENTRE), \
3743 0.0f, \
3744 (__SCALE)); \
3745 }; \
3746 arm_2dp_tile_transform(NULL, \
3747 (__DES_TILE_ADDR), \
3748 (__DES_REGION_ADDR), \
3749 (NULL,##__VA_ARGS__)); \
3750 })
3751
3752#define arm_2d_cccn888_tile_scaling_with_src_mask( \
3753 __SRC_TILE_ADDR, \
3754 __SRC_MASK_ADDR, \
3755 __DES_TILE_ADDR, \
3756 __DES_REGION_ADDR, \
3757 __CENTRE, \
3758 __SCALE, \
3759 ...) \
3760 ({{ \
3761 arm_2dp_cccn888_tile_transform_with_src_mask_prepare( \
3762 (NULL), \
3763 (__SRC_TILE_ADDR), \
3764 (__SRC_MASK_ADDR), \
3765 (__CENTRE), \
3766 0.0f, \
3767 (__SCALE)); \
3768 }; \
3769 arm_2dp_tile_transform(NULL, \
3770 (__DES_TILE_ADDR), \
3771 (__DES_REGION_ADDR), \
3772 (NULL,##__VA_ARGS__)); \
3773 })
3774
3775#define arm_2d_gray8_tile_scaling_with_src_mask_and_opacity( \
3776 __SRC_TILE_ADDR, \
3777 __SRC_MASK_ADDR, \
3778 __DES_TILE_ADDR, \
3779 __DES_REGION_ADDR, \
3780 __CENTRE, \
3781 __SCALE, \
3782 __OPACITY, \
3783 ...) \
3784 ({{ \
3785 arm_2dp_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
3786 (NULL), \
3787 (__SRC_TILE_ADDR), \
3788 (__SRC_MASK_ADDR), \
3789 (__CENTRE), \
3790 0.0f, \
3791 (__SCALE), \
3792 (__OPACITY)); \
3793 }; \
3794 arm_2dp_tile_transform(NULL, \
3795 (__DES_TILE_ADDR), \
3796 (__DES_REGION_ADDR), \
3797 (NULL,##__VA_ARGS__)); \
3798 })
3799
3800#define arm_2d_rgb565_tile_scaling_with_src_mask_and_opacity( \
3801 __SRC_TILE_ADDR, \
3802 __SRC_MASK_ADDR, \
3803 __DES_TILE_ADDR, \
3804 __DES_REGION_ADDR, \
3805 __CENTRE, \
3806 __SCALE, \
3807 __OPACITY, \
3808 ...) \
3809 ({{ \
3810 arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
3811 (NULL), \
3812 (__SRC_TILE_ADDR), \
3813 (__SRC_MASK_ADDR), \
3814 (__CENTRE), \
3815 0.0f, \
3816 (__SCALE), \
3817 (__OPACITY)); \
3818 }; \
3819 arm_2dp_tile_transform(NULL, \
3820 (__DES_TILE_ADDR), \
3821 (__DES_REGION_ADDR), \
3822 (NULL,##__VA_ARGS__)); \
3823 })
3824
3825#define arm_2d_cccn888_tile_scaling_with_src_mask_and_opacity( \
3826 __SRC_TILE_ADDR, \
3827 __SRC_MASK_ADDR, \
3828 __DES_TILE_ADDR, \
3829 __DES_REGION_ADDR, \
3830 __CENTRE, \
3831 __SCALE, \
3832 __OPACITY, \
3833 ...) \
3834 ({{ \
3835 arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
3836 (NULL), \
3837 (__SRC_TILE_ADDR), \
3838 (__SRC_MASK_ADDR), \
3839 (__CENTRE), \
3840 0.0f, \
3841 (__SCALE), \
3842 (__OPACITY)); \
3843 }; \
3844 arm_2dp_tile_transform(NULL, \
3845 (__DES_TILE_ADDR), \
3846 (__DES_REGION_ADDR), \
3847 (NULL,##__VA_ARGS__)); \
3848 })
3849
3850/*============================ TYPES =========================================*/
3851
3852/*!
3853 * \brief transform runtime context
3854 *
3855 */
3857 float fAngle; //!< target angle
3858 float fScale; //!< scaling factor
3860 union {
3861 uint8_t chColour; //!< the key colour in 8bit
3862 uint32_t wColour; //!< the key colour in 16bit
3863 uint16_t hwColour; //!< the key colour in 32bit
3864 } Mask;
3865
3866 /* private members used by runtime */
3867ARM_PRIVATE(
3868 arm_2d_location_t tDummySourceOffset;
3869 struct {
3870 arm_2d_region_t tRegion;
3871 arm_2d_tile_t tTile;
3872 } Target;
3874
3876
3877/*! \brief arm_2d_op_trans_t is inherit from arm_2d_op_src_orig_t
3878 */
3879typedef struct arm_2d_op_trans_t {
3881 struct {
3882 const arm_2d_tile_t *ptTile; //!< target tile
3883 const arm_2d_region_t *ptRegion; //!< target region
3884 } Target;
3885 struct {
3886 const arm_2d_tile_t *ptTile; //!< source tile
3887 }Source;
3888
3889 union {
3890 struct {
3891 uint32_t : 31;
3892 uint32_t bInvalid : 1;
3893 };
3894 uint32_t wMode;
3895 };
3896
3897 struct {
3898 const arm_2d_tile_t *ptTile; //!< the origin tile
3899 arm_2d_tile_t tDummySource; //!< the buffer for the source
3900 }Origin;
3901
3903
3905
3906
3907/*! \brief arm_2d_op_trans_opa_t is inherit from arm_2d_op_trans_t
3908 */
3911 struct {
3912 const arm_2d_tile_t *ptTile; //!< target tile
3913 const arm_2d_region_t *ptRegion; //!< target region
3914 } Target;
3915 struct {
3916 const arm_2d_tile_t *ptTile; //!< source tile
3917 }Source;
3918
3919 union {
3920 struct {
3921 uint32_t : 31;
3922 uint32_t bInvalid : 1;
3923 };
3924 uint32_t wMode;
3925 };
3926
3927 struct {
3928 const arm_2d_tile_t *ptTile; //!< the origin tile
3929 arm_2d_tile_t tDummySource; //!< the buffer for the source
3930 }Origin;
3931
3933 uint8_t chOpacity; //!< opacity
3934
3936
3937
3938/*! \brief arm_2d_op_fill_cl_msk_opa_trans_t is alias of arm_2d_op_trans_opa_t
3939 */
3941
3942
3943/*! \brief arm_2d_op_trans_msk_t is inherit from arm_2d_op_src_orig_msk_t
3944 */
3947 struct {
3948 const arm_2d_tile_t *ptTile; //!< target tile
3949 const arm_2d_region_t *ptRegion; //!< target region
3950 } Target;
3951 struct {
3952 const arm_2d_tile_t *ptTile; //!< source tile
3953 }Source;
3954
3955 union {
3956 struct {
3957 uint32_t : 31;
3958 uint32_t bInvalid : 1;
3959 };
3960 uint32_t wMode;
3961 };
3962
3963 struct {
3964 const arm_2d_tile_t *ptTile; //!< the origin tile
3965 arm_2d_tile_t tDummySource; //!< the buffer for the source
3966 }Origin;
3967 struct {
3968 const arm_2d_tile_t *ptOriginSide; //!< origin side mask
3969 const arm_2d_tile_t *ptTargetSide; //!< target side mask
3970 } Mask;
3971
3973
3975
3976
3977/*! \brief arm_2d_op_trans_msk_t is inherit from arm_2d_op_trans_msk_t
3978 */
3981 struct {
3982 const arm_2d_tile_t *ptTile; //!< target tile
3983 const arm_2d_region_t *ptRegion; //!< target region
3984 } Target;
3985 struct {
3986 const arm_2d_tile_t *ptTile; //!< source tile
3987 }Source;
3988
3989 union {
3990 struct {
3991 uint32_t : 31;
3992 uint32_t bInvalid : 1;
3993 };
3994 uint32_t wMode;
3995 };
3996
3997 struct {
3998 const arm_2d_tile_t *ptTile; //!< the origin tile
3999 arm_2d_tile_t tDummySource; //!< the buffer for the source
4000 }Origin;
4001 struct {
4002 const arm_2d_tile_t *ptOriginSide; //!< origin side mask
4003 const arm_2d_tile_t *ptTargetSide; //!< target side mask
4004 } Mask;
4005
4007 uint8_t chOpacity; //!< opacity
4008
4010
4011/*============================ GLOBAL VARIABLES ==============================*/
4012/*============================ PROTOTYPES ====================================*/
4013
4014/*!
4015 * \brief prepare for a transform with colour-keying in gray8
4016 * \param[in] ptOP the control block, NULL means using the default control block
4017 * \param[in] ptSource the source tile
4018 * \param[in] tCentre the pivot in the source tile
4019 * \param[in] fAngle the rotation angle
4020 * \param[in] fScale the scaling factor
4021 * \param[in] chFillColour the key colour
4022 * \return arm_2d_err_t the result of the preparing process
4023 */
4024extern
4025ARM_NONNULL(2)
4027 arm_2d_op_trans_t *ptOP,
4028 const arm_2d_tile_t *ptSource,
4029 const arm_2d_location_t tCentre,
4030 float fAngle,
4031 float fScale,
4032 uint_fast8_t chFillColour);
4033
4034/*!
4035 * \brief prepare for a transform with colour-keying in rgb565
4036 * \param[in] ptOP the control block, NULL means using the default control block
4037 * \param[in] ptSource the source tile
4038 * \param[in] tCentre the pivot in the source tile
4039 * \param[in] fAngle the rotation angle
4040 * \param[in] fScale the scaling factor
4041 * \param[in] hwFillColour the key colour
4042 * \return arm_2d_err_t the result of the preparing process
4043 */
4044extern
4045ARM_NONNULL(2)
4047 arm_2d_op_trans_t *ptOP,
4048 const arm_2d_tile_t *ptSource,
4049 const arm_2d_location_t tCentre,
4050 float fAngle,
4051 float fScale,
4052 uint_fast16_t hwFillColour);
4053
4054/*!
4055 * \brief prepare for a transform with colour-keying in cccn888
4056 * \param[in] ptOP the control block, NULL means using the default control block
4057 * \param[in] ptSource the source tile
4058 * \param[in] tCentre the pivot in the source tile
4059 * \param[in] fAngle the rotation angle
4060 * \param[in] fScale the scaling factor
4061 * \param[in] wFillColour the key colour
4062 * \return arm_2d_err_t the result of the preparing process
4063 */
4064extern
4065ARM_NONNULL(2)
4067 arm_2d_op_trans_t *ptOP,
4068 const arm_2d_tile_t *ptSource,
4069 const arm_2d_location_t tCentre,
4070 float fAngle,
4071 float fScale,
4072 uint32_t wFillColour);
4073
4074
4075/*!
4076 * \brief prepare for a transform in gray8
4077 * \param[in] ptOP the control block, NULL means using the default control block
4078 * \param[in] ptSource the source tile
4079 * \param[in] tCentre the pivot in the source tile
4080 * \param[in] fAngle the rotation angle
4081 * \param[in] fScale the scaling factor
4082 * \return arm_2d_err_t the result of the preparing process
4083 */
4084extern
4085ARM_NONNULL(2)
4087 arm_2d_op_trans_t *ptOP,
4088 const arm_2d_tile_t *ptSource,
4089 const arm_2d_location_t tCentre,
4090 float fAngle,
4091 float fScale);
4092
4093/*!
4094 * \brief prepare for a transform in rgb565
4095 * \param[in] ptOP the control block, NULL means using the default control block
4096 * \param[in] ptSource the source tile
4097 * \param[in] tCentre the pivot in the source tile
4098 * \param[in] fAngle the rotation angle
4099 * \param[in] fScale the scaling factor
4100 * \return arm_2d_err_t the result of the preparing process
4101 */
4102extern
4103ARM_NONNULL(2)
4105 arm_2d_op_trans_t *ptOP,
4106 const arm_2d_tile_t *ptSource,
4107 const arm_2d_location_t tCentre,
4108 float fAngle,
4109 float fScale);
4110
4111/*!
4112 * \brief prepare for a transform in cccn888
4113 * \param[in] ptOP the control block, NULL means using the default control block
4114 * \param[in] ptSource the source tile
4115 * \param[in] tCentre the pivot in the source tile
4116 * \param[in] fAngle the rotation angle
4117 * \param[in] fScale the scaling factor
4118 * \return arm_2d_err_t the result of the preparing process
4119 */
4120extern
4121ARM_NONNULL(2)
4123 arm_2d_op_trans_t *ptOP,
4124 const arm_2d_tile_t *ptSource,
4125 const arm_2d_location_t tCentre,
4126 float fAngle,
4127 float fScale);
4128
4129/*!
4130 * \brief prepare for a transform with colour keying and opacity in gray8
4131 * \param[in] ptOP the control block, NULL means using the default control block
4132 * \param[in] ptSource the source tile
4133 * \param[in] tCentre the pivot in the source tile
4134 * \param[in] fAngle the rotation angle
4135 * \param[in] fScale the scaling factor
4136 * \param[in] chFillColour the key colour
4137 * \param[in] chRatio the opacity
4138 * \return arm_2d_err_t the result of the preparing process
4139 */
4140extern
4141ARM_NONNULL(2)
4144 const arm_2d_tile_t *ptSource,
4145 const arm_2d_location_t tCentre,
4146 float fAngle,
4147 float fScale,
4148 uint_fast8_t chFillColour,
4149 uint_fast8_t chRatio);
4150
4151/*!
4152 * \brief prepare for a transform with colour keying and opacity in rgb565
4153 * \param[in] ptOP the control block, NULL means using the default control block
4154 * \param[in] ptSource the source tile
4155 * \param[in] tCentre the pivot in the source tile
4156 * \param[in] fAngle the rotation angle
4157 * \param[in] fScale the scaling factor
4158 * \param[in] hwFillColour the key colour
4159 * \param[in] chRatio the opacity
4160 * \return arm_2d_err_t the result of the preparing process
4161 */
4162extern
4163ARM_NONNULL(2)
4166 const arm_2d_tile_t *ptSource,
4167 const arm_2d_location_t tCentre,
4168 float fAngle,
4169 float fScale,
4170 uint_fast16_t hwFillColour,
4171 uint_fast8_t chRatio);
4172
4173/*!
4174 * \brief prepare for a transform with colour keyding and opacity in cccn888
4175 * \param[in] ptOP the control block, NULL means using the default control block
4176 * \param[in] ptSource the source tile
4177 * \param[in] tCentre the pivot in the source tile
4178 * \param[in] fAngle the rotation angle
4179 * \param[in] fScale the scaling factor
4180 * \param[in] wFillColour the key colour
4181 * \param[in] chRatio the opacity
4182 * \return arm_2d_err_t the result of the preparing process
4183 */
4184extern
4185ARM_NONNULL(2)
4188 const arm_2d_tile_t *ptSource,
4189 const arm_2d_location_t tCentre,
4190 float fAngle,
4191 float fScale,
4192 uint32_t wFillColour,
4193 uint_fast8_t chRatio);
4194
4195/*!
4196 * \brief prepare for a transform with opacity in gray8
4197 * \param[in] ptOP the control block, NULL means using the default control block
4198 * \param[in] ptSource the source tile
4199 * \param[in] tCentre the pivot in the source tile
4200 * \param[in] fAngle the rotation angle
4201 * \param[in] fScale the scaling factor
4202 * \param[in] chRatio the opacity
4203 * \return arm_2d_err_t the result of the preparing process
4204 */
4205extern
4206ARM_NONNULL(2)
4209 const arm_2d_tile_t *ptSource,
4210 const arm_2d_location_t tCentre,
4211 float fAngle,
4212 float fScale,
4213 uint_fast8_t chRatio);
4214
4215/*!
4216 * \brief prepare for a transform with opacity in rgb565
4217 * \param[in] ptOP the control block, NULL means using the default control block
4218 * \param[in] ptSource the source tile
4219 * \param[in] tCentre the pivot in the source tile
4220 * \param[in] fAngle the rotation angle
4221 * \param[in] fScale the scaling factor
4222 * \param[in] chRatio the opacity
4223 * \return arm_2d_err_t the result of the preparing process
4224 */
4225extern
4226ARM_NONNULL(2)
4229 const arm_2d_tile_t *ptSource,
4230 const arm_2d_location_t tCentre,
4231 float fAngle,
4232 float fScale,
4233 uint_fast8_t chRatio);
4234
4235/*!
4236 * \brief prepare for a transform with opacity in cccn888
4237 * \param[in] ptOP the control block, NULL means using the default control block
4238 * \param[in] ptSource the source tile
4239 * \param[in] tCentre the pivot in the source tile
4240 * \param[in] fAngle the rotation angle
4241 * \param[in] fScale the scaling factor
4242 * \param[in] chRatio the opacity
4243 * \return arm_2d_err_t the result of the preparing process
4244 */
4245extern
4246ARM_NONNULL(2)
4249 const arm_2d_tile_t *ptSource,
4250 const arm_2d_location_t tCentre,
4251 float fAngle,
4252 float fScale,
4253 uint_fast8_t chRatio);
4254
4255/*!
4256 * \brief prepare for a transform with a source mask in gray8
4257 * \param[in] ptOP the control block, NULL means using the default control block
4258 * \param[in] ptSource the source tile
4259 * \param[in] ptSourceMask the source mask
4260 * \param[in] tCentre the pivot in the source tile
4261 * \param[in] fAngle the rotation angle
4262 * \param[in] fScale the scaling factor
4263 * \return arm_2d_err_t the result of the preparing process
4264 */
4265extern
4266ARM_NONNULL(2,3)
4269 const arm_2d_tile_t *ptSource,
4270 const arm_2d_tile_t *ptSourceMask,
4271 const arm_2d_location_t tCentre,
4272 float fAngle,
4273 float fScale);
4274
4275/*!
4276 * \brief prepare for a transform with a source mask in rgb565
4277 * \param[in] ptOP the control block, NULL means using the default control block
4278 * \param[in] ptSource the source tile
4279 * \param[in] ptSourceMask the source mask
4280 * \param[in] tCentre the pivot in the source tile
4281 * \param[in] fAngle the rotation angle
4282 * \param[in] fScale the scaling factor
4283 * \return arm_2d_err_t the result of the preparing process
4284 */
4285extern
4286ARM_NONNULL(2,3)
4289 const arm_2d_tile_t *ptSource,
4290 const arm_2d_tile_t *ptSourceMask,
4291 const arm_2d_location_t tCentre,
4292 float fAngle,
4293 float fScale);
4294
4295/*!
4296 * \brief prepare for a transform with a source mask in cccn888
4297 * \param[in] ptOP the control block, NULL means using the default control block
4298 * \param[in] ptSource the source tile
4299 * \param[in] ptSourceMask the source mask
4300 * \param[in] tCentre the pivot in the source tile
4301 * \param[in] fAngle the rotation angle
4302 * \param[in] fScale the scaling factor
4303 * \return arm_2d_err_t the result of the preparing process
4304 */
4305extern
4306ARM_NONNULL(2,3)
4309 const arm_2d_tile_t *ptSource,
4310 const arm_2d_tile_t *ptSourceMask,
4311 const arm_2d_location_t tCentre,
4312 float fAngle,
4313 float fScale);
4314
4315/*!
4316 * \brief prepare for a transform with a source mask and opacity in gray8
4317 * \param[in] ptOP the control block, NULL means using the default control block
4318 * \param[in] ptSource the source tile
4319 * \param[in] ptSourceMask the source mask
4320 * \param[in] tCentre the pivot in the source tile
4321 * \param[in] fAngle the rotation angle
4322 * \param[in] fScale the scaling factor
4323 * \param[in] chOpacity the opacity
4324 * \return arm_2d_err_t the result of the preparing process
4325 */
4326extern
4327ARM_NONNULL(2,3)
4330 const arm_2d_tile_t *ptSource,
4331 const arm_2d_tile_t *ptSourceMask,
4332 const arm_2d_location_t tCentre,
4333 float fAngle,
4334 float fScale,
4335 uint_fast8_t chOpacity);
4336
4337/*!
4338 * \brief prepare for a transform with a source mask and opacity in rgb565
4339 * \param[in] ptOP the control block, NULL means using the default control block
4340 * \param[in] ptSource the source tile
4341 * \param[in] ptSourceMask the source mask
4342 * \param[in] tCentre the pivot in the source tile
4343 * \param[in] fAngle the rotation angle
4344 * \param[in] fScale the scaling factor
4345 * \param[in] chOpacity the opacity
4346 * \return arm_2d_err_t the result of the preparing process
4347 */
4348extern
4349ARM_NONNULL(2,3)
4352 const arm_2d_tile_t *ptSource,
4353 const arm_2d_tile_t *ptSourceMask,
4354 const arm_2d_location_t tCentre,
4355 float fAngle,
4356 float fScale,
4357 uint_fast8_t chOpacity);
4358
4359/*!
4360 * \brief prepare for a transform with a source mask and opacity in cccn888
4361 * \param[in] ptOP the control block, NULL means using the default control block
4362 * \param[in] ptSource the source tile
4363 * \param[in] ptSourceMask the source mask
4364 * \param[in] tCentre the pivot in the source tile
4365 * \param[in] fAngle the rotation angle
4366 * \param[in] fScale the scaling factor
4367 * \param[in] chOpacity the opacity
4368 * \return arm_2d_err_t the result of the preparing process
4369 */
4370extern
4371ARM_NONNULL(2,3)
4374 const arm_2d_tile_t *ptSource,
4375 const arm_2d_tile_t *ptSourceMask,
4376 const arm_2d_location_t tCentre,
4377 float fAngle,
4378 float fScale,
4379 uint_fast8_t chOpacity);
4380
4381
4382/*!
4383 * \brief prepare for a gray8 colour-filling with a mask, a given opacity and
4384 * transform
4385 * \param[in] ptOP the control block, NULL means using the default control block
4386 * \param[in] ptMask the target mask
4387 * \param[in] tCentre the pivot in the source tile
4388 * \param[in] fAngle the rotation angle
4389 * \param[in] fScale the scaling factor
4390 * \param[in] chFillColour the colour to fill
4391 * \param[in] chOpacity the opacity
4392 * \return arm_2d_err_t the result of the preparing process
4393 */
4394extern
4395ARM_NONNULL(2)
4398 const arm_2d_tile_t *ptMask,
4399 const arm_2d_location_t tCentre,
4400 float fAngle,
4401 float fScale,
4402 uint_fast8_t chFillColour,
4403 uint_fast8_t chOpacity);
4404
4405/*!
4406 * \brief prepare for a rgb565 colour-filling with a mask, a given opacity and
4407 * transform
4408 * \param[in] ptOP the control block, NULL means using the default control block
4409 * \param[in] ptMask the target mask
4410 * \param[in] tCentre the pivot in the source tile
4411 * \param[in] fAngle the rotation angle
4412 * \param[in] fScale the scaling factor
4413 * \param[in] hwFillColour the colour to fill
4414 * \param[in] chOpacity the opacity
4415 * \return arm_2d_err_t the result of the preparing process
4416 */
4417extern
4418ARM_NONNULL(2)
4421 const arm_2d_tile_t *ptMask,
4422 const arm_2d_location_t tCentre,
4423 float fAngle,
4424 float fScale,
4425 uint_fast16_t hwFillColour,
4426 uint_fast8_t chOpacity);
4427
4428/*!
4429 * \brief prepare for a cccn888 colour-filling with a mask, a given opacity and
4430 * transform
4431 * \param[in] ptOP the control block, NULL means using the default control block
4432 * \param[in] ptMask the target mask
4433 * \param[in] tCentre the pivot in the source tile
4434 * \param[in] fAngle the rotation angle
4435 * \param[in] fScale the scaling factor
4436 * \param[in] wFillColour the colour to fill
4437 * \param[in] chOpacity the opacity
4438 * \return arm_2d_err_t the result of the preparing process
4439 */
4440extern
4441ARM_NONNULL(2)
4444 const arm_2d_tile_t *ptMask,
4445 const arm_2d_location_t tCentre,
4446 float fAngle,
4447 float fScale,
4448 uint32_t wFillColour,
4449 uint_fast8_t chOpacity);
4450
4451/*!
4452 * \brief start a transform operation
4453 * \param[in] ptOP the control block, NULL means using the default control block
4454 * \param[in] ptTarget the target tile
4455 * \param[in] ptRegion the target region
4456 * \param[in] ptTargetCentre the pivot in the target region
4457 * \return arm_fsm_rt_t the operation result
4458 */
4459extern
4460ARM_NONNULL(2)
4462 const arm_2d_tile_t *ptTarget,
4463 const arm_2d_region_t *ptRegion,
4464 const arm_2d_location_t *ptTargetCentre);
4465
4466/*! @} */
4467
4468/*========================= POST INCLUDES ====================================*/
4469#include "__arm_2d_tile_2xssaa_transform.h"
4470
4471#if defined(__clang__)
4472# pragma clang diagnostic pop
4473#endif
4474
4475#ifdef __cplusplus
4476}
4477#endif
4478
4479#endif