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