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