On Sat, Sep 2, 2017 at 1:17 AM, Chad Versace <chadvers...@chromium.org> wrote:
> If this flag is set, then the image and it's device memory have the same > lifetime. vkDestroyImage will free its anv_device_memory. > > We need this for VK_ANDROID_native_buffer, because that extension > creates the VkImage and imports its memory in the same call, > vkCreateImage. > So, this got me thinking... VK_ANDROID_native_buffer doesn't actually return the VkDeviceMemory object to the client. Why does anv_image need to own an anv_device_memory? It's just a wrapper around a pointer and a map anyway. Why not just have it own a reference to the BO? We still need the logic here to release said BO but that sounds like it would shrink the reach of VK_ANDROID_native_buffer down a bit. > --- > src/intel/vulkan/anv_image.c | 8 ++++++++ > src/intel/vulkan/anv_private.h | 3 +++ > 2 files changed, 11 insertions(+) > > diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c > index 1fe8ab8ee43..1cc3adae5ee 100644 > --- a/src/intel/vulkan/anv_image.c > +++ b/src/intel/vulkan/anv_image.c > @@ -450,6 +450,9 @@ anv_image_create(VkDevice _device, > return VK_SUCCESS; > > fail: > + if (image && image->mem_is_owned) > + anv_FreeMemory(_device, anv_device_memory_to_handle(image->mem), > alloc); > + > if (image) > vk_free2(&device->alloc, alloc, image); > > @@ -480,6 +483,11 @@ anv_DestroyImage(VkDevice _device, VkImage _image, > if (!image) > return; > > + if (image->mem_is_owned) { > + anv_FreeMemory(_device, anv_device_memory_to_handle(image->mem), > + pAllocator); > + } > + > vk_free2(&device->alloc, pAllocator, image); > } > > diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_ > private.h > index 98bdaa90a50..d1c3d743061 100644 > --- a/src/intel/vulkan/anv_private.h > +++ b/src/intel/vulkan/anv_private.h > @@ -2089,6 +2089,9 @@ struct anv_image { > struct anv_device_memory *mem; > VkDeviceSize mem_offset; > > + /** When destroying the image, also free its device memory. */ > + bool mem_is_owned; > + > /** > * Image subsurfaces > * > -- > 2.13.5 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev