189e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter// 22040b4334073da11b538582dc66689facba60ca8Courtney Goeltzenleuchter// File: vk_platform.h 389e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter// 489e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter/* 5f1ea418f193d10a8455cdf47e0eeeeb1f4d8b5bfJon Ashburn** Copyright (c) 2014-2015 The Khronos Group Inc. 689e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter** 743b53e83705f02245da6ae61e31273866a35b833Jon Ashburn** Licensed under the Apache License, Version 2.0 (the "License"); 843b53e83705f02245da6ae61e31273866a35b833Jon Ashburn** you may not use this file except in compliance with the License. 943b53e83705f02245da6ae61e31273866a35b833Jon Ashburn** You may obtain a copy of the License at 1089e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter** 1143b53e83705f02245da6ae61e31273866a35b833Jon Ashburn** http://www.apache.org/licenses/LICENSE-2.0 1289e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter** 1343b53e83705f02245da6ae61e31273866a35b833Jon Ashburn** Unless required by applicable law or agreed to in writing, software 1443b53e83705f02245da6ae61e31273866a35b833Jon Ashburn** distributed under the License is distributed on an "AS IS" BASIS, 1543b53e83705f02245da6ae61e31273866a35b833Jon Ashburn** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1643b53e83705f02245da6ae61e31273866a35b833Jon Ashburn** See the License for the specific language governing permissions and 1743b53e83705f02245da6ae61e31273866a35b833Jon Ashburn** limitations under the License. 1889e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter*/ 1989e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter 2089e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter 21f1ea418f193d10a8455cdf47e0eeeeb1f4d8b5bfJon Ashburn#ifndef VK_PLATFORM_H_ 22f1ea418f193d10a8455cdf47e0eeeeb1f4d8b5bfJon Ashburn#define VK_PLATFORM_H_ 2389e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter 2489e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter#ifdef __cplusplus 2589e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchterextern "C" 2689e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter{ 2789e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter#endif // __cplusplus 2889e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter 2989e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter/* 3089e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter*************************************************************************************************** 3189e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter* Platform-specific directives and type declarations 3289e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter*************************************************************************************************** 3389e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter*/ 3489e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter 35af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu/* Platform-specific calling convention macros. 36af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu * 37af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu * Platforms should define these so that Vulkan clients call Vulkan commands 38af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu * with the same calling conventions that the Vulkan implementation expects. 39af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu * 40af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu * VKAPI_ATTR - Placed before the return type in function declarations. 41af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu * Useful for C++11 and GCC/Clang-style function attribute syntax. 42af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu * VKAPI_CALL - Placed after the return type in function declarations. 43af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu * Useful for MSVC-style calling convention syntax. 44af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu * VKAPI_PTR - Placed between the '(' and '*' in function pointer types. 45af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu * 46af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu * Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void); 47af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void); 48af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu */ 4989e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter#if defined(_WIN32) 50af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu // On Windows, Vulkan commands use the stdcall convention 51af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu #define VKAPI_ATTR 52af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu #define VKAPI_CALL __stdcall 53af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu #define VKAPI_PTR VKAPI_CALL 547620138ea7bc75853411dd896942579b3eb9f4c4Mark Lobodzinski#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7 557620138ea7bc75853411dd896942579b3eb9f4c4Mark Lobodzinski #error "Vulkan isn't supported for the 'armeabi' NDK ABI" 56ccbb5afc46c1b88f65850cbd342bcb9a4f0a35fcMark Lobodzinski#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE) 577620138ea7bc75853411dd896942579b3eb9f4c4Mark Lobodzinski // On Android 32-bit ARM targets, Vulkan functions use the "hardfloat" 587620138ea7bc75853411dd896942579b3eb9f4c4Mark Lobodzinski // calling convention, i.e. float parameters are passed in registers. This 597620138ea7bc75853411dd896942579b3eb9f4c4Mark Lobodzinski // is true even if the rest of the application passes floats on the stack, 607620138ea7bc75853411dd896942579b3eb9f4c4Mark Lobodzinski // as it does by default when compiling for the armeabi-v7a NDK ABI. 61af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp"))) 62af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu #define VKAPI_CALL 63af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu #define VKAPI_PTR VKAPI_ATTR 6489e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter#else 65af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu // On other platforms, use the default calling convention 66af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu #define VKAPI_ATTR 67af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu #define VKAPI_CALL 68af9e4fd72c31e1080cadc3d6baa16b669af8e913Chia-I Wu #define VKAPI_PTR 6989e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter#endif 7089e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter 7189e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter#include <stddef.h> 7289e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter 7389e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter#if !defined(VK_NO_STDINT_H) 7489e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter #if defined(_MSC_VER) && (_MSC_VER < 1600) 7589e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter typedef signed __int8 int8_t; 7689e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter typedef unsigned __int8 uint8_t; 7789e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter typedef signed __int16 int16_t; 7889e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter typedef unsigned __int16 uint16_t; 7989e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter typedef signed __int32 int32_t; 8089e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter typedef unsigned __int32 uint32_t; 8189e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter typedef signed __int64 int64_t; 8289e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter typedef unsigned __int64 uint64_t; 8389e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter #else 8489e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter #include <stdint.h> 8589e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter #endif 8689e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter#endif // !defined(VK_NO_STDINT_H) 8789e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter 8889e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter#ifdef __cplusplus 8989e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter} // extern "C" 9089e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter#endif // __cplusplus 9189e99e6dd74c1f407c2f2cb1aac2ad4ca3d45ff2Courtney Goeltzenleuchter 92677dec87b34f541122412f539422c763cd944b5cIan Elliott// Platform-specific headers required by platform window system extensions. 93677dec87b34f541122412f539422c763cd944b5cIan Elliott// These are enabled prior to #including "vulkan.h". The same enable then 94677dec87b34f541122412f539422c763cd944b5cIan Elliott// controls inclusion of the extension interfaces in vulkan.h. 95677dec87b34f541122412f539422c763cd944b5cIan Elliott 96677dec87b34f541122412f539422c763cd944b5cIan Elliott#ifdef VK_USE_PLATFORM_ANDROID_KHR 97677dec87b34f541122412f539422c763cd944b5cIan Elliott#include <android/native_window.h> 98677dec87b34f541122412f539422c763cd944b5cIan Elliott#endif 99677dec87b34f541122412f539422c763cd944b5cIan Elliott 100677dec87b34f541122412f539422c763cd944b5cIan Elliott#ifdef VK_USE_PLATFORM_MIR_KHR 101677dec87b34f541122412f539422c763cd944b5cIan Elliott#include <mir_toolkit/client_types.h> 102677dec87b34f541122412f539422c763cd944b5cIan Elliott#endif 103677dec87b34f541122412f539422c763cd944b5cIan Elliott 104677dec87b34f541122412f539422c763cd944b5cIan Elliott#ifdef VK_USE_PLATFORM_WAYLAND_KHR 105677dec87b34f541122412f539422c763cd944b5cIan Elliott#include <wayland-client.h> 106677dec87b34f541122412f539422c763cd944b5cIan Elliott#endif 107677dec87b34f541122412f539422c763cd944b5cIan Elliott 108677dec87b34f541122412f539422c763cd944b5cIan Elliott#ifdef VK_USE_PLATFORM_WIN32_KHR 109677dec87b34f541122412f539422c763cd944b5cIan Elliott#include <windows.h> 110677dec87b34f541122412f539422c763cd944b5cIan Elliott#endif 111677dec87b34f541122412f539422c763cd944b5cIan Elliott 112677dec87b34f541122412f539422c763cd944b5cIan Elliott#ifdef VK_USE_PLATFORM_XLIB_KHR 113677dec87b34f541122412f539422c763cd944b5cIan Elliott#include <X11/Xlib.h> 114677dec87b34f541122412f539422c763cd944b5cIan Elliott#endif 115677dec87b34f541122412f539422c763cd944b5cIan Elliott 116677dec87b34f541122412f539422c763cd944b5cIan Elliott#ifdef VK_USE_PLATFORM_XCB_KHR 117677dec87b34f541122412f539422c763cd944b5cIan Elliott#include <xcb/xcb.h> 118677dec87b34f541122412f539422c763cd944b5cIan Elliott#endif 119677dec87b34f541122412f539422c763cd944b5cIan Elliott 120f1ea418f193d10a8455cdf47e0eeeeb1f4d8b5bfJon Ashburn#endif 121