From e06831454a044f0e5f5f12003b706b7894bfa0fe Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Wed, 4 Dec 2019 12:29:00 +0100 Subject: [PATCH] v3dv: implement vkUnmapMemory Part-of: --- src/broadcom/vulkan/v3dv_device.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index 1214428..60b83bb 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -1126,6 +1126,24 @@ device_map(struct v3dv_device *device, return VK_SUCCESS; } +static void +device_unmap(struct v3dv_device *device, struct v3dv_device_memory *mem) +{ + assert(mem->map && mem->map_size > 0); + + munmap(mem->map, mem->map_size); + VG(VALGRIND_FREELIKE_BLOCK(mem->map, 0)); + mem->map = NULL; + mem->map_size = 0; + + struct drm_gem_close c; + memset(&c, 0, sizeof(c)); + c.handle = mem->handle; + int ret = v3dv_ioctl(device->fd, DRM_IOCTL_GEM_CLOSE, &c); + if (ret != 0) + fprintf(stderr, "close object %d: %s\n", mem->handle, strerror(errno)); +} + VkResult v3dv_AllocateMemory(VkDevice _device, const VkMemoryAllocateInfo *pAllocateInfo, @@ -1213,7 +1231,13 @@ void v3dv_UnmapMemory(VkDevice _device, VkDeviceMemory _memory) { - /* FIXME: stub */ + V3DV_FROM_HANDLE(v3dv_device, device, _device); + V3DV_FROM_HANDLE(v3dv_device_memory, mem, _memory); + + if (mem == NULL) + return; + + device_unmap(device, mem); } VkResult -- 2.7.4