Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

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