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