mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 22:38:05 +02:00
radv: improve externalMemoryFeatures for android ahb
VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT should always be set, as required by the spec. VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT should be set when radv_ahb_format_for_vk_format knowns the format. That is, radv_create_ahb_memory should at least know how to call AHardwareBuffer_allocate. VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT is always set. We can't know if gralloc can allocate the format/flags/usage combo or not (gralloc might use a private format for the combo). Fixed dEQP-VK.api.external.memory.android_hardware_buffer.image_formats.*. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22619>
This commit is contained in:
parent
eaf1776586
commit
6aee7848bb
2 changed files with 11 additions and 21 deletions
|
|
@ -737,21 +737,11 @@ bool
|
|||
radv_android_gralloc_supports_format(VkFormat format, VkImageUsageFlagBits usage)
|
||||
{
|
||||
#if RADV_SUPPORT_ANDROID_HARDWARE_BUFFER
|
||||
/* Ideally we check Gralloc for what it supports and then merge that with the radv
|
||||
format support, but there is no easy gralloc query besides just creating an image.
|
||||
That seems a bit on the expensive side, so just hardcode for now. */
|
||||
/* TODO: Add multi-plane formats after confirming everything works between radeonsi
|
||||
and radv. */
|
||||
switch (format) {
|
||||
case VK_FORMAT_R8G8B8A8_UNORM:
|
||||
case VK_FORMAT_R5G6B5_UNORM_PACK16:
|
||||
return true;
|
||||
case VK_FORMAT_R8_UNORM:
|
||||
case VK_FORMAT_R8G8_UNORM:
|
||||
return !(usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
/* Ideally we check AHardwareBuffer_isSupported. But that test-allocates on most platforms and
|
||||
* seems a bit on the expensive side. Return true as long as it is a format we understand.
|
||||
*/
|
||||
(void)usage;
|
||||
return radv_ahb_format_for_vk_format(format);
|
||||
#else
|
||||
(void)format;
|
||||
(void)usage;
|
||||
|
|
|
|||
|
|
@ -1723,9 +1723,6 @@ get_external_image_format_properties(struct radv_physical_device *physical_devic
|
|||
if (!physical_device->vk.supported_extensions.ANDROID_external_memory_android_hardware_buffer)
|
||||
break;
|
||||
|
||||
if (!radv_android_gralloc_supports_format(pImageFormatInfo->format, pImageFormatInfo->usage))
|
||||
break;
|
||||
|
||||
if (pImageFormatInfo->type != VK_IMAGE_TYPE_2D)
|
||||
break;
|
||||
|
||||
|
|
@ -1733,9 +1730,12 @@ get_external_image_format_properties(struct radv_physical_device *physical_devic
|
|||
format_properties->maxArrayLayers = MIN2(1, format_properties->maxArrayLayers);
|
||||
format_properties->sampleCounts &= VK_SAMPLE_COUNT_1_BIT;
|
||||
|
||||
flags = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT | VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT;
|
||||
if (pImageFormatInfo->tiling != VK_IMAGE_TILING_LINEAR)
|
||||
flags |= VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT;
|
||||
flags = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT |
|
||||
VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT;
|
||||
|
||||
/* advertise EXPORTABLE only when radv_create_ahb_memory supports the format */
|
||||
if (radv_android_gralloc_supports_format(pImageFormatInfo->format, pImageFormatInfo->usage))
|
||||
flags |= VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT;
|
||||
|
||||
compat_flags = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID;
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue