aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBas Nieuwenhuizen <[email protected]>2019-07-10 14:27:37 +0200
committerBas Nieuwenhuizen <[email protected]>2019-10-10 17:02:34 +0000
commita34e4dd0d2aa40dd85bf41ab1e1e65e31924df73 (patch)
tree45e031f9957210de1d149108f1156b463dff5602
parent9ea72b53372e28451c82f798bf557ca516ea7adb (diff)
radv/android: Add android hardware buffer field to device memory.
You cannot go from BO to Android hardware buffer, so for export we have to remember it. Reviewed-by: Samuel Pitoiset <[email protected]>
-rw-r--r--src/amd/vulkan/radv_device.c9
-rw-r--r--src/amd/vulkan/radv_private.h4
2 files changed, 13 insertions, 0 deletions
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index a5b3839394d..b953f63e216 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -3427,6 +3427,11 @@ static void radv_free_memory(struct radv_device *device,
if (mem == NULL)
return;
+#if RADV_SUPPORT_ANDROID_HARDWARE_BUFFER
+ if (mem->android_hardware_buffer)
+ AHardwareBuffer_release(mem->android_hardware_buffer);
+#endif
+
if (mem->bo) {
radv_bo_list_remove(device, mem->bo);
device->ws->buffer_destroy(mem->bo);
@@ -3496,6 +3501,10 @@ static VkResult radv_alloc_memory(struct radv_device *device,
mem->user_ptr = NULL;
mem->bo = NULL;
+#if RADV_SUPPORT_ANDROID_HARDWARE_BUFFER
+ mem->android_hardware_buffer = NULL;
+#endif
+
if (import_info) {
assert(import_info->handleType ==
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT ||
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index 2f5062d99a1..8674d1bd931 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -787,6 +787,10 @@ struct radv_device_memory {
VkDeviceSize map_size;
void * map;
void * user_ptr;
+
+#if RADV_SUPPORT_ANDROID_HARDWARE_BUFFER
+ struct AHardwareBuffer * android_hardware_buffer;
+#endif
};