1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot//
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot// File: vk_platform.h
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot//
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot** Copyright (c) 2014-2017 The Khronos Group Inc.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot**
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot** Licensed under the Apache License, Version 2.0 (the "License");
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot** you may not use this file except in compliance with the License.
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot** You may obtain a copy of the License at
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot**
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot**     http://www.apache.org/licenses/LICENSE-2.0
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot**
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot** Unless required by applicable law or agreed to in writing, software
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot** distributed under the License is distributed on an "AS IS" BASIS,
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot** See the License for the specific language governing permissions and
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot** limitations under the License.
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot*/
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Below this point is based on the original Khronos vk_platform.h header, but simplified for use in
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Skia when we are not building with a Vulkan backend, but still need the type declarations for
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * compiling.
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef VK_PLATFORM_H_
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define VK_PLATFORM_H_
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifdef __cplusplus
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotextern "C"
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot{
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif // __cplusplus
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot***************************************************************************************************
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot*   Platform-specific directives and type declarations
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot***************************************************************************************************
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot*/
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* Platform-specific calling convention macros.
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Platforms should define these so that Vulkan clients call Vulkan commands
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * with the same calling conventions that the Vulkan implementation expects.
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * VKAPI_ATTR - Placed before the return type in function declarations.
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *              Useful for C++11 and GCC/Clang-style function attribute syntax.
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * VKAPI_CALL - Placed after the return type in function declarations.
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *              Useful for MSVC-style calling convention syntax.
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * VKAPI_PTR  - Placed between the '(' and '*' in function pointer types.
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Function declaration:  VKAPI_ATTR void VKAPI_CALL vkCommand(void);
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void);
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if defined(_WIN32)
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // On Windows, Vulkan commands use the stdcall convention
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #define VKAPI_ATTR
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #define VKAPI_CALL __stdcall
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #define VKAPI_PTR  VKAPI_CALL
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #error "Vulkan isn't supported for the 'armeabi' NDK ABI"
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE)
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // On Android 32-bit ARM targets, Vulkan functions use the "hardfloat"
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // calling convention, i.e. float parameters are passed in registers. This
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // is true even if the rest of the application passes floats on the stack,
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // as it does by default when compiling for the armeabi-v7a NDK ABI.
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp")))
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #define VKAPI_CALL
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #define VKAPI_PTR  VKAPI_ATTR
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#else
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    // On other platforms, use the default calling convention
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #define VKAPI_ATTR
72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #define VKAPI_CALL
73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #define VKAPI_PTR
74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include <stddef.h>
77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if !defined(VK_NO_STDINT_H)
79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #if defined(_MSC_VER) && (_MSC_VER < 1600)
80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        typedef signed   __int8  int8_t;
81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        typedef unsigned __int8  uint8_t;
82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        typedef signed   __int16 int16_t;
83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        typedef unsigned __int16 uint16_t;
84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        typedef signed   __int32 int32_t;
85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        typedef unsigned __int32 uint32_t;
86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        typedef signed   __int64 int64_t;
87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        typedef unsigned __int64 uint64_t;
88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #else
89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        #include <stdint.h>
90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    #endif
91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif // !defined(VK_NO_STDINT_H)
92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifdef __cplusplus
94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} // extern "C"
95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif // __cplusplus
96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif
98