xref: /OK3568_Linux_fs/external/libmali/include/KHR/mali_khrplatform.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #ifndef __khrplatform_h_
2*4882a593Smuzhiyun #define __khrplatform_h_
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun /*
5*4882a593Smuzhiyun ** Copyright (c) 2008-2018 The Khronos Group Inc.
6*4882a593Smuzhiyun **
7*4882a593Smuzhiyun ** Permission is hereby granted, free of charge, to any person obtaining a
8*4882a593Smuzhiyun ** copy of this software and/or associated documentation files (the
9*4882a593Smuzhiyun ** "Materials"), to deal in the Materials without restriction, including
10*4882a593Smuzhiyun ** without limitation the rights to use, copy, modify, merge, publish,
11*4882a593Smuzhiyun ** distribute, sublicense, and/or sell copies of the Materials, and to
12*4882a593Smuzhiyun ** permit persons to whom the Materials are furnished to do so, subject to
13*4882a593Smuzhiyun ** the following conditions:
14*4882a593Smuzhiyun **
15*4882a593Smuzhiyun ** The above copyright notice and this permission notice shall be included
16*4882a593Smuzhiyun ** in all copies or substantial portions of the Materials.
17*4882a593Smuzhiyun **
18*4882a593Smuzhiyun ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19*4882a593Smuzhiyun ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20*4882a593Smuzhiyun ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21*4882a593Smuzhiyun ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
22*4882a593Smuzhiyun ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23*4882a593Smuzhiyun ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24*4882a593Smuzhiyun ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
25*4882a593Smuzhiyun */
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun /* Khronos platform-specific types and definitions.
28*4882a593Smuzhiyun  *
29*4882a593Smuzhiyun  * The master copy of khrplatform.h is maintained in the Khronos EGL
30*4882a593Smuzhiyun  * Registry repository at https://github.com/KhronosGroup/EGL-Registry
31*4882a593Smuzhiyun  * The last semantic modification to khrplatform.h was at commit ID:
32*4882a593Smuzhiyun  *      67a3e0864c2d75ea5287b9f3d2eb74a745936692
33*4882a593Smuzhiyun  *
34*4882a593Smuzhiyun  * Adopters may modify this file to suit their platform. Adopters are
35*4882a593Smuzhiyun  * encouraged to submit platform specific modifications to the Khronos
36*4882a593Smuzhiyun  * group so that they can be included in future versions of this file.
37*4882a593Smuzhiyun  * Please submit changes by filing pull requests or issues on
38*4882a593Smuzhiyun  * the EGL Registry repository linked above.
39*4882a593Smuzhiyun  *
40*4882a593Smuzhiyun  *
41*4882a593Smuzhiyun  * See the Implementer's Guidelines for information about where this file
42*4882a593Smuzhiyun  * should be located on your system and for more details of its use:
43*4882a593Smuzhiyun  *    http://www.khronos.org/registry/implementers_guide.pdf
44*4882a593Smuzhiyun  *
45*4882a593Smuzhiyun  * This file should be included as
46*4882a593Smuzhiyun  *        #include <KHR/khrplatform.h>
47*4882a593Smuzhiyun  * by Khronos client API header files that use its types and defines.
48*4882a593Smuzhiyun  *
49*4882a593Smuzhiyun  * The types in khrplatform.h should only be used to define API-specific types.
50*4882a593Smuzhiyun  *
51*4882a593Smuzhiyun  * Types defined in khrplatform.h:
52*4882a593Smuzhiyun  *    khronos_int8_t              signed   8  bit
53*4882a593Smuzhiyun  *    khronos_uint8_t             unsigned 8  bit
54*4882a593Smuzhiyun  *    khronos_int16_t             signed   16 bit
55*4882a593Smuzhiyun  *    khronos_uint16_t            unsigned 16 bit
56*4882a593Smuzhiyun  *    khronos_int32_t             signed   32 bit
57*4882a593Smuzhiyun  *    khronos_uint32_t            unsigned 32 bit
58*4882a593Smuzhiyun  *    khronos_int64_t             signed   64 bit
59*4882a593Smuzhiyun  *    khronos_uint64_t            unsigned 64 bit
60*4882a593Smuzhiyun  *    khronos_intptr_t            signed   same number of bits as a pointer
61*4882a593Smuzhiyun  *    khronos_uintptr_t           unsigned same number of bits as a pointer
62*4882a593Smuzhiyun  *    khronos_ssize_t             signed   size
63*4882a593Smuzhiyun  *    khronos_usize_t             unsigned size
64*4882a593Smuzhiyun  *    khronos_float_t             signed   32 bit floating point
65*4882a593Smuzhiyun  *    khronos_time_ns_t           unsigned 64 bit time in nanoseconds
66*4882a593Smuzhiyun  *    khronos_utime_nanoseconds_t unsigned time interval or absolute time in
67*4882a593Smuzhiyun  *                                         nanoseconds
68*4882a593Smuzhiyun  *    khronos_stime_nanoseconds_t signed time interval in nanoseconds
69*4882a593Smuzhiyun  *    khronos_boolean_enum_t      enumerated boolean type. This should
70*4882a593Smuzhiyun  *      only be used as a base type when a client API's boolean type is
71*4882a593Smuzhiyun  *      an enum. Client APIs which use an integer or other type for
72*4882a593Smuzhiyun  *      booleans cannot use this as the base type for their boolean.
73*4882a593Smuzhiyun  *
74*4882a593Smuzhiyun  * Tokens defined in khrplatform.h:
75*4882a593Smuzhiyun  *
76*4882a593Smuzhiyun  *    KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values.
77*4882a593Smuzhiyun  *
78*4882a593Smuzhiyun  *    KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0.
79*4882a593Smuzhiyun  *    KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0.
80*4882a593Smuzhiyun  *
81*4882a593Smuzhiyun  * Calling convention macros defined in this file:
82*4882a593Smuzhiyun  *    KHRONOS_APICALL
83*4882a593Smuzhiyun  *    KHRONOS_APIENTRY
84*4882a593Smuzhiyun  *    KHRONOS_APIATTRIBUTES
85*4882a593Smuzhiyun  *
86*4882a593Smuzhiyun  * These may be used in function prototypes as:
87*4882a593Smuzhiyun  *
88*4882a593Smuzhiyun  *      KHRONOS_APICALL void KHRONOS_APIENTRY funcname(
89*4882a593Smuzhiyun  *                                  int arg1,
90*4882a593Smuzhiyun  *                                  int arg2) KHRONOS_APIATTRIBUTES;
91*4882a593Smuzhiyun  */
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun #if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC)
94*4882a593Smuzhiyun #   define KHRONOS_STATIC 1
95*4882a593Smuzhiyun #endif
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun /*-------------------------------------------------------------------------
98*4882a593Smuzhiyun  * Definition of KHRONOS_APICALL
99*4882a593Smuzhiyun  *-------------------------------------------------------------------------
100*4882a593Smuzhiyun  * This precedes the return type of the function in the function prototype.
101*4882a593Smuzhiyun  */
102*4882a593Smuzhiyun #if defined(KHRONOS_STATIC)
103*4882a593Smuzhiyun     /* If the preprocessor constant KHRONOS_STATIC is defined, make the
104*4882a593Smuzhiyun      * header compatible with static linking. */
105*4882a593Smuzhiyun #   define KHRONOS_APICALL
106*4882a593Smuzhiyun #elif defined(_WIN32)
107*4882a593Smuzhiyun #   define KHRONOS_APICALL __declspec(dllimport)
108*4882a593Smuzhiyun #elif defined (__SYMBIAN32__)
109*4882a593Smuzhiyun #   define KHRONOS_APICALL IMPORT_C
110*4882a593Smuzhiyun #elif defined(__ANDROID__)
111*4882a593Smuzhiyun #   define KHRONOS_APICALL __attribute__((visibility("default")))
112*4882a593Smuzhiyun #else
113*4882a593Smuzhiyun #   define KHRONOS_APICALL
114*4882a593Smuzhiyun #endif
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun /*-------------------------------------------------------------------------
117*4882a593Smuzhiyun  * Definition of KHRONOS_APIENTRY
118*4882a593Smuzhiyun  *-------------------------------------------------------------------------
119*4882a593Smuzhiyun  * This follows the return type of the function  and precedes the function
120*4882a593Smuzhiyun  * name in the function prototype.
121*4882a593Smuzhiyun  */
122*4882a593Smuzhiyun #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(KHRONOS_STATIC)
123*4882a593Smuzhiyun     /* Win32 but not WinCE */
124*4882a593Smuzhiyun #   define KHRONOS_APIENTRY __stdcall
125*4882a593Smuzhiyun #else
126*4882a593Smuzhiyun #   define KHRONOS_APIENTRY
127*4882a593Smuzhiyun #endif
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun /*-------------------------------------------------------------------------
130*4882a593Smuzhiyun  * Definition of KHRONOS_APIATTRIBUTES
131*4882a593Smuzhiyun  *-------------------------------------------------------------------------
132*4882a593Smuzhiyun  * This follows the closing parenthesis of the function prototype arguments.
133*4882a593Smuzhiyun  */
134*4882a593Smuzhiyun #if defined (__ARMCC_2__)
135*4882a593Smuzhiyun #define KHRONOS_APIATTRIBUTES __softfp
136*4882a593Smuzhiyun #else
137*4882a593Smuzhiyun #define KHRONOS_APIATTRIBUTES
138*4882a593Smuzhiyun #endif
139*4882a593Smuzhiyun 
140*4882a593Smuzhiyun /*-------------------------------------------------------------------------
141*4882a593Smuzhiyun  * basic type definitions
142*4882a593Smuzhiyun  *-----------------------------------------------------------------------*/
143*4882a593Smuzhiyun #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__)
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun /*
147*4882a593Smuzhiyun  * Using <stdint.h>
148*4882a593Smuzhiyun  */
149*4882a593Smuzhiyun #include <stdint.h>
150*4882a593Smuzhiyun typedef int32_t                 khronos_int32_t;
151*4882a593Smuzhiyun typedef uint32_t                khronos_uint32_t;
152*4882a593Smuzhiyun typedef int64_t                 khronos_int64_t;
153*4882a593Smuzhiyun typedef uint64_t                khronos_uint64_t;
154*4882a593Smuzhiyun #define KHRONOS_SUPPORT_INT64   1
155*4882a593Smuzhiyun #define KHRONOS_SUPPORT_FLOAT   1
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun #elif defined(__VMS ) || defined(__sgi)
158*4882a593Smuzhiyun 
159*4882a593Smuzhiyun /*
160*4882a593Smuzhiyun  * Using <inttypes.h>
161*4882a593Smuzhiyun  */
162*4882a593Smuzhiyun #include <inttypes.h>
163*4882a593Smuzhiyun typedef int32_t                 khronos_int32_t;
164*4882a593Smuzhiyun typedef uint32_t                khronos_uint32_t;
165*4882a593Smuzhiyun typedef int64_t                 khronos_int64_t;
166*4882a593Smuzhiyun typedef uint64_t                khronos_uint64_t;
167*4882a593Smuzhiyun #define KHRONOS_SUPPORT_INT64   1
168*4882a593Smuzhiyun #define KHRONOS_SUPPORT_FLOAT   1
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun #elif defined(_WIN32) && !defined(__SCITECH_SNAP__)
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun /*
173*4882a593Smuzhiyun  * Win32
174*4882a593Smuzhiyun  */
175*4882a593Smuzhiyun typedef __int32                 khronos_int32_t;
176*4882a593Smuzhiyun typedef unsigned __int32        khronos_uint32_t;
177*4882a593Smuzhiyun typedef __int64                 khronos_int64_t;
178*4882a593Smuzhiyun typedef unsigned __int64        khronos_uint64_t;
179*4882a593Smuzhiyun #define KHRONOS_SUPPORT_INT64   1
180*4882a593Smuzhiyun #define KHRONOS_SUPPORT_FLOAT   1
181*4882a593Smuzhiyun 
182*4882a593Smuzhiyun #elif defined(__sun__) || defined(__digital__)
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun /*
185*4882a593Smuzhiyun  * Sun or Digital
186*4882a593Smuzhiyun  */
187*4882a593Smuzhiyun typedef int                     khronos_int32_t;
188*4882a593Smuzhiyun typedef unsigned int            khronos_uint32_t;
189*4882a593Smuzhiyun #if defined(__arch64__) || defined(_LP64)
190*4882a593Smuzhiyun typedef long int                khronos_int64_t;
191*4882a593Smuzhiyun typedef unsigned long int       khronos_uint64_t;
192*4882a593Smuzhiyun #else
193*4882a593Smuzhiyun typedef long long int           khronos_int64_t;
194*4882a593Smuzhiyun typedef unsigned long long int  khronos_uint64_t;
195*4882a593Smuzhiyun #endif /* __arch64__ */
196*4882a593Smuzhiyun #define KHRONOS_SUPPORT_INT64   1
197*4882a593Smuzhiyun #define KHRONOS_SUPPORT_FLOAT   1
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun #elif 0
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun /*
202*4882a593Smuzhiyun  * Hypothetical platform with no float or int64 support
203*4882a593Smuzhiyun  */
204*4882a593Smuzhiyun typedef int                     khronos_int32_t;
205*4882a593Smuzhiyun typedef unsigned int            khronos_uint32_t;
206*4882a593Smuzhiyun #define KHRONOS_SUPPORT_INT64   0
207*4882a593Smuzhiyun #define KHRONOS_SUPPORT_FLOAT   0
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun #else
210*4882a593Smuzhiyun 
211*4882a593Smuzhiyun /*
212*4882a593Smuzhiyun  * Generic fallback
213*4882a593Smuzhiyun  */
214*4882a593Smuzhiyun #include <stdint.h>
215*4882a593Smuzhiyun typedef int32_t                 khronos_int32_t;
216*4882a593Smuzhiyun typedef uint32_t                khronos_uint32_t;
217*4882a593Smuzhiyun typedef int64_t                 khronos_int64_t;
218*4882a593Smuzhiyun typedef uint64_t                khronos_uint64_t;
219*4882a593Smuzhiyun #define KHRONOS_SUPPORT_INT64   1
220*4882a593Smuzhiyun #define KHRONOS_SUPPORT_FLOAT   1
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun #endif
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun /*
226*4882a593Smuzhiyun  * Types that are (so far) the same on all platforms
227*4882a593Smuzhiyun  */
228*4882a593Smuzhiyun typedef signed   char          khronos_int8_t;
229*4882a593Smuzhiyun typedef unsigned char          khronos_uint8_t;
230*4882a593Smuzhiyun typedef signed   short int     khronos_int16_t;
231*4882a593Smuzhiyun typedef unsigned short int     khronos_uint16_t;
232*4882a593Smuzhiyun 
233*4882a593Smuzhiyun /*
234*4882a593Smuzhiyun  * Types that differ between LLP64 and LP64 architectures - in LLP64,
235*4882a593Smuzhiyun  * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
236*4882a593Smuzhiyun  * to be the only LLP64 architecture in current use.
237*4882a593Smuzhiyun  */
238*4882a593Smuzhiyun #ifdef _WIN64
239*4882a593Smuzhiyun typedef signed   long long int khronos_intptr_t;
240*4882a593Smuzhiyun typedef unsigned long long int khronos_uintptr_t;
241*4882a593Smuzhiyun typedef signed   long long int khronos_ssize_t;
242*4882a593Smuzhiyun typedef unsigned long long int khronos_usize_t;
243*4882a593Smuzhiyun #else
244*4882a593Smuzhiyun typedef signed   long  int     khronos_intptr_t;
245*4882a593Smuzhiyun typedef unsigned long  int     khronos_uintptr_t;
246*4882a593Smuzhiyun typedef signed   long  int     khronos_ssize_t;
247*4882a593Smuzhiyun typedef unsigned long  int     khronos_usize_t;
248*4882a593Smuzhiyun #endif
249*4882a593Smuzhiyun 
250*4882a593Smuzhiyun #if KHRONOS_SUPPORT_FLOAT
251*4882a593Smuzhiyun /*
252*4882a593Smuzhiyun  * Float type
253*4882a593Smuzhiyun  */
254*4882a593Smuzhiyun typedef          float         khronos_float_t;
255*4882a593Smuzhiyun #endif
256*4882a593Smuzhiyun 
257*4882a593Smuzhiyun #if KHRONOS_SUPPORT_INT64
258*4882a593Smuzhiyun /* Time types
259*4882a593Smuzhiyun  *
260*4882a593Smuzhiyun  * These types can be used to represent a time interval in nanoseconds or
261*4882a593Smuzhiyun  * an absolute Unadjusted System Time.  Unadjusted System Time is the number
262*4882a593Smuzhiyun  * of nanoseconds since some arbitrary system event (e.g. since the last
263*4882a593Smuzhiyun  * time the system booted).  The Unadjusted System Time is an unsigned
264*4882a593Smuzhiyun  * 64 bit value that wraps back to 0 every 584 years.  Time intervals
265*4882a593Smuzhiyun  * may be either signed or unsigned.
266*4882a593Smuzhiyun  */
267*4882a593Smuzhiyun typedef khronos_uint64_t       khronos_utime_nanoseconds_t;
268*4882a593Smuzhiyun typedef khronos_int64_t        khronos_stime_nanoseconds_t;
269*4882a593Smuzhiyun #endif
270*4882a593Smuzhiyun 
271*4882a593Smuzhiyun /*
272*4882a593Smuzhiyun  * Dummy value used to pad enum types to 32 bits.
273*4882a593Smuzhiyun  */
274*4882a593Smuzhiyun #ifndef KHRONOS_MAX_ENUM
275*4882a593Smuzhiyun #define KHRONOS_MAX_ENUM 0x7FFFFFFF
276*4882a593Smuzhiyun #endif
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun /*
279*4882a593Smuzhiyun  * Enumerated boolean type
280*4882a593Smuzhiyun  *
281*4882a593Smuzhiyun  * Values other than zero should be considered to be true.  Therefore
282*4882a593Smuzhiyun  * comparisons should not be made against KHRONOS_TRUE.
283*4882a593Smuzhiyun  */
284*4882a593Smuzhiyun typedef enum {
285*4882a593Smuzhiyun     KHRONOS_FALSE = 0,
286*4882a593Smuzhiyun     KHRONOS_TRUE  = 1,
287*4882a593Smuzhiyun     KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM
288*4882a593Smuzhiyun } khronos_boolean_enum_t;
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun #endif /* __khrplatform_h_ */
291