From 4670126b86a666d05d4bd25d0fb0f1a0359849e9 Mon Sep 17 00:00:00 2001 From: Derek Sollenberger Date: Mon, 8 Apr 2019 15:45:20 -0400 Subject: [PATCH] Respect the hardware buffer usage flags set by the consumer. Test: CtsUiRenderingTestCases Bug: 130121294 Change-Id: Ie77dee104fa8935978dfd6c0c506d2995f20cd79 --- libs/hwui/renderthread/VulkanSurface.cpp | 71 ++++++++++++------------ 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/libs/hwui/renderthread/VulkanSurface.cpp b/libs/hwui/renderthread/VulkanSurface.cpp index 36f540c479738..be78b694f53a1 100644 --- a/libs/hwui/renderthread/VulkanSurface.cpp +++ b/libs/hwui/renderthread/VulkanSurface.cpp @@ -266,49 +266,48 @@ VulkanSurface* VulkanSurface::Create(ANativeWindow* window, ColorMode colorMode, vkPixelFormat = VK_FORMAT_R16G16B16A16_SFLOAT; } - if (nullptr != vkManager.mGetPhysicalDeviceImageFormatProperties2) { - VkPhysicalDeviceExternalImageFormatInfo externalImageFormatInfo; - externalImageFormatInfo.sType = - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO; - externalImageFormatInfo.pNext = nullptr; - externalImageFormatInfo.handleType = - VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID; + LOG_ALWAYS_FATAL_IF(nullptr == vkManager.mGetPhysicalDeviceImageFormatProperties2, + "vkGetPhysicalDeviceImageFormatProperties2 is missing"); + VkPhysicalDeviceExternalImageFormatInfo externalImageFormatInfo; + externalImageFormatInfo.sType = + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO; + externalImageFormatInfo.pNext = nullptr; + externalImageFormatInfo.handleType = + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID; - VkPhysicalDeviceImageFormatInfo2 imageFormatInfo; - imageFormatInfo.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2; - imageFormatInfo.pNext = &externalImageFormatInfo; - imageFormatInfo.format = vkPixelFormat; - imageFormatInfo.type = VK_IMAGE_TYPE_2D; - imageFormatInfo.tiling = VK_IMAGE_TILING_OPTIMAL; - imageFormatInfo.usage = usageFlags; - imageFormatInfo.flags = 0; + VkPhysicalDeviceImageFormatInfo2 imageFormatInfo; + imageFormatInfo.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2; + imageFormatInfo.pNext = &externalImageFormatInfo; + imageFormatInfo.format = vkPixelFormat; + imageFormatInfo.type = VK_IMAGE_TYPE_2D; + imageFormatInfo.tiling = VK_IMAGE_TILING_OPTIMAL; + imageFormatInfo.usage = usageFlags; + imageFormatInfo.flags = 0; - VkAndroidHardwareBufferUsageANDROID hwbUsage; - hwbUsage.sType = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID; - hwbUsage.pNext = nullptr; + VkAndroidHardwareBufferUsageANDROID hwbUsage; + hwbUsage.sType = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID; + hwbUsage.pNext = nullptr; - VkImageFormatProperties2 imgFormProps; - imgFormProps.sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2; - imgFormProps.pNext = &hwbUsage; + VkImageFormatProperties2 imgFormProps; + imgFormProps.sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2; + imgFormProps.pNext = &hwbUsage; - res = vkManager.mGetPhysicalDeviceImageFormatProperties2(vkManager.mPhysicalDevice, - &imageFormatInfo, &imgFormProps); - if (VK_SUCCESS != res) { - ALOGE("Failed to query GetPhysicalDeviceImageFormatProperties2"); - return nullptr; - } - - windowInfo.windowUsageFlags = hwbUsage.androidHardwareBufferUsage; - if (vkManager.isQualcomm()) { - windowInfo.windowUsageFlags = - windowInfo.windowUsageFlags | AHARDWAREBUFFER_USAGE_VENDOR_0; - } - - } else { - ALOGE("VulkanSurface::Create() vkmGetPhysicalDeviceImageFormatProperties2 is missing"); + res = vkManager.mGetPhysicalDeviceImageFormatProperties2(vkManager.mPhysicalDevice, + &imageFormatInfo, &imgFormProps); + if (VK_SUCCESS != res) { + ALOGE("Failed to query GetPhysicalDeviceImageFormatProperties2"); return nullptr; } + uint64_t consumerUsage; + native_window_get_consumer_usage(window, &consumerUsage); + windowInfo.windowUsageFlags = consumerUsage | hwbUsage.androidHardwareBufferUsage; + + if (vkManager.isQualcomm()) { + windowInfo.windowUsageFlags = + windowInfo.windowUsageFlags | AHARDWAREBUFFER_USAGE_VENDOR_0; + } + /* * Now we attempt to modify the window! */