vk_platform.h revision 2676338dd692b7d1e1c276d82e6b0492db53ab2e
16235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski// 26235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski// File: vk_platform.h 36235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski// 46235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski/* 56235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski** Copyright (c) 2014-2015 The Khronos Group Inc. 66235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski** 76235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski** Licensed under the Apache License, Version 2.0 (the "License"); 86235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski** you may not use this file except in compliance with the License. 96235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski** You may obtain a copy of the License at 106235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski** 116235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski** http://www.apache.org/licenses/LICENSE-2.0 126235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski** 136235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski** Unless required by applicable law or agreed to in writing, software 146235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski** distributed under the License is distributed on an "AS IS" BASIS, 156235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 166235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski** See the License for the specific language governing permissions and 176235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski** limitations under the License. 186235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski*/ 196235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 206235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 216235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#ifndef VK_PLATFORM_H_ 22834763b2ab872bf31a5d6ad9dcb0f76a6aad82fcMark Salyzyn#define VK_PLATFORM_H_ 236235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 246235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#ifdef __cplusplus 256235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinskiextern "C" 266235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski{ 276235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#endif // __cplusplus 286235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 296235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski/* 306235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski*************************************************************************************************** 316235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski* Platform-specific directives and type declarations 326235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski*************************************************************************************************** 336235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski*/ 346235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 356235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski/* Platform-specific calling convention macros. 366235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * 376235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * Platforms should define these so that Vulkan clients call Vulkan commands 386235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * with the same calling conventions that the Vulkan implementation expects. 396235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * 406235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * VKAPI_ATTR - Placed before the return type in function declarations. 416235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * Useful for C++11 and GCC/Clang-style function attribute syntax. 426235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * VKAPI_CALL - Placed after the return type in function declarations. 436235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * Useful for MSVC-style calling convention syntax. 446235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * VKAPI_PTR - Placed between the '(' and '*' in function pointer types. 456235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * 466235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void); 476235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void); 486235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski */ 496235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#if defined(_WIN32) 506235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski // On Windows, Vulkan commands use the stdcall convention 516235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski #define VKAPI_ATTR 526235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski #define VKAPI_CALL __stdcall 536235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski #define VKAPI_PTR VKAPI_CALL 546235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#elif defined(__ANDROID__) && defined(__ARM_EABI__) && !defined(__ARM_ARCH_7A__) 556235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski // Android does not support Vulkan in native code using the "armeabi" ABI. 566235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski #error "Vulkan requires the 'armeabi-v7a' or 'armeabi-v7a-hard' ABI on 32-bit ARM CPUs" 576235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#elif defined(__ANDROID__) && defined(__ARM_ARCH_7A__) 586235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski // On Android/ARMv7a, Vulkan functions use the armeabi-v7a-hard calling 596235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski // convention, even if the application's native code is compiled with the 606235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski // armeabi-v7a calling convention. 616235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp"))) 626235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski #define VKAPI_CALL 636235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski #define VKAPI_PTR VKAPI_ATTR 646235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#else 656235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski // On other platforms, use the default calling convention 666235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski #define VKAPI_ATTR 676235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski #define VKAPI_CALL 686235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski #define VKAPI_PTR 696235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#endif 706235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 716235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#include <stddef.h> 726235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 736235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#if !defined(VK_NO_STDINT_H) 746235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski #if defined(_MSC_VER) && (_MSC_VER < 1600) 756235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski typedef signed __int8 int8_t; 766235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski typedef unsigned __int8 uint8_t; 776235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski typedef signed __int16 int16_t; 786235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski typedef unsigned __int16 uint16_t; 796235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski typedef signed __int32 int32_t; 806235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski typedef unsigned __int32 uint32_t; 816235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski typedef signed __int64 int64_t; 826235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski typedef unsigned __int64 uint64_t; 836235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski #else 846235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski #include <stdint.h> 856235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski #endif 866235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#endif // !defined(VK_NO_STDINT_H) 876235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 886235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#ifdef __cplusplus 896235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski} // extern "C" 906235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#endif // __cplusplus 916235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 926235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski// Platform-specific headers required by platform window system extensions. 936235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski// These are enabled prior to #including "vulkan.h". The same enable then 946235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski// controls inclusion of the extension interfaces in vulkan.h. 956235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 966235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#ifdef VK_USE_PLATFORM_ANDROID_KHR 976235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#include <android/native_window.h> 986235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#endif 996235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 1006235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#ifdef VK_USE_PLATFORM_MIR_KHR 1016235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#include <mir_toolkit/client_types.h> 1026235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#endif 1036235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 1046235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#ifdef VK_USE_PLATFORM_WAYLAND_KHR 1056235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#include <wayland-client.h> 1066235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#endif 1076235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 1086235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#ifdef VK_USE_PLATFORM_WIN32_KHR 1096235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#include <windows.h> 1106235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#endif 1116235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 1126235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#ifdef VK_USE_PLATFORM_XLIB_KHR 1136235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#include <X11/Xlib.h> 1146235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#endif 1156235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 1166235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#ifdef VK_USE_PLATFORM_XCB_KHR 1176235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#include <xcb/xcb.h> 1186235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#endif 1196235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski 1206235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski#endif 1216235a94ffaed1d82cee2317481c18776f601da1bMichal Karpinski