1// 2// File: vk_platform.h 3// 4/* 5** Copyright (c) 2014-2017 The Khronos Group Inc. 6** 7** Licensed under the Apache License, Version 2.0 (the "License"); 8** you may not use this file except in compliance with the License. 9** You may obtain a copy of the License at 10** 11** http://www.apache.org/licenses/LICENSE-2.0 12** 13** Unless required by applicable law or agreed to in writing, software 14** distributed under the License is distributed on an "AS IS" BASIS, 15** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16** See the License for the specific language governing permissions and 17** limitations under the License. 18*/ 19 20 21#ifndef VK_PLATFORM_H_ 22#define VK_PLATFORM_H_ 23 24#ifdef __cplusplus 25extern "C" 26{ 27#endif // __cplusplus 28 29/* 30*************************************************************************************************** 31* Platform-specific directives and type declarations 32*************************************************************************************************** 33*/ 34 35/* Platform-specific calling convention macros. 36 * 37 * Platforms should define these so that Vulkan clients call Vulkan commands 38 * with the same calling conventions that the Vulkan implementation expects. 39 * 40 * VKAPI_ATTR - Placed before the return type in function declarations. 41 * Useful for C++11 and GCC/Clang-style function attribute syntax. 42 * VKAPI_CALL - Placed after the return type in function declarations. 43 * Useful for MSVC-style calling convention syntax. 44 * VKAPI_PTR - Placed between the '(' and '*' in function pointer types. 45 * 46 * Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void); 47 * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void); 48 */ 49#if defined(_WIN32) 50 // On Windows, Vulkan commands use the stdcall convention 51 #define VKAPI_ATTR 52 #define VKAPI_CALL __stdcall 53 #define VKAPI_PTR VKAPI_CALL 54#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7 55 #error "Vulkan isn't supported for the 'armeabi' NDK ABI" 56#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE) 57 // On Android 32-bit ARM targets, Vulkan functions use the "hardfloat" 58 // calling convention, i.e. float parameters are passed in registers. This 59 // is true even if the rest of the application passes floats on the stack, 60 // as it does by default when compiling for the armeabi-v7a NDK ABI. 61 #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp"))) 62 #define VKAPI_CALL 63 #define VKAPI_PTR VKAPI_ATTR 64#else 65 // On other platforms, use the default calling convention 66 #define VKAPI_ATTR 67 #define VKAPI_CALL 68 #define VKAPI_PTR 69#endif 70 71#include <stddef.h> 72 73#if !defined(VK_NO_STDINT_H) 74 #if defined(_MSC_VER) && (_MSC_VER < 1600) 75 typedef signed __int8 int8_t; 76 typedef unsigned __int8 uint8_t; 77 typedef signed __int16 int16_t; 78 typedef unsigned __int16 uint16_t; 79 typedef signed __int32 int32_t; 80 typedef unsigned __int32 uint32_t; 81 typedef signed __int64 int64_t; 82 typedef unsigned __int64 uint64_t; 83 #else 84 #include <stdint.h> 85 #endif 86#endif // !defined(VK_NO_STDINT_H) 87 88#ifdef __cplusplus 89} // extern "C" 90#endif // __cplusplus 91 92// Platform-specific headers required by platform window system extensions. 93// These are enabled prior to #including "vulkan.h". The same enable then 94// controls inclusion of the extension interfaces in vulkan.h. 95 96#ifdef VK_USE_PLATFORM_ANDROID_KHR 97#include <android/native_window.h> 98#endif 99 100#ifdef VK_USE_PLATFORM_MIR_KHR 101#include <mir_toolkit/client_types.h> 102#endif 103 104#ifdef VK_USE_PLATFORM_WAYLAND_KHR 105#include <wayland-client.h> 106#endif 107 108#ifdef VK_USE_PLATFORM_WIN32_KHR 109#include <windows.h> 110#endif 111 112#ifdef VK_USE_PLATFORM_XLIB_KHR 113#include <X11/Xlib.h> 114#endif 115 116#ifdef VK_USE_PLATFORM_XCB_KHR 117#include <xcb/xcb.h> 118#endif 119 120#endif 121