• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (C) 2018 The Android Open Source Project
2 // Copyright (C) 2018 Google Inc.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 #pragma once
16 
17 #include <vulkan/vulkan.h>
18 
19 #ifdef __cplusplus
20 #include <algorithm>
21 extern "C" {
22 #endif
23 
24 #define VK_ANDROID_native_buffer 1
25 #define VK_ANDROID_NATIVE_BUFFER_EXTENSION_NUMBER 11
26 
27 /* NOTE ON VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 6
28  *
29  * This version of the extension transitions from gralloc0 to gralloc1 usage
30  * flags (int -> 2x uint64_t). The WSI implementation will temporarily continue
31  * to fill out deprecated fields in VkNativeBufferANDROID, and will call the
32  * deprecated vkGetSwapchainGrallocUsageANDROID if the new
33  * vkGetSwapchainGrallocUsage2ANDROID is not supported. This transitionary
34  * backwards-compatibility support is temporary, and will likely be removed in
35  * (along with all gralloc0 support) in a future release.
36  */
37 #define VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION     7
38 #define VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME   "VK_ANDROID_native_buffer"
39 
40 #define VK_ANDROID_NATIVE_BUFFER_ENUM(type,id)    ((type)(1000000000 + (1000 * (VK_ANDROID_NATIVE_BUFFER_EXTENSION_NUMBER - 1)) + (id)))
41 #define VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID   VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 0)
42 #define VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 1)
43 #define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 2)
44 
45 typedef enum VkSwapchainImageUsageFlagBitsANDROID {
46     VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID = 0x00000001,
47     VK_SWAPCHAIN_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
48 } VkSwapchainImageUsageFlagBitsANDROID;
49 typedef VkFlags VkSwapchainImageUsageFlagsANDROID;
50 
51 typedef struct {
52     VkStructureType             sType; // must be VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID
53     const void*                 pNext;
54 
55     // Buffer handle and stride returned from gralloc alloc()
56     const uint32_t*             handle;
57     int                         stride;
58 
59     // Gralloc format and usage requested when the buffer was allocated.
60     int                         format;
61     int                         usage; // DEPRECATED in SPEC_VERSION 6
62     // -- Added in SPEC_VERSION 6 --
63     uint64_t                consumer;
64     uint64_t                producer;
65 } VkNativeBufferANDROID;
66 
67 typedef struct {
68     VkStructureType                        sType; // must be VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID
69     const void*                            pNext;
70 
71     VkSwapchainImageUsageFlagsANDROID      usage;
72 } VkSwapchainImageCreateInfoANDROID;
73 
74 typedef struct {
75     VkStructureType                        sType; // must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID
76     const void*                            pNext;
77 
78     VkBool32                               sharedImage;
79 } VkPhysicalDevicePresentationPropertiesANDROID;
80 
81 // -- DEPRECATED in SPEC_VERSION 6 --
82 typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsageANDROID)(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage);
83 // -- ADDED in SPEC_VERSION 6 --
84 typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsage2ANDROID)(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, VkSwapchainImageUsageFlagsANDROID swapchainImageUsage, uint64_t* grallocConsumerUsage, uint64_t* grallocProducerUsage);
85 typedef VkResult (VKAPI_PTR *PFN_vkAcquireImageANDROID)(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore, VkFence fence);
86 typedef VkResult (VKAPI_PTR *PFN_vkQueueSignalReleaseImageANDROID)(VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image, int* pNativeFenceFd);
87 
88 #define VK_GOOGLE_address_space 1
89 
90 typedef VkResult (VKAPI_PTR *PFN_vkMapMemoryIntoAddressSpaceGOOGLE)(VkDevice device, VkDeviceMemory memory, uint64_t* pAddress);
91 
92 #define VK_GOOGLE_gfxstream 1
93 #define VK_GOOGLE_GFXSTREAM_EXTENSION_NUMBER 386
94 
95 #define VK_GOOGLE_GFXSTREAM_ENUM(type,id)    ((type)(1000000000 + (1000 * (VK_GOOGLE_GFXSTREAM_EXTENSION_NUMBER - 1)) + (id)))
96 #define VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE   VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 0)
97 #define VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE   VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 1)
98 #define VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE   VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 2)
99 
100 typedef struct {
101     VkStructureType sType; // must be VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE
102     const void* pNext;
103     uint32_t colorBuffer;
104 } VkImportColorBufferGOOGLE;
105 
106 typedef struct {
107     VkStructureType sType; // must be VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE
108     const void* pNext;
109     uint64_t physicalAddress;
110     VkDeviceSize size;
111     VkFormat format;
112     VkImageTiling tiling;
113     uint32_t tilingParameter;
114 } VkImportPhysicalAddressGOOGLE;
115 
116 typedef struct {
117     VkStructureType sType; // must be VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE
118     const void* pNext;
119     uint32_t buffer;
120 } VkImportBufferGOOGLE;
121 
122 typedef VkResult (VKAPI_PTR *PFN_vkRegisterImageColorBufferGOOGLE)(VkDevice device, VkImage image, uint32_t colorBuffer);
123 typedef VkResult (VKAPI_PTR *PFN_vkRegisterBufferColorBufferGOOGLE)(VkDevice device, VkBuffer image, uint32_t colorBuffer);
124 
125 #define VK_GOOGLE_sized_descriptor_update_template 1
126 
127 typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplateSizedGOOGLE)(
128     VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate,
129     uint32_t imageInfoCount,
130     uint32_t bufferInfoCount,
131     uint32_t bufferViewCount,
132     const uint32_t* pImageInfoEntryIndices,
133     const uint32_t* pBufferInfoEntryIndices,
134     const uint32_t* pBufferViewEntryIndices,
135     const VkDescriptorImageInfo* pImageInfos,
136     const VkDescriptorBufferInfo* pBufferInfos,
137     const VkBufferView* pBufferViews);
138 
139 #define VK_GOOGLE_async_command_buffers 1
140 
141 typedef void (VKAPI_PTR *PFN_vkBeginCommandBufferAsyncGOOGLE)(
142     VkCommandBuffer commandBuffer,
143     const VkCommandBufferBeginInfo* pBeginInfo);
144 typedef void (VKAPI_PTR *PFN_vkEndCommandBufferAsyncGOOGLE)(
145     VkCommandBuffer commandBuffer);
146 typedef void (VKAPI_PTR *PFN_vkResetCommandBufferAsyncGOOGLE)(
147     VkCommandBuffer commandBuffer,
148     VkCommandBufferResetFlags flags);
149 typedef void (VKAPI_PTR *PFN_vkCommandBufferHostSyncGOOGLE)(
150     VkCommandBuffer commandBuffer,
151     uint32_t needHostSync,
152     uint32_t sequenceNumber);
153 
154 #define VK_GOOGLE_create_resources_with_requirements 1
155 
156 typedef void (VKAPI_PTR *PFN_vkCreateImageWithRequirementsGOOGLE)(
157     VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage, VkMemoryRequirements* pMemoryRequirements);
158 typedef void (VKAPI_PTR *PFN_vkCreateBufferWithRequirementsGOOGLE)(
159     VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer, VkMemoryRequirements* pMemoryRequirements);
160 
161 #define VK_GOOGLE_address_space_info 1
162 
163 typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryHostAddressInfoGOOGLE)(VkDevice device, VkDeviceMemory memory, uint64_t* pAddress, uint64_t* pSize);
164 
165 #define VK_GOOGLE_free_memory_sync 1
166 
167 typedef VkResult (VKAPI_PTR *PFN_vkFreeMemorySyncGOOGLE)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator);
168 
169 #ifndef VK_MVK_moltenvk
170 #define VK_MVK_moltenvk 1
171 #define VK_MVK_MOLTENVK_SPEC_VERSION            3
172 #define VK_MVK_MOLTENVK_EXTENSION_NAME          "VK_MVK_moltenvk"
173 
174 typedef void* MTLTextureRef;
175 typedef void* MTLBufferRef;
176 
177 typedef void (VKAPI_PTR *PFN_vkGetMTLDeviceMVK)(VkPhysicalDevice physicalDevice, void** pMTLDevice);
178 typedef VkResult (VKAPI_PTR *PFN_vkSetMTLTextureMVK)(VkImage image, MTLTextureRef mtlTexture);
179 typedef void (VKAPI_PTR *PFN_vkGetMTLTextureMVK)(VkImage image, MTLTextureRef* pMTLTexture);
180 typedef void (VKAPI_PTR *PFN_vkGetMTLBufferMVK)(VkBuffer buffer, void** pMTLBuffer);
181 typedef VkResult (VKAPI_PTR *PFN_vkUseIOSurfaceMVK)(VkImage image, void* ioSurface);
182 typedef void (VKAPI_PTR *PFN_vkGetIOSurfaceMVK)(VkImage image, void**  pIOSurface);
183 
184 #endif  // VK_MVK_moltenvk
185 
186 // VulkanStream features
187 #define VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT (1 << 0)
188 #define VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT (1 << 1)
189 #define VULKAN_STREAM_FEATURE_SHADER_FLOAT16_INT8_BIT (1 << 2)
190 
191 #ifndef VK_KHR_shader_float16_int8
192 // Stuff we advertised but didn't define the structs for it yet because
193 // we also needed to update our vulkan headers and xml
194 typedef struct VkPhysicalDeviceShaderFloat16Int8Features {
195     VkStructureType    sType;
196     void*              pNext;
197     VkBool32           shaderFloat16;
198     VkBool32           shaderInt8;
199 } VkPhysicalDeviceShaderFloat16Int8Features;
200 
201 #define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES \
202     ((VkStructureType)1000082000)
203 
204 #define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR \
205     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES
206 
207 #define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR \
208     VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES
209 
210 #define VK_KHR_shader_float16_int8 1
211 #define VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION 1
212 #define VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME "VK_KHR_shader_float16_int8"
213 typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceShaderFloat16Int8FeaturesKHR;
214 typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceFloat16Int8FeaturesKHR;
215 #endif  // VK_KHR_shader_float16_int8
216 
217 #define VK_GOOGLE_gfxstream 1
218 
219 #define VK_GOOGLE_async_queue_submit 1
220 
221 typedef void (VKAPI_PTR *PFN_vkQueueHostSyncGOOGLE)(
222     VkQueue queue, uint32_t needHostSync, uint32_t sequenceNumber);
223 typedef void (VKAPI_PTR *PFN_vkQueueSubmitAsyncGOOGLE)(
224     VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence);
225 typedef void (VKAPI_PTR *PFN_vkQueueWaitIdleAsyncGOOGLE)(VkQueue queue);
226 typedef void (VKAPI_PTR *PFN_vkQueueBindSparseAsyncGOOGLE)(
227     VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence);
228 
229 #define VK_GOOGLE_linear_image_layout 1
230 
231 typedef VkResult (VKAPI_PTR *PFN_vkGetLinearImageLayoutGOOGLE)(VkDevice device, VkFormat format, VkDeviceSize* pOffset, VkDeviceSize* pRowPitchAlignment);
232 typedef VkResult(VKAPI_PTR* PFN_vkGetLinearImageLayout2GOOGLE)(VkDevice device,
233                                                                const VkImageCreateInfo* pCreateInfo,
234                                                                VkDeviceSize* pOffset,
235                                                                VkDeviceSize* pRowPitchAlignment);
236 
237 #define VK_GOOGLE_queue_submit_with_commands 1
238 typedef void (VKAPI_PTR *PFN_vkQueueFlushCommandsGOOGLE)(VkQueue queue, VkDeviceSize dataSize, const void* pData);
239 typedef void (VKAPI_PTR *PFN_vkQueueCommitDescriptorSetUpdatesGOOGLE)(VkQueue queue, uint32_t descriptorPoolCount, const VkDescriptorPool* pDescriptorPools, uint32_t descriptorSetCount, const VkDescriptorSetLayout* pDescriptorSetLayouts, const uint64_t* pDescriptorSetPoolIds, const uint32_t* pDescriptorSetWhichPool, const uint32_t* pDescriptorSetPendingAllocation, const uint32_t* pDescriptorWriteStartingIndices, uint32_t pendingDescriptorWriteCount, const VkWriteDescriptorSet* pPendingDescriptorWrites);
240 typedef void (VKAPI_PTR *PFN_vkCollectDescriptorPoolIdsGOOGLE)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t* pPoolIdCount, uint64_t* pPoolIds);
241 typedef void (VKAPI_PTR *PFN_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE)(VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image);
242 
243 #ifdef __cplusplus
244 } // extern "C"
245 #endif
246 
247 #ifdef __cplusplus
248 
249 template<class T, typename F>
arrayany(const T * arr,uint32_t begin,uint32_t end,const F & func)250 bool arrayany(const T* arr, uint32_t begin, uint32_t end, const F& func) {
251     const T* e = arr + end;
252     return std::find_if(arr + begin, e, func) != e;
253 }
254 
255 #define DEFINE_ALIAS_FUNCTION(ORIGINAL_FN, ALIAS_FN) \
256 template <typename... Args> \
257 inline auto ALIAS_FN(Args&&... args) -> decltype(ORIGINAL_FN(std::forward<Args>(args)...)) { \
258   return ORIGINAL_FN(std::forward<Args>(args)...); \
259 }
260 
261 #endif
262