include/SDL_opengles2_khrplatform.h
author Steven M. Vascellaro <svascellaro@gmail.com>
Mon, 22 Oct 2018 10:55:18 -0400
changeset 12379 5dc13016cf34
parent 8808 da1e1d6e84c4
permissions -rw-r--r--
joystick: Add Linux mappings for "Xbox One Wireless Controller (Model 1708)"

Adds controller bindings to support the "Xbox One Wireless Controller
(Model 1708)" on Linux. The Model 1708 was released in 2016 alongside the
Xbox One S. It is the current model being sold by Microsoft as of writing.
(October 22, 2018)
     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: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $
    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 #   define KHRONOS_APICALL __declspec(dllimport)
   102 #elif defined (__SYMBIAN32__)
   103 #   define KHRONOS_APICALL IMPORT_C
   104 #else
   105 #   define KHRONOS_APICALL
   106 #endif
   107 
   108 /*-------------------------------------------------------------------------
   109  * Definition of KHRONOS_APIENTRY
   110  *-------------------------------------------------------------------------
   111  * This follows the return type of the function  and precedes the function
   112  * name in the function prototype.
   113  */
   114 #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__)
   115     /* Win32 but not WinCE */
   116 #   define KHRONOS_APIENTRY __stdcall
   117 #else
   118 #   define KHRONOS_APIENTRY
   119 #endif
   120 
   121 /*-------------------------------------------------------------------------
   122  * Definition of KHRONOS_APIATTRIBUTES
   123  *-------------------------------------------------------------------------
   124  * This follows the closing parenthesis of the function prototype arguments.
   125  */
   126 #if defined (__ARMCC_2__)
   127 #define KHRONOS_APIATTRIBUTES __softfp
   128 #else
   129 #define KHRONOS_APIATTRIBUTES
   130 #endif
   131 
   132 /*-------------------------------------------------------------------------
   133  * basic type definitions
   134  *-----------------------------------------------------------------------*/
   135 #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__)
   136 
   137 
   138 /*
   139  * Using <stdint.h>
   140  */
   141 #include <stdint.h>
   142 typedef int32_t                 khronos_int32_t;
   143 typedef uint32_t                khronos_uint32_t;
   144 typedef int64_t                 khronos_int64_t;
   145 typedef uint64_t                khronos_uint64_t;
   146 #define KHRONOS_SUPPORT_INT64   1
   147 #define KHRONOS_SUPPORT_FLOAT   1
   148 
   149 #elif defined(__VMS ) || defined(__sgi)
   150 
   151 /*
   152  * Using <inttypes.h>
   153  */
   154 #include <inttypes.h>
   155 typedef int32_t                 khronos_int32_t;
   156 typedef uint32_t                khronos_uint32_t;
   157 typedef int64_t                 khronos_int64_t;
   158 typedef uint64_t                khronos_uint64_t;
   159 #define KHRONOS_SUPPORT_INT64   1
   160 #define KHRONOS_SUPPORT_FLOAT   1
   161 
   162 #elif defined(_WIN32) && !defined(__SCITECH_SNAP__)
   163 
   164 /*
   165  * Win32
   166  */
   167 typedef __int32                 khronos_int32_t;
   168 typedef unsigned __int32        khronos_uint32_t;
   169 typedef __int64                 khronos_int64_t;
   170 typedef unsigned __int64        khronos_uint64_t;
   171 #define KHRONOS_SUPPORT_INT64   1
   172 #define KHRONOS_SUPPORT_FLOAT   1
   173 
   174 #elif defined(__sun__) || defined(__digital__)
   175 
   176 /*
   177  * Sun or Digital
   178  */
   179 typedef int                     khronos_int32_t;
   180 typedef unsigned int            khronos_uint32_t;
   181 #if defined(__arch64__) || defined(_LP64)
   182 typedef long int                khronos_int64_t;
   183 typedef unsigned long int       khronos_uint64_t;
   184 #else
   185 typedef long long int           khronos_int64_t;
   186 typedef unsigned long long int  khronos_uint64_t;
   187 #endif /* __arch64__ */
   188 #define KHRONOS_SUPPORT_INT64   1
   189 #define KHRONOS_SUPPORT_FLOAT   1
   190 
   191 #elif 0
   192 
   193 /*
   194  * Hypothetical platform with no float or int64 support
   195  */
   196 typedef int                     khronos_int32_t;
   197 typedef unsigned int            khronos_uint32_t;
   198 #define KHRONOS_SUPPORT_INT64   0
   199 #define KHRONOS_SUPPORT_FLOAT   0
   200 
   201 #else
   202 
   203 /*
   204  * Generic fallback
   205  */
   206 #include <stdint.h>
   207 typedef int32_t                 khronos_int32_t;
   208 typedef uint32_t                khronos_uint32_t;
   209 typedef int64_t                 khronos_int64_t;
   210 typedef uint64_t                khronos_uint64_t;
   211 #define KHRONOS_SUPPORT_INT64   1
   212 #define KHRONOS_SUPPORT_FLOAT   1
   213 
   214 #endif
   215 
   216 
   217 /*
   218  * Types that are (so far) the same on all platforms
   219  */
   220 typedef signed   char          khronos_int8_t;
   221 typedef unsigned char          khronos_uint8_t;
   222 typedef signed   short int     khronos_int16_t;
   223 typedef unsigned short int     khronos_uint16_t;
   224 
   225 /*
   226  * Types that differ between LLP64 and LP64 architectures - in LLP64, 
   227  * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears
   228  * to be the only LLP64 architecture in current use.
   229  */
   230 #ifdef _WIN64
   231 typedef signed   long long int khronos_intptr_t;
   232 typedef unsigned long long int khronos_uintptr_t;
   233 typedef signed   long long int khronos_ssize_t;
   234 typedef unsigned long long int khronos_usize_t;
   235 #else
   236 typedef signed   long  int     khronos_intptr_t;
   237 typedef unsigned long  int     khronos_uintptr_t;
   238 typedef signed   long  int     khronos_ssize_t;
   239 typedef unsigned long  int     khronos_usize_t;
   240 #endif
   241 
   242 #if KHRONOS_SUPPORT_FLOAT
   243 /*
   244  * Float type
   245  */
   246 typedef          float         khronos_float_t;
   247 #endif
   248 
   249 #if KHRONOS_SUPPORT_INT64
   250 /* Time types
   251  *
   252  * These types can be used to represent a time interval in nanoseconds or
   253  * an absolute Unadjusted System Time.  Unadjusted System Time is the number
   254  * of nanoseconds since some arbitrary system event (e.g. since the last
   255  * time the system booted).  The Unadjusted System Time is an unsigned
   256  * 64 bit value that wraps back to 0 every 584 years.  Time intervals
   257  * may be either signed or unsigned.
   258  */
   259 typedef khronos_uint64_t       khronos_utime_nanoseconds_t;
   260 typedef khronos_int64_t        khronos_stime_nanoseconds_t;
   261 #endif
   262 
   263 /*
   264  * Dummy value used to pad enum types to 32 bits.
   265  */
   266 #ifndef KHRONOS_MAX_ENUM
   267 #define KHRONOS_MAX_ENUM 0x7FFFFFFF
   268 #endif
   269 
   270 /*
   271  * Enumerated boolean type
   272  *
   273  * Values other than zero should be considered to be true.  Therefore
   274  * comparisons should not be made against KHRONOS_TRUE.
   275  */
   276 typedef enum {
   277     KHRONOS_FALSE = 0,
   278     KHRONOS_TRUE  = 1,
   279     KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM
   280 } khronos_boolean_enum_t;
   281 
   282 #endif /* __khrplatform_h_ */