diff --git a/src/virtio/vulkan/vn_android.c b/src/virtio/vulkan/vn_android.c index acc3947dd90..2bb09eeece9 100644 --- a/src/virtio/vulkan/vn_android.c +++ b/src/virtio/vulkan/vn_android.c @@ -146,6 +146,32 @@ vn_android_ahb_format_to_vk_format(uint32_t format) } } +uint64_t +vn_android_get_ahb_usage(const VkImageUsageFlags usage, + const VkImageCreateFlags flags) +{ + uint64_t ahb_usage = 0; + if (usage & + (VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)) + ahb_usage |= AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE; + + if (usage & (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | + VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)) + ahb_usage |= AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER; + + if (flags & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) + ahb_usage |= AHARDWAREBUFFER_USAGE_GPU_CUBE_MAP; + + if (flags & VK_IMAGE_CREATE_PROTECTED_BIT) + ahb_usage |= AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT; + + /* must include at least one GPU usage flag */ + if (ahb_usage == 0) + ahb_usage = AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE; + + return ahb_usage; +} + VkResult vn_GetSwapchainGrallocUsage2ANDROID( VkDevice device, diff --git a/src/virtio/vulkan/vn_android.h b/src/virtio/vulkan/vn_android.h index c4553d61fea..a2b3efe10d5 100644 --- a/src/virtio/vulkan/vn_android.h +++ b/src/virtio/vulkan/vn_android.h @@ -51,6 +51,10 @@ vn_android_image_from_anb(struct vn_device *dev, const VkAllocationCallbacks *alloc, struct vn_image **out_img); +uint64_t +vn_android_get_ahb_usage(const VkImageUsageFlags usage, + const VkImageCreateFlags flags); + #else static inline VkResult @@ -83,6 +87,13 @@ vn_android_image_from_anb(UNUSED struct vn_device *dev, return VK_ERROR_OUT_OF_HOST_MEMORY; } +static inline uint64_t +vn_android_get_ahb_usage(UNUSED const VkImageUsageFlags usage, + UNUSED const VkImageCreateFlags flags) +{ + return 0; +} + #endif /* ANDROID */ #endif /* VN_ANDROID_H */