104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// 204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// File: vk_platform.h 304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall// 404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall/* 504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall** Copyright (c) 2014-2015 The Khronos Group Inc. 604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall** 72676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall** Licensed under the Apache License, Version 2.0 (the "License"); 82676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall** you may not use this file except in compliance with the License. 92676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall** You may obtain a copy of the License at 1004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall** 112676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall** http://www.apache.org/licenses/LICENSE-2.0 1204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall** 132676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall** Unless required by applicable law or agreed to in writing, software 142676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall** distributed under the License is distributed on an "AS IS" BASIS, 152676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 162676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall** See the License for the specific language governing permissions and 172676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall** limitations under the License. 1804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall*/ 1904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 2004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 212676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall#ifndef VK_PLATFORM_H_ 222676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall#define VK_PLATFORM_H_ 2304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 2404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#ifdef __cplusplus 2504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hallextern "C" 2604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall{ 2704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#endif // __cplusplus 2804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 2904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall/* 3004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall*************************************************************************************************** 3104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall* Platform-specific directives and type declarations 3204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall*************************************************************************************************** 3304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall*/ 3404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 35e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall/* Platform-specific calling convention macros. 36e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall * 37e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall * Platforms should define these so that Vulkan clients call Vulkan commands 38e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall * with the same calling conventions that the Vulkan implementation expects. 39e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall * 40e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall * VKAPI_ATTR - Placed before the return type in function declarations. 41e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall * Useful for C++11 and GCC/Clang-style function attribute syntax. 42e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall * VKAPI_CALL - Placed after the return type in function declarations. 43e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall * Useful for MSVC-style calling convention syntax. 44e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall * VKAPI_PTR - Placed between the '(' and '*' in function pointer types. 45e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall * 46e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall * Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void); 47e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void); 48e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall */ 4904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#if defined(_WIN32) 50e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall // On Windows, Vulkan commands use the stdcall convention 51e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall #define VKAPI_ATTR 52e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall #define VKAPI_CALL __stdcall 53e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall #define VKAPI_PTR VKAPI_CALL 54e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall#elif defined(__ANDROID__) && defined(__ARM_EABI__) && !defined(__ARM_ARCH_7A__) 55e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall // Android does not support Vulkan in native code using the "armeabi" ABI. 56e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall #error "Vulkan requires the 'armeabi-v7a' or 'armeabi-v7a-hard' ABI on 32-bit ARM CPUs" 57e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall#elif defined(__ANDROID__) && defined(__ARM_ARCH_7A__) 58e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall // On Android/ARMv7a, Vulkan functions use the armeabi-v7a-hard calling 59e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall // convention, even if the application's native code is compiled with the 60e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall // armeabi-v7a calling convention. 61e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp"))) 62e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall #define VKAPI_CALL 63e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall #define VKAPI_PTR VKAPI_ATTR 6404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#else 6565ab552c18df3e94c5d275294a20dd4d20dda119Jesse Hall // On other platforms, use the default calling convention 66e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall #define VKAPI_ATTR 67e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall #define VKAPI_CALL 68e1b12783fff0b8e2defcc94c54fac8d737e6b996Jesse Hall #define VKAPI_PTR 6904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#endif 7004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 7104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#include <stddef.h> 7204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 7304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#if !defined(VK_NO_STDINT_H) 7404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall #if defined(_MSC_VER) && (_MSC_VER < 1600) 7504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall typedef signed __int8 int8_t; 7604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall typedef unsigned __int8 uint8_t; 7704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall typedef signed __int16 int16_t; 7804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall typedef unsigned __int16 uint16_t; 7904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall typedef signed __int32 int32_t; 8004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall typedef unsigned __int32 uint32_t; 8104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall typedef signed __int64 int64_t; 8204f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall typedef unsigned __int64 uint64_t; 8304f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall #else 8404f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall #include <stdint.h> 8504f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall #endif 8604f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#endif // !defined(VK_NO_STDINT_H) 8704f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 8804f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#ifdef __cplusplus 8904f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall} // extern "C" 9004f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall#endif // __cplusplus 9104f4f4746481571148eaf3aaf768ee5c6dccec9dJesse Hall 921356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall// Platform-specific headers required by platform window system extensions. 931356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall// These are enabled prior to #including "vulkan.h". The same enable then 941356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall// controls inclusion of the extension interfaces in vulkan.h. 951356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall 961356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#ifdef VK_USE_PLATFORM_ANDROID_KHR 971356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#include <android/native_window.h> 981356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#endif 991356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall 1001356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#ifdef VK_USE_PLATFORM_MIR_KHR 1011356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#include <mir_toolkit/client_types.h> 1021356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#endif 1031356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall 1041356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#ifdef VK_USE_PLATFORM_WAYLAND_KHR 1051356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#include <wayland-client.h> 1061356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#endif 1071356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall 1081356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#ifdef VK_USE_PLATFORM_WIN32_KHR 1091356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#include <windows.h> 1101356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#endif 1111356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall 112a64292517b1876c4bbe5d3e62c577812f40bd922Jesse Hall#ifdef VK_USE_PLATFORM_XLIB_KHR 1131356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#include <X11/Xlib.h> 1141356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#endif 1151356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall 1161356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#ifdef VK_USE_PLATFORM_XCB_KHR 1171356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#include <xcb/xcb.h> 1181356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall#endif 1191356b0d3179254a7a27e88abb2d2500385469f14Jesse Hall 1202676338dd692b7d1e1c276d82e6b0492db53ab2eJesse Hall#endif 121