venus: add vn_android_get_ahb_usage helper function

See "AHardwareBuffer Usage Equivalence" in the spec.

Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10847>
This commit is contained in:
Yiwei Zhang
2021-05-04 23:18:22 +00:00
committed by Marge Bot
parent 5cd04adb8a
commit 008bcefb32
2 changed files with 37 additions and 0 deletions

View File

@@ -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 VkResult
vn_GetSwapchainGrallocUsage2ANDROID( vn_GetSwapchainGrallocUsage2ANDROID(
VkDevice device, VkDevice device,

View File

@@ -51,6 +51,10 @@ vn_android_image_from_anb(struct vn_device *dev,
const VkAllocationCallbacks *alloc, const VkAllocationCallbacks *alloc,
struct vn_image **out_img); struct vn_image **out_img);
uint64_t
vn_android_get_ahb_usage(const VkImageUsageFlags usage,
const VkImageCreateFlags flags);
#else #else
static inline VkResult static inline VkResult
@@ -83,6 +87,13 @@ vn_android_image_from_anb(UNUSED struct vn_device *dev,
return VK_ERROR_OUT_OF_HOST_MEMORY; 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 /* ANDROID */
#endif /* VN_ANDROID_H */ #endif /* VN_ANDROID_H */