diff options
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]; }; |