zorldo

Goofing around with Ebiten
git clone git://bsandro.tech/zorldo
Log | Files | Refs | README

vk_platform.h (3318B)


      1 /* */
      2 /* File: vk_platform.h */
      3 /* */
      4 /*
      5 ** Copyright (c) 2014-2017 The Khronos Group Inc.
      6 **
      7 ** Licensed under the Apache License, Version 2.0 (the "License");
      8 ** you may not use this file except in compliance with the License.
      9 ** You may obtain a copy of the License at
     10 **
     11 **     http://www.apache.org/licenses/LICENSE-2.0
     12 **
     13 ** Unless required by applicable law or agreed to in writing, software
     14 ** distributed under the License is distributed on an "AS IS" BASIS,
     15 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     16 ** See the License for the specific language governing permissions and
     17 ** limitations under the License.
     18 */
     19 
     20 
     21 #ifndef VK_PLATFORM_H_
     22 #define VK_PLATFORM_H_
     23 
     24 #ifdef __cplusplus
     25 extern "C"
     26 {
     27 #endif /* __cplusplus */
     28 
     29 /*
     30 ***************************************************************************************************
     31 *   Platform-specific directives and type declarations
     32 ***************************************************************************************************
     33 */
     34 
     35 /* Platform-specific calling convention macros.
     36  *
     37  * Platforms should define these so that Vulkan clients call Vulkan commands
     38  * with the same calling conventions that the Vulkan implementation expects.
     39  *
     40  * VKAPI_ATTR - Placed before the return type in function declarations.
     41  *              Useful for C++11 and GCC/Clang-style function attribute syntax.
     42  * VKAPI_CALL - Placed after the return type in function declarations.
     43  *              Useful for MSVC-style calling convention syntax.
     44  * VKAPI_PTR  - Placed between the '(' and '*' in function pointer types.
     45  *
     46  * Function declaration:  VKAPI_ATTR void VKAPI_CALL vkCommand(void);
     47  * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void);
     48  */
     49 #if defined(_WIN32)
     50     /* On Windows, Vulkan commands use the stdcall convention */
     51     #define VKAPI_ATTR
     52     #define VKAPI_CALL __stdcall
     53     #define VKAPI_PTR  VKAPI_CALL
     54 #elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7
     55     #error "Vulkan isn't supported for the 'armeabi' NDK ABI"
     56 #elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE)
     57     /* On Android 32-bit ARM targets, Vulkan functions use the "hardfloat" */
     58     /* calling convention, i.e. float parameters are passed in registers. This */
     59     /* is true even if the rest of the application passes floats on the stack, */
     60     /* as it does by default when compiling for the armeabi-v7a NDK ABI. */
     61     #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp")))
     62     #define VKAPI_CALL
     63     #define VKAPI_PTR  VKAPI_ATTR
     64 #else
     65     /* On other platforms, use the default calling convention */
     66     #define VKAPI_ATTR
     67     #define VKAPI_CALL
     68     #define VKAPI_PTR
     69 #endif
     70 
     71 #include <stddef.h>
     72 
     73 #if !defined(VK_NO_STDINT_H)
     74     #if defined(_MSC_VER) && (_MSC_VER < 1600)
     75         typedef signed   __int8  int8_t;
     76         typedef unsigned __int8  uint8_t;
     77         typedef signed   __int16 int16_t;
     78         typedef unsigned __int16 uint16_t;
     79         typedef signed   __int32 int32_t;
     80         typedef unsigned __int32 uint32_t;
     81         typedef signed   __int64 int64_t;
     82         typedef unsigned __int64 uint64_t;
     83     #else
     84         #include <stdint.h>
     85     #endif
     86 #endif /* !defined(VK_NO_STDINT_H) */
     87 
     88 #ifdef __cplusplus
     89 } /* extern "C" */
     90 #endif /* __cplusplus */
     91 
     92 #endif