vk_platform.h revision e1b12783fff0b8e2defcc94c54fac8d737e6b996
1137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen//
2137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen// File: vk_platform.h
3137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen//
4137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen/*
5137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** Copyright (c) 2014-2015 The Khronos Group Inc.
6137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen**
7137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** Permission is hereby granted, free of charge, to any person obtaining a
8137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** copy of this software and/or associated documentation files (the
9137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** "Materials"), to deal in the Materials without restriction, including
10137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** without limitation the rights to use, copy, modify, merge, publish,
11137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** distribute, sublicense, and/or sell copies of the Materials, and to
12137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** permit persons to whom the Materials are furnished to do so, subject to
13137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** the following conditions:
14137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen**
15137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** The above copyright notice and this permission notice shall be included
16137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** in all copies or substantial portions of the Materials.
17137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen**
18137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
223250885c9feb9b42d60058a823c57a027c0dcf58Jason Monk** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
25137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen*/
26137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen
27383db5ebcc3a4a615faf249bf4f126f42e80b82eTamas Berghammer
28137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#ifndef __VK_PLATFORM_H__
29702e2ebf9fbfb715c1d9b716683c9e4d182b575eJason Monk#define __VK_PLATFORM_H__
30702e2ebf9fbfb715c1d9b716683c9e4d182b575eJason Monk
31702e2ebf9fbfb715c1d9b716683c9e4d182b575eJason Monk#ifdef __cplusplus
32137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassenextern "C"
33702e2ebf9fbfb715c1d9b716683c9e4d182b575eJason Monk{
34137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#endif // __cplusplus
35137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen
36dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen/*
37dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen***************************************************************************************************
38137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen*   Platform-specific directives and type declarations
39702e2ebf9fbfb715c1d9b716683c9e4d182b575eJason Monk***************************************************************************************************
40137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen*/
41dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen
42137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen/* Platform-specific calling convention macros.
43137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen *
44137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen * Platforms should define these so that Vulkan clients call Vulkan commands
45137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen * with the same calling conventions that the Vulkan implementation expects.
46137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen *
47137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen * VKAPI_ATTR - Placed before the return type in function declarations.
48137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen *              Useful for C++11 and GCC/Clang-style function attribute syntax.
49137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen * VKAPI_CALL - Placed after the return type in function declarations.
50137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen *              Useful for MSVC-style calling convention syntax.
51137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen * VKAPI_PTR  - Placed between the '(' and '*' in function pointer types.
52137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen *
53137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen * Function declaration:  VKAPI_ATTR void VKAPI_CALL vkCommand(void);
54137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void);
55137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen */
56137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#if defined(_WIN32)
57137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen    // On Windows, Vulkan commands use the stdcall convention
58137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen    #define VKAPI_ATTR
59137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen    #define VKAPI_CALL __stdcall
60137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen    #define VKAPI_PTR  VKAPI_CALL
61dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen#elif defined(__ANDROID__) && defined(__ARM_EABI__) && !defined(__ARM_ARCH_7A__)
62dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen    // Android does not support Vulkan in native code using the "armeabi" ABI.
63dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen    #error "Vulkan requires the 'armeabi-v7a' or 'armeabi-v7a-hard' ABI on 32-bit ARM CPUs"
64dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen#elif defined(__ANDROID__) && defined(__ARM_ARCH_7A__)
65dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen    // On Android/ARMv7a, Vulkan functions use the armeabi-v7a-hard calling
66dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen    // convention, even if the application's native code is compiled with the
67dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen    // armeabi-v7a calling convention.
68dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen    #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp")))
69dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen    #define VKAPI_CALL
70dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen    #define VKAPI_PTR  VKAPI_ATTR
71dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen#else
72dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen    // On other platforms, use the default calling convention
73dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen    #define VKAPI_ATTR
74dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen    #define VKAPI_CALL
75dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen    #define VKAPI_PTR
76dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen#endif
77137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen
78137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#include <stddef.h>
79137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen
808cbf1fb125f823ee757db1f0f38744444004518dJustin Klaassen#if !defined(VK_NO_STDINT_H)
818cbf1fb125f823ee757db1f0f38744444004518dJustin Klaassen    #if defined(_MSC_VER) && (_MSC_VER < 1600)
82137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen        typedef signed   __int8  int8_t;
83137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen        typedef unsigned __int8  uint8_t;
84702e2ebf9fbfb715c1d9b716683c9e4d182b575eJason Monk        typedef signed   __int16 int16_t;
853250885c9feb9b42d60058a823c57a027c0dcf58Jason Monk        typedef unsigned __int16 uint16_t;
86137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen        typedef signed   __int32 int32_t;
87137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen        typedef unsigned __int32 uint32_t;
88137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen        typedef signed   __int64 int64_t;
89137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen        typedef unsigned __int64 uint64_t;
90137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen    #else
91137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen        #include <stdint.h>
92137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen    #endif
93137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#endif // !defined(VK_NO_STDINT_H)
94137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen
9506c0cb7acdc07344463d8b9022c69125b14adb16Justin Klaassen#ifdef __cplusplus
96137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen} // extern "C"
97137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#endif // __cplusplus
98137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen
99137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen// Platform-specific headers required by platform window system extensions.
100dd32d90843baec8c2311ca7a9607031aec3ab5b6Justin Klaassen// These are enabled prior to #including "vulkan.h". The same enable then
101137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen// controls inclusion of the extension interfaces in vulkan.h.
102137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen
103137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#ifdef VK_USE_PLATFORM_ANDROID_KHR
104137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#include <android/native_window.h>
105137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#endif
106137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen
107137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#ifdef VK_USE_PLATFORM_MIR_KHR
108137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#include <mir_toolkit/client_types.h>
109137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#endif
110137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen
111137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#ifdef VK_USE_PLATFORM_WAYLAND_KHR
112137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#include <wayland-client.h>
113137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#endif
114137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen
115137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#ifdef VK_USE_PLATFORM_WIN32_KHR
116137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#include <windows.h>
117137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen#endif
118137909005cd3fab785539dc1232b67d80007d8fbJustin Klaassen
119#ifdef VK_USE_PLATFORM_XLIB_KHR
120#include <X11/Xlib.h>
121#endif
122
123#ifdef VK_USE_PLATFORM_XCB_KHR
124#include <xcb/xcb.h>
125#endif
126
127#endif // __VK_PLATFORM_H__
128