From 22809765ac9362df6cfab22fe9ed70bf5f7ddb73 Mon Sep 17 00:00:00 2001 From: Roman Stratiienko Date: Sat, 2 Sep 2023 18:35:09 +0300 Subject: [PATCH] v3dv/android: Enable shared presentable image support MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Functionality ensures gralloc won't allocate compressed buffer incompatible with shared presentable image support. Broadcom does not support compressed buffers and we can just enable the feature without additional logic. Despite that, we add the logic here so it can be replaced with the generic code someday. Signed-off-by: Roman Stratiienko Reviewed-by: Alejandro Piñeiro Part-of: --- src/broadcom/vulkan/v3dv_android.c | 6 ++++++ src/broadcom/vulkan/v3dv_device.c | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/broadcom/vulkan/v3dv_android.c b/src/broadcom/vulkan/v3dv_android.c index fddf872..61945d6 100644 --- a/src/broadcom/vulkan/v3dv_android.c +++ b/src/broadcom/vulkan/v3dv_android.c @@ -304,6 +304,12 @@ v3dv_GetSwapchainGrallocUsage2ANDROID( *grallocConsumerUsage |= GRALLOC1_CONSUMER_USAGE_HWCOMPOSER; } + if (swapchainImageUsage & VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID) { + uint64_t front_rendering_usage = 0; + u_gralloc_get_front_rendering_usage(device->gralloc, &front_rendering_usage); + *grallocProducerUsage |= front_rendering_usage; + } + return VK_SUCCESS; } #endif diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index 9066277..2cceb98 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -1656,6 +1656,24 @@ v3dv_GetPhysicalDeviceProperties2(VkPhysicalDevice physicalDevice, props->allowCommandBufferQueryCopies = true; break; } +#ifdef ANDROID +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wswitch" + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID: { + VkPhysicalDevicePresentationPropertiesANDROID *props = + (VkPhysicalDevicePresentationPropertiesANDROID *)ext; + uint64_t front_rendering_usage = 0; + struct u_gralloc *gralloc = u_gralloc_create(U_GRALLOC_TYPE_AUTO); + if (gralloc != NULL) { + u_gralloc_get_front_rendering_usage(gralloc, &front_rendering_usage); + u_gralloc_destroy(&gralloc); + } + props->sharedImage = front_rendering_usage ? VK_TRUE + : VK_FALSE; + break; + } +#pragma GCC diagnostic pop +#endif case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT: { VkPhysicalDeviceDrmPropertiesEXT *props = (VkPhysicalDeviceDrmPropertiesEXT *)ext; -- 2.7.4