1// 
2// File: vk_platform.h 
3// 
4/* 
5** Copyright 2014-2023 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 
15extern "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