// | |
// File: vk_platform.h | |
// | |
/* | |
** Copyright (c) 2014-2017 The Khronos Group Inc. | |
** | |
** Licensed under the Apache License, Version 2.0 (the "License"); | |
** you may not use this file except in compliance with the License. | |
** You may obtain a copy of the License at | |
** | |
** http://www.apache.org/licenses/LICENSE-2.0 | |
** | |
** Unless required by applicable law or agreed to in writing, software | |
** distributed under the License is distributed on an "AS IS" BASIS, | |
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
** See the License for the specific language governing permissions and | |
** limitations under the License. | |
*/ | |
#ifndef VK_PLATFORM_H_ | |
#define VK_PLATFORM_H_ | |
#ifdef __cplusplus | |
extern "C" | |
{ | |
#endif // __cplusplus | |
/* | |
*************************************************************************************************** | |
* Platform-specific directives and type declarations | |
*************************************************************************************************** | |
*/ | |
/* Platform-specific calling convention macros. | |
* | |
* Platforms should define these so that Vulkan clients call Vulkan commands | |
* with the same calling conventions that the Vulkan implementation expects. | |
* | |
* VKAPI_ATTR - Placed before the return type in function declarations. | |
* Useful for C++11 and GCC/Clang-style function attribute syntax. | |
* VKAPI_CALL - Placed after the return type in function declarations. | |
* Useful for MSVC-style calling convention syntax. | |
* VKAPI_PTR - Placed between the '(' and '*' in function pointer types. | |
* | |
* Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void); | |
* Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void); | |
*/ | |
#if defined(_WIN32) | |
// On Windows, Vulkan commands use the stdcall convention | |
#define VKAPI_ATTR | |
#define VKAPI_CALL __stdcall | |
#define VKAPI_PTR VKAPI_CALL | |
#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7 | |
#error "Vulkan isn't supported for the 'armeabi' NDK ABI" | |
#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE) | |
// On Android 32-bit ARM targets, Vulkan functions use the "hardfloat" | |
// calling convention, i.e. float parameters are passed in registers. This | |
// is true even if the rest of the application passes floats on the stack, | |
// as it does by default when compiling for the armeabi-v7a NDK ABI. | |
#define VKAPI_ATTR __attribute__((pcs("aapcs-vfp"))) | |
#define VKAPI_CALL | |
#define VKAPI_PTR VKAPI_ATTR | |
#else | |
// On other platforms, use the default calling convention | |
#define VKAPI_ATTR | |
#define VKAPI_CALL | |
#define VKAPI_PTR | |
#endif | |
#include <stddef.h> | |
#if !defined(VK_NO_STDINT_H) | |
#if defined(_MSC_VER) && (_MSC_VER < 1600) | |
typedef signed __int8 int8_t; | |
typedef unsigned __int8 uint8_t; | |
typedef signed __int16 int16_t; | |
typedef unsigned __int16 uint16_t; | |
typedef signed __int32 int32_t; | |
typedef unsigned __int32 uint32_t; | |
typedef signed __int64 int64_t; | |
typedef unsigned __int64 uint64_t; | |
#else | |
#include <stdint.h> | |
#endif | |
#endif // !defined(VK_NO_STDINT_H) | |
#ifdef __cplusplus | |
} // extern "C" | |
#endif // __cplusplus | |
#endif |