// Copyright (C) 2018 The Android Open Source Project // Copyright (C) 2018 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #pragma once #include #ifdef __cplusplus #include extern "C" { #endif #define VK_ANDROID_native_buffer 1 #define VK_ANDROID_NATIVE_BUFFER_EXTENSION_NUMBER 11 /* NOTE ON VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 6 * * This version of the extension transitions from gralloc0 to gralloc1 usage * flags (int -> 2x uint64_t). The WSI implementation will temporarily continue * to fill out deprecated fields in VkNativeBufferANDROID, and will call the * deprecated vkGetSwapchainGrallocUsageANDROID if the new * vkGetSwapchainGrallocUsage2ANDROID is not supported. This transitionary * backwards-compatibility support is temporary, and will likely be removed in * (along with all gralloc0 support) in a future release. */ #define VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 7 #define VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME "VK_ANDROID_native_buffer" #define VK_ANDROID_NATIVE_BUFFER_ENUM(type,id) ((type)(1000000000 + (1000 * (VK_ANDROID_NATIVE_BUFFER_EXTENSION_NUMBER - 1)) + (id))) #define VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 0) #define VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 1) #define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 2) typedef enum VkSwapchainImageUsageFlagBitsANDROID { VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID = 0x00000001, VK_SWAPCHAIN_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkSwapchainImageUsageFlagBitsANDROID; typedef VkFlags VkSwapchainImageUsageFlagsANDROID; typedef struct { VkStructureType sType; // must be VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID const void* pNext; // Buffer handle and stride returned from gralloc alloc() const uint32_t* handle; int stride; // Gralloc format and usage requested when the buffer was allocated. int format; int usage; // DEPRECATED in SPEC_VERSION 6 // -- Added in SPEC_VERSION 6 -- uint64_t consumer; uint64_t producer; } VkNativeBufferANDROID; typedef struct { VkStructureType sType; // must be VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID const void* pNext; VkSwapchainImageUsageFlagsANDROID usage; } VkSwapchainImageCreateInfoANDROID; typedef struct { VkStructureType sType; // must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID const void* pNext; VkBool32 sharedImage; } VkPhysicalDevicePresentationPropertiesANDROID; // -- DEPRECATED in SPEC_VERSION 6 -- typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsageANDROID)(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage); // -- ADDED in SPEC_VERSION 6 -- typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsage2ANDROID)(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, VkSwapchainImageUsageFlagsANDROID swapchainImageUsage, uint64_t* grallocConsumerUsage, uint64_t* grallocProducerUsage); typedef VkResult (VKAPI_PTR *PFN_vkAcquireImageANDROID)(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore, VkFence fence); typedef VkResult (VKAPI_PTR *PFN_vkQueueSignalReleaseImageANDROID)(VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image, int* pNativeFenceFd); typedef VkResult (VKAPI_PTR *PFN_vkMapMemoryIntoAddressSpaceGOOGLE)(VkDevice device, VkDeviceMemory memory, uint64_t* pAddress); #define VK_GOOGLE_gfxstream 1 #define VK_GOOGLE_GFXSTREAM_EXTENSION_NUMBER 386 #define VK_GOOGLE_GFXSTREAM_ENUM(type,id) ((type)(1000000000 + (1000 * (VK_GOOGLE_GFXSTREAM_EXTENSION_NUMBER - 1)) + (id))) #define VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 0) #define VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 1) #define VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 2) typedef struct { VkStructureType sType; // must be VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE const void* pNext; uint32_t colorBuffer; } VkImportColorBufferGOOGLE; typedef struct { VkStructureType sType; // must be VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE const void* pNext; uint64_t physicalAddress; VkDeviceSize size; VkFormat format; VkImageTiling tiling; uint32_t tilingParameter; } VkImportPhysicalAddressGOOGLE; typedef struct { VkStructureType sType; // must be VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE const void* pNext; uint32_t buffer; } VkImportBufferGOOGLE; typedef VkResult (VKAPI_PTR *PFN_vkRegisterImageColorBufferGOOGLE)(VkDevice device, VkImage image, uint32_t colorBuffer); typedef VkResult (VKAPI_PTR *PFN_vkRegisterBufferColorBufferGOOGLE)(VkDevice device, VkBuffer image, uint32_t colorBuffer); typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryHostAddressInfoGOOGLE)(VkDevice device, VkDeviceMemory memory, uint64_t* pAddress, uint64_t* pSize); typedef VkResult (VKAPI_PTR *PFN_vkFreeMemorySyncGOOGLE)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocationCallbacks); #define VK_ANDROID_external_memory_android_hardware_buffer 1 struct AHardwareBuffer; struct VkAndroidHardwareBufferPropertiesANDROID; struct VkMemoryGetAndroidHardwareBufferInfoANDROID; #ifndef VK_USE_PLATFORM_ANDROID_KHR typedef struct VkAndroidHardwareBufferUsageANDROID { VkStructureType sType; void* pNext; uint64_t androidHardwareBufferUsage; } VkAndroidHardwareBufferUsageANDROID; typedef struct VkAndroidHardwareBufferPropertiesANDROID { VkStructureType sType; void* pNext; VkDeviceSize allocationSize; uint32_t memoryTypeBits; } VkAndroidHardwareBufferPropertiesANDROID; typedef struct VkAndroidHardwareBufferFormatPropertiesANDROID { VkStructureType sType; void* pNext; VkFormat format; uint64_t externalFormat; VkFormatFeatureFlags formatFeatures; VkComponentMapping samplerYcbcrConversionComponents; VkSamplerYcbcrModelConversion suggestedYcbcrModel; VkSamplerYcbcrRange suggestedYcbcrRange; VkChromaLocation suggestedXChromaOffset; VkChromaLocation suggestedYChromaOffset; } VkAndroidHardwareBufferFormatPropertiesANDROID; typedef struct VkImportAndroidHardwareBufferInfoANDROID { VkStructureType sType; const void* pNext; struct AHardwareBuffer* buffer; } VkImportAndroidHardwareBufferInfoANDROID; typedef struct VkMemoryGetAndroidHardwareBufferInfoANDROID { VkStructureType sType; const void* pNext; VkDeviceMemory memory; } VkMemoryGetAndroidHardwareBufferInfoANDROID; typedef struct VkExternalFormatANDROID { VkStructureType sType; void* pNext; uint64_t externalFormat; } VkExternalFormatANDROID; typedef VkResult (VKAPI_PTR *PFN_vkGetAndroidHardwareBufferPropertiesANDROID)(VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID( VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties); VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID( VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer); #endif #endif // __Fuchsia__ #define VK_GOOGLE_sized_descriptor_update_template 1 typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplateSizedGOOGLE)( VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, uint32_t imageInfoCount, uint32_t bufferInfoCount, uint32_t bufferViewCount, const uint32_t* pImageInfoEntryIndices, const uint32_t* pBufferInfoEntryIndices, const uint32_t* pBufferViewEntryIndices, const VkDescriptorImageInfo* pImageInfos, const VkDescriptorBufferInfo* pBufferInfos, const VkBufferView* pBufferViews); #define VK_GOOGLE_async_command_buffers 1 typedef void (VKAPI_PTR *PFN_vkBeginCommandBufferAsyncGOOGLE)( VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo); typedef void (VKAPI_PTR *PFN_vkEndCommandBufferAsyncGOOGLE)( VkCommandBuffer commandBuffer); typedef void (VKAPI_PTR *PFN_vkResetCommandBufferAsyncGOOGLE)( VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags); typedef void (VKAPI_PTR *PFN_vkCommandBufferHostSyncGOOGLE)( VkCommandBuffer commandBuffer, uint32_t needHostSync, uint32_t sequenceNumber); typedef void (VKAPI_PTR *PFN_vkCreateImageWithRequirementsGOOGLE)( VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage, VkMemoryRequirements* pMemoryRequirements); #ifdef VK_USE_PLATFORM_FUCHSIA #ifndef VK_FUCHSIA_buffer_collection_x #define VK_FUCHSIA_buffer_collection_x 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferCollectionFUCHSIAX) #define VK_FUCHSIA_BUFFER_COLLECTION_X_SPEC_VERSION 1 #define VK_FUCHSIA_BUFFER_COLLECTION_X_EXTENSION_NAME \ "VK_FUCHSIA_buffer_collection_x" typedef enum VkImageFormatConstraintsFlagBitsFUCHSIAX { VK_IMAGE_FORMAT_CONSTRAINTS_FLAG_BITS_MAX_ENUM_FUCHSIAX = 0x7FFFFFFF } VkImageFormatConstraintsFlagBitsFUCHSIAX; typedef VkFlags VkImageFormatConstraintsFlagsFUCHSIAX; typedef enum VkImageConstraintsInfoFlagBitsFUCHSIAX { VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIAX = 0x00000001, VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIAX = 0x00000002, VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIAX = 0x00000004, VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIAX = 0x00000008, VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIAX = 0x00000010, VK_IMAGE_CONSTRAINTS_INFO_FLAG_BITS_MAX_ENUM_FUCHSIAX = 0x7FFFFFFF } VkImageConstraintsInfoFlagBitsFUCHSIAX; typedef VkFlags VkImageConstraintsInfoFlagsFUCHSIAX; typedef struct VkBufferCollectionCreateInfoFUCHSIAX { VkStructureType sType; const void* pNext; uint32_t collectionToken; } VkBufferCollectionCreateInfoFUCHSIAX; typedef struct VkImportMemoryBufferCollectionFUCHSIAX { VkStructureType sType; const void* pNext; VkBufferCollectionFUCHSIAX collection; uint32_t index; } VkImportMemoryBufferCollectionFUCHSIAX; typedef struct VkBufferCollectionImageCreateInfoFUCHSIAX { VkStructureType sType; const void* pNext; VkBufferCollectionFUCHSIAX collection; uint32_t index; } VkBufferCollectionImageCreateInfoFUCHSIAX; typedef struct VkBufferConstraintsInfoFUCHSIAX { VkStructureType sType; const void* pNext; const VkBufferCreateInfo* pBufferCreateInfo; VkFormatFeatureFlags requiredFormatFeatures; uint32_t minCount; } VkBufferConstraintsInfoFUCHSIAX; typedef struct VkBufferCollectionBufferCreateInfoFUCHSIAX { VkStructureType sType; const void* pNext; VkBufferCollectionFUCHSIAX collection; uint32_t index; } VkBufferCollectionBufferCreateInfoFUCHSIAX; typedef struct VkBufferCollectionPropertiesFUCHSIAX { VkStructureType sType; void* pNext; uint32_t memoryTypeBits; uint32_t count; } VkBufferCollectionPropertiesFUCHSIAX; typedef struct VkSysmemColorSpaceFUCHSIAX { VkStructureType sType; const void* pNext; uint32_t colorSpace; } VkSysmemColorSpaceFUCHSIAX; typedef struct VkBufferCollectionProperties2FUCHSIAX { VkStructureType sType; void* pNext; uint32_t memoryTypeBits; uint32_t bufferCount; uint32_t createInfoIndex; uint64_t sysmemFormat; VkFormatFeatureFlags formatFeatures; VkSysmemColorSpaceFUCHSIAX colorSpace; VkComponentMapping samplerYcbcrConversionComponents; VkSamplerYcbcrModelConversion suggestedYcbcrModel; VkSamplerYcbcrRange suggestedYcbcrRange; VkChromaLocation suggestedXChromaOffset; VkChromaLocation suggestedYChromaOffset; } VkBufferCollectionProperties2FUCHSIAX; typedef struct VkImageFormatConstraintsInfoFUCHSIAX { VkStructureType sType; const void* pNext; VkFormatFeatureFlags requiredFormatFeatures; VkImageFormatConstraintsFlagsFUCHSIAX flags; uint64_t sysmemFormat; uint32_t colorSpaceCount; const VkSysmemColorSpaceFUCHSIAX* pColorSpaces; } VkImageFormatConstraintsInfoFUCHSIAX; typedef struct VkImageConstraintsInfoFUCHSIAX { VkStructureType sType; const void* pNext; uint32_t createInfoCount; const VkImageCreateInfo* pCreateInfos; const VkImageFormatConstraintsInfoFUCHSIAX* pFormatConstraints; uint32_t minBufferCount; uint32_t maxBufferCount; uint32_t minBufferCountForCamping; uint32_t minBufferCountForDedicatedSlack; uint32_t minBufferCountForSharedSlack; VkImageConstraintsInfoFlagsFUCHSIAX flags; } VkImageConstraintsInfoFUCHSIAX; #define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIAX \ ((VkStructureType)1000367000) #define VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIAX \ ((VkStructureType)1000367004) #define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIAX \ ((VkStructureType)1000367005) #define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIAX \ ((VkStructureType)1000367006) #define VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIAX \ ((VkStructureType)1000367007) #define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIAX \ ((VkStructureType)1000367008) #define VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIAX \ ((VkStructureType)1000367009) #define VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIAX \ ((VkStructureType)1000367010) #define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES2_FUCHSIAX \ ((VkStructureType)1000367011) #endif // VK_FUCHSIA_buffer_collection_x #endif // VK_USE_PLATFORM_FUCHSIA // VulkanStream features #define VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT (1 << 0) #define VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT (1 << 1) #define VULKAN_STREAM_FEATURE_SHADER_FLOAT16_INT8_BIT (1 << 2) #define VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT (1 << 3) #define VK_YCBCR_CONVERSION_DO_NOTHING ((VkSamplerYcbcrConversion)0x1111111111111111) // Stuff we advertised but didn't define the structs for it yet because // we also needed to update our vulkan headers and xml #ifndef VK_VERSION_1_2 typedef struct VkPhysicalDeviceShaderFloat16Int8Features { VkStructureType sType; void* pNext; VkBool32 shaderFloat16; VkBool32 shaderInt8; } VkPhysicalDeviceShaderFloat16Int8Features; #define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES \ ((VkStructureType)1000082000) #endif #define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR \ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES #define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR \ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES #ifndef VK_KHR_shader_float16_int8 #define VK_KHR_shader_float16_int8 1 #define VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION 1 #define VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME "VK_KHR_shader_float16_int8" typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceShaderFloat16Int8FeaturesKHR; typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceFloat16Int8FeaturesKHR; #endif #define VK_GOOGLE_gfxstream 1 typedef void (VKAPI_PTR *PFN_vkQueueHostSyncGOOGLE)( VkQueue queue, uint32_t needHostSync, uint32_t sequenceNumber); typedef void (VKAPI_PTR *PFN_vkQueueSubmitAsyncGOOGLE)( VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence); typedef void (VKAPI_PTR *PFN_vkQueueWaitIdleAsyncGOOGLE)(VkQueue queue); typedef void (VKAPI_PTR *PFN_vkQueueBindSparseAsyncGOOGLE)( VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence); typedef VkResult (VKAPI_PTR *PFN_vkGetLinearImageLayoutGOOGLE)(VkDevice device, VkFormat format, VkDeviceSize* pOffset, VkDeviceSize* pRowPitchAlignment); typedef VkResult (VKAPI_PTR *PFN_vkGetLinearImageLayout2GOOGLE)(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkDeviceSize* pOffset, VkDeviceSize* pRowPitchAlignment); typedef void (VKAPI_PTR *PFN_vkQueueFlushCommandsGOOGLE)(VkQueue queue, VkDeviceSize dataSize, const void* pData); 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); typedef void (VKAPI_PTR *PFN_vkCollectDescriptorPoolIdsGOOGLE)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t* pPoolIdCount, uint64_t* pPoolIds); typedef void (VKAPI_PTR *PFN_vkQueueSignalReleaseImageANDROIDAsyncGOOGLE)(VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image); // TODO(liyl): Remove once Android vulkan-headers is updated // to 1.2.184 or higher. #if VK_HEADER_VERSION < 184 typedef struct VkPipelineCacheHeaderVersionOne { uint32_t headerSize; VkPipelineCacheHeaderVersion headerVersion; uint32_t vendorID; uint32_t deviceID; uint8_t pipelineCacheUUID[VK_UUID_SIZE]; } VkPipelineCacheHeaderVersionOne; #endif // VK_HEADER_VERSION < 184 // TODO(liyl): Remove once Android vulkan-headers is updated // to 1.2.195 or higher. #ifdef VK_EXT_image_drm_format_modifier #if VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION < 2 #ifndef VK_KHR_format_feature_flags2 typedef uint64_t VkFormatFeatureFlags2KHR; #endif // VK_KHR_format_feature_flags2 #define VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT ((VkStructureType)1000158006) typedef struct VkDrmFormatModifierProperties2EXT { uint64_t drmFormatModifier; uint32_t drmFormatModifierPlaneCount; VkFormatFeatureFlags2KHR drmFormatModifierTilingFeatures; } VkDrmFormatModifierProperties2EXT; typedef struct VkDrmFormatModifierPropertiesList2EXT { VkStructureType sType; void* pNext; uint32_t drmFormatModifierCount; VkDrmFormatModifierProperties2EXT* pDrmFormatModifierProperties; } VkDrmFormatModifierPropertiesList2EXT; #endif // VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION < 2 #endif // VK_EXT_image_drm_format_modifier // TODO(liyl): Remove once Android vulkan-headers is updated // to 1.2.195 or higher. #ifdef VK_ANDROID_external_memory_android_hardware_buffer #if VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION < 4 #define VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID ((VkStructureType)1000129006) typedef struct VkAndroidHardwareBufferFormatProperties2ANDROID { VkStructureType sType; void* pNext; VkFormat format; uint64_t externalFormat; VkFormatFeatureFlags2KHR formatFeatures; VkComponentMapping samplerYcbcrConversionComponents; VkSamplerYcbcrModelConversion suggestedYcbcrModel; VkSamplerYcbcrRange suggestedYcbcrRange; VkChromaLocation suggestedXChromaOffset; VkChromaLocation suggestedYChromaOffset; } VkAndroidHardwareBufferFormatProperties2ANDROID; #endif // VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION < 4 #endif // VK_ANDROID_external_memory_android_hardware_buffer #ifdef __cplusplus } // extern "C" #endif #ifdef __cplusplus template bool arrayany(const T* arr, uint32_t begin, uint32_t end, const F& func) { const T* e = arr + end; return std::find_if(arr + begin, e, func) != e; } #define DEFINE_ALIAS_FUNCTION(ORIGINAL_FN, ALIAS_FN) \ template \ inline auto ALIAS_FN(Args&&... args) -> decltype(ORIGINAL_FN(std::forward(args)...)) { \ return ORIGINAL_FN(std::forward(args)...); \ } #endif