31#ifndef __ARM_2D_TYPES_H__
32#define __ARM_2D_TYPES_H__
41#include "arm_2d_features.h"
42#include "arm_2d_utils.h"
43#include "__arm_2d_math.h"
50# pragma clang diagnostic push
51# pragma clang diagnostic ignored "-Wunknown-warning-option"
52# pragma clang diagnostic ignored "-Wreserved-identifier"
53# pragma clang diagnostic ignored "-Wmissing-declarations"
54# pragma clang diagnostic ignored "-Wpadded"
55# pragma clang diagnostic ignored "-Wc11-extensions"
56# pragma clang diagnostic ignored "-Wembedded-directive"
57#elif __IS_COMPILER_ARM_COMPILER_5__
58# pragma diag_suppress 64
59#elif __IS_COMPILER_GCC__
60# pragma GCC diagnostic push
61# pragma GCC diagnostic ignored "-Wmissing-declarations"
62# pragma GCC diagnostic ignored "-Wpadded"
72#define bHasSrcMask bHasSourceMask
73#define bHasDesMask bHasTargetMask
83#if defined(__IS_COMPILER_GCC__) && __IS_COMPILER_GCC__ && __ARM_2D_HAS_HELIUM__
85# if (__GNUC__ > 13) || \
86 (__GNUC__ == 13 && __GNUC_MINOR__ > 2) || \
87 (__GNUC__ == 13 && __GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ >= 1)
90# ifndef __ARM_2D_SUPPRESS_GCC_HELIUM_PERFORMANCE_WARNING__
91# pragma GCC warning "GCC only has basic support for Helium and its\
92 performance might highly like disappoint you,You can define a macro\
93 __ARM_2D_SUPPRESS_GCC_HELIUM_PERFORMANCE_WARNING__ to suppress this warning."
96# ifndef USE_MVE_INTRINSICS
97# define USE_MVE_INTRINSICS
102# ifndef __ARM_2D_SUPPRESS_GCC_HELIUM_PATCH_WARNING__
103# pragma GCC warning "As GCC has compilation issues for supporting Helium,\
104 the scalar version is used. You can define a macro\
105 __ARM_2D_SUPPRESS_GCC_HELIUM_PATCH_WARNING__ to suppress this warning."
108# undef __ARM_2D_HAS_HELIUM__
109# undef __ARM_2D_HAS_HELIUM_INTEGER__
110# undef __ARM_2D_HAS_HELIUM_FLOAT__
112# define __ARM_2D_HAS_HELIUM__ 0
113# define __ARM_2D_HAS_HELIUM_INTEGER__ 0
114# define __ARM_2D_HAS_HELIUM_FLOAT__ 0
120#if defined(__IS_COMPILER_IAR__) && __IS_COMPILER_IAR__
121# ifndef USE_MVE_INTRINSICS
122# define USE_MVE_INTRINSICS
126#if defined(__IS_COMPILER_GCC__) && __IS_COMPILER_GCC__
127# define __va_list va_list
130#if defined(__IS_COMPILER_LLVM__) && __IS_COMPILER_LLVM__
131# define __va_list va_list
134#if defined(__IS_COMPILER_IAR__) && __IS_COMPILER_IAR__
135# define __va_list va_list
139#if __IS_COMPILER_IAR__ || __IS_COMPILER_ARM_COMPILER_5__
141#define __UINT8_MAX__ UINT8_MAX
142#define __UINT16_MAX__ UINT16_MAX
143#define __UINT32_MAX__ UINT32_MAX
145#define __INT8_MAX__ INT8_MAX
146#define __INT16_MAX__ INT16_MAX
147#define __INT32_MAX__ INT32_MAX
195 ARM_2D_RT_PFB_USER_DRAW,
246 uint8_t chChannel[4];
393 ARM_2D_COLOUR_SZ_pos = 1,
394 ARM_2D_COLOUR_SZ_msk = (0x07 << ARM_2D_COLOUR_SZ_pos),
397 ARM_2D_COLOUR_LITTLE_ENDIAN = 0,
398 ARM_2D_COLOUR_BIG_ENDIAN = 1,
400 ARM_2D_COLOUR_LITTLE_ENDIAN_msk = ARM_2D_COLOUR_LITTLE_ENDIAN << 4,
401 ARM_2D_COLOUR_BIG_ENDIAN_msk = ARM_2D_COLOUR_BIG_ENDIAN << 4,
403 ARM_2D_COLOUR_NO_ALPHA = 0,
404 ARM_2D_COLOUR_HAS_ALPHA = 1,
406 ARM_2D_COLOUR_NO_ALPHA_msk = ARM_2D_COLOUR_NO_ALPHA << 0,
407 ARM_2D_COLOUR_HAS_ALPHA_msk = ARM_2D_COLOUR_HAS_ALPHA << 0,
409 ARM_2D_COLOUR_VARIANT_pos = 5,
410 ARM_2D_COLOUR_VARIANT_msk = 0x03 << ARM_2D_COLOUR_VARIANT_pos,
414#define ARM_2D_M_COLOUR_SZ_1BIT 0
415#define ARM_2D_M_COLOUR_SZ_2BIT 1
416#define ARM_2D_M_COLOUR_SZ_4BIT 2
417#define ARM_2D_M_COLOUR_SZ_8BIT 3
418#define ARM_2D_M_COLOUR_SZ_16BIT 4
419#define ARM_2D_M_COLOUR_SZ_32BIT 5
420#define ARM_2D_M_COLOUR_SZ_24BIT 6
422#define ARM_2D_M_COLOUR_SZ_1BIT_msk (ARM_2D_M_COLOUR_SZ_1BIT << 1)
423#define ARM_2D_M_COLOUR_SZ_2BIT_msk (ARM_2D_M_COLOUR_SZ_2BIT << 1)
424#define ARM_2D_M_COLOUR_SZ_4BIT_msk (ARM_2D_M_COLOUR_SZ_4BIT << 1)
425#define ARM_2D_M_COLOUR_SZ_8BIT_msk (ARM_2D_M_COLOUR_SZ_8BIT << 1)
426#define ARM_2D_M_COLOUR_SZ_16BIT_msk (ARM_2D_M_COLOUR_SZ_16BIT<< 1)
427#define ARM_2D_M_COLOUR_SZ_32BIT_msk (ARM_2D_M_COLOUR_SZ_32BIT<< 1)
428#define ARM_2D_M_COLOUR_SZ_24BIT_msk (ARM_2D_M_COLOUR_SZ_24BIT<< 1)
429#define ARM_2D_M_COLOUR_SZ_msk (0x07 << 1),
431#define ARM_2D_M_COLOUR_LITTLE_ENDIAN 0
432#define ARM_2D_M_COLOUR_BIG_ENDIAN 1
434#define ARM_2D_M_COLOUR_LITTLE_ENDIAN_msk (ARM_2D_M_COLOUR_LITTLE_ENDIAN << 4)
435#define ARM_2D_M_COLOUR_BIG_ENDIAN_msk (ARM_2D_M_COLOUR_BIG_ENDIAN << 4)
437#define ARM_2D_M_COLOUR_NO_ALPHA 0
438#define ARM_2D_M_COLOUR_HAS_ALPHA 1
440#define ARM_2D_M_COLOUR_NO_ALPHA_msk (ARM_2D_M_COLOUR_NO_ALPHA << 0)
441#define ARM_2D_M_COLOUR_HAS_ALPHA_msk (ARM_2D_M_COLOUR_HAS_ALPHA << 0)
443#define ARM_2D_M_COLOUR_VARIANT_pos 5
444#define ARM_2D_M_COLOUR_VARIANT_msk (0x03<<ARM_2D_M_COLOUR_VARIANT_pos)
451 ARM_2D_COLOUR_MONOCHROME = ARM_2D_COLOUR_SZ_1BIT_msk | ARM_2D_COLOUR_VARIANT_msk,
452 ARM_2D_COLOUR_BIN = ARM_2D_COLOUR_MONOCHROME,
453 ARM_2D_COLOUR_1BIT = ARM_2D_COLOUR_MONOCHROME,
455 ARM_2D_COLOUR_MASK_A1 = ARM_2D_COLOUR_MONOCHROME,
462 ARM_2D_COLOUR_8BIT = ARM_2D_COLOUR_SZ_8BIT_msk,
463 ARM_2D_COLOUR_GRAY8 = ARM_2D_COLOUR_SZ_8BIT_msk,
464 ARM_2D_COLOUR_MASK_A8 = ARM_2D_COLOUR_SZ_8BIT_msk | ARM_2D_COLOUR_VARIANT_msk,
466 ARM_2D_COLOUR_16BIT = ARM_2D_COLOUR_SZ_16BIT_msk,
467 ARM_2D_COLOUR_RGB16 = ARM_2D_COLOUR_SZ_16BIT_msk,
468 ARM_2D_COLOUR_RGB565 = ARM_2D_COLOUR_RGB16,
475 ARM_2D_COLOUR_24BIT = ARM_2D_COLOUR_SZ_24BIT_msk ,
476 ARM_2D_COLOUR_RGB24 = ARM_2D_COLOUR_SZ_24BIT_msk ,
478 ARM_2D_COLOUR_32BIT = ARM_2D_COLOUR_SZ_32BIT_msk ,
479 ARM_2D_COLOUR_RGB32 = ARM_2D_COLOUR_SZ_32BIT_msk ,
481 ARM_2D_COLOUR_CCCN888 = ARM_2D_COLOUR_RGB32 ,
482 ARM_2D_COLOUR_CCCA8888 = ARM_2D_COLOUR_SZ_32BIT_msk |
483 ARM_2D_COLOUR_HAS_ALPHA_msk ,
485 ARM_2D_COLOUR_RGB888 = ARM_2D_COLOUR_CCCN888 ,
486 ARM_2D_COLOUR_BGRA8888 = ARM_2D_COLOUR_CCCA8888 ,
496 ARM_2D_CHANNEL_8in32 = ARM_2D_COLOUR_SZ_32BIT_msk |
497 ARM_2D_COLOUR_HAS_ALPHA_msk |
498 ARM_2D_COLOUR_VARIANT_msk ,
502#define ARM_2D_M_COLOUR_MONOCHROME ( ARM_2D_M_COLOUR_SZ_1BIT_msk \
503 | ARM_2D_M_COLOUR_VARIANT_msk )
504#define ARM_2D_M_COLOUR_BIN ARM_2D_M_COLOUR_MONOCHROME
505#define ARM_2D_M_COLOUR_1BIT ARM_2D_M_COLOUR_MONOCHROME
507#define ARM_2D_M_COLOUR_MASK_A1 ARM_2D_M_COLOUR_SZ_1BIT_msk
508#define ARM_2D_M_COLOUR_MASK_A2 ARM_2D_M_COLOUR_SZ_2BIT_msk
509#define ARM_2D_M_COLOUR_MASK_A4 ARM_2D_M_COLOUR_SZ_4BIT_msk
511#define ARM_2D_M_COLOUR_8BIT ARM_2D_M_COLOUR_SZ_8BIT_msk
512#define ARM_2D_M_COLOUR_GRAY8 ARM_2D_M_COLOUR_SZ_8BIT_msk
513#define ARM_2D_M_COLOUR_MASK_A8 ( ARM_2D_M_COLOUR_SZ_8BIT_msk \
514 | ARM_2D_M_COLOUR_VARIANT_msk)
516#define ARM_2D_M_COLOUR_16BIT ARM_2D_M_COLOUR_SZ_16BIT_msk
517#define ARM_2D_M_COLOUR_RGB16 ARM_2D_M_COLOUR_SZ_16BIT_msk
518#define ARM_2D_M_COLOUR_RGB565 ARM_2D_M_COLOUR_RGB16
525#define ARM_2D_M_COLOUR_24BIT ARM_2D_M_COLOUR_SZ_24BIT_msk
526#define ARM_2D_M_COLOUR_RGB24 ARM_2D_M_COLOUR_SZ_24BIT_msk
528#define ARM_2D_M_COLOUR_32BIT ARM_2D_M_COLOUR_SZ_32BIT_msk
529#define ARM_2D_M_COLOUR_RGB32 ARM_2D_M_COLOUR_SZ_32BIT_msk
531#define ARM_2D_M_COLOUR_CCCN888 ARM_2D_M_COLOUR_RGB32
534#define ARM_2D_M_COLOUR_CCCA8888 ( ARM_2D_M_COLOUR_SZ_32BIT_msk \
535 | ARM_2D_M_COLOUR_HAS_ALPHA_msk)
537#define ARM_2D_M_COLOUR_RGBX888 ARM_2D_M_COLOUR_CCCN888
538#define ARM_2D_M_COLOUR_BGRA8888 ARM_2D_M_COLOUR_CCCA8888
548#define ARM_2D_M_CHANNEL_8in32 ( ARM_2D_M_COLOUR_SZ_32BIT_msk \
549 | ARM_2D_M_COLOUR_HAS_ALPHA_msk) \
550 | ARM_2D_M_COLOUR_VARIANT_msk )
558 uint8_t bHasAlpha : 1;
559 uint8_t u3ColourSZ : 3;
560 uint8_t bBigEndian : 1;
561 uint8_t u2Variant : 2;
565 uint8_t u7ColourFormat : 7;
646 uint8_t bHasEnforcedColour : 1;
647 uint8_t bDerivedResource : 1;
648 uint8_t bVirtualResource : 1;
649 uint8_t bVirtualScreen : 1;
650 uint8_t u3ExtensionID : 3;
656 uint8_t bIsNewFrame : 1;
657 uint8_t bIsDryRun : 1;
660 int16_t iTargetStride;
750__attribute__((aligned(4)))
755 uint8_t chBottomLeft;
756 uint8_t chBottomRight;
769 uint8_t chBottomLeft;
787 uint8_t chBottomLeft;
809 uint32_t u24SizeInByte : 24;
810 uint32_t u2ItemSize : 3;
811 uint32_t u2Align : 3;
824 uint32_t u24SizeInByte : 24;
825 uint32_t u2ItemSize : 3;
826 uint32_t u2Align : 3;
948#define ARM_2D_OP_INFO_PARAM_HAS_SOURCE _BV(0)
949#define ARM_2D_OP_INFO_PARAM_HAS_TARGET _BV(1)
950#define ARM_2D_OP_INFO_PARAM_HAS_SOURCE_MASK _BV(2)
951#define ARM_2D_OP_INFO_PARAM_HAS_TARGET_MASK _BV(3)
952#define ARM_2D_OP_INFO_PARAM_HAS_ORIGIN _BV(4)
953#define ARM_2D_OP_INFO_PARAM_HAS_EXTRA_SOURCE _BV(5)
954#define ARM_2D_OP_INFO_PARAM_HAS_EXTRA_SOURCE_MASK _BV(6)
957#define ARM_2D_OP_INFO_PARAM_TILES_MASK \
958 ( ARM_2D_OP_INFO_PARAM_HAS_SOURCE \
959 | ARM_2D_OP_INFO_PARAM_HAS_TARGET \
960 | ARM_2D_OP_INFO_PARAM_HAS_SOURCE_MASK \
961 | ARM_2D_OP_INFO_PARAM_HAS_TARGET_MASK \
962 | ARM_2D_OP_INFO_PARAM_HAS_ORIGIN \
963 | ARM_2D_OP_INFO_PARAM_HAS_EXTRA_SOURCE \
964 | ARM_2D_OP_INFO_PARAM_HAS_EXTRA_SOURCE_MASK )
978 uint8_t bHasSource : 1;
979 uint8_t bHasTarget : 1;
980 uint8_t bHasSourceMask : 1;
981 uint8_t bHasTargetMask : 1;
982 uint8_t bHasOrigin : 1;
983 uint8_t bHasExtraSource : 1;
984 uint8_t bHasExtraSourceMask : 1;
985 uint8_t bAllowEnforcedColour : 1;
990 uint8_t chInClassOffset;
1000 uint8_t CopyOrigLike;
1001 uint8_t FillOrigLike;
1004 uint8_t TileProcessLike;
1006 }LowLevelInterfaceIndex;
1043 ARM_2D_PREF_ACC_DONT_CARE = 3,
1046#define __ARM_2D_OP_STATUS_BUSY_msk (1 << 4)
1047#define __ARM_2D_OP_STATUS_IO_ERROR_msk (1 << 5)
1048#define __ARM_2D_OP_STATUS_CPL_msk (1 << 6)
1056 uint16_t u4SubTaskCount : 4;
1057 uint16_t bIsBusy : 1;
1058 uint16_t bIOError : 1;
1059 uint16_t bOpCpl : 1;
1076 uint8_t u2ACCMethods : 2;
1085#if __ARM_2D_HAS_ASYNC__
1086 uintptr_t pSemaphore;
1294#if (__ARM_2D_HAS_HELIUM_FLOAT__ || __ARM_2D_HAS_FPU__) \
1295 && !__ARM_2D_CFG_FORCED_FIXED_POINT_TRANSFORM__
1326#if defined(__clang__)
1327#pragma clang diagnostic pop
1328#elif __IS_COMPILER_ARM_COMPILER_5__
1329#pragma diag_warning 64
1330#elif __IS_COMPILER_GCC__
1331#pragma GCC diagnostic pop