• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // File: vk_platform.h
3 //
4 /*
5 ** Copyright 2014-2022 The Khronos Group Inc.
6 **
7 ** SPDX-License-Identifier: Apache-2.0
8 */
9 
10 
11 #ifndef VK_PLATFORM_H_
12 #define VK_PLATFORM_H_
13 
14 #ifdef __cplusplus
15 extern "C"
16 {
17 #endif // __cplusplus
18 
19 /*
20 ***************************************************************************************************
21 *   Platform-specific directives and type declarations
22 ***************************************************************************************************
23 */
24 
25 /* Platform-specific calling convention macros.
26  *
27  * Platforms should define these so that Vulkan clients call Vulkan commands
28  * with the same calling conventions that the Vulkan implementation expects.
29  *
30  * VKAPI_ATTR - Placed before the return type in function declarations.
31  *              Useful for C++11 and GCC/Clang-style function attribute syntax.
32  * VKAPI_CALL - Placed after the return type in function declarations.
33  *              Useful for MSVC-style calling convention syntax.
34  * VKAPI_PTR  - Placed between the '(' and '*' in function pointer types.
35  *
36  * Function declaration:  VKAPI_ATTR void VKAPI_CALL vkCommand(void);
37  * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void);
38  */
39 #if defined(_WIN32)
40     // On Windows, Vulkan commands use the stdcall convention
41     #define VKAPI_ATTR
42     #define VKAPI_CALL __stdcall
43     #define VKAPI_PTR  VKAPI_CALL
44 #elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7
45     #error "Vulkan is not supported for the 'armeabi' NDK ABI"
46 #elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE)
47     // On Android 32-bit ARM targets, Vulkan functions use the "hardfloat"
48     // calling convention, i.e. float parameters are passed in registers. This
49     // is true even if the rest of the application passes floats on the stack,
50     // as it does by default when compiling for the armeabi-v7a NDK ABI.
51     #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp")))
52     #define VKAPI_CALL
53     #define VKAPI_PTR  VKAPI_ATTR
54 #else
55     // On other platforms, use the default calling convention
56     #define VKAPI_ATTR
57     #define VKAPI_CALL
58     #define VKAPI_PTR
59 #endif
60 
61 #if !defined(VK_NO_STDDEF_H)
62     #include <stddef.h>
63 #endif // !defined(VK_NO_STDDEF_H)
64 
65 #if !defined(VK_NO_STDINT_H)
66     #if defined(_MSC_VER) && (_MSC_VER < 1600)
67         typedef signed   __int8  int8_t;
68         typedef unsigned __int8  uint8_t;
69         typedef signed   __int16 int16_t;
70         typedef unsigned __int16 uint16_t;
71         typedef signed   __int32 int32_t;
72         typedef unsigned __int32 uint32_t;
73         typedef signed   __int64 int64_t;
74         typedef unsigned __int64 uint64_t;
75     #else
76         #include <stdint.h>
77     #endif
78 #endif // !defined(VK_NO_STDINT_H)
79 
80 #ifdef __cplusplus
81 } // extern "C"
82 #endif // __cplusplus
83 
84 #endif
85