Loading vulkan/include/vulkan/vk_android_native_buffer.h +40 −3 Original line number Diff line number Diff line Loading @@ -55,7 +55,12 @@ extern "C" { * This version of the extension is largely designed to clean up the mix of * GrallocUsage and GrallocUsage2 */ #define VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 9 /* * NOTE ON VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 10 * * This version of the extension cleans up a bug introduced in version 9 */ #define VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 10 #define VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME "VK_ANDROID_native_buffer" #define VK_ANDROID_NATIVE_BUFFER_ENUM(type, id) \ Loading @@ -69,6 +74,8 @@ extern "C" { VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 2) #define VK_STRUCTURE_TYPE_GRALLOC_USAGE_INFO_ANDROID \ VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 3) #define VK_STRUCTURE_TYPE_GRALLOC_USAGE_INFO_2_ANDROID \ VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 4) /* clang-format off */ typedef enum VkSwapchainImageUsageFlagBitsANDROID { Loading Loading @@ -152,6 +159,23 @@ typedef struct { VkImageUsageFlags imageUsage; } VkGrallocUsageInfoANDROID; /* * struct VkGrallocUsageInfo2ANDROID * * sType: VK_STRUCTURE_TYPE_GRALLOC_USAGE_INFO_2_ANDROID * pNext: NULL or a pointer to a structure extending this structure * format: value specifying the format the image will be created with * imageUsage: bitmask of VkImageUsageFlagBits describing intended usage * swapchainImageUsage: is a bitmask of VkSwapchainImageUsageFlagsANDROID */ typedef struct { VkStructureType sType; const void* pNext; VkFormat format; VkImageUsageFlags imageUsage; VkSwapchainImageUsageFlagsANDROID swapchainImageUsage; } VkGrallocUsageInfo2ANDROID; /* DEPRECATED in SPEC_VERSION 6 */ typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsageANDROID)( VkDevice device, Loading @@ -168,12 +192,18 @@ typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsage2ANDROID)( uint64_t* grallocConsumerUsage, uint64_t* grallocProducerUsage); /* ADDED in SPEC_VERSION 9 */ /* DEPRECATED in SPEC_VERSION 10 */ typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsage3ANDROID)( VkDevice device, const VkGrallocUsageInfoANDROID* grallocUsageInfo, uint64_t* grallocUsage); /* ADDED in SPEC_VERSION 10 */ typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsage4ANDROID)( VkDevice device, const VkGrallocUsageInfo2ANDROID* grallocUsageInfo, uint64_t* grallocUsage); typedef VkResult (VKAPI_PTR *PFN_vkAcquireImageANDROID)( VkDevice device, VkImage image, Loading Loading @@ -208,13 +238,20 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsage2ANDROID( uint64_t* grallocProducerUsage ); /* ADDED in SPEC_VERSION 9 */ /* DEPRECATED in SPEC_VERSION 10 */ VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsage3ANDROID( VkDevice device, const VkGrallocUsageInfoANDROID* grallocUsageInfo, uint64_t* grallocUsage ); /* ADDED in SPEC_VERSION 10 */ VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsage4ANDROID( VkDevice device, const VkGrallocUsageInfo2ANDROID* grallocUsageInfo, uint64_t* grallocUsage ); VKAPI_ATTR VkResult VKAPI_CALL vkAcquireImageANDROID( VkDevice device, VkImage image, Loading vulkan/libvulkan/driver.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -1422,13 +1422,15 @@ VkResult CreateDevice(VkPhysicalDevice physicalDevice, if ((wrapper.GetHalExtensions()[ProcHook::ANDROID_native_buffer]) && !data->driver.GetSwapchainGrallocUsageANDROID && !data->driver.GetSwapchainGrallocUsage2ANDROID && !data->driver.GetSwapchainGrallocUsage3ANDROID) { !data->driver.GetSwapchainGrallocUsage3ANDROID && !data->driver.GetSwapchainGrallocUsage4ANDROID) { ALOGE( "Driver's implementation of ANDROID_native_buffer is broken;" " must expose at least one of " "vkGetSwapchainGrallocUsageANDROID or " "vkGetSwapchainGrallocUsage2ANDROID or " "vkGetSwapchainGrallocUsage3ANDROID"); "vkGetSwapchainGrallocUsage3ANDROID or " "vkGetSwapchainGrallocUsage4ANDROID"); data->driver.DestroyDevice(dev, pAllocator); FreeDeviceData(data, data_allocator); Loading vulkan/libvulkan/driver_gen.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -511,6 +511,13 @@ const ProcHook g_proc_hooks[] = { nullptr, nullptr, }, { "vkGetSwapchainGrallocUsage4ANDROID", ProcHook::DEVICE, ProcHook::ANDROID_native_buffer, nullptr, nullptr, }, { "vkGetSwapchainGrallocUsageANDROID", ProcHook::DEVICE, Loading Loading @@ -692,6 +699,7 @@ bool InitDriverTable(VkDevice dev, INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsageANDROID); INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsage2ANDROID); INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsage3ANDROID); INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsage4ANDROID); INIT_PROC_EXT(ANDROID_native_buffer, true, dev, AcquireImageANDROID); INIT_PROC_EXT(ANDROID_native_buffer, true, dev, QueueSignalReleaseImageANDROID); // clang-format on Loading vulkan/libvulkan/driver_gen.h +1 −0 Original line number Diff line number Diff line Loading @@ -128,6 +128,7 @@ struct DeviceDriverTable { PFN_vkGetSwapchainGrallocUsageANDROID GetSwapchainGrallocUsageANDROID; PFN_vkGetSwapchainGrallocUsage2ANDROID GetSwapchainGrallocUsage2ANDROID; PFN_vkGetSwapchainGrallocUsage3ANDROID GetSwapchainGrallocUsage3ANDROID; PFN_vkGetSwapchainGrallocUsage4ANDROID GetSwapchainGrallocUsage4ANDROID; PFN_vkAcquireImageANDROID AcquireImageANDROID; PFN_vkQueueSignalReleaseImageANDROID QueueSignalReleaseImageANDROID; // clang-format on Loading vulkan/libvulkan/swapchain.cpp +41 −1 Original line number Diff line number Diff line Loading @@ -1569,7 +1569,47 @@ VkResult CreateSwapchainKHR(VkDevice device, void* usage_info_pNext = nullptr; VkImageCompressionControlEXT image_compression = {}; uint64_t native_usage = 0; if (dispatch.GetSwapchainGrallocUsage3ANDROID) { if (dispatch.GetSwapchainGrallocUsage4ANDROID) { ATRACE_BEGIN("GetSwapchainGrallocUsage4ANDROID"); VkGrallocUsageInfo2ANDROID gralloc_usage_info = {}; gralloc_usage_info.sType = VK_STRUCTURE_TYPE_GRALLOC_USAGE_INFO_2_ANDROID; gralloc_usage_info.format = create_info->imageFormat; gralloc_usage_info.imageUsage = create_info->imageUsage; gralloc_usage_info.swapchainImageUsage = swapchain_image_usage; // Look through the pNext chain for an image compression control struct // if one is found AND the appropriate extensions are enabled, // append it to be the gralloc usage pNext chain const VkSwapchainCreateInfoKHR* create_infos = create_info; while (create_infos->pNext) { create_infos = reinterpret_cast<const VkSwapchainCreateInfoKHR*>( create_infos->pNext); switch (create_infos->sType) { case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT: { const VkImageCompressionControlEXT* compression_infos = reinterpret_cast<const VkImageCompressionControlEXT*>( create_infos); image_compression = *compression_infos; image_compression.pNext = nullptr; usage_info_pNext = &image_compression; } break; default: // Ignore all other info structs break; } } gralloc_usage_info.pNext = usage_info_pNext; result = dispatch.GetSwapchainGrallocUsage4ANDROID( device, &gralloc_usage_info, &native_usage); ATRACE_END(); if (result != VK_SUCCESS) { ALOGE("vkGetSwapchainGrallocUsage4ANDROID failed: %d", result); return VK_ERROR_SURFACE_LOST_KHR; } } else if (dispatch.GetSwapchainGrallocUsage3ANDROID) { ATRACE_BEGIN("GetSwapchainGrallocUsage3ANDROID"); VkGrallocUsageInfoANDROID gralloc_usage_info = {}; gralloc_usage_info.sType = VK_STRUCTURE_TYPE_GRALLOC_USAGE_INFO_ANDROID; Loading Loading
vulkan/include/vulkan/vk_android_native_buffer.h +40 −3 Original line number Diff line number Diff line Loading @@ -55,7 +55,12 @@ extern "C" { * This version of the extension is largely designed to clean up the mix of * GrallocUsage and GrallocUsage2 */ #define VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 9 /* * NOTE ON VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 10 * * This version of the extension cleans up a bug introduced in version 9 */ #define VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 10 #define VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME "VK_ANDROID_native_buffer" #define VK_ANDROID_NATIVE_BUFFER_ENUM(type, id) \ Loading @@ -69,6 +74,8 @@ extern "C" { VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 2) #define VK_STRUCTURE_TYPE_GRALLOC_USAGE_INFO_ANDROID \ VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 3) #define VK_STRUCTURE_TYPE_GRALLOC_USAGE_INFO_2_ANDROID \ VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 4) /* clang-format off */ typedef enum VkSwapchainImageUsageFlagBitsANDROID { Loading Loading @@ -152,6 +159,23 @@ typedef struct { VkImageUsageFlags imageUsage; } VkGrallocUsageInfoANDROID; /* * struct VkGrallocUsageInfo2ANDROID * * sType: VK_STRUCTURE_TYPE_GRALLOC_USAGE_INFO_2_ANDROID * pNext: NULL or a pointer to a structure extending this structure * format: value specifying the format the image will be created with * imageUsage: bitmask of VkImageUsageFlagBits describing intended usage * swapchainImageUsage: is a bitmask of VkSwapchainImageUsageFlagsANDROID */ typedef struct { VkStructureType sType; const void* pNext; VkFormat format; VkImageUsageFlags imageUsage; VkSwapchainImageUsageFlagsANDROID swapchainImageUsage; } VkGrallocUsageInfo2ANDROID; /* DEPRECATED in SPEC_VERSION 6 */ typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsageANDROID)( VkDevice device, Loading @@ -168,12 +192,18 @@ typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsage2ANDROID)( uint64_t* grallocConsumerUsage, uint64_t* grallocProducerUsage); /* ADDED in SPEC_VERSION 9 */ /* DEPRECATED in SPEC_VERSION 10 */ typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsage3ANDROID)( VkDevice device, const VkGrallocUsageInfoANDROID* grallocUsageInfo, uint64_t* grallocUsage); /* ADDED in SPEC_VERSION 10 */ typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsage4ANDROID)( VkDevice device, const VkGrallocUsageInfo2ANDROID* grallocUsageInfo, uint64_t* grallocUsage); typedef VkResult (VKAPI_PTR *PFN_vkAcquireImageANDROID)( VkDevice device, VkImage image, Loading Loading @@ -208,13 +238,20 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsage2ANDROID( uint64_t* grallocProducerUsage ); /* ADDED in SPEC_VERSION 9 */ /* DEPRECATED in SPEC_VERSION 10 */ VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsage3ANDROID( VkDevice device, const VkGrallocUsageInfoANDROID* grallocUsageInfo, uint64_t* grallocUsage ); /* ADDED in SPEC_VERSION 10 */ VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsage4ANDROID( VkDevice device, const VkGrallocUsageInfo2ANDROID* grallocUsageInfo, uint64_t* grallocUsage ); VKAPI_ATTR VkResult VKAPI_CALL vkAcquireImageANDROID( VkDevice device, VkImage image, Loading
vulkan/libvulkan/driver.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -1422,13 +1422,15 @@ VkResult CreateDevice(VkPhysicalDevice physicalDevice, if ((wrapper.GetHalExtensions()[ProcHook::ANDROID_native_buffer]) && !data->driver.GetSwapchainGrallocUsageANDROID && !data->driver.GetSwapchainGrallocUsage2ANDROID && !data->driver.GetSwapchainGrallocUsage3ANDROID) { !data->driver.GetSwapchainGrallocUsage3ANDROID && !data->driver.GetSwapchainGrallocUsage4ANDROID) { ALOGE( "Driver's implementation of ANDROID_native_buffer is broken;" " must expose at least one of " "vkGetSwapchainGrallocUsageANDROID or " "vkGetSwapchainGrallocUsage2ANDROID or " "vkGetSwapchainGrallocUsage3ANDROID"); "vkGetSwapchainGrallocUsage3ANDROID or " "vkGetSwapchainGrallocUsage4ANDROID"); data->driver.DestroyDevice(dev, pAllocator); FreeDeviceData(data, data_allocator); Loading
vulkan/libvulkan/driver_gen.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -511,6 +511,13 @@ const ProcHook g_proc_hooks[] = { nullptr, nullptr, }, { "vkGetSwapchainGrallocUsage4ANDROID", ProcHook::DEVICE, ProcHook::ANDROID_native_buffer, nullptr, nullptr, }, { "vkGetSwapchainGrallocUsageANDROID", ProcHook::DEVICE, Loading Loading @@ -692,6 +699,7 @@ bool InitDriverTable(VkDevice dev, INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsageANDROID); INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsage2ANDROID); INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsage3ANDROID); INIT_PROC_EXT(ANDROID_native_buffer, false, dev, GetSwapchainGrallocUsage4ANDROID); INIT_PROC_EXT(ANDROID_native_buffer, true, dev, AcquireImageANDROID); INIT_PROC_EXT(ANDROID_native_buffer, true, dev, QueueSignalReleaseImageANDROID); // clang-format on Loading
vulkan/libvulkan/driver_gen.h +1 −0 Original line number Diff line number Diff line Loading @@ -128,6 +128,7 @@ struct DeviceDriverTable { PFN_vkGetSwapchainGrallocUsageANDROID GetSwapchainGrallocUsageANDROID; PFN_vkGetSwapchainGrallocUsage2ANDROID GetSwapchainGrallocUsage2ANDROID; PFN_vkGetSwapchainGrallocUsage3ANDROID GetSwapchainGrallocUsage3ANDROID; PFN_vkGetSwapchainGrallocUsage4ANDROID GetSwapchainGrallocUsage4ANDROID; PFN_vkAcquireImageANDROID AcquireImageANDROID; PFN_vkQueueSignalReleaseImageANDROID QueueSignalReleaseImageANDROID; // clang-format on Loading
vulkan/libvulkan/swapchain.cpp +41 −1 Original line number Diff line number Diff line Loading @@ -1569,7 +1569,47 @@ VkResult CreateSwapchainKHR(VkDevice device, void* usage_info_pNext = nullptr; VkImageCompressionControlEXT image_compression = {}; uint64_t native_usage = 0; if (dispatch.GetSwapchainGrallocUsage3ANDROID) { if (dispatch.GetSwapchainGrallocUsage4ANDROID) { ATRACE_BEGIN("GetSwapchainGrallocUsage4ANDROID"); VkGrallocUsageInfo2ANDROID gralloc_usage_info = {}; gralloc_usage_info.sType = VK_STRUCTURE_TYPE_GRALLOC_USAGE_INFO_2_ANDROID; gralloc_usage_info.format = create_info->imageFormat; gralloc_usage_info.imageUsage = create_info->imageUsage; gralloc_usage_info.swapchainImageUsage = swapchain_image_usage; // Look through the pNext chain for an image compression control struct // if one is found AND the appropriate extensions are enabled, // append it to be the gralloc usage pNext chain const VkSwapchainCreateInfoKHR* create_infos = create_info; while (create_infos->pNext) { create_infos = reinterpret_cast<const VkSwapchainCreateInfoKHR*>( create_infos->pNext); switch (create_infos->sType) { case VK_STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT: { const VkImageCompressionControlEXT* compression_infos = reinterpret_cast<const VkImageCompressionControlEXT*>( create_infos); image_compression = *compression_infos; image_compression.pNext = nullptr; usage_info_pNext = &image_compression; } break; default: // Ignore all other info structs break; } } gralloc_usage_info.pNext = usage_info_pNext; result = dispatch.GetSwapchainGrallocUsage4ANDROID( device, &gralloc_usage_info, &native_usage); ATRACE_END(); if (result != VK_SUCCESS) { ALOGE("vkGetSwapchainGrallocUsage4ANDROID failed: %d", result); return VK_ERROR_SURFACE_LOST_KHR; } } else if (dispatch.GetSwapchainGrallocUsage3ANDROID) { ATRACE_BEGIN("GetSwapchainGrallocUsage3ANDROID"); VkGrallocUsageInfoANDROID gralloc_usage_info = {}; gralloc_usage_info.sType = VK_STRUCTURE_TYPE_GRALLOC_USAGE_INFO_ANDROID; Loading