anv,hasvk: Set vk_image.ahardware_buffer_format

This effectively just modifies it for YCbCr images where the common code
doesn't have a useable format mapping.

Reviewed-by: Lina Versace <lina@kiwitree.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22038>
This commit is contained in:
Faith Ekstrand 2023-03-21 10:42:54 -05:00 committed by Marge Bot
parent 906944b210
commit 0a86df21d0
6 changed files with 18 additions and 6 deletions

View file

@ -139,8 +139,8 @@ vk_format_from_android(unsigned android_format, unsigned android_usage)
}
}
static inline unsigned
android_format_from_vk(unsigned vk_format)
unsigned
anv_ahb_format_for_vk_format(VkFormat vk_format)
{
switch (vk_format) {
case VK_FORMAT_R8G8B8A8_UNORM:
@ -401,7 +401,7 @@ anv_create_ahw_memory(VkDevice device_h,
w = image->vk.extent.width;
h = image->vk.extent.height;
layers = image->vk.array_layers;
format = android_format_from_vk(image->vk.format);
format = anv_ahw_format_for_vk_format(image->vk.format);
usage = vk_image_usage_to_ahb_usage(image->vk.create_flags,
image->vk.usage);
} else if (dedicated_info && dedicated_info->buffer) {

View file

@ -44,6 +44,8 @@ VkResult anv_image_bind_from_gralloc(struct anv_device *device,
struct anv_image *image,
const VkNativeBufferANDROID *gralloc_info);
unsigned anv_ahb_format_for_vk_format(VkFormat vk_format);
VkResult anv_import_ahw_memory(VkDevice device_h,
struct anv_device_memory *mem,
const VkImportAndroidHardwareBufferInfoANDROID *info);

View file

@ -1370,6 +1370,10 @@ anv_image_init(struct anv_device *device, struct anv_image *image,
if (image->vk.external_handle_types &
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID) {
image->from_ahb = true;
#ifdef ANDROID
image->vk.ahardware_buffer_format =
anv_ahb_format_for_vk_format(image->vk.format);
#endif
return VK_SUCCESS;
}

View file

@ -138,8 +138,8 @@ vk_format_from_android(unsigned android_format, unsigned android_usage)
}
}
static inline unsigned
android_format_from_vk(unsigned vk_format)
unsigned
anv_ahb_format_for_vk_format(VkFormat vk_format)
{
switch (vk_format) {
case VK_FORMAT_R8G8B8A8_UNORM:
@ -400,7 +400,7 @@ anv_create_ahw_memory(VkDevice device_h,
w = image->vk.extent.width;
h = image->vk.extent.height;
layers = image->vk.array_layers;
format = android_format_from_vk(image->vk.format);
format = anv_ahw_format_for_vk_format(image->vk.format);
usage = vk_image_usage_to_ahb_usage(image->vk.create_flags,
image->vk.usage);
} else if (dedicated_info && dedicated_info->buffer) {

View file

@ -1281,6 +1281,10 @@ anv_image_init(struct anv_device *device, struct anv_image *image,
if (image->vk.external_handle_types &
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID) {
image->from_ahb = true;
#ifdef ANDROID
image->vk.ahardware_buffer_format =
anv_ahb_format_for_vk_format(image->vk.format);
#endif
return VK_SUCCESS;
}

View file

@ -3131,6 +3131,8 @@ anv_get_isl_format(const struct intel_device_info *devinfo, VkFormat vk_format,
extern VkFormat
vk_format_from_android(unsigned android_format, unsigned android_usage);
unsigned anv_ahb_format_for_vk_format(VkFormat vk_format);
static inline struct isl_swizzle
anv_swizzle_for_render(struct isl_swizzle swizzle)
{