diff options
author | Chad Versace <[email protected]> | 2017-08-29 01:36:42 -0700 |
---|---|---|
committer | Chad Versace <[email protected]> | 2017-10-17 11:08:26 -0700 |
commit | 076a279a1a0e3ffd537ff8c8e3d8541bd2d07830 (patch) | |
tree | b63c01c91f92e43207064bf5f894252a7a2dd21a /src/intel | |
parent | a9ca8f370d6cce0569f15cbbf0986f5d2e0c1384 (diff) |
anv: Add field anv_image::planes[]::bo_is_owned (v2)
If this flag is set, then the image and the bo have the same lifetime.
vkDestroyImage will release the bo.
We need this for VK_ANDROID_native_buffer, because that extension
creates the VkImage *and* imports its memory during the same
call, vkCreateImage.
v2: Rebase onto VK_KHR_bind_memory2.
Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/intel')
-rw-r--r-- | src/intel/vulkan/anv_image.c | 9 | ||||
-rw-r--r-- | src/intel/vulkan/anv_private.h | 5 |
2 files changed, 14 insertions, 0 deletions
diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c index c8ebdce0b4e..b80011e2228 100644 --- a/src/intel/vulkan/anv_image.c +++ b/src/intel/vulkan/anv_image.c @@ -565,6 +565,13 @@ anv_DestroyImage(VkDevice _device, VkImage _image, if (!image) return; + for (uint32_t p = 0; p < image->n_planes; ++p) { + if (image->planes[p].bo_is_owned) { + assert(image->planes[p].bo != NULL); + anv_bo_cache_release(device, &device->bo_cache, image->planes[p].bo); + } + } + vk_free2(&device->alloc, pAllocator, image); } @@ -574,6 +581,8 @@ static void anv_image_bind_memory_plane(struct anv_device *device, struct anv_device_memory *memory, uint32_t memory_offset) { + assert(!image->planes[plane].bo_is_owned); + if (!memory) { image->planes[plane].bo = NULL; image->planes[plane].bo_offset = 0; diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index a80e8519257..27d2c342033 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -2420,6 +2420,11 @@ struct anv_image { */ struct anv_bo *bo; VkDeviceSize bo_offset; + + /** + * When destroying the image, also free the bo. + * */ + bool bo_is_owned; } planes[3]; }; |