3 /*-------------------------------------------------------------------------
7 * Copyright (c) 2015 Google Inc.
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
23 * \brief Vulkan utilites.
24 *//*--------------------------------------------------------------------*/
26 #include "tcuDefs.hpp"
28 #if (DE_OS == DE_OS_ANDROID) && defined(__ARM_ARCH) && defined(__ARM_32BIT_STATE)
29 # define VKAPI_ATTR __attribute__((pcs("aapcs-vfp")))
34 #if (DE_OS == DE_OS_WIN32) && ((_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED))
35 # define VKAPI_CALL __stdcall
40 #define VK_DEFINE_HANDLE(NAME, TYPE) typedef struct NAME##_s* NAME
41 #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(NAME, TYPE) typedef Handle<TYPE> NAME
43 #define VK_DEFINE_PLATFORM_TYPE(NAME, COMPATIBLE) \
46 COMPATIBLE internal; \
47 explicit NAME (COMPATIBLE internal_) \
48 : internal(internal_) {} \
52 #define VK_MAKE_API_VERSION(VARIANT, MAJOR, MINOR, PATCH) \
53 ((((deUint32)(VARIANT)) << 29) | (((deUint32)(MAJOR)) << 22) | (((deUint32)(MINOR)) << 12) | ((deUint32)(PATCH)))
54 #define VK_MAKE_VERSION(MAJOR, MINOR, PATCH) VK_MAKE_API_VERSION(0, MAJOR, MINOR, PATCH)
55 #define VK_BIT(NUM) (1u<<(deUint32)(NUM))
57 #define VK_API_VERSION_VARIANT(version) ((deUint32)(version) >> 29)
58 #define VK_API_VERSION_MAJOR(version) (((deUint32)(version) >> 22) & 0x7FU)
59 #define VK_API_VERSION_MINOR(version) (((deUint32)(version) >> 12) & 0x3FFU)
60 #define VK_API_VERSION_PATCH(version) ((deUint32)(version) & 0xFFFU)
62 #define VK_CHECK(EXPR) vk::checkResult((EXPR), #EXPR, __FILE__, __LINE__)
63 #define VK_CHECK_MSG(EXPR, MSG) vk::checkResult((EXPR), MSG, __FILE__, __LINE__)
64 #define VK_CHECK_WSI(EXPR) vk::checkWsiResult((EXPR), #EXPR, __FILE__, __LINE__)
66 /*--------------------------------------------------------------------*//*!
67 * \brief Vulkan utilities
68 *//*--------------------------------------------------------------------*/
72 typedef deUint64 VkDeviceSize;
73 typedef deUint32 VkSampleMask;
74 typedef deUint32 VkBool32;
75 typedef deUint32 VkFlags;
76 typedef deUint64 VkFlags64;
77 typedef deUint64 VkDeviceAddress;
79 // enum HandleType { HANDLE_TYPE_INSTANCE, ... };
80 #include "vkHandleType.inl"
82 template<HandleType Type>
86 Handle (void) {} // \note Left uninitialized on purpose
87 Handle (deUint64 internal) : m_internal(internal) {}
89 Handle& operator= (deUint64 internal) { m_internal = internal; return *this; }
91 bool operator== (const Handle<Type>& other) const { return this->m_internal == other.m_internal; }
92 bool operator!= (const Handle<Type>& other) const { return this->m_internal != other.m_internal; }
94 bool operator! (void) const { return !m_internal; }
96 deUint64 getInternal (void) const { return m_internal; }
98 enum { HANDLE_TYPE = Type };
104 #include "vkBasicTypes.inl"
106 #define VK_CORE_FORMAT_LAST ((vk::VkFormat)(vk::VK_FORMAT_ASTC_12x12_SRGB_BLOCK+1))
107 #define VK_CORE_IMAGE_TILING_LAST ((vk::VkImageTiling)(vk::VK_IMAGE_TILING_LINEAR+1))
108 #define VK_CORE_IMAGE_TYPE_LAST ((vk::VkImageType)(vk::VK_IMAGE_TYPE_3D+1))
112 SPIRV_VERSION_1_0 = 0, //!< SPIR-V 1.0
113 SPIRV_VERSION_1_1 = 1, //!< SPIR-V 1.1
114 SPIRV_VERSION_1_2 = 2, //!< SPIR-V 1.2
115 SPIRV_VERSION_1_3 = 3, //!< SPIR-V 1.3
116 SPIRV_VERSION_1_4 = 4, //!< SPIR-V 1.4
117 SPIRV_VERSION_1_5 = 5, //!< SPIR-V 1.5
148 typedef VKAPI_ATTR void (VKAPI_CALL* PFN_vkVoidFunction) (void);
150 typedef VKAPI_ATTR void* (VKAPI_CALL* PFN_vkAllocationFunction) (void* pUserData,
153 VkSystemAllocationScope allocationScope);
154 typedef VKAPI_ATTR void* (VKAPI_CALL* PFN_vkReallocationFunction) (void* pUserData,
158 VkSystemAllocationScope allocationScope);
159 typedef VKAPI_ATTR void (VKAPI_CALL* PFN_vkFreeFunction) (void* pUserData,
161 typedef VKAPI_ATTR void (VKAPI_CALL* PFN_vkInternalAllocationNotification) (void* pUserData,
163 VkInternalAllocationType allocationType,
164 VkSystemAllocationScope allocationScope);
165 typedef VKAPI_ATTR void (VKAPI_CALL* PFN_vkInternalFreeNotification) (void* pUserData,
167 VkInternalAllocationType allocationType,
168 VkSystemAllocationScope allocationScope);
170 typedef VKAPI_ATTR VkBool32 (VKAPI_CALL* PFN_vkDebugReportCallbackEXT) (VkDebugReportFlagsEXT flags,
171 VkDebugReportObjectTypeEXT objectType,
175 const char* pLayerPrefix,
176 const char* pMessage,
179 typedef VKAPI_ATTR VkBool32 (VKAPI_CALL *PFN_vkDebugUtilsMessengerCallbackEXT) (VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
180 VkDebugUtilsMessageTypeFlagsEXT messageTypes,
181 const struct VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
183 typedef VKAPI_ATTR void (VKAPI_CALL* PFN_vkDeviceMemoryReportCallbackEXT) (const struct VkDeviceMemoryReportCallbackDataEXT* pCallbackData,
186 #include "vkStructTypes.inl"
190 #include "vkFunctionPointerTypes.inl"
193 class PlatformInterface
196 #include "vkVirtualPlatformInterface.inl"
198 virtual GetInstanceProcAddrFunc getGetInstanceProcAddr () const = 0;
201 PlatformInterface (void) {}
204 PlatformInterface (const PlatformInterface&);
205 PlatformInterface& operator= (const PlatformInterface&);
208 class InstanceInterface
211 #include "vkVirtualInstanceInterface.inl"
214 InstanceInterface (void) {}
217 InstanceInterface (const InstanceInterface&);
218 InstanceInterface& operator= (const InstanceInterface&);
221 class DeviceInterface
224 #include "vkVirtualDeviceInterface.inl"
227 DeviceInterface (void) {}
230 DeviceInterface (const DeviceInterface&);
231 DeviceInterface& operator= (const DeviceInterface&);
234 class Error : public tcu::TestError
237 Error (VkResult error, const char* message, const char* expr, const char* file, int line);
238 Error (VkResult error, const std::string& message);
239 virtual ~Error (void) throw();
241 VkResult getError (void) const { return m_error; }
244 const VkResult m_error;
247 class OutOfMemoryError : public tcu::ResourceError
250 OutOfMemoryError (VkResult error, const char* message, const char* expr, const char* file, int line);
251 OutOfMemoryError (VkResult error, const std::string& message);
252 virtual ~OutOfMemoryError (void) throw();
254 VkResult getError (void) const { return m_error; }
257 const VkResult m_error;
260 void checkResult (VkResult result, const char* message, const char* file, int line);
261 void checkWsiResult (VkResult result, const char* message, const char* file, int line);
265 #endif // _VKDEFS_HPP