summaryrefslogtreecommitdiff
path: root/src/amd/vulkan/radv_device.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/amd/vulkan/radv_device.c')
-rw-r--r--src/amd/vulkan/radv_device.c10
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;