anv/android: handle image bindings from gralloc buffers
When creating an image out of a swapchain on Android, the android
layer call will detect a VkBindImageMemorySwapchainInfoKHR in the
pNext chain of the vkBindImageMemory2() call and add a
VkNativeBufferANDROID in the chain. This is what we should use as
backing memory for that image.
v2: Fix a couple of obvious mistakes (Tapani)
v3: Silence build warning (Lionel)
Fix invalid object argument to vk_error() (Lionel)
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Fixes: bc3c71b87a
("anv: don't try to access Android swapchains")
Cc: mesa-stable
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5180
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12244>
This commit is contained in:

committed by
Marge Bot

parent
8d679f4f4e
commit
19b7bbba73
@@ -1772,6 +1772,10 @@ VkResult anv_BindImageMemory2(
|
||||
break;
|
||||
}
|
||||
case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR: {
|
||||
/* Ignore this struct on Android, we cannot access swapchain
|
||||
* structures threre.
|
||||
*/
|
||||
#ifndef VK_USE_PLATFORM_ANDROID_KHR
|
||||
const VkBindImageMemorySwapchainInfoKHR *swapchain_info =
|
||||
(const VkBindImageMemorySwapchainInfoKHR *) s;
|
||||
struct anv_image *swapchain_image =
|
||||
@@ -1793,8 +1797,22 @@ VkResult anv_BindImageMemory2(
|
||||
anv_bo_ref(private_bo);
|
||||
|
||||
did_bind = true;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wswitch"
|
||||
case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID: {
|
||||
const VkNativeBufferANDROID *gralloc_info =
|
||||
(const VkNativeBufferANDROID *)s;
|
||||
VkResult result = anv_image_bind_from_gralloc(device, image,
|
||||
gralloc_info);
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
did_bind = true;
|
||||
break;
|
||||
}
|
||||
#pragma GCC diagnostic pop
|
||||
default:
|
||||
anv_debug_ignored_stype(s->sType);
|
||||
break;
|
||||
|
Reference in New Issue
Block a user