diff options
Diffstat (limited to 'src/amd/vulkan/radv_device.c')
-rw-r--r-- | src/amd/vulkan/radv_device.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 402c948e52..584355e391 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -2284,6 +2284,8 @@ VkResult radv_AllocateMemory( VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR); mem->bo = device->ws->buffer_from_fd(device->ws, import_info->fd, NULL, NULL); + mem->imported = true; + if (!mem->bo) { result = VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR; goto fail; @@ -2536,10 +2538,12 @@ VkResult radv_BindBufferMemory( return radv_BindBufferMemory2KHR(device, 1, &info); } -VkResult radv_BindImageMemory2KHR(VkDevice device, +VkResult radv_BindImageMemory2KHR(VkDevice _device, uint32_t bindInfoCount, const VkBindImageMemoryInfoKHR *pBindInfos) { + RADV_FROM_HANDLE(radv_device, device, _device); + for (uint32_t i = 0; i < bindInfoCount; ++i) { RADV_FROM_HANDLE(radv_device_memory, mem, pBindInfos[i].memory); RADV_FROM_HANDLE(radv_image, image, pBindInfos[i].image); @@ -2547,6 +2551,10 @@ VkResult radv_BindImageMemory2KHR(VkDevice device, if (mem) { image->bo = mem->bo; image->offset = pBindInfos[i].memoryOffset; + + if (image->shareable && mem->imported) + radv_image_update_from_metadata(device, image); + } else { image->bo = NULL; image->offset = 0; |