Arm-2D  
2D Image Processing Library for Cortex-M Processors
arm_2d_transform.h
1/*
2 * Copyright (C) 2010-2022 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: 29 Nov 2023
25 * $Revision: V.1.0.8
26 *
27 * Target Processor: Cortex-M cores
28 * -------------------------------------------------------------------- */
29
30#ifndef __ARM_2D_ROTATION_H__
31#define __ARM_2D_ROTATION_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( __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( __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( __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_2dp_gray8_tile_transform_with_opacity( \
1841 __CB_ADDR, \
1842 __SRC_TILE_ADDR, \
1843 __DES_TILE_ADDR, \
1844 __DES_REGION_ADDR, \
1845 __CENTRE, \
1846 __ANGLE, \
1847 __SCALE, \
1848 __MSK_COLOUR, \
1849 __OPACITY,...) \
1850 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1851 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare(\
1852 (__CB_ADDR), \
1853 (__SRC_TILE_ADDR), \
1854 (__CENTRE), \
1855 (float)(__ANGLE), \
1856 (float)(__SCALE), \
1857 (__MSK_COLOUR), \
1858 (__OPACITY)); \
1859 }; \
1860 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1861 (__DES_TILE_ADDR), \
1862 (__DES_REGION_ADDR), \
1863 (NULL,##__VA_ARGS__)); \
1864 })
1865
1866
1867#define arm_2dp_rgb565_tile_transform_with_opacity( \
1868 __CB_ADDR, \
1869 __SRC_TILE_ADDR, \
1870 __DES_TILE_ADDR, \
1871 __DES_REGION_ADDR, \
1872 __CENTRE, \
1873 __ANGLE, \
1874 __SCALE, \
1875 __MSK_COLOUR, \
1876 __OPACITY,...) \
1877 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1878 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare(\
1879 (__CB_ADDR), \
1880 (__SRC_TILE_ADDR), \
1881 (__CENTRE), \
1882 (float)(__ANGLE), \
1883 (float)(__SCALE), \
1884 (__MSK_COLOUR), \
1885 (__OPACITY)); \
1886 }; \
1887 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1888 (__DES_TILE_ADDR), \
1889 (__DES_REGION_ADDR), \
1890 (NULL,##__VA_ARGS__)); \
1891 })
1892
1893#define arm_2dp_cccn888_tile_transform_with_opacity( \
1894 __CB_ADDR, \
1895 __SRC_TILE_ADDR, \
1896 __DES_TILE_ADDR, \
1897 __DES_REGION_ADDR, \
1898 __CENTRE, \
1899 __ANGLE, \
1900 __SCALE, \
1901 __MSK_COLOUR, \
1902 __OPACITY, ...) \
1903 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1904 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare(\
1905 (__CB_ADDR), \
1906 (__SRC_TILE_ADDR), \
1907 (__CENTRE), \
1908 (float)(__ANGLE), \
1909 (float)(__SCALE), \
1910 (__MSK_COLOUR), \
1911 (__OPACITY)); \
1912 }; \
1913 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1914 (__DES_TILE_ADDR), \
1915 (__DES_REGION_ADDR), \
1916 (NULL,##__VA_ARGS__)); \
1917 })
1918
1919#define arm_2dp_gray8_tile_transform_only_with_opacity( \
1920 __CB_ADDR, \
1921 __SRC_TILE_ADDR, \
1922 __DES_TILE_ADDR, \
1923 __DES_REGION_ADDR, \
1924 __CENTRE, \
1925 __ANGLE, \
1926 __SCALE, \
1927 __OPACITY, ...) \
1928 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1929 arm_2dp_gray8_tile_transform_only_with_opacity_prepare( \
1930 (__CB_ADDR), \
1931 (__SRC_TILE_ADDR), \
1932 (__CENTRE), \
1933 (float)(__ANGLE), \
1934 (float)(__SCALE), \
1935 (__OPACITY)); \
1936 }; \
1937 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1938 (__DES_TILE_ADDR), \
1939 (__DES_REGION_ADDR), \
1940 (NULL,##__VA_ARGS__)); \
1941 })
1942
1943#define arm_2dp_rgb565_tile_transform_only_with_opacity( \
1944 __CB_ADDR, \
1945 __SRC_TILE_ADDR, \
1946 __DES_TILE_ADDR, \
1947 __DES_REGION_ADDR, \
1948 __CENTRE, \
1949 __ANGLE, \
1950 __SCALE, \
1951 __OPACITY, ...) \
1952 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1953 arm_2dp_rgb565_tile_transform_only_with_opacity_prepare( \
1954 (__CB_ADDR), \
1955 (__SRC_TILE_ADDR), \
1956 (__CENTRE), \
1957 (float)(__ANGLE), \
1958 (float)(__SCALE), \
1959 (__OPACITY)); \
1960 }; \
1961 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1962 (__DES_TILE_ADDR), \
1963 (__DES_REGION_ADDR), \
1964 (NULL,##__VA_ARGS__)); \
1965 })
1966
1967#define arm_2dp_cccn888_tile_transform_only_with_opacity( \
1968 __CB_ADDR, \
1969 __SRC_TILE_ADDR, \
1970 __DES_TILE_ADDR, \
1971 __DES_REGION_ADDR, \
1972 __CENTRE, \
1973 __ANGLE, \
1974 __SCALE, \
1975 __OPACITY, ...) \
1976 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
1977 arm_2dp_cccn888_tile_transform_only_with_opacity_prepare( \
1978 (__CB_ADDR), \
1979 (__SRC_TILE_ADDR), \
1980 (__CENTRE), \
1981 (float)(__ANGLE), \
1982 (float)(__SCALE), \
1983 (__OPACITY)); \
1984 }; \
1985 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
1986 (__DES_TILE_ADDR), \
1987 (__DES_REGION_ADDR), \
1988 (NULL,##__VA_ARGS__)); \
1989 })
1990
1991#define arm_2dp_gray8_fill_colour_with_mask_opacity_and_transform( \
1992 __CB_ADDR, \
1993 __MASK_ADDR, \
1994 __DES_TILE_ADDR, \
1995 __DES_REGION_ADDR, \
1996 __CENTRE, \
1997 __ANGLE, \
1998 __SCALE, \
1999 __MSK_COLOUR, \
2000 __OPACITY,...) \
2001 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2002 arm_2dp_gray8_fill_colour_with_mask_opacity_and_transform_prepare( \
2003 (__CB_ADDR), \
2004 (__MASK_ADDR), \
2005 (__CENTRE), \
2006 (float)(__ANGLE), \
2007 (float)(__SCALE), \
2008 (__MSK_COLOUR), \
2009 (__OPACITY)); \
2010 }; \
2011 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2012 (__DES_TILE_ADDR), \
2013 (__DES_REGION_ADDR), \
2014 (NULL,##__VA_ARGS__)); \
2015 })
2016
2017#define arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform( \
2018 __CB_ADDR, \
2019 __MASK_ADDR, \
2020 __DES_TILE_ADDR, \
2021 __DES_REGION_ADDR, \
2022 __CENTRE, \
2023 __ANGLE, \
2024 __SCALE, \
2025 __MSK_COLOUR, \
2026 __OPACITY,...) \
2027 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2028 arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare( \
2029 (__CB_ADDR), \
2030 (__MASK_ADDR), \
2031 (__CENTRE), \
2032 (float)(__ANGLE), \
2033 (float)(__SCALE), \
2034 (__MSK_COLOUR), \
2035 (__OPACITY)); \
2036 }; \
2037 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2038 (__DES_TILE_ADDR), \
2039 (__DES_REGION_ADDR), \
2040 (NULL,##__VA_ARGS__)); \
2041 })
2042
2043#define arm_2dp_rgb888_fill_colour_with_mask_opacity_and_transform( \
2044 __CB_ADDR, \
2045 __MASK_ADDR, \
2046 __DES_TILE_ADDR, \
2047 __DES_REGION_ADDR, \
2048 __CENTRE, \
2049 __ANGLE, \
2050 __SCALE, \
2051 __MSK_COLOUR, \
2052 __OPACITY,...) \
2053 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2054 arm_2dp_cccn888_fill_colour_with_mask_opacity_and_transform_prepare(\
2055 (__CB_ADDR), \
2056 (__MASK_ADDR), \
2057 (__CENTRE), \
2058 (float)(__ANGLE), \
2059 (float)(__SCALE), \
2060 (__MSK_COLOUR), \
2061 (__OPACITY)); \
2062 }; \
2063 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2064 (__DES_TILE_ADDR), \
2065 (__DES_REGION_ADDR), \
2066 (NULL,##__VA_ARGS__)); \
2067 })
2068
2069#define arm_2dp_cccn888_fill_colour_with_mask_opacity_and_transform( \
2070 __CB_ADDR, \
2071 __MASK_ADDR, \
2072 __DES_TILE_ADDR, \
2073 __DES_REGION_ADDR, \
2074 __CENTRE, \
2075 __ANGLE, \
2076 __SCALE, \
2077 __MSK_COLOUR, \
2078 __OPACITY,...) \
2079 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2080 arm_2dp_cccn888_fill_colour_with_mask_opacity_and_transform_prepare(\
2081 (__CB_ADDR), \
2082 (__MASK_ADDR), \
2083 (__CENTRE), \
2084 (float)(__ANGLE), \
2085 (float)(__SCALE), \
2086 (__MSK_COLOUR), \
2087 (__OPACITY)); \
2088 }; \
2089 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2090 (__DES_TILE_ADDR), \
2091 (__DES_REGION_ADDR), \
2092 (NULL,##__VA_ARGS__)); \
2093 })
2094
2095
2096
2097#define arm_2d_gray8_fill_colour_with_mask_opacity_and_transform( \
2098 __MASK_ADDR, \
2099 __DES_TILE_ADDR, \
2100 __DES_REGION_ADDR, \
2101 __CENTRE, \
2102 __ANGLE, \
2103 __SCALE, \
2104 __MSK_COLOUR, \
2105 __OPACITY,...) \
2106 ({arm_2dp_gray8_fill_colour_with_mask_opacity_and_transform_prepare( \
2107 (NULL), \
2108 (__MASK_ADDR), \
2109 (__CENTRE), \
2110 (float)(__ANGLE), \
2111 (float)(__SCALE), \
2112 (__MSK_COLOUR), \
2113 (__OPACITY)); \
2114 arm_2dp_tile_transform(NULL, \
2115 (__DES_TILE_ADDR), \
2116 (__DES_REGION_ADDR), \
2117 (NULL,##__VA_ARGS__));})
2118
2119#define arm_2d_rgb565_fill_colour_with_mask_opacity_and_transform( \
2120 __MASK_ADDR, \
2121 __DES_TILE_ADDR, \
2122 __DES_REGION_ADDR, \
2123 __CENTRE, \
2124 __ANGLE, \
2125 __SCALE, \
2126 __MSK_COLOUR, \
2127 __OPACITY,...) \
2128 ({arm_2dp_rgb565_fill_colour_with_mask_opacity_and_transform_prepare( \
2129 (NULL), \
2130 (__MASK_ADDR), \
2131 (__CENTRE), \
2132 (float)(__ANGLE), \
2133 (float)(__SCALE), \
2134 (__MSK_COLOUR), \
2135 (__OPACITY)); \
2136 arm_2dp_tile_transform(NULL, \
2137 (__DES_TILE_ADDR), \
2138 (__DES_REGION_ADDR), \
2139 (NULL,##__VA_ARGS__));})
2140
2141#define arm_2d_rgb888_fill_colour_with_mask_opacity_and_transform( \
2142 __MASK_ADDR, \
2143 __DES_TILE_ADDR, \
2144 __DES_REGION_ADDR, \
2145 __CENTRE, \
2146 __ANGLE, \
2147 __SCALE, \
2148 __MSK_COLOUR, \
2149 __OPACITY,...) \
2150 ({arm_2dp_cccn888_fill_colour_with_mask_opacity_and_transform_prepare(\
2151 (NULL), \
2152 (__MASK_ADDR), \
2153 (__CENTRE), \
2154 (float)(__ANGLE), \
2155 (float)(__SCALE), \
2156 (__MSK_COLOUR), \
2157 (__OPACITY)); \
2158 arm_2dp_tile_transform(NULL, \
2159 (__DES_TILE_ADDR), \
2160 (__DES_REGION_ADDR), \
2161 (NULL,##__VA_ARGS__));})
2162
2163#define arm_2d_cccn888_fill_colour_with_mask_opacity_and_transform( \
2164 __MASK_ADDR, \
2165 __DES_TILE_ADDR, \
2166 __DES_REGION_ADDR, \
2167 __CENTRE, \
2168 __ANGLE, \
2169 __SCALE, \
2170 __MSK_COLOUR, \
2171 __OPACITY,...) \
2172 ({arm_2dp_cccn888_fill_colour_with_mask_opacity_and_transform_prepare(\
2173 (NULL), \
2174 (__MASK_ADDR), \
2175 (__CENTRE), \
2176 (float)(__ANGLE), \
2177 (float)(__SCALE), \
2178 (__MSK_COLOUR), \
2179 (__OPACITY)); \
2180 arm_2dp_tile_transform(NULL, \
2181 (__DES_TILE_ADDR), \
2182 (__DES_REGION_ADDR), \
2183 (NULL,##__VA_ARGS__));})
2184
2185
2186#define arm_2dp_gray8_tile_transform_with_src_mask( \
2187 __CB_ADDR, \
2188 __SRC_TILE_ADDR, \
2189 __SRC_MASK_ADDR, \
2190 __DES_TILE_ADDR, \
2191 __DES_REGION_ADDR, \
2192 __CENTRE, \
2193 __ANGLE, \
2194 __SCALE, \
2195 ...) \
2196 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2197 arm_2dp_gray8_tile_transform_with_src_mask_prepare( \
2198 (__CB_ADDR), \
2199 (__SRC_TILE_ADDR), \
2200 (__SRC_MASK_ADDR), \
2201 (__CENTRE), \
2202 (float)(__ANGLE), \
2203 (float)(__SCALE)); \
2204 }; \
2205 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2206 (__DES_TILE_ADDR), \
2207 (__DES_REGION_ADDR), \
2208 (NULL,##__VA_ARGS__)); \
2209 })
2210
2211#define arm_2dp_rgb565_tile_transform_with_src_mask( \
2212 __CB_ADDR, \
2213 __SRC_TILE_ADDR, \
2214 __SRC_MASK_ADDR, \
2215 __DES_TILE_ADDR, \
2216 __DES_REGION_ADDR, \
2217 __CENTRE, \
2218 __ANGLE, \
2219 __SCALE, \
2220 ...) \
2221 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2222 arm_2dp_rgb565_tile_transform_with_src_mask_prepare( \
2223 (__CB_ADDR), \
2224 (__SRC_TILE_ADDR), \
2225 (__SRC_MASK_ADDR), \
2226 (__CENTRE), \
2227 (float)(__ANGLE), \
2228 (float)(__SCALE)); \
2229 }; \
2230 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2231 (__DES_TILE_ADDR), \
2232 (__DES_REGION_ADDR), \
2233 (NULL,##__VA_ARGS__)); \
2234 })
2235
2236
2237#define arm_2dp_cccn888_tile_transform_with_src_mask( \
2238 __CB_ADDR, \
2239 __SRC_TILE_ADDR, \
2240 __SRC_MASK_ADDR, \
2241 __DES_TILE_ADDR, \
2242 __DES_REGION_ADDR, \
2243 __CENTRE, \
2244 __ANGLE, \
2245 __SCALE, \
2246 ...) \
2247 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2248 arm_2dp_cccn888_tile_transform_with_src_mask_prepare( \
2249 (__CB_ADDR), \
2250 (__SRC_TILE_ADDR), \
2251 (__SRC_MASK_ADDR), \
2252 (__CENTRE), \
2253 (float)(__ANGLE), \
2254 (float)(__SCALE)); \
2255 }; \
2256 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2257 (__DES_TILE_ADDR), \
2258 (__DES_REGION_ADDR), \
2259 (NULL,##__VA_ARGS__)); \
2260 })
2261
2262#define arm_2dp_gray8_tile_transform_with_src_mask_and_opacity( \
2263 __CB_ADDR, \
2264 __SRC_TILE_ADDR, \
2265 __SRC_MASK_ADDR, \
2266 __DES_TILE_ADDR, \
2267 __DES_REGION_ADDR, \
2268 __CENTRE, \
2269 __ANGLE, \
2270 __SCALE, \
2271 __OPACITY, \
2272 ...) \
2273 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2274 arm_2dp_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
2275 (__CB_ADDR), \
2276 (__SRC_TILE_ADDR), \
2277 (__SRC_MASK_ADDR), \
2278 (__CENTRE), \
2279 (float)(__ANGLE), \
2280 (float)(__SCALE), \
2281 (__OPACITY)); \
2282 }; \
2283 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2284 (__DES_TILE_ADDR), \
2285 (__DES_REGION_ADDR), \
2286 (NULL,##__VA_ARGS__)); \
2287 })
2288
2289#define arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity( \
2290 __CB_ADDR, \
2291 __SRC_TILE_ADDR, \
2292 __SRC_MASK_ADDR, \
2293 __DES_TILE_ADDR, \
2294 __DES_REGION_ADDR, \
2295 __CENTRE, \
2296 __ANGLE, \
2297 __SCALE, \
2298 __OPACITY, \
2299 ...) \
2300 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2301 arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
2302 (__CB_ADDR), \
2303 (__SRC_TILE_ADDR), \
2304 (__SRC_MASK_ADDR), \
2305 (__CENTRE), \
2306 (float)(__ANGLE), \
2307 (float)(__SCALE), \
2308 (__OPACITY)); \
2309 }; \
2310 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2311 (__DES_TILE_ADDR), \
2312 (__DES_REGION_ADDR), \
2313 (NULL,##__VA_ARGS__)); \
2314 })
2315
2316
2317#define arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity( \
2318 __CB_ADDR, \
2319 __SRC_TILE_ADDR, \
2320 __SRC_MASK_ADDR, \
2321 __DES_TILE_ADDR, \
2322 __DES_REGION_ADDR, \
2323 __CENTRE, \
2324 __ANGLE, \
2325 __SCALE, \
2326 __OPACITY, \
2327 ...) \
2328 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2329 arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
2330 (__CB_ADDR), \
2331 (__SRC_TILE_ADDR), \
2332 (__SRC_MASK_ADDR), \
2333 (__CENTRE), \
2334 (float)(__ANGLE), \
2335 (float)(__SCALE), \
2336 (__OPACITY)); \
2337 }; \
2338 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2339 (__DES_TILE_ADDR), \
2340 (__DES_REGION_ADDR), \
2341 (NULL,##__VA_ARGS__)); \
2342 })
2343
2344#define arm_2d_gray8_tile_transform_with_colour_keying( \
2345 __SRC_TILE_ADDR, \
2346 __DES_TILE_ADDR, \
2347 __DES_REGION_ADDR, \
2348 __CENTRE, \
2349 __ANGLE, \
2350 __SCALE, \
2351 __MSK_COLOUR, ...) \
2352 ({{ \
2353 arm_2dp_gray8_tile_transform_with_colour_keying_prepare( \
2354 (NULL), \
2355 (__SRC_TILE_ADDR), \
2356 (__CENTRE), \
2357 (float)(__ANGLE), \
2358 (float)(__SCALE), \
2359 (__MSK_COLOUR)); \
2360 }; \
2361 arm_2dp_tile_transform(NULL, \
2362 (__DES_TILE_ADDR), \
2363 (__DES_REGION_ADDR), \
2364 (NULL,##__VA_ARGS__)); \
2365 })
2366
2367#define arm_2d_rgb565_tile_transform_with_colour_keying( \
2368 __SRC_TILE_ADDR, \
2369 __DES_TILE_ADDR, \
2370 __DES_REGION_ADDR, \
2371 __CENTRE, \
2372 __ANGLE, \
2373 __SCALE, \
2374 __MSK_COLOUR, ...) \
2375 ({{ \
2376 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare( \
2377 (NULL), \
2378 (__SRC_TILE_ADDR), \
2379 (__CENTRE), \
2380 (float)(__ANGLE), \
2381 (float)(__SCALE), \
2382 (__MSK_COLOUR)); \
2383 }; \
2384 arm_2dp_tile_transform(NULL, \
2385 (__DES_TILE_ADDR), \
2386 (__DES_REGION_ADDR), \
2387 (NULL,##__VA_ARGS__)); \
2388 })
2389
2390#define arm_2d_cccn888_tile_transform_with_colour_keying( \
2391 __SRC_TILE_ADDR, \
2392 __DES_TILE_ADDR, \
2393 __DES_REGION_ADDR, \
2394 __CENTRE, \
2395 __ANGLE, \
2396 __SCALE, \
2397 __MSK_COLOUR, ...) \
2398 ({{ \
2399 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare( \
2400 NULL, \
2401 (__SRC_TILE_ADDR), \
2402 (__CENTRE), \
2403 (float)(__ANGLE), \
2404 (float)(__SCALE), \
2405 (__MSK_COLOUR)); \
2406 }; \
2407 arm_2dp_tile_transform(NULL, \
2408 (__DES_TILE_ADDR), \
2409 (__DES_REGION_ADDR), \
2410 (NULL,##__VA_ARGS__)); \
2411 })
2412
2413#define arm_2d_gray8_tile_transform_with_opacity( \
2414 __SRC_TILE_ADDR, \
2415 __DES_TILE_ADDR, \
2416 __DES_REGION_ADDR, \
2417 __CENTRE, \
2418 __ANGLE, \
2419 __SCALE, \
2420 __MSK_COLOUR, \
2421 __OPACITY, ...) \
2422 ({{ \
2423 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare(\
2424 NULL, \
2425 (__SRC_TILE_ADDR), \
2426 (__CENTRE), \
2427 (float)(__ANGLE), \
2428 (float)(__SCALE), \
2429 (__MSK_COLOUR), \
2430 (__OPACITY)); \
2431 }; \
2432 arm_2dp_tile_transform(NULL, \
2433 (__DES_TILE_ADDR), \
2434 (__DES_REGION_ADDR), \
2435 (NULL,##__VA_ARGS__)); \
2436 })
2437
2438#define arm_2d_rgb565_tile_transform_with_opacity( \
2439 __SRC_TILE_ADDR, \
2440 __DES_TILE_ADDR, \
2441 __DES_REGION_ADDR, \
2442 __CENTRE, \
2443 __ANGLE, \
2444 __SCALE, \
2445 __MSK_COLOUR, \
2446 __OPACITY, ...) \
2447 ({{ \
2448 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare(\
2449 NULL, \
2450 (__SRC_TILE_ADDR), \
2451 (__CENTRE), \
2452 (float)(__ANGLE), \
2453 (float)(__SCALE), \
2454 (__MSK_COLOUR), \
2455 (__OPACITY)); \
2456 }; \
2457 arm_2dp_tile_transform(NULL, \
2458 (__DES_TILE_ADDR), \
2459 (__DES_REGION_ADDR), \
2460 (NULL,##__VA_ARGS__)); \
2461 })
2462
2463#define arm_2d_cccn888_tile_transform_with_opacity( \
2464 __SRC_TILE_ADDR, \
2465 __DES_TILE_ADDR, \
2466 __DES_REGION_ADDR, \
2467 __CENTRE, \
2468 __ANGLE, \
2469 __SCALE, \
2470 __MSK_COLOUR, \
2471 __OPACITY, ...) \
2472 ({{ \
2473 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare(\
2474 NULL, \
2475 (__SRC_TILE_ADDR), \
2476 (__CENTRE), \
2477 (float)(__ANGLE), \
2478 (float)(__SCALE), \
2479 (__MSK_COLOUR), \
2480 (__OPACITY)); \
2481 }; \
2482 arm_2dp_tile_transform(NULL, \
2483 (__DES_TILE_ADDR), \
2484 (__DES_REGION_ADDR), \
2485 (NULL,##__VA_ARGS__)); \
2486 })
2487
2488#define arm_2d_gray8_tile_transform_only_with_opacity( \
2489 __SRC_TILE_ADDR, \
2490 __DES_TILE_ADDR, \
2491 __DES_REGION_ADDR, \
2492 __CENTRE, \
2493 __ANGLE, \
2494 __SCALE, \
2495 __OPACITY, ...) \
2496 ({{ \
2497 arm_2dp_gray8_tile_transform_only_with_opacity_prepare( \
2498 NULL, \
2499 (__SRC_TILE_ADDR), \
2500 (__CENTRE), \
2501 (float)(__ANGLE), \
2502 (float)(__SCALE), \
2503 (__OPACITY)); \
2504 }; \
2505 arm_2dp_tile_transform(NULL, \
2506 (__DES_TILE_ADDR), \
2507 (__DES_REGION_ADDR), \
2508 (NULL,##__VA_ARGS__)); \
2509 })
2510
2511#define arm_2d_rgb565_tile_transform_only_with_opacity( \
2512 __SRC_TILE_ADDR, \
2513 __DES_TILE_ADDR, \
2514 __DES_REGION_ADDR, \
2515 __CENTRE, \
2516 __ANGLE, \
2517 __SCALE, \
2518 __OPACITY, ...) \
2519 ({{ \
2520 arm_2dp_rgb565_tile_transform_only_with_opacity_prepare( \
2521 NULL, \
2522 (__SRC_TILE_ADDR), \
2523 (__CENTRE), \
2524 (float)(__ANGLE), \
2525 (float)(__SCALE), \
2526 (__OPACITY)); \
2527 }; \
2528 arm_2dp_tile_transform(NULL, \
2529 (__DES_TILE_ADDR), \
2530 (__DES_REGION_ADDR), \
2531 (NULL,##__VA_ARGS__)); \
2532 })
2533
2534#define arm_2d_cccn888_tile_transform_only_with_opacity( \
2535 __SRC_TILE_ADDR, \
2536 __DES_TILE_ADDR, \
2537 __DES_REGION_ADDR, \
2538 __CENTRE, \
2539 __ANGLE, \
2540 __SCALE, \
2541 __OPACITY, ...) \
2542 ({{ \
2543 arm_2dp_cccn888_tile_transform_only_with_opacity_prepare( \
2544 NULL, \
2545 (__SRC_TILE_ADDR), \
2546 (__CENTRE), \
2547 (float)(__ANGLE), \
2548 (float)(__SCALE), \
2549 (__OPACITY)); \
2550 }; \
2551 arm_2dp_tile_transform(NULL, \
2552 (__DES_TILE_ADDR), \
2553 (__DES_REGION_ADDR), \
2554 (NULL,##__VA_ARGS__)); \
2555 })
2556
2557#define arm_2d_gray8_tile_transform_with_src_mask( \
2558 __SRC_TILE_ADDR, \
2559 __SRC_MASK_ADDR, \
2560 __DES_TILE_ADDR, \
2561 __DES_REGION_ADDR, \
2562 __CENTRE, \
2563 __ANGLE, \
2564 __SCALE, \
2565 ...) \
2566 ({{ \
2567 arm_2dp_gray8_tile_transform_with_src_mask_prepare( \
2568 (NULL), \
2569 (__SRC_TILE_ADDR), \
2570 (__SRC_MASK_ADDR), \
2571 (__CENTRE), \
2572 (float)(__ANGLE), \
2573 (float)(__SCALE)); \
2574 }; \
2575 arm_2dp_tile_transform(NULL, \
2576 (__DES_TILE_ADDR), \
2577 (__DES_REGION_ADDR), \
2578 (NULL,##__VA_ARGS__)); \
2579 })
2580
2581#define arm_2d_rgb565_tile_transform_with_src_mask( \
2582 __SRC_TILE_ADDR, \
2583 __SRC_MASK_ADDR, \
2584 __DES_TILE_ADDR, \
2585 __DES_REGION_ADDR, \
2586 __CENTRE, \
2587 __ANGLE, \
2588 __SCALE, \
2589 ...) \
2590 ({{ \
2591 arm_2dp_rgb565_tile_transform_with_src_mask_prepare( \
2592 (NULL), \
2593 (__SRC_TILE_ADDR), \
2594 (__SRC_MASK_ADDR), \
2595 (__CENTRE), \
2596 (float)(__ANGLE), \
2597 (float)(__SCALE)); \
2598 }; \
2599 arm_2dp_tile_transform(NULL, \
2600 (__DES_TILE_ADDR), \
2601 (__DES_REGION_ADDR), \
2602 (NULL,##__VA_ARGS__)); \
2603 })
2604
2605#define arm_2d_cccn888_tile_transform_with_src_mask( \
2606 __SRC_TILE_ADDR, \
2607 __SRC_MASK_ADDR, \
2608 __DES_TILE_ADDR, \
2609 __DES_REGION_ADDR, \
2610 __CENTRE, \
2611 __ANGLE, \
2612 __SCALE, \
2613 ...) \
2614 ({{ \
2615 arm_2dp_cccn888_tile_transform_with_src_mask_prepare( \
2616 (NULL), \
2617 (__SRC_TILE_ADDR), \
2618 (__SRC_MASK_ADDR), \
2619 (__CENTRE), \
2620 (float)(__ANGLE), \
2621 (float)(__SCALE)); \
2622 }; \
2623 arm_2dp_tile_transform(NULL, \
2624 (__DES_TILE_ADDR), \
2625 (__DES_REGION_ADDR), \
2626 (NULL,##__VA_ARGS__)); \
2627 })
2628
2629#define arm_2d_gray8_tile_transform_with_src_mask_and_opacity( \
2630 __SRC_TILE_ADDR, \
2631 __SRC_MASK_ADDR, \
2632 __DES_TILE_ADDR, \
2633 __DES_REGION_ADDR, \
2634 __CENTRE, \
2635 __ANGLE, \
2636 __SCALE, \
2637 __OPACITY, \
2638 ...) \
2639 ({{ \
2640 arm_2dp_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
2641 (NULL), \
2642 (__SRC_TILE_ADDR), \
2643 (__SRC_MASK_ADDR), \
2644 (__CENTRE), \
2645 (float)(__ANGLE), \
2646 (float)(__SCALE), \
2647 (__OPACITY)); \
2648 }; \
2649 arm_2dp_tile_transform(NULL, \
2650 (__DES_TILE_ADDR), \
2651 (__DES_REGION_ADDR), \
2652 (NULL,##__VA_ARGS__)); \
2653 })
2654
2655#define arm_2d_rgb565_tile_transform_with_src_mask_and_opacity( \
2656 __SRC_TILE_ADDR, \
2657 __SRC_MASK_ADDR, \
2658 __DES_TILE_ADDR, \
2659 __DES_REGION_ADDR, \
2660 __CENTRE, \
2661 __ANGLE, \
2662 __SCALE, \
2663 __OPACITY, \
2664 ...) \
2665 ({{ \
2666 arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
2667 (NULL), \
2668 (__SRC_TILE_ADDR), \
2669 (__SRC_MASK_ADDR), \
2670 (__CENTRE), \
2671 (float)(__ANGLE), \
2672 (float)(__SCALE), \
2673 (__OPACITY)); \
2674 }; \
2675 arm_2dp_tile_transform(NULL, \
2676 (__DES_TILE_ADDR), \
2677 (__DES_REGION_ADDR), \
2678 (NULL,##__VA_ARGS__)); \
2679 })
2680
2681#define arm_2d_cccn888_tile_transform_with_src_mask_and_opacity( \
2682 __SRC_TILE_ADDR, \
2683 __SRC_MASK_ADDR, \
2684 __DES_TILE_ADDR, \
2685 __DES_REGION_ADDR, \
2686 __CENTRE, \
2687 __ANGLE, \
2688 __SCALE, \
2689 __OPACITY, \
2690 ...) \
2691 ({{ \
2692 arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
2693 (NULL), \
2694 (__SRC_TILE_ADDR), \
2695 (__SRC_MASK_ADDR), \
2696 (__CENTRE), \
2697 (float)(__ANGLE), \
2698 (float)(__SCALE), \
2699 (__OPACITY)); \
2700 }; \
2701 arm_2dp_tile_transform(NULL, \
2702 (__DES_TILE_ADDR), \
2703 (__DES_REGION_ADDR), \
2704 (NULL,##__VA_ARGS__)); \
2705 })
2706
2707/*----------------------------------------------------------------------------*
2708 * API wrappers: Scaling *
2709 *----------------------------------------------------------------------------*/
2710
2711#define arm_2d_gray8_tile_scaling_with_colour_keying_prepare( __SRC_TILE_ADDR,\
2712 __CENTRE, \
2713 __SCALE, \
2714 __MSK_COLOUR) \
2715 arm_2dp_gray8_tile_transform_with_colour_keying_prepare( NULL, \
2716 (__SRC_TILE_ADDR), \
2717 (__CENTRE), \
2718 0.0f, \
2719 (float)(__SCALE), \
2720 (__MSK_COLOUR))
2721
2722#define arm_2d_rgb565_tile_scaling_with_colour_keying_prepare( __SRC_TILE_ADDR,\
2723 __CENTRE, \
2724 __SCALE, \
2725 __MSK_COLOUR) \
2726 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare( NULL, \
2727 (__SRC_TILE_ADDR), \
2728 (__CENTRE), \
2729 0.0f, \
2730 (float)(__SCALE), \
2731 (__MSK_COLOUR))
2732
2733#define arm_2d_cccn888_tile_scaling_with_colour_keying_prepare( __SRC_TILE_ADDR,\
2734 __CENTRE, \
2735 __SCALE, \
2736 __MSK_COLOUR) \
2737 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare( NULL, \
2738 (__SRC_TILE_ADDR), \
2739 (__CENTRE), \
2740 0.0f, \
2741 (float)(__SCALE), \
2742 (__MSK_COLOUR))
2743
2744#define arm_2d_gray8_tile_scaling_only_prepare( __SRC_TILE_ADDR, \
2745 __CENTRE, \
2746 __SCALE) \
2747 arm_2dp_gray8_tile_transform_only_prepare( NULL, \
2748 (__SRC_TILE_ADDR), \
2749 (__CENTRE), \
2750 0.0f, \
2751 (float)(__SCALE))
2752
2753#define arm_2d_rgb565_tile_scaling_only_prepare( __SRC_TILE_ADDR, \
2754 __CENTRE, \
2755 __SCALE) \
2756 arm_2dp_rgb565_tile_transform_only_prepare( NULL, \
2757 (__SRC_TILE_ADDR), \
2758 (__CENTRE), \
2759 0.0f, \
2760 (float)(__SCALE))
2761
2762#define arm_2d_cccn888_tile_scaling_only_prepare( __SRC_TILE_ADDR, \
2763 __CENTRE, \
2764 __SCALE) \
2765 arm_2dp_cccn888_tile_transform_only_prepare( NULL, \
2766 (__SRC_TILE_ADDR), \
2767 (__CENTRE), \
2768 0.0f, \
2769 (float)(__SCALE))
2770
2771#define arm_2d_gray8_tile_scaling_with_opacity_prepare( \
2772 __SRC_TILE_ADDR, \
2773 __CENTRE, \
2774 __SCALE, \
2775 __MSK_COLOUR, \
2776 __OPACITY) \
2777 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare(\
2778 NULL, \
2779 (__SRC_TILE_ADDR), \
2780 (__CENTRE), \
2781 0.0f, \
2782 (float)(__SCALE), \
2783 (__MSK_COLOUR), \
2784 (__OPACITY))
2785
2786#define arm_2d_rgb565_tile_scaling_with_opacity_prepare( \
2787 __SRC_TILE_ADDR, \
2788 __CENTRE, \
2789 __SCALE, \
2790 __MSK_COLOUR, \
2791 __OPACITY) \
2792 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare(\
2793 NULL, \
2794 (__SRC_TILE_ADDR), \
2795 (__CENTRE), \
2796 0.0f, \
2797 (float)(__SCALE), \
2798 (__MSK_COLOUR), \
2799 (__OPACITY))
2800
2801#define arm_2d_cccn888_tile_scaling_with_opacity_prepare( \
2802 __SRC_TILE_ADDR, \
2803 __CENTRE, \
2804 __SCALE, \
2805 __MSK_COLOUR, \
2806 __OPACITY) \
2807 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare(\
2808 NULL, \
2809 (__SRC_TILE_ADDR), \
2810 (__CENTRE), \
2811 0.0f, \
2812 (float)(__SCALE), \
2813 (__MSK_COLOUR), \
2814 (__OPACITY))
2815
2816#define arm_2d_gray8_tile_scaling_only_with_opacity_prepare( \
2817 __SRC_TILE_ADDR, \
2818 __CENTRE, \
2819 __SCALE, \
2820 __OPACITY) \
2821 arm_2dp_gray8_tile_transform_only_with_opacity_prepare( \
2822 NULL, \
2823 (__SRC_TILE_ADDR), \
2824 (__CENTRE), \
2825 0.0f, \
2826 (float)(__SCALE), \
2827 (__OPACITY))
2828
2829#define arm_2d_rgb565_tile_scaling_only_with_opacity_prepare( \
2830 __SRC_TILE_ADDR, \
2831 __CENTRE, \
2832 __SCALE, \
2833 __OPACITY) \
2834 arm_2dp_rgb565_tile_transform_only_with_opacity_prepare( \
2835 NULL, \
2836 (__SRC_TILE_ADDR), \
2837 (__CENTRE), \
2838 0.0f, \
2839 (float)(__SCALE), \
2840 (__OPACITY))
2841
2842#define arm_2d_cccn888_tile_scaling_only_with_opacity_prepare( \
2843 __SRC_TILE_ADDR, \
2844 __CENTRE, \
2845 __SCALE, \
2846 __OPACITY) \
2847 arm_2dp_cccn888_tile_transform_only_with_opacity_prepare( \
2848 NULL, \
2849 (__SRC_TILE_ADDR), \
2850 (__CENTRE), \
2851 0.0f, \
2852 (float)(__SCALE), \
2853 (__OPACITY))
2854
2855#define arm_2d_gray8_tile_scaling_with_src_mask_prepare( \
2856 __SRC_TILE_ADDR, \
2857 __SRC_MASK_ADDR, \
2858 __CENTRE, \
2859 __SCALE) \
2860 arm_2dp_gray8_tile_transform_with_src_mask_prepare( NULL, \
2861 (__SRC_TILE_ADDR), \
2862 (__SRC_MASK_ADDR), \
2863 (__CENTRE), \
2864 0.0f, \
2865 (float)(__SCALE))
2866
2867#define arm_2d_rgb565_tile_scaling_with_src_mask_prepare( \
2868 __SRC_TILE_ADDR, \
2869 __SRC_MASK_ADDR, \
2870 __CENTRE, \
2871 __SCALE) \
2872 arm_2dp_rgb565_tile_transform_with_src_mask_prepare( NULL, \
2873 (__SRC_TILE_ADDR), \
2874 (__SRC_MASK_ADDR), \
2875 (__CENTRE), \
2876 0.0f, \
2877 (float)(__SCALE))
2878
2879#define arm_2d_cccn888_tile_scaling_with_src_mask_prepare( \
2880 __SRC_TILE_ADDR, \
2881 __SRC_MASK_ADDR, \
2882 __CENTRE, \
2883 __SCALE) \
2884 arm_2dp_cccn888_tile_transform_with_src_mask_prepare( NULL, \
2885 (__SRC_TILE_ADDR), \
2886 (__SRC_MASK_ADDR), \
2887 (__CENTRE), \
2888 0.0f, \
2889 (float)(__SCALE))
2890
2891#define arm_2d_gray8_tile_scaling_with_src_mask_and_opacity_prepare( \
2892 __SRC_TILE_ADDR, \
2893 __SRC_MASK_ADDR, \
2894 __CENTRE, \
2895 __SCALE, \
2896 __OPACITY) \
2897 arm_2dp_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
2898 NULL, \
2899 (__SRC_TILE_ADDR), \
2900 (__SRC_MASK_ADDR), \
2901 (__CENTRE), \
2902 0.0f, \
2903 (float)(__SCALE), \
2904 (__OPACITY))
2905
2906#define arm_2d_rgb565_tile_scaling_with_src_mask_and_opacity_prepare( \
2907 __SRC_TILE_ADDR, \
2908 __SRC_MASK_ADDR, \
2909 __CENTRE, \
2910 __SCALE, \
2911 __OPACITY) \
2912 arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
2913 NULL, \
2914 (__SRC_TILE_ADDR), \
2915 (__SRC_MASK_ADDR), \
2916 (__CENTRE), \
2917 0.0f, \
2918 (float)(__SCALE), \
2919 (__OPACITY))
2920
2921#define arm_2d_cccn888_tile_scaling_with_src_mask_and_opacity_prepare( \
2922 __SRC_TILE_ADDR, \
2923 __SRC_MASK_ADDR, \
2924 __CENTRE, \
2925 __SCALE, \
2926 __OPACITY) \
2927 arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
2928 NULL, \
2929 (__SRC_TILE_ADDR), \
2930 (__SRC_MASK_ADDR), \
2931 (__CENTRE), \
2932 0.0f, \
2933 (float)(__SCALE), \
2934 (__OPACITY))
2935
2936#define arm_2d_tile_scale( __DES_TILE_ADDR, \
2937 __DES_REGION_ADDR, \
2938 __DES_CENTRE_ADDR) \
2939 arm_2dp_tile_transform(NULL, \
2940 (__DES_TILE_ADDR), \
2941 (__DES_REGION_ADDR), \
2942 (__DES_CENTRE_ADDR))
2943
2944
2945/* following macro APIs rely on the boolean variable bIsNewFrame.
2946 * Please make sure you have define it with the correct name and the
2947 * corresponding value. If you don't use the PFB interfaces for neither
2948 * the low level rendering nor the high level GUI drawing, please find
2949 * such variable with the value "true".
2950 */
2951
2952#define arm_2dp_gray8_tile_scaling_with_colour_keying( __CB_ADDR, \
2953 __SRC_TILE_ADDR, \
2954 __DES_TILE_ADDR, \
2955 __DES_REGION_ADDR, \
2956 __CENTRE, \
2957 __SCALE, \
2958 __MSK_COLOUR, \
2959 ...) \
2960 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2961 arm_2dp_gray8_tile_transform_with_colour_keying_prepare( \
2962 (__CB_ADDR), \
2963 (__SRC_TILE_ADDR), \
2964 (__CENTRE), \
2965 0.0f, \
2966 (__SCALE), \
2967 (__MSK_COLOUR)); \
2968 }; \
2969 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2970 (__DES_TILE_ADDR), \
2971 (__DES_REGION_ADDR), \
2972 (NULL,##__VA_ARGS__)); \
2973 })
2974
2975#define arm_2dp_rgb565_tile_scaling_with_colour_keying( __CB_ADDR, \
2976 __SRC_TILE_ADDR, \
2977 __DES_TILE_ADDR, \
2978 __DES_REGION_ADDR, \
2979 __CENTRE, \
2980 __SCALE, \
2981 __MSK_COLOUR, \
2982 ...) \
2983 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
2984 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare( \
2985 (__CB_ADDR), \
2986 (__SRC_TILE_ADDR), \
2987 (__CENTRE), \
2988 0.0f, \
2989 (__SCALE), \
2990 (__MSK_COLOUR)); \
2991 }; \
2992 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
2993 (__DES_TILE_ADDR), \
2994 (__DES_REGION_ADDR), \
2995 (NULL,##__VA_ARGS__)); \
2996 })
2997
2998#define arm_2dp_cccn888_tile_scaling_with_colour_keying( __CB_ADDR, \
2999 __SRC_TILE_ADDR, \
3000 __DES_TILE_ADDR, \
3001 __DES_REGION_ADDR, \
3002 __CENTRE, \
3003 __SCALE, \
3004 __MSK_COLOUR, \
3005 ...) \
3006 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3007 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare( \
3008 (__CB_ADDR), \
3009 (__SRC_TILE_ADDR), \
3010 (__CENTRE), \
3011 0.0f, \
3012 (__SCALE), \
3013 (__MSK_COLOUR)); \
3014 }; \
3015 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3016 (__DES_TILE_ADDR), \
3017 (__DES_REGION_ADDR), \
3018 (NULL,##__VA_ARGS__)); \
3019 })
3020
3021#define arm_2dp_gray8_tile_scaling_only( __CB_ADDR, \
3022 __SRC_TILE_ADDR, \
3023 __DES_TILE_ADDR, \
3024 __DES_REGION_ADDR, \
3025 __CENTRE, \
3026 __SCALE, \
3027 ...) \
3028 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3029 arm_2dp_gray8_tile_transform_only_prepare( \
3030 (__CB_ADDR), \
3031 (__SRC_TILE_ADDR), \
3032 (__CENTRE), \
3033 0.0f, \
3034 (__SCALE)); \
3035 }; \
3036 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3037 (__DES_TILE_ADDR), \
3038 (__DES_REGION_ADDR), \
3039 (NULL,##__VA_ARGS__)); \
3040 })
3041
3042#define arm_2dp_rgb565_tile_scaling_only( __CB_ADDR, \
3043 __SRC_TILE_ADDR, \
3044 __DES_TILE_ADDR, \
3045 __DES_REGION_ADDR, \
3046 __CENTRE, \
3047 __SCALE, \
3048 ...) \
3049 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3050 arm_2dp_rgb565_tile_transform_only_prepare( \
3051 (__CB_ADDR), \
3052 (__SRC_TILE_ADDR), \
3053 (__CENTRE), \
3054 0.0f, \
3055 (__SCALE)); \
3056 }; \
3057 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3058 (__DES_TILE_ADDR), \
3059 (__DES_REGION_ADDR), \
3060 (NULL,##__VA_ARGS__)); \
3061 })
3062
3063#define arm_2dp_cccn888_tile_scaling_only( __CB_ADDR, \
3064 __SRC_TILE_ADDR, \
3065 __DES_TILE_ADDR, \
3066 __DES_REGION_ADDR, \
3067 __CENTRE, \
3068 __SCALE, \
3069 ...) \
3070 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3071 arm_2dp_cccn888_tile_transform_only_prepare( \
3072 (__CB_ADDR), \
3073 (__SRC_TILE_ADDR), \
3074 (__CENTRE), \
3075 0.0f, \
3076 (__SCALE)); \
3077 }; \
3078 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3079 (__DES_TILE_ADDR), \
3080 (__DES_REGION_ADDR), \
3081 (NULL,##__VA_ARGS__)); \
3082 })
3083
3084#define arm_2dp_gray8_tile_scaling_with_opacity( \
3085 __CB_ADDR, \
3086 __SRC_TILE_ADDR, \
3087 __DES_TILE_ADDR, \
3088 __DES_REGION_ADDR, \
3089 __CENTRE, \
3090 __SCALE, \
3091 __MSK_COLOUR, \
3092 __OPACITY,...) \
3093 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3094 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare(\
3095 (__CB_ADDR), \
3096 (__SRC_TILE_ADDR), \
3097 (__CENTRE), \
3098 0.0f, \
3099 (__SCALE), \
3100 (__MSK_COLOUR), \
3101 (__OPACITY)); \
3102 }; \
3103 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3104 (__DES_TILE_ADDR), \
3105 (__DES_REGION_ADDR), \
3106 (NULL,##__VA_ARGS__)); \
3107 })
3108
3109#define arm_2dp_rgb565_tile_scaling_with_opacity( \
3110 __CB_ADDR, \
3111 __SRC_TILE_ADDR, \
3112 __DES_TILE_ADDR, \
3113 __DES_REGION_ADDR, \
3114 __CENTRE, \
3115 __SCALE, \
3116 __MSK_COLOUR, \
3117 __OPACITY,...) \
3118 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3119 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare(\
3120 (__CB_ADDR), \
3121 (__SRC_TILE_ADDR), \
3122 (__CENTRE), \
3123 0.0f, \
3124 (__SCALE), \
3125 (__MSK_COLOUR), \
3126 (__OPACITY)); \
3127 }; \
3128 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3129 (__DES_TILE_ADDR), \
3130 (__DES_REGION_ADDR), \
3131 (NULL,##__VA_ARGS__)); \
3132 })
3133
3134#define arm_2dp_cccn888_tile_scaling_with_opacity( \
3135 __CB_ADDR, \
3136 __SRC_TILE_ADDR, \
3137 __DES_TILE_ADDR, \
3138 __DES_REGION_ADDR, \
3139 __CENTRE, \
3140 __SCALE, \
3141 __MSK_COLOUR, \
3142 __OPACITY, ...) \
3143 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3144 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare(\
3145 (__CB_ADDR), \
3146 (__SRC_TILE_ADDR), \
3147 (__CENTRE), \
3148 0.0f, \
3149 (__SCALE), \
3150 (__MSK_COLOUR), \
3151 (__OPACITY)); \
3152 }; \
3153 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3154 (__DES_TILE_ADDR), \
3155 (__DES_REGION_ADDR), \
3156 (NULL,##__VA_ARGS__)); \
3157 })
3158
3159#define arm_2dp_gray8_tile_scaling_only_with_opacity( \
3160 __CB_ADDR, \
3161 __SRC_TILE_ADDR, \
3162 __DES_TILE_ADDR, \
3163 __DES_REGION_ADDR, \
3164 __CENTRE, \
3165 __SCALE, \
3166 __OPACITY, ...) \
3167 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3168 arm_2dp_gray8_tile_transform_only_with_opacity_prepare( \
3169 (__CB_ADDR), \
3170 (__SRC_TILE_ADDR), \
3171 (__CENTRE), \
3172 0.0f, \
3173 (__SCALE), \
3174 (__OPACITY)); \
3175 }; \
3176 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3177 (__DES_TILE_ADDR), \
3178 (__DES_REGION_ADDR), \
3179 (NULL,##__VA_ARGS__)); \
3180 })
3181
3182#define arm_2dp_rgb565_tile_scaling_only_with_opacity( \
3183 __CB_ADDR, \
3184 __SRC_TILE_ADDR, \
3185 __DES_TILE_ADDR, \
3186 __DES_REGION_ADDR, \
3187 __CENTRE, \
3188 __SCALE, \
3189 __OPACITY, ...) \
3190 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3191 arm_2dp_rgb565_tile_transform_only_with_opacity_prepare( \
3192 (__CB_ADDR), \
3193 (__SRC_TILE_ADDR), \
3194 (__CENTRE), \
3195 0.0f, \
3196 (__SCALE), \
3197 (__OPACITY)); \
3198 }; \
3199 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3200 (__DES_TILE_ADDR), \
3201 (__DES_REGION_ADDR), \
3202 (NULL,##__VA_ARGS__)); \
3203 })
3204
3205#define arm_2dp_cccn888_tile_scaling_only_with_opacity( \
3206 __CB_ADDR, \
3207 __SRC_TILE_ADDR, \
3208 __DES_TILE_ADDR, \
3209 __DES_REGION_ADDR, \
3210 __CENTRE, \
3211 __SCALE, \
3212 __OPACITY, ...) \
3213 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3214 arm_2dp_cccn888_tile_transform_only_with_opacity_prepare( \
3215 (__CB_ADDR), \
3216 (__SRC_TILE_ADDR), \
3217 (__CENTRE), \
3218 0.0f, \
3219 (__SCALE), \
3220 (__OPACITY)); \
3221 }; \
3222 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3223 (__DES_TILE_ADDR), \
3224 (__DES_REGION_ADDR), \
3225 (NULL,##__VA_ARGS__)); \
3226 })
3227
3228#define arm_2dp_gray8_tile_scaling_with_src_mask( \
3229 __CB_ADDR, \
3230 __SRC_TILE_ADDR, \
3231 __SRC_MASK_ADDR, \
3232 __DES_TILE_ADDR, \
3233 __DES_REGION_ADDR, \
3234 __CENTRE, \
3235 __SCALE, \
3236 ...) \
3237 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3238 arm_2dp_gray8_tile_transform_with_src_mask_prepare( \
3239 (__CB_ADDR), \
3240 (__SRC_TILE_ADDR), \
3241 (__SRC_MASK_ADDR), \
3242 (__CENTRE), \
3243 0.0f, \
3244 (__SCALE)); \
3245 }; \
3246 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3247 (__DES_TILE_ADDR), \
3248 (__DES_REGION_ADDR), \
3249 (NULL,##__VA_ARGS__)); \
3250 })
3251
3252#define arm_2dp_rgb565_tile_scaling_with_src_mask( \
3253 __CB_ADDR, \
3254 __SRC_TILE_ADDR, \
3255 __SRC_MASK_ADDR, \
3256 __DES_TILE_ADDR, \
3257 __DES_REGION_ADDR, \
3258 __CENTRE, \
3259 __SCALE, \
3260 ...) \
3261 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3262 arm_2dp_rgb565_tile_transform_with_src_mask_prepare( \
3263 (__CB_ADDR), \
3264 (__SRC_TILE_ADDR), \
3265 (__SRC_MASK_ADDR), \
3266 (__CENTRE), \
3267 0.0f, \
3268 (__SCALE)); \
3269 }; \
3270 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3271 (__DES_TILE_ADDR), \
3272 (__DES_REGION_ADDR), \
3273 (NULL,##__VA_ARGS__)); \
3274 })
3275
3276#define arm_2dp_cccn888_tile_scaling_with_src_mask( \
3277 __CB_ADDR, \
3278 __SRC_TILE_ADDR, \
3279 __SRC_MASK_ADDR, \
3280 __DES_TILE_ADDR, \
3281 __DES_REGION_ADDR, \
3282 __CENTRE, \
3283 __SCALE, \
3284 ...) \
3285 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3286 arm_2dp_cccn888_tile_transform_with_src_mask_prepare( \
3287 (__CB_ADDR), \
3288 (__SRC_TILE_ADDR), \
3289 (__SRC_MASK_ADDR), \
3290 (__CENTRE), \
3291 0.0f, \
3292 (__SCALE)); \
3293 }; \
3294 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3295 (__DES_TILE_ADDR), \
3296 (__DES_REGION_ADDR), \
3297 (NULL,##__VA_ARGS__)); \
3298 })
3299
3300#define arm_2dp_gray8_tile_scaling_with_src_mask_and_opacity( \
3301 __CB_ADDR, \
3302 __SRC_TILE_ADDR, \
3303 __SRC_MASK_ADDR, \
3304 __DES_TILE_ADDR, \
3305 __DES_REGION_ADDR, \
3306 __CENTRE, \
3307 __SCALE, \
3308 __OPACITY, \
3309 ...) \
3310 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3311 arm_2dp_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
3312 (__CB_ADDR), \
3313 (__SRC_TILE_ADDR), \
3314 (__SRC_MASK_ADDR), \
3315 (__CENTRE), \
3316 0.0f, \
3317 (__SCALE), \
3318 (__OPACITY)); \
3319 }; \
3320 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3321 (__DES_TILE_ADDR), \
3322 (__DES_REGION_ADDR), \
3323 (NULL,##__VA_ARGS__)); \
3324 })
3325
3326#define arm_2dp_rgb565_tile_scaling_with_src_mask_and_opacity( \
3327 __CB_ADDR, \
3328 __SRC_TILE_ADDR, \
3329 __SRC_MASK_ADDR, \
3330 __DES_TILE_ADDR, \
3331 __DES_REGION_ADDR, \
3332 __CENTRE, \
3333 __SCALE, \
3334 __OPACITY, \
3335 ...) \
3336 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3337 arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
3338 (__CB_ADDR), \
3339 (__SRC_TILE_ADDR), \
3340 (__SRC_MASK_ADDR), \
3341 (__CENTRE), \
3342 0.0f, \
3343 (__SCALE), \
3344 (__OPACITY)); \
3345 }; \
3346 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3347 (__DES_TILE_ADDR), \
3348 (__DES_REGION_ADDR), \
3349 (NULL,##__VA_ARGS__)); \
3350 })
3351
3352#define arm_2dp_cccn888_tile_scaling_with_src_mask_and_opacity( \
3353 __CB_ADDR, \
3354 __SRC_TILE_ADDR, \
3355 __SRC_MASK_ADDR, \
3356 __DES_TILE_ADDR, \
3357 __DES_REGION_ADDR, \
3358 __CENTRE, \
3359 __SCALE, \
3360 __OPACITY, \
3361 ...) \
3362 ({assert(NULL != (__CB_ADDR)); if (bIsNewFrame) { \
3363 arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
3364 (__CB_ADDR), \
3365 (__SRC_TILE_ADDR), \
3366 (__SRC_MASK_ADDR), \
3367 (__CENTRE), \
3368 0.0f, \
3369 (__SCALE), \
3370 (__OPACITY)); \
3371 }; \
3372 arm_2dp_tile_transform((arm_2d_op_trans_t *)(__CB_ADDR), \
3373 (__DES_TILE_ADDR), \
3374 (__DES_REGION_ADDR), \
3375 (NULL,##__VA_ARGS__)); \
3376 })
3377
3378#define arm_2d_gray8_tile_scaling_with_colour_keying( \
3379 __SRC_TILE_ADDR, \
3380 __DES_TILE_ADDR, \
3381 __DES_REGION_ADDR, \
3382 __CENTRE, \
3383 __SCALE, \
3384 __MSK_COLOUR, ...) \
3385 ({{ \
3386 arm_2dp_gray8_tile_transform_with_colour_keying_prepare( \
3387 (NULL), \
3388 (__SRC_TILE_ADDR), \
3389 (__CENTRE), \
3390 0.0f, \
3391 (__SCALE), \
3392 (__MSK_COLOUR)); \
3393 }; \
3394 arm_2dp_tile_transform(NULL, \
3395 (__DES_TILE_ADDR), \
3396 (__DES_REGION_ADDR), \
3397 (NULL,##__VA_ARGS__)); \
3398 })
3399
3400#define arm_2d_rgb565_tile_scaling_with_colour_keying( \
3401 __SRC_TILE_ADDR, \
3402 __DES_TILE_ADDR, \
3403 __DES_REGION_ADDR, \
3404 __CENTRE, \
3405 __SCALE, \
3406 __MSK_COLOUR, ...) \
3407 ({{ \
3408 arm_2dp_rgb565_tile_transform_with_colour_keying_prepare( \
3409 (NULL), \
3410 (__SRC_TILE_ADDR), \
3411 (__CENTRE), \
3412 0.0f, \
3413 (__SCALE), \
3414 (__MSK_COLOUR)); \
3415 }; \
3416 arm_2dp_tile_transform(NULL, \
3417 (__DES_TILE_ADDR), \
3418 (__DES_REGION_ADDR), \
3419 (NULL,##__VA_ARGS__)); \
3420 })
3421
3422#define arm_2d_cccn888_tile_scaling_with_colour_keying( \
3423 __SRC_TILE_ADDR, \
3424 __DES_TILE_ADDR, \
3425 __DES_REGION_ADDR, \
3426 __CENTRE, \
3427 __SCALE, \
3428 __MSK_COLOUR, ...) \
3429 ({{ \
3430 arm_2dp_cccn888_tile_transform_with_colour_keying_prepare( \
3431 NULL, \
3432 (__SRC_TILE_ADDR), \
3433 (__CENTRE), \
3434 0.0f, \
3435 (__SCALE), \
3436 (__MSK_COLOUR)); \
3437 }; \
3438 arm_2dp_tile_transform(NULL, \
3439 (__DES_TILE_ADDR), \
3440 (__DES_REGION_ADDR), \
3441 (NULL,##__VA_ARGS__)); \
3442 })
3443
3444#define arm_2d_gray8_tile_scaling_only( \
3445 __SRC_TILE_ADDR, \
3446 __DES_TILE_ADDR, \
3447 __DES_REGION_ADDR, \
3448 __CENTRE, \
3449 __SCALE, \
3450 ...) \
3451 ({{ \
3452 arm_2dp_gray8_tile_transform_only_prepare( \
3453 NULL, \
3454 (__SRC_TILE_ADDR), \
3455 (__CENTRE), \
3456 0.0f, \
3457 (__SCALE)); \
3458 }; \
3459 arm_2dp_tile_transform(NULL, \
3460 (__DES_TILE_ADDR), \
3461 (__DES_REGION_ADDR), \
3462 (NULL,##__VA_ARGS__)); \
3463 })
3464
3465#define arm_2d_rgb565_tile_scaling_only( \
3466 __SRC_TILE_ADDR, \
3467 __DES_TILE_ADDR, \
3468 __DES_REGION_ADDR, \
3469 __CENTRE, \
3470 __SCALE, \
3471 ...) \
3472 ({{ \
3473 arm_2dp_rgb565_tile_transform_only_prepare( \
3474 NULL, \
3475 (__SRC_TILE_ADDR), \
3476 (__CENTRE), \
3477 0.0f, \
3478 (__SCALE)); \
3479 }; \
3480 arm_2dp_tile_transform(NULL, \
3481 (__DES_TILE_ADDR), \
3482 (__DES_REGION_ADDR), \
3483 (NULL,##__VA_ARGS__)); \
3484 })
3485
3486#define arm_2d_cccn888_tile_scaling_only( \
3487 __SRC_TILE_ADDR, \
3488 __DES_TILE_ADDR, \
3489 __DES_REGION_ADDR, \
3490 __CENTRE, \
3491 __SCALE, \
3492 ...) \
3493 ({{ \
3494 arm_2dp_cccn888_tile_transform_only_prepare( \
3495 NULL, \
3496 (__SRC_TILE_ADDR), \
3497 (__CENTRE), \
3498 0.0f, \
3499 (__SCALE)); \
3500 }; \
3501 arm_2dp_tile_transform(NULL, \
3502 (__DES_TILE_ADDR), \
3503 (__DES_REGION_ADDR), \
3504 (NULL,##__VA_ARGS__)); \
3505 })
3506
3507#define arm_2d_gray8_tile_scaling_with_opacity( \
3508 __SRC_TILE_ADDR, \
3509 __DES_TILE_ADDR, \
3510 __DES_REGION_ADDR, \
3511 __CENTRE, \
3512 __SCALE, \
3513 __MSK_COLOUR, \
3514 __OPACITY, ...) \
3515 ({{ \
3516 arm_2dp_gray8_tile_transform_with_colour_keying_and_opacity_prepare(\
3517 NULL, \
3518 (__SRC_TILE_ADDR), \
3519 (__CENTRE), \
3520 0.0f, \
3521 (__SCALE), \
3522 (__MSK_COLOUR), \
3523 (__OPACITY)); \
3524 }; \
3525 arm_2dp_tile_transform(NULL, \
3526 (__DES_TILE_ADDR), \
3527 (__DES_REGION_ADDR), \
3528 (NULL,##__VA_ARGS__)); \
3529 })
3530
3531
3532#define arm_2d_rgb565_tile_scaling_with_opacity( \
3533 __SRC_TILE_ADDR, \
3534 __DES_TILE_ADDR, \
3535 __DES_REGION_ADDR, \
3536 __CENTRE, \
3537 __SCALE, \
3538 __MSK_COLOUR, \
3539 __OPACITY, ...) \
3540 ({{ \
3541 arm_2dp_rgb565_tile_transform_with_colour_keying_and_opacity_prepare(\
3542 NULL, \
3543 (__SRC_TILE_ADDR), \
3544 (__CENTRE), \
3545 0.0f, \
3546 (__SCALE), \
3547 (__MSK_COLOUR), \
3548 (__OPACITY)); \
3549 }; \
3550 arm_2dp_tile_transform(NULL, \
3551 (__DES_TILE_ADDR), \
3552 (__DES_REGION_ADDR), \
3553 (NULL,##__VA_ARGS__)); \
3554 })
3555
3556#define arm_2d_cccn888_tile_scaling_with_opacity( \
3557 __SRC_TILE_ADDR, \
3558 __DES_TILE_ADDR, \
3559 __DES_REGION_ADDR, \
3560 __CENTRE, \
3561 __SCALE, \
3562 __MSK_COLOUR, \
3563 __OPACITY, ...) \
3564 ({{ \
3565 arm_2dp_cccn888_tile_transform_with_colour_keying_and_opacity_prepare(\
3566 NULL, \
3567 (__SRC_TILE_ADDR), \
3568 (__CENTRE), \
3569 0.0f, \
3570 (__SCALE), \
3571 (__MSK_COLOUR), \
3572 (__OPACITY)); \
3573 }; \
3574 arm_2dp_tile_transform(NULL, \
3575 (__DES_TILE_ADDR), \
3576 (__DES_REGION_ADDR), \
3577 (NULL,##__VA_ARGS__)); \
3578 })
3579
3580#define arm_2d_gray8_tile_scaling_only_with_opacity( \
3581 __SRC_TILE_ADDR, \
3582 __DES_TILE_ADDR, \
3583 __DES_REGION_ADDR, \
3584 __CENTRE, \
3585 __SCALE, \
3586 __OPACITY, ...) \
3587 ({{ \
3588 arm_2dp_gray8_tile_transform_only_with_opacity_prepare( \
3589 NULL, \
3590 (__SRC_TILE_ADDR), \
3591 (__CENTRE), \
3592 0.0f, \
3593 (__SCALE), \
3594 (__OPACITY)); \
3595 }; \
3596 arm_2dp_tile_transform(NULL, \
3597 (__DES_TILE_ADDR), \
3598 (__DES_REGION_ADDR), \
3599 (NULL,##__VA_ARGS__)); \
3600 })
3601
3602#define arm_2d_rgb565_tile_scaling_only_with_opacity( \
3603 __SRC_TILE_ADDR, \
3604 __DES_TILE_ADDR, \
3605 __DES_REGION_ADDR, \
3606 __CENTRE, \
3607 __SCALE, \
3608 __OPACITY, ...) \
3609 ({{ \
3610 arm_2dp_rgb565_tile_transform_only_with_opacity_prepare( \
3611 NULL, \
3612 (__SRC_TILE_ADDR), \
3613 (__CENTRE), \
3614 0.0f, \
3615 (__SCALE), \
3616 (__OPACITY)); \
3617 }; \
3618 arm_2dp_tile_transform(NULL, \
3619 (__DES_TILE_ADDR), \
3620 (__DES_REGION_ADDR), \
3621 (NULL,##__VA_ARGS__)); \
3622 })
3623
3624#define arm_2d_cccn888_tile_scaling_only_with_opacity( \
3625 __SRC_TILE_ADDR, \
3626 __DES_TILE_ADDR, \
3627 __DES_REGION_ADDR, \
3628 __CENTRE, \
3629 __SCALE, \
3630 __OPACITY, ...) \
3631 ({{ \
3632 arm_2dp_cccn888_tile_transform_only_with_opacity_prepare( \
3633 NULL, \
3634 (__SRC_TILE_ADDR), \
3635 (__CENTRE), \
3636 0.0f, \
3637 (__SCALE), \
3638 (__OPACITY)); \
3639 }; \
3640 arm_2dp_tile_transform(NULL, \
3641 (__DES_TILE_ADDR), \
3642 (__DES_REGION_ADDR), \
3643 (NULL,##__VA_ARGS__)); \
3644 })
3645
3646#define arm_2d_gray8_tile_scaling_with_src_mask( \
3647 __SRC_TILE_ADDR, \
3648 __SRC_MASK_ADDR, \
3649 __DES_TILE_ADDR, \
3650 __DES_REGION_ADDR, \
3651 __CENTRE, \
3652 __SCALE, \
3653 ...) \
3654 ({{ \
3655 arm_2dp_gray8_tile_transform_with_src_mask_prepare( \
3656 (NULL), \
3657 (__SRC_TILE_ADDR), \
3658 (__SRC_MASK_ADDR), \
3659 (__CENTRE), \
3660 0.0f, \
3661 (__SCALE)); \
3662 }; \
3663 arm_2dp_tile_transform(NULL, \
3664 (__DES_TILE_ADDR), \
3665 (__DES_REGION_ADDR), \
3666 (NULL,##__VA_ARGS__)); \
3667 })
3668
3669#define arm_2d_rgb565_tile_scaling_with_src_mask( \
3670 __SRC_TILE_ADDR, \
3671 __SRC_MASK_ADDR, \
3672 __DES_TILE_ADDR, \
3673 __DES_REGION_ADDR, \
3674 __CENTRE, \
3675 __SCALE, \
3676 ...) \
3677 ({{ \
3678 arm_2dp_rgb565_tile_transform_with_src_mask_prepare( \
3679 (NULL), \
3680 (__SRC_TILE_ADDR), \
3681 (__SRC_MASK_ADDR), \
3682 (__CENTRE), \
3683 0.0f, \
3684 (__SCALE)); \
3685 }; \
3686 arm_2dp_tile_transform(NULL, \
3687 (__DES_TILE_ADDR), \
3688 (__DES_REGION_ADDR), \
3689 (NULL,##__VA_ARGS__)); \
3690 })
3691
3692#define arm_2d_cccn888_tile_scaling_with_src_mask( \
3693 __SRC_TILE_ADDR, \
3694 __SRC_MASK_ADDR, \
3695 __DES_TILE_ADDR, \
3696 __DES_REGION_ADDR, \
3697 __CENTRE, \
3698 __SCALE, \
3699 ...) \
3700 ({{ \
3701 arm_2dp_cccn888_tile_transform_with_src_mask_prepare( \
3702 (NULL), \
3703 (__SRC_TILE_ADDR), \
3704 (__SRC_MASK_ADDR), \
3705 (__CENTRE), \
3706 0.0f, \
3707 (__SCALE)); \
3708 }; \
3709 arm_2dp_tile_transform(NULL, \
3710 (__DES_TILE_ADDR), \
3711 (__DES_REGION_ADDR), \
3712 (NULL,##__VA_ARGS__)); \
3713 })
3714
3715#define arm_2d_gray8_tile_scaling_with_src_mask_and_opacity( \
3716 __SRC_TILE_ADDR, \
3717 __SRC_MASK_ADDR, \
3718 __DES_TILE_ADDR, \
3719 __DES_REGION_ADDR, \
3720 __CENTRE, \
3721 __SCALE, \
3722 __OPACITY, \
3723 ...) \
3724 ({{ \
3725 arm_2dp_gray8_tile_transform_with_src_mask_and_opacity_prepare( \
3726 (NULL), \
3727 (__SRC_TILE_ADDR), \
3728 (__SRC_MASK_ADDR), \
3729 (__CENTRE), \
3730 0.0f, \
3731 (__SCALE), \
3732 (__OPACITY)); \
3733 }; \
3734 arm_2dp_tile_transform(NULL, \
3735 (__DES_TILE_ADDR), \
3736 (__DES_REGION_ADDR), \
3737 (NULL,##__VA_ARGS__)); \
3738 })
3739
3740#define arm_2d_rgb565_tile_scaling_with_src_mask_and_opacity( \
3741 __SRC_TILE_ADDR, \
3742 __SRC_MASK_ADDR, \
3743 __DES_TILE_ADDR, \
3744 __DES_REGION_ADDR, \
3745 __CENTRE, \
3746 __SCALE, \
3747 __OPACITY, \
3748 ...) \
3749 ({{ \
3750 arm_2dp_rgb565_tile_transform_with_src_mask_and_opacity_prepare( \
3751 (NULL), \
3752 (__SRC_TILE_ADDR), \
3753 (__SRC_MASK_ADDR), \
3754 (__CENTRE), \
3755 0.0f, \
3756 (__SCALE), \
3757 (__OPACITY)); \
3758 }; \
3759 arm_2dp_tile_transform(NULL, \
3760 (__DES_TILE_ADDR), \
3761 (__DES_REGION_ADDR), \
3762 (NULL,##__VA_ARGS__)); \
3763 })
3764
3765#define arm_2d_cccn888_tile_scaling_with_src_mask_and_opacity( \
3766 __SRC_TILE_ADDR, \
3767 __SRC_MASK_ADDR, \
3768 __DES_TILE_ADDR, \
3769 __DES_REGION_ADDR, \
3770 __CENTRE, \
3771 __SCALE, \
3772 __OPACITY, \
3773 ...) \
3774 ({{ \
3775 arm_2dp_cccn888_tile_transform_with_src_mask_and_opacity_prepare( \
3776 (NULL), \
3777 (__SRC_TILE_ADDR), \
3778 (__SRC_MASK_ADDR), \
3779 (__CENTRE), \
3780 0.0f, \
3781 (__SCALE), \
3782 (__OPACITY)); \
3783 }; \
3784 arm_2dp_tile_transform(NULL, \
3785 (__DES_TILE_ADDR), \
3786 (__DES_REGION_ADDR), \
3787 (NULL,##__VA_ARGS__)); \
3788 })
3789
3790/*============================ TYPES =========================================*/
3791
3792/*!
3793 * \brief transform runtime context
3794 *
3795 */
3797 float fAngle; //!< target angle
3798 float fScale; //!< scaling factor
3800 union {
3801 uint8_t chColour; //!< the key colour in 8bit
3802 uint32_t wColour; //!< the key colour in 16bit
3803 uint16_t hwColour; //!< the key colour in 32bit
3804 } Mask;
3805
3806 /* private members used by runtime */
3807ARM_PRIVATE(
3808 arm_2d_location_t tDummySourceOffset;
3809 struct {
3810 arm_2d_region_t tRegion;
3811 arm_2d_tile_t tTile;
3812 } Target;
3814
3816
3817/*! \brief arm_2d_op_trans_t is inherit from arm_2d_op_src_orig_t
3818 */
3819typedef struct arm_2d_op_trans_t {
3821 struct {
3822 const arm_2d_tile_t *ptTile; //!< target tile
3823 const arm_2d_region_t *ptRegion; //!< target region
3824 } Target;
3825 struct {
3826 const arm_2d_tile_t *ptTile; //!< source tile
3827 }Source;
3828 uint32_t wMode; //!< not used
3829
3830 struct {
3831 const arm_2d_tile_t *ptTile; //!< the origin tile
3832 arm_2d_tile_t tDummySource; //!< the buffer for the source
3833 }Origin;
3834
3836
3838
3839
3840/*! \brief arm_2d_op_trans_opa_t is inherit from arm_2d_op_trans_t
3841 */
3844 struct {
3845 const arm_2d_tile_t *ptTile; //!< target tile
3846 const arm_2d_region_t *ptRegion; //!< target region
3847 } Target;
3848 struct {
3849 const arm_2d_tile_t *ptTile; //!< source tile
3850 }Source;
3851 uint32_t wMode; //!< not used
3852
3853 struct {
3854 const arm_2d_tile_t *ptTile; //!< the origin tile
3855 arm_2d_tile_t tDummySource; //!< the buffer for the source
3856 }Origin;
3857
3859 uint8_t chOpacity; //!< opacity
3860
3862
3863
3864/*! \brief arm_2d_op_fill_cl_msk_opa_trans_t is alias of arm_2d_op_trans_opa_t
3865 */
3867
3868
3869/*! \brief arm_2d_op_trans_msk_t is inherit from arm_2d_op_src_orig_msk_t
3870 */
3873 struct {
3874 const arm_2d_tile_t *ptTile; //!< target tile
3875 const arm_2d_region_t *ptRegion; //!< target region
3876 } Target;
3877 struct {
3878 const arm_2d_tile_t *ptTile; //!< source tile
3879 }Source;
3880 uint32_t wMode; //!< not used
3881 struct {
3882 const arm_2d_tile_t *ptTile; //!< the origin tile
3883 arm_2d_tile_t tDummySource; //!< the buffer for the source
3884 }Origin;
3885 struct {
3886 const arm_2d_tile_t *ptOriginSide; //!< origin side mask
3887 const arm_2d_tile_t *ptTargetSide; //!< target side mask
3888 } Mask;
3889
3891
3893
3894
3895/*! \brief arm_2d_op_trans_msk_t is inherit from arm_2d_op_trans_msk_t
3896 */
3899 struct {
3900 const arm_2d_tile_t *ptTile; //!< target tile
3901 const arm_2d_region_t *ptRegion; //!< target region
3902 } Target;
3903 struct {
3904 const arm_2d_tile_t *ptTile; //!< source tile
3905 }Source;
3906 uint32_t wMode; //!< not used
3907 struct {
3908 const arm_2d_tile_t *ptTile; //!< the origin tile
3909 arm_2d_tile_t tDummySource; //!< the buffer for the source
3910 }Origin;
3911 struct {
3912 const arm_2d_tile_t *ptOriginSide; //!< origin side mask
3913 const arm_2d_tile_t *ptTargetSide; //!< target side mask
3914 } Mask;
3915
3917 uint8_t chOpacity; //!< opacity
3918
3920
3921/*============================ GLOBAL VARIABLES ==============================*/
3922/*============================ PROTOTYPES ====================================*/
3923
3924/*!
3925 * \brief prepare for a transform with colour-keying in gray8
3926 * \param[in] ptOP the control block, NULL means using the default control block
3927 * \param[in] ptSource the source tile
3928 * \param[in] tCentre the pivot in the source tile
3929 * \param[in] fAngle the rotation angle
3930 * \param[in] fScale the scaling factor
3931 * \param[in] chFillColour the key colour
3932 * \return arm_2d_err_t the result of the preparing process
3933 */
3934extern
3935ARM_NONNULL(2)
3937 arm_2d_op_trans_t *ptOP,
3938 const arm_2d_tile_t *ptSource,
3939 const arm_2d_location_t tCentre,
3940 float fAngle,
3941 float fScale,
3942 uint_fast8_t chFillColour);
3943
3944/*!
3945 * \brief prepare for a transform with colour-keying in rgb565
3946 * \param[in] ptOP the control block, NULL means using the default control block
3947 * \param[in] ptSource the source tile
3948 * \param[in] tCentre the pivot in the source tile
3949 * \param[in] fAngle the rotation angle
3950 * \param[in] fScale the scaling factor
3951 * \param[in] hwFillColour the key colour
3952 * \return arm_2d_err_t the result of the preparing process
3953 */
3954extern
3955ARM_NONNULL(2)
3957 arm_2d_op_trans_t *ptOP,
3958 const arm_2d_tile_t *ptSource,
3959 const arm_2d_location_t tCentre,
3960 float fAngle,
3961 float fScale,
3962 uint_fast16_t hwFillColour);
3963
3964/*!
3965 * \brief prepare for a transform with colour-keying in cccn888
3966 * \param[in] ptOP the control block, NULL means using the default control block
3967 * \param[in] ptSource the source tile
3968 * \param[in] tCentre the pivot in the source tile
3969 * \param[in] fAngle the rotation angle
3970 * \param[in] fScale the scaling factor
3971 * \param[in] wFillColour the key colour
3972 * \return arm_2d_err_t the result of the preparing process
3973 */
3974extern
3975ARM_NONNULL(2)
3977 arm_2d_op_trans_t *ptOP,
3978 const arm_2d_tile_t *ptSource,
3979 const arm_2d_location_t tCentre,
3980 float fAngle,
3981 float fScale,
3982 uint32_t wFillColour);
3983
3984
3985/*!
3986 * \brief prepare for a transform in gray8
3987 * \param[in] ptOP the control block, NULL means using the default control block
3988 * \param[in] ptSource the source tile
3989 * \param[in] tCentre the pivot in the source tile
3990 * \param[in] fAngle the rotation angle
3991 * \param[in] fScale the scaling factor
3992 * \return arm_2d_err_t the result of the preparing process
3993 */
3994extern
3995ARM_NONNULL(2)
3997 arm_2d_op_trans_t *ptOP,
3998 const arm_2d_tile_t *ptSource,
3999 const arm_2d_location_t tCentre,
4000 float fAngle,
4001 float fScale);
4002
4003/*!
4004 * \brief prepare for a transform in rgb565
4005 * \param[in] ptOP the control block, NULL means using the default control block
4006 * \param[in] ptSource the source tile
4007 * \param[in] tCentre the pivot in the source tile
4008 * \param[in] fAngle the rotation angle
4009 * \param[in] fScale the scaling factor
4010 * \return arm_2d_err_t the result of the preparing process
4011 */
4012extern
4013ARM_NONNULL(2)
4015 arm_2d_op_trans_t *ptOP,
4016 const arm_2d_tile_t *ptSource,
4017 const arm_2d_location_t tCentre,
4018 float fAngle,
4019 float fScale);
4020
4021/*!
4022 * \brief prepare for a transform in cccn888
4023 * \param[in] ptOP the control block, NULL means using the default control block
4024 * \param[in] ptSource the source tile
4025 * \param[in] tCentre the pivot in the source tile
4026 * \param[in] fAngle the rotation angle
4027 * \param[in] fScale the scaling factor
4028 * \return arm_2d_err_t the result of the preparing process
4029 */
4030extern
4031ARM_NONNULL(2)
4033 arm_2d_op_trans_t *ptOP,
4034 const arm_2d_tile_t *ptSource,
4035 const arm_2d_location_t tCentre,
4036 float fAngle,
4037 float fScale);
4038
4039/*!
4040 * \brief prepare for a transform with colour keying and opacity in gray8
4041 * \param[in] ptOP the control block, NULL means using the default control block
4042 * \param[in] ptSource the source tile
4043 * \param[in] tCentre the pivot in the source tile
4044 * \param[in] fAngle the rotation angle
4045 * \param[in] fScale the scaling factor
4046 * \param[in] chFillColour the key colour
4047 * \param[in] chRatio the opacity
4048 * \return arm_2d_err_t the result of the preparing process
4049 */
4050extern
4051ARM_NONNULL(2)
4054 const arm_2d_tile_t *ptSource,
4055 const arm_2d_location_t tCentre,
4056 float fAngle,
4057 float fScale,
4058 uint_fast8_t chFillColour,
4059 uint_fast8_t chRatio);
4060
4061/*!
4062 * \brief prepare for a transform with colour keying and opacity in rgb565
4063 * \param[in] ptOP the control block, NULL means using the default control block
4064 * \param[in] ptSource the source tile
4065 * \param[in] tCentre the pivot in the source tile
4066 * \param[in] fAngle the rotation angle
4067 * \param[in] fScale the scaling factor
4068 * \param[in] hwFillColour the key colour
4069 * \param[in] chRatio the opacity
4070 * \return arm_2d_err_t the result of the preparing process
4071 */
4072extern
4073ARM_NONNULL(2)
4076 const arm_2d_tile_t *ptSource,
4077 const arm_2d_location_t tCentre,
4078 float fAngle,
4079 float fScale,
4080 uint_fast16_t hwFillColour,
4081 uint_fast8_t chRatio);
4082
4083/*!
4084 * \brief prepare for a transform with colour keyding and opacity in cccn888
4085 * \param[in] ptOP the control block, NULL means using the default control block
4086 * \param[in] ptSource the source tile
4087 * \param[in] tCentre the pivot in the source tile
4088 * \param[in] fAngle the rotation angle
4089 * \param[in] fScale the scaling factor
4090 * \param[in] wFillColour the key colour
4091 * \param[in] chRatio the opacity
4092 * \return arm_2d_err_t the result of the preparing process
4093 */
4094extern
4095ARM_NONNULL(2)
4098 const arm_2d_tile_t *ptSource,
4099 const arm_2d_location_t tCentre,
4100 float fAngle,
4101 float fScale,
4102 uint32_t wFillColour,
4103 uint_fast8_t chRatio);
4104
4105/*!
4106 * \brief prepare for a transform with opacity in gray8
4107 * \param[in] ptOP the control block, NULL means using the default control block
4108 * \param[in] ptSource the source tile
4109 * \param[in] tCentre the pivot in the source tile
4110 * \param[in] fAngle the rotation angle
4111 * \param[in] fScale the scaling factor
4112 * \param[in] chRatio the opacity
4113 * \return arm_2d_err_t the result of the preparing process
4114 */
4115extern
4116ARM_NONNULL(2)
4119 const arm_2d_tile_t *ptSource,
4120 const arm_2d_location_t tCentre,
4121 float fAngle,
4122 float fScale,
4123 uint_fast8_t chRatio);
4124
4125/*!
4126 * \brief prepare for a transform with opacity in rgb565
4127 * \param[in] ptOP the control block, NULL means using the default control block
4128 * \param[in] ptSource the source tile
4129 * \param[in] tCentre the pivot in the source tile
4130 * \param[in] fAngle the rotation angle
4131 * \param[in] fScale the scaling factor
4132 * \param[in] chRatio the opacity
4133 * \return arm_2d_err_t the result of the preparing process
4134 */
4135extern
4136ARM_NONNULL(2)
4139 const arm_2d_tile_t *ptSource,
4140 const arm_2d_location_t tCentre,
4141 float fAngle,
4142 float fScale,
4143 uint_fast8_t chRatio);
4144
4145/*!
4146 * \brief prepare for a transform with opacity in cccn888
4147 * \param[in] ptOP the control block, NULL means using the default control block
4148 * \param[in] ptSource the source tile
4149 * \param[in] tCentre the pivot in the source tile
4150 * \param[in] fAngle the rotation angle
4151 * \param[in] fScale the scaling factor
4152 * \param[in] chRatio the opacity
4153 * \return arm_2d_err_t the result of the preparing process
4154 */
4155extern
4156ARM_NONNULL(2)
4159 const arm_2d_tile_t *ptSource,
4160 const arm_2d_location_t tCentre,
4161 float fAngle,
4162 float fScale,
4163 uint_fast8_t chRatio);
4164
4165/*!
4166 * \brief prepare for a transform with a source mask in gray8
4167 * \param[in] ptOP the control block, NULL means using the default control block
4168 * \param[in] ptSource the source tile
4169 * \param[in] ptSourceMask the source mask
4170 * \param[in] tCentre the pivot in the source tile
4171 * \param[in] fAngle the rotation angle
4172 * \param[in] fScale the scaling factor
4173 * \return arm_2d_err_t the result of the preparing process
4174 */
4175extern
4176ARM_NONNULL(2,3)
4179 const arm_2d_tile_t *ptSource,
4180 const arm_2d_tile_t *ptSourceMask,
4181 const arm_2d_location_t tCentre,
4182 float fAngle,
4183 float fScale);
4184
4185/*!
4186 * \brief prepare for a transform with a source mask in rgb565
4187 * \param[in] ptOP the control block, NULL means using the default control block
4188 * \param[in] ptSource the source tile
4189 * \param[in] ptSourceMask the source mask
4190 * \param[in] tCentre the pivot in the source tile
4191 * \param[in] fAngle the rotation angle
4192 * \param[in] fScale the scaling factor
4193 * \return arm_2d_err_t the result of the preparing process
4194 */
4195extern
4196ARM_NONNULL(2,3)
4199 const arm_2d_tile_t *ptSource,
4200 const arm_2d_tile_t *ptSourceMask,
4201 const arm_2d_location_t tCentre,
4202 float fAngle,
4203 float fScale);
4204
4205/*!
4206 * \brief prepare for a transform with a source mask in cccn888
4207 * \param[in] ptOP the control block, NULL means using the default control block
4208 * \param[in] ptSource the source tile
4209 * \param[in] ptSourceMask the source mask
4210 * \param[in] tCentre the pivot in the source tile
4211 * \param[in] fAngle the rotation angle
4212 * \param[in] fScale the scaling factor
4213 * \return arm_2d_err_t the result of the preparing process
4214 */
4215extern
4216ARM_NONNULL(2,3)
4219 const arm_2d_tile_t *ptSource,
4220 const arm_2d_tile_t *ptSourceMask,
4221 const arm_2d_location_t tCentre,
4222 float fAngle,
4223 float fScale);
4224
4225/*!
4226 * \brief prepare for a transform with a source mask and opacity in gray8
4227 * \param[in] ptOP the control block, NULL means using the default control block
4228 * \param[in] ptSource the source tile
4229 * \param[in] ptSourceMask the source mask
4230 * \param[in] tCentre the pivot in the source tile
4231 * \param[in] fAngle the rotation angle
4232 * \param[in] fScale the scaling factor
4233 * \param[in] chOpacity the opacity
4234 * \return arm_2d_err_t the result of the preparing process
4235 */
4236extern
4237ARM_NONNULL(2,3)
4240 const arm_2d_tile_t *ptSource,
4241 const arm_2d_tile_t *ptSourceMask,
4242 const arm_2d_location_t tCentre,
4243 float fAngle,
4244 float fScale,
4245 uint_fast8_t chOpacity);
4246
4247/*!
4248 * \brief prepare for a transform with a source mask and opacity in rgb565
4249 * \param[in] ptOP the control block, NULL means using the default control block
4250 * \param[in] ptSource the source tile
4251 * \param[in] ptSourceMask the source mask
4252 * \param[in] tCentre the pivot in the source tile
4253 * \param[in] fAngle the rotation angle
4254 * \param[in] fScale the scaling factor
4255 * \param[in] chOpacity the opacity
4256 * \return arm_2d_err_t the result of the preparing process
4257 */
4258extern
4259ARM_NONNULL(2,3)
4262 const arm_2d_tile_t *ptSource,
4263 const arm_2d_tile_t *ptSourceMask,
4264 const arm_2d_location_t tCentre,
4265 float fAngle,
4266 float fScale,
4267 uint_fast8_t chOpacity);
4268
4269/*!
4270 * \brief prepare for a transform with a source mask and opacity in cccn888
4271 * \param[in] ptOP the control block, NULL means using the default control block
4272 * \param[in] ptSource the source tile
4273 * \param[in] ptSourceMask the source mask
4274 * \param[in] tCentre the pivot in the source tile
4275 * \param[in] fAngle the rotation angle
4276 * \param[in] fScale the scaling factor
4277 * \param[in] chOpacity the opacity
4278 * \return arm_2d_err_t the result of the preparing process
4279 */
4280extern
4281ARM_NONNULL(2,3)
4284 const arm_2d_tile_t *ptSource,
4285 const arm_2d_tile_t *ptSourceMask,
4286 const arm_2d_location_t tCentre,
4287 float fAngle,
4288 float fScale,
4289 uint_fast8_t chOpacity);
4290
4291
4292/*!
4293 * \brief prepare for a gray8 colour-filling with a mask, a given opacity and
4294 * transform
4295 * \param[in] ptOP the control block, NULL means using the default control block
4296 * \param[in] ptMask the target mask
4297 * \param[in] tCentre the pivot in the source tile
4298 * \param[in] fAngle the rotation angle
4299 * \param[in] fScale the scaling factor
4300 * \param[in] chFillColour the colour to fill
4301 * \param[in] chOpacity the opacity
4302 * \return arm_2d_err_t the result of the preparing process
4303 */
4304extern
4305ARM_NONNULL(2)
4308 const arm_2d_tile_t *ptMask,
4309 const arm_2d_location_t tCentre,
4310 float fAngle,
4311 float fScale,
4312 uint_fast8_t chFillColour,
4313 uint_fast8_t chOpacity);
4314
4315/*!
4316 * \brief prepare for a rgb565 colour-filling with a mask, a given opacity and
4317 * transform
4318 * \param[in] ptOP the control block, NULL means using the default control block
4319 * \param[in] ptMask the target 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] hwFillColour the colour to fill
4324 * \param[in] chOpacity the opacity
4325 * \return arm_2d_err_t the result of the preparing process
4326 */
4327extern
4328ARM_NONNULL(2)
4331 const arm_2d_tile_t *ptMask,
4332 const arm_2d_location_t tCentre,
4333 float fAngle,
4334 float fScale,
4335 uint_fast16_t hwFillColour,
4336 uint_fast8_t chOpacity);
4337
4338/*!
4339 * \brief prepare for a cccn888 colour-filling with a mask, a given opacity and
4340 * transform
4341 * \param[in] ptOP the control block, NULL means using the default control block
4342 * \param[in] ptMask the target mask
4343 * \param[in] tCentre the pivot in the source tile
4344 * \param[in] fAngle the rotation angle
4345 * \param[in] fScale the scaling factor
4346 * \param[in] wFillColour the colour to fill
4347 * \param[in] chOpacity the opacity
4348 * \return arm_2d_err_t the result of the preparing process
4349 */
4350extern
4351ARM_NONNULL(2)
4354 const arm_2d_tile_t *ptMask,
4355 const arm_2d_location_t tCentre,
4356 float fAngle,
4357 float fScale,
4358 uint32_t wFillColour,
4359 uint_fast8_t chOpacity);
4360
4361/*!
4362 * \brief start a transform operation
4363 * \param[in] ptOP the control block, NULL means using the default control block
4364 * \param[in] ptTarget the target tile
4365 * \param[in] ptRegion the target region
4366 * \param[in] ptTargetCentre the pivot in the target region
4367 * \return arm_fsm_rt_t the operation result
4368 */
4369extern
4370ARM_NONNULL(2)
4372 const arm_2d_tile_t *ptTarget,
4373 const arm_2d_region_t *ptRegion,
4374 const arm_2d_location_t *ptTargetCentre);
4375
4376/*! @} */
4377
4378#if defined(__clang__)
4379# pragma clang diagnostic pop
4380#endif
4381
4382#ifdef __cplusplus
4383}
4384#endif
4385
4386#endif