eb714b18创建于 2025年5月14日历史提交
//

// File: vk_platform.h

//

/*

** Copyright 2014-2025 The Khronos Group Inc.

**

** SPDX-License-Identifier: Apache-2.0

*/





#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 is not 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



#if !defined(VK_NO_STDDEF_H)

    #include <stddef.h>

#endif // !defined(VK_NO_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