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