summaryrefslogtreecommitdiff
path: root/libs/hwui/renderthread/VulkanSurface.cpp
diff options
context:
space:
mode:
authorDerek Sollenberger <djsollen@google.com>2019-03-19 13:55:10 -0400
committerDerek Sollenberger <djsollen@google.com>2019-03-21 13:24:26 -0400
commit31c1b82ad7c04370d7b80dbdaefcfe028d794abd (patch)
treeb39afaa080ecc4b8dcd7b248873927703a43c202 /libs/hwui/renderthread/VulkanSurface.cpp
parent76bd81a49a8751a8afeb9347919ff9b232d6623f (diff)
Use VkAndroidHardwareBufferUsageANDROID to compute HWUI usage flags
Bug: 128923272 Test: atest CtsUiRenderingTestCases Change-Id: I27db1a35b77fb654ab738520bee6734f6a62cc4f
Diffstat (limited to 'libs/hwui/renderthread/VulkanSurface.cpp')
-rw-r--r--libs/hwui/renderthread/VulkanSurface.cpp43
1 files changed, 38 insertions, 5 deletions
diff --git a/libs/hwui/renderthread/VulkanSurface.cpp b/libs/hwui/renderthread/VulkanSurface.cpp
index c03c3a896e26..a98eb322cfc7 100644
--- a/libs/hwui/renderthread/VulkanSurface.cpp
+++ b/libs/hwui/renderthread/VulkanSurface.cpp
@@ -256,11 +256,44 @@ VulkanSurface* VulkanSurface::Create(ANativeWindow* window, ColorMode colorMode,
vkPixelFormat = VK_FORMAT_R16G16B16A16_SFLOAT;
}
- uint64_t producerUsage =
- AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER | AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE;
- uint64_t consumerUsage;
- native_window_get_consumer_usage(window, &consumerUsage);
- windowInfo.windowUsageFlags = consumerUsage | producerUsage;
+ 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;
+
+ 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;
+
+ 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;
+
+ } else {
+ ALOGE("VulkanSurface::Create() vkmGetPhysicalDeviceImageFormatProperties2 is missing");
+ return nullptr;
+ }
/*
* Now we attempt to modify the window!