Home | History | Annotate | Download | only in vulkan_enc
      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 extern "C" {
     21 #endif
     22 
     23 #define VK_ANDROID_native_buffer 1
     24 #define VK_ANDROID_NATIVE_BUFFER_EXTENSION_NUMBER 11
     25 
     26 /* NOTE ON VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 6
     27  *
     28  * This version of the extension transitions from gralloc0 to gralloc1 usage
     29  * flags (int -> 2x uint64_t). The WSI implementation will temporarily continue
     30  * to fill out deprecated fields in VkNativeBufferANDROID, and will call the
     31  * deprecated vkGetSwapchainGrallocUsageANDROID if the new
     32  * vkGetSwapchainGrallocUsage2ANDROID is not supported. This transitionary
     33  * backwards-compatibility support is temporary, and will likely be removed in
     34  * (along with all gralloc0 support) in a future release.
     35  */
     36 #define VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION     7
     37 #define VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME   "VK_ANDROID_native_buffer"
     38 
     39 #define VK_ANDROID_NATIVE_BUFFER_ENUM(type,id)    ((type)(1000000000 + (1000 * (VK_ANDROID_NATIVE_BUFFER_EXTENSION_NUMBER - 1)) + (id)))
     40 #define VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID   VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 0)
     41 #define VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 1)
     42 #define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 2)
     43 
     44 typedef enum VkSwapchainImageUsageFlagBitsANDROID {
     45     VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID = 0x00000001,
     46     VK_SWAPCHAIN_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
     47 } VkSwapchainImageUsageFlagBitsANDROID;
     48 typedef VkFlags VkSwapchainImageUsageFlagsANDROID;
     49 
     50 typedef struct {
     51     VkStructureType             sType; // must be VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID
     52     const void*                 pNext;
     53 
     54     // Buffer handle and stride returned from gralloc alloc()
     55     const uint32_t*             handle;
     56     int                         stride;
     57 
     58     // Gralloc format and usage requested when the buffer was allocated.
     59     int                         format;
     60     int                         usage; // DEPRECATED in SPEC_VERSION 6
     61     // -- Added in SPEC_VERSION 6 --
     62     uint64_t                consumer;
     63     uint64_t                producer;
     64 } VkNativeBufferANDROID;
     65 
     66 typedef struct {
     67     VkStructureType                        sType; // must be VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID
     68     const void*                            pNext;
     69 
     70     VkSwapchainImageUsageFlagsANDROID      usage;
     71 } VkSwapchainImageCreateInfoANDROID;
     72 
     73 typedef struct {
     74     VkStructureType                        sType; // must be VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID
     75     const void*                            pNext;
     76 
     77     VkBool32                               sharedImage;
     78 } VkPhysicalDevicePresentationPropertiesANDROID;
     79 
     80 // -- DEPRECATED in SPEC_VERSION 6 --
     81 typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsageANDROID)(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, int* grallocUsage);
     82 // -- ADDED in SPEC_VERSION 6 --
     83 typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsage2ANDROID)(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage, VkSwapchainImageUsageFlagsANDROID swapchainImageUsage, uint64_t* grallocConsumerUsage, uint64_t* grallocProducerUsage);
     84 typedef VkResult (VKAPI_PTR *PFN_vkAcquireImageANDROID)(VkDevice device, VkImage image, int nativeFenceFd, VkSemaphore semaphore, VkFence fence);
     85 typedef VkResult (VKAPI_PTR *PFN_vkQueueSignalReleaseImageANDROID)(VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image, int* pNativeFenceFd);
     86 
     87 #define VK_GOOGLE_address_space 1
     88 
     89 typedef VkResult (VKAPI_PTR *PFN_vkMapMemoryIntoAddressSpaceGOOGLE)(VkDevice device, VkDeviceMemory memory, uint64_t* pAddress);
     90 
     91 #define VK_GOOGLE_color_buffer 1
     92 #define VK_GOOGLE_COLOR_BUFFER_EXTENSION_NUMBER 219
     93 
     94 #define VK_GOOGLE_COLOR_BUFFER_ENUM(type,id)    ((type)(1000000000 + (1000 * (VK_GOOGLE_COLOR_BUFFER_EXTENSION_NUMBER - 1)) + (id)))
     95 #define VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE   VK_GOOGLE_COLOR_BUFFER_ENUM(VkStructureType, 0)
     96 #define VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE   VK_GOOGLE_COLOR_BUFFER_ENUM(VkStructureType, 1)
     97 
     98 typedef struct {
     99     VkStructureType sType; // must be VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE
    100     const void* pNext;
    101     uint32_t colorBuffer;
    102 } VkImportColorBufferGOOGLE;
    103 
    104 typedef struct {
    105     VkStructureType sType; // must be VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE
    106     const void* pNext;
    107     uint64_t physicalAddress;
    108     VkDeviceSize size;
    109     VkFormat format;
    110     VkImageTiling tiling;
    111     uint32_t tilingParameter;
    112 } VkImportPhysicalAddressGOOGLE;
    113 
    114 typedef VkResult (VKAPI_PTR *PFN_vkRegisterImageColorBufferGOOGLE)(VkDevice device, VkImage image, uint32_t colorBuffer);
    115 typedef VkResult (VKAPI_PTR *PFN_vkRegisterBufferColorBufferGOOGLE)(VkDevice device, VkBuffer image, uint32_t colorBuffer);
    116 
    117 #define VK_ANDROID_external_memory_android_hardware_buffer 1
    118 struct AHardwareBuffer;
    119 struct VkAndroidHardwareBufferPropertiesANDROID;
    120 struct VkMemoryGetAndroidHardwareBufferInfoANDROID;
    121 
    122 #ifdef __Fuchsia__
    123 
    124 typedef struct VkAndroidHardwareBufferUsageANDROID {
    125     VkStructureType    sType;
    126     void*              pNext;
    127     uint64_t           androidHardwareBufferUsage;
    128 } VkAndroidHardwareBufferUsageANDROID;
    129 
    130 typedef struct VkAndroidHardwareBufferPropertiesANDROID {
    131     VkStructureType    sType;
    132     void*              pNext;
    133     VkDeviceSize       allocationSize;
    134     uint32_t           memoryTypeBits;
    135 } VkAndroidHardwareBufferPropertiesANDROID;
    136 
    137 typedef struct VkAndroidHardwareBufferFormatPropertiesANDROID {
    138     VkStructureType                  sType;
    139     void*                            pNext;
    140     VkFormat                         format;
    141     uint64_t                         externalFormat;
    142     VkFormatFeatureFlags             formatFeatures;
    143     VkComponentMapping               samplerYcbcrConversionComponents;
    144     VkSamplerYcbcrModelConversion    suggestedYcbcrModel;
    145     VkSamplerYcbcrRange              suggestedYcbcrRange;
    146     VkChromaLocation                 suggestedXChromaOffset;
    147     VkChromaLocation                 suggestedYChromaOffset;
    148 } VkAndroidHardwareBufferFormatPropertiesANDROID;
    149 
    150 typedef struct VkImportAndroidHardwareBufferInfoANDROID {
    151     VkStructureType            sType;
    152     const void*                pNext;
    153     struct AHardwareBuffer*    buffer;
    154 } VkImportAndroidHardwareBufferInfoANDROID;
    155 
    156 typedef struct VkMemoryGetAndroidHardwareBufferInfoANDROID {
    157     VkStructureType    sType;
    158     const void*        pNext;
    159     VkDeviceMemory     memory;
    160 } VkMemoryGetAndroidHardwareBufferInfoANDROID;
    161 
    162 typedef struct VkExternalFormatANDROID {
    163     VkStructureType    sType;
    164     void*              pNext;
    165     uint64_t           externalFormat;
    166 } VkExternalFormatANDROID;
    167 
    168 
    169 typedef VkResult (VKAPI_PTR *PFN_vkGetAndroidHardwareBufferPropertiesANDROID)(VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties);
    170 typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer);
    171 
    172 #ifndef VK_NO_PROTOTYPES
    173 VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID(
    174     VkDevice                                    device,
    175     const struct AHardwareBuffer*               buffer,
    176     VkAndroidHardwareBufferPropertiesANDROID*   pProperties);
    177 
    178 VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID(
    179     VkDevice                                    device,
    180     const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
    181     struct AHardwareBuffer**                    pBuffer);
    182 #endif
    183 
    184 /**
    185  * Buffer pixel formats.
    186  */
    187 enum AHardwareBuffer_Format {
    188     /**
    189      * Corresponding formats:
    190      *   Vulkan: VK_FORMAT_R8G8B8A8_UNORM
    191      *   OpenGL ES: GL_RGBA8
    192      */
    193     AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM           = 1,
    194     /**
    195      * 32 bits per pixel, 8 bits per channel format where alpha values are
    196      * ignored (always opaque).
    197      * Corresponding formats:
    198      *   Vulkan: VK_FORMAT_R8G8B8A8_UNORM
    199      *   OpenGL ES: GL_RGB8
    200      */
    201     AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM           = 2,
    202     /**
    203      * Corresponding formats:
    204      *   Vulkan: VK_FORMAT_R8G8B8_UNORM
    205      *   OpenGL ES: GL_RGB8
    206      */
    207     AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM             = 3,
    208     /**
    209      * Corresponding formats:
    210      *   Vulkan: VK_FORMAT_R5G6B5_UNORM_PACK16
    211      *   OpenGL ES: GL_RGB565
    212      */
    213     AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM             = 4,
    214     /**
    215      * Corresponding formats:
    216      *   Vulkan: VK_FORMAT_R16G16B16A16_SFLOAT
    217      *   OpenGL ES: GL_RGBA16F
    218      */
    219     AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT       = 0x16,
    220     /**
    221      * Corresponding formats:
    222      *   Vulkan: VK_FORMAT_A2B10G10R10_UNORM_PACK32
    223      *   OpenGL ES: GL_RGB10_A2
    224      */
    225     AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM        = 0x2b,
    226     /**
    227      * Opaque binary blob format.
    228      * Must have height 1 and one layer, with width equal to the buffer
    229      * size in bytes. Corresponds to Vulkan buffers and OpenGL buffer
    230      * objects. Can be bound to the latter using GL_EXT_external_buffer.
    231      */
    232     AHARDWAREBUFFER_FORMAT_BLOB                     = 0x21,
    233     /**
    234      * Corresponding formats:
    235      *   Vulkan: VK_FORMAT_D16_UNORM
    236      *   OpenGL ES: GL_DEPTH_COMPONENT16
    237      */
    238     AHARDWAREBUFFER_FORMAT_D16_UNORM                = 0x30,
    239     /**
    240      * Corresponding formats:
    241      *   Vulkan: VK_FORMAT_X8_D24_UNORM_PACK32
    242      *   OpenGL ES: GL_DEPTH_COMPONENT24
    243      */
    244     AHARDWAREBUFFER_FORMAT_D24_UNORM                = 0x31,
    245     /**
    246      * Corresponding formats:
    247      *   Vulkan: VK_FORMAT_D24_UNORM_S8_UINT
    248      *   OpenGL ES: GL_DEPTH24_STENCIL8
    249      */
    250     AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT        = 0x32,
    251     /**
    252      * Corresponding formats:
    253      *   Vulkan: VK_FORMAT_D32_SFLOAT
    254      *   OpenGL ES: GL_DEPTH_COMPONENT32F
    255      */
    256     AHARDWAREBUFFER_FORMAT_D32_FLOAT                = 0x33,
    257     /**
    258      * Corresponding formats:
    259      *   Vulkan: VK_FORMAT_D32_SFLOAT_S8_UINT
    260      *   OpenGL ES: GL_DEPTH32F_STENCIL8
    261      */
    262     AHARDWAREBUFFER_FORMAT_D32_FLOAT_S8_UINT        = 0x34,
    263     /**
    264      * Corresponding formats:
    265      *   Vulkan: VK_FORMAT_S8_UINT
    266      *   OpenGL ES: GL_STENCIL_INDEX8
    267      */
    268     AHARDWAREBUFFER_FORMAT_S8_UINT                  = 0x35,
    269 };
    270 /**
    271  * Buffer usage flags, specifying how the buffer will be accessed.
    272  */
    273 enum AHardwareBuffer_UsageFlags {
    274     /// The buffer will never be locked for direct CPU reads using the
    275     /// AHardwareBuffer_lock() function. Note that reading the buffer
    276     /// using OpenGL or Vulkan functions or memory mappings is still
    277     /// allowed.
    278     AHARDWAREBUFFER_USAGE_CPU_READ_NEVER        = 0UL,
    279     /// The buffer will sometimes be locked for direct CPU reads using
    280     /// the AHardwareBuffer_lock() function. Note that reading the
    281     /// buffer using OpenGL or Vulkan functions or memory mappings
    282     /// does not require the presence of this flag.
    283     AHARDWAREBUFFER_USAGE_CPU_READ_RARELY       = 2UL,
    284     /// The buffer will often be locked for direct CPU reads using
    285     /// the AHardwareBuffer_lock() function. Note that reading the
    286     /// buffer using OpenGL or Vulkan functions or memory mappings
    287     /// does not require the presence of this flag.
    288     AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN        = 3UL,
    289     /// CPU read value mask.
    290     AHARDWAREBUFFER_USAGE_CPU_READ_MASK         = 0xFUL,
    291     /// The buffer will never be locked for direct CPU writes using the
    292     /// AHardwareBuffer_lock() function. Note that writing the buffer
    293     /// using OpenGL or Vulkan functions or memory mappings is still
    294     /// allowed.
    295     AHARDWAREBUFFER_USAGE_CPU_WRITE_NEVER       = 0UL << 4,
    296     /// The buffer will sometimes be locked for direct CPU writes using
    297     /// the AHardwareBuffer_lock() function. Note that writing the
    298     /// buffer using OpenGL or Vulkan functions or memory mappings
    299     /// does not require the presence of this flag.
    300     AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY      = 2UL << 4,
    301     /// The buffer will often be locked for direct CPU writes using
    302     /// the AHardwareBuffer_lock() function. Note that writing the
    303     /// buffer using OpenGL or Vulkan functions or memory mappings
    304     /// does not require the presence of this flag.
    305     AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN       = 3UL << 4,
    306     /// CPU write value mask.
    307     AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK        = 0xFUL << 4,
    308     /// The buffer will be read from by the GPU as a texture.
    309     AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE      = 1UL << 8,
    310     /**
    311      * The buffer will be written to by the GPU as a framebuffer
    312      * attachment.
    313      *
    314      * Note that the name of this flag is somewhat misleading: it does
    315      * not imply that the buffer contains a color format. A buffer with
    316      * depth or stencil format that will be used as a framebuffer
    317      * attachment should also have this flag.
    318      */
    319     AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT       = 1UL << 9,
    320     /**
    321      * The buffer is protected from direct CPU access or being read by
    322      * non-secure hardware, such as video encoders.
    323      *
    324      * This flag is incompatible with CPU read and write flags. It is
    325      * mainly used when handling DRM video. Refer to the EGL extension
    326      * EGL_EXT_protected_content and GL extension
    327      * GL_EXT_protected_textures for more information on how these
    328      * buffers are expected to behave.
    329      */
    330     AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT      = 1UL << 14,
    331     /// The buffer will be read by a hardware video encoder.
    332     AHARDWAREBUFFER_USAGE_VIDEO_ENCODE           = 1UL << 16,
    333     /**
    334      * The buffer will be used for direct writes from sensors.
    335      * When this flag is present, the format must be AHARDWAREBUFFER_FORMAT_BLOB.
    336      */
    337     AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA     = 1UL << 23,
    338     /**
    339      * The buffer will be used as a shader storage or uniform buffer object.
    340      * When this flag is present, the format must be AHARDWAREBUFFER_FORMAT_BLOB.
    341      */
    342     AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER        = 1UL << 24,
    343     /**
    344      * The buffer will be used as a cube map texture.
    345      * When this flag is present, the buffer must have a layer count
    346      * that is a multiple of 6. Note that buffers with this flag must be
    347      * bound to OpenGL textures using the extension
    348      * GL_EXT_EGL_image_storage instead of GL_KHR_EGL_image.
    349      */
    350     AHARDWAREBUFFER_USAGE_GPU_CUBE_MAP               = 1UL << 25,
    351     /**
    352      * The buffer contains a complete mipmap hierarchy.
    353      * Note that buffers with this flag must be bound to OpenGL textures using
    354      * the extension GL_EXT_EGL_image_storage instead of GL_KHR_EGL_image.
    355      */
    356     AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE        = 1UL << 26,
    357     AHARDWAREBUFFER_USAGE_VENDOR_0  = 1ULL << 28,
    358     AHARDWAREBUFFER_USAGE_VENDOR_1  = 1ULL << 29,
    359     AHARDWAREBUFFER_USAGE_VENDOR_2  = 1ULL << 30,
    360     AHARDWAREBUFFER_USAGE_VENDOR_3  = 1ULL << 31,
    361     AHARDWAREBUFFER_USAGE_VENDOR_4  = 1ULL << 48,
    362     AHARDWAREBUFFER_USAGE_VENDOR_5  = 1ULL << 49,
    363     AHARDWAREBUFFER_USAGE_VENDOR_6  = 1ULL << 50,
    364     AHARDWAREBUFFER_USAGE_VENDOR_7  = 1ULL << 51,
    365     AHARDWAREBUFFER_USAGE_VENDOR_8  = 1ULL << 52,
    366     AHARDWAREBUFFER_USAGE_VENDOR_9  = 1ULL << 53,
    367     AHARDWAREBUFFER_USAGE_VENDOR_10 = 1ULL << 54,
    368     AHARDWAREBUFFER_USAGE_VENDOR_11 = 1ULL << 55,
    369     AHARDWAREBUFFER_USAGE_VENDOR_12 = 1ULL << 56,
    370     AHARDWAREBUFFER_USAGE_VENDOR_13 = 1ULL << 57,
    371     AHARDWAREBUFFER_USAGE_VENDOR_14 = 1ULL << 58,
    372     AHARDWAREBUFFER_USAGE_VENDOR_15 = 1ULL << 59,
    373     AHARDWAREBUFFER_USAGE_VENDOR_16 = 1ULL << 60,
    374     AHARDWAREBUFFER_USAGE_VENDOR_17 = 1ULL << 61,
    375     AHARDWAREBUFFER_USAGE_VENDOR_18 = 1ULL << 62,
    376     AHARDWAREBUFFER_USAGE_VENDOR_19 = 1ULL << 63,
    377 };
    378 /**
    379  * Buffer description. Used for allocating new buffers and querying
    380  * parameters of existing ones.
    381  */
    382 typedef struct AHardwareBuffer_Desc {
    383     uint32_t    width;      ///< Width in pixels.
    384     uint32_t    height;     ///< Height in pixels.
    385     /**
    386      * Number of images in an image array. AHardwareBuffers with one
    387      * layer correspond to regular 2D textures. AHardwareBuffers with
    388      * more than layer correspond to texture arrays. If the layer count
    389      * is a multiple of 6 and the usage flag
    390      * AHARDWAREBUFFER_USAGE_GPU_CUBE_MAP is present, the buffer is
    391      * a cube map or a cube map array.
    392      */
    393     uint32_t    layers;
    394     uint32_t    format;     ///< One of AHardwareBuffer_Format.
    395     uint64_t    usage;      ///< Combination of AHardwareBuffer_UsageFlags.
    396     uint32_t    stride;     ///< Row stride in pixels, ignored for AHardwareBuffer_allocate()
    397     uint32_t    rfu0;       ///< Initialize to zero, reserved for future use.
    398     uint64_t    rfu1;       ///< Initialize to zero, reserved for future use.
    399 } AHardwareBuffer_Desc;
    400 
    401 #endif // __Fuchsia__
    402 
    403 #define VK_GOOGLE_sized_descriptor_update_template 1
    404 
    405 typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplateSizedGOOGLE)(
    406     VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate,
    407     uint32_t imageInfoCount,
    408     uint32_t bufferInfoCount,
    409     uint32_t bufferViewCount,
    410     const uint32_t* pImageInfoEntryIndices,
    411     const uint32_t* pBufferInfoEntryIndices,
    412     const uint32_t* pBufferViewEntryIndices,
    413     const VkDescriptorImageInfo* pImageInfos,
    414     const VkDescriptorBufferInfo* pBufferInfos,
    415     const VkBufferView* pBufferViews);
    416 
    417 #define VK_GOOGLE_async_command_buffers 1
    418 
    419 typedef void (VKAPI_PTR *PFN_vkBeginCommandBufferAsyncGOOGLE)(
    420     VkCommandBuffer commandBuffer,
    421     const VkCommandBufferBeginInfo* pBeginInfo);
    422 typedef void (VKAPI_PTR *PFN_vkEndCommandBufferAsyncGOOGLE)(
    423     VkCommandBuffer commandBuffer);
    424 typedef void (VKAPI_PTR *PFN_vkResetCommandBufferAsyncGOOGLE)(
    425     VkCommandBuffer commandBuffer,
    426     VkCommandBufferResetFlags flags);
    427 
    428 #ifdef VK_USE_PLATFORM_FUCHSIA
    429 #define VK_FUCHSIA_buffer_collection 1
    430 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferCollectionFUCHSIA)
    431 
    432 #define VK_FUCHSIA_BUFFER_COLLECTION_SPEC_VERSION 1
    433 #define VK_FUCHSIA_BUFFER_COLLECTION_EXTENSION_NAME "VK_FUCHSIA_buffer_collection"
    434 
    435 typedef struct VkBufferCollectionImageCreateInfoFUCHSIA {
    436     VkStructureType              sType;
    437     const void*                  pNext;
    438     VkBufferCollectionFUCHSIA    collection;
    439     uint32_t                     index;
    440 } VkBufferCollectionImageCreateInfoFUCHSIA;
    441 
    442 #define VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA \
    443     ((VkStructureType)1001004005)
    444 #endif  // VK_USE_PLATFORM_FUCHSIA
    445 
    446 #ifdef VK_USE_PLATFORM_ANDROID_KHR
    447 
    448 typedef struct VkImportMemoryZirconHandleInfoFUCHSIA {
    449     VkStructureType                       sType;
    450     const void*                           pNext;
    451     VkExternalMemoryHandleTypeFlagBits    handleType;
    452     uint32_t                              handle;
    453 } VkImportMemoryZirconHandleInfoFUCHSIA;
    454 
    455 typedef uint32_t VkBufferCollectionFUCHSIA;
    456 
    457 typedef struct VkImportMemoryBufferCollectionFUCHSIA {
    458     VkStructureType              sType;
    459     const void*                  pNext;
    460     VkBufferCollectionFUCHSIA    collection;
    461     uint32_t                     index;
    462 } VkImportMemoryBufferCollectionFUCHSIA;
    463 
    464 #define VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA \
    465     ((VkStructureType)1001000000)
    466 #define VK_STRUCTURE_TYPE_TEMP_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA \
    467     ((VkStructureType)1001000000)
    468 #define VK_EXTERNAL_MEMORY_HANDLE_TYPE_TEMP_ZIRCON_VMO_BIT_FUCHSIA \
    469     ((VkStructureType)0x00000800)
    470 #define VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TEMP_ZIRCON_EVENT_BIT_FUCHSIA \
    471     ((VkStructureType)0x00000020)
    472 
    473 #endif // VK_USE_PLATFORM_ANDROID_KHR
    474 
    475 #ifdef __cplusplus
    476 } // extern "C"
    477 #endif
    478