diff --git a/src/amd/vulkan/radv_buffer.c b/src/amd/vulkan/radv_buffer.c index 11fa8e77e94..c60ebdca155 100644 --- a/src/amd/vulkan/radv_buffer.c +++ b/src/amd/vulkan/radv_buffer.c @@ -340,3 +340,22 @@ radv_bo_from_fd(struct radv_device *device, int fd, unsigned priority, struct ra return result; } + +VkResult +radv_bo_from_ptr(struct radv_device *device, void *host_ptr, uint64_t alloc_size, unsigned priority, + struct radv_device_memory *mem) +{ + struct radv_physical_device *pdev = radv_device_physical(device); + struct radv_instance *instance = radv_physical_device_instance(pdev); + struct radeon_winsys *ws = device->ws; + VkResult result; + + result = ws->buffer_from_ptr(ws, host_ptr, alloc_size, priority, &mem->bo); + if (result != VK_SUCCESS) + return result; + + vk_address_binding_report(&instance->vk, &mem->base, radv_buffer_get_va(mem->bo), mem->bo->size, + VK_DEVICE_ADDRESS_BINDING_TYPE_BIND_EXT); + + return result; +} diff --git a/src/amd/vulkan/radv_buffer.h b/src/amd/vulkan/radv_buffer.h index 318218a5f85..ecb97e500bc 100644 --- a/src/amd/vulkan/radv_buffer.h +++ b/src/amd/vulkan/radv_buffer.h @@ -50,4 +50,7 @@ void radv_bo_destroy(struct radv_device *device, struct vk_object_base *object, VkResult radv_bo_from_fd(struct radv_device *device, int fd, unsigned priority, struct radv_device_memory *mem, uint64_t *alloc_size); +VkResult radv_bo_from_ptr(struct radv_device *device, void *host_ptr, uint64_t alloc_size, unsigned priority, + struct radv_device_memory *mem); + #endif /* RADV_BUFFER_H */ diff --git a/src/amd/vulkan/radv_device_memory.c b/src/amd/vulkan/radv_device_memory.c index 3e29bc0a3cd..6edaf659a47 100644 --- a/src/amd/vulkan/radv_device_memory.c +++ b/src/amd/vulkan/radv_device_memory.c @@ -177,8 +177,7 @@ radv_alloc_memory(struct radv_device *device, const VkMemoryAllocateInfo *pAlloc } } else if (host_ptr_info) { assert(host_ptr_info->handleType == VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT); - result = device->ws->buffer_from_ptr(device->ws, host_ptr_info->pHostPointer, pAllocateInfo->allocationSize, - priority, &mem->bo); + result = radv_bo_from_ptr(device, host_ptr_info->pHostPointer, pAllocateInfo->allocationSize, priority, mem); if (result != VK_SUCCESS) { goto fail; } else {