return result;
}
- result =
- vn_instance_submit_roundtrip(dev->instance, &mem->bo_roundtrip_seqno);
- if (result != VK_SUCCESS) {
- vn_renderer_bo_unref(dev->renderer, mem->base_bo);
- vn_async_vkFreeMemory(dev->instance, dev_handle, mem_handle, NULL);
- return result;
- }
-
- mem->bo_roundtrip_seqno_valid = true;
-
return VK_SUCCESS;
}
struct vn_device_memory *base_memory;
/* non-NULL when mappable or external */
struct vn_renderer_bo *base_bo;
- /* enforce kernel and ring ordering between memory export and free */
+
+ /* ensure renderer side vkFreeMemory is called after vkGetMemoryFdKHR
+ *
+ * 1. driver creates virtgpu bo from renderer VkDeviceMemory
+ * 2. driver submits via vq to update the vq seqno
+ * 3, driver submits via ring to wait for vq reaching above seqno
+ * 4. driver submits vkFreeMemory via ring
+ *
+ * To be noted: a successful virtgpu mmap implies a roundtrip, so
+ * vn_FreeMemory after that no longer has to wait.
+ */
bool bo_roundtrip_seqno_valid;
uint64_t bo_roundtrip_seqno;
+
VkDeviceSize base_offset;
VkDeviceSize map_end;