diff options
author | Bas Nieuwenhuizen <[email protected]> | 2018-08-10 13:19:22 +0200 |
---|---|---|
committer | Chia-I Wu <[email protected]> | 2019-03-11 10:01:33 -0700 |
commit | 8e52e8183c2dec8bf0ef85284f8883dc392b7acd (patch) | |
tree | e438c69510d627ed4a7460fc31132fba56787d8c /src/freedreno/vulkan/tu_device.c | |
parent | a0d62e4337e1bdbd918c4be997fed6b31c8a7e9e (diff) |
turnip: Add buffer allocation & mapping support.
Diffstat (limited to 'src/freedreno/vulkan/tu_device.c')
-rw-r--r-- | src/freedreno/vulkan/tu_device.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c index fe10f048133..e0c27166818 100644 --- a/src/freedreno/vulkan/tu_device.c +++ b/src/freedreno/vulkan/tu_device.c @@ -1245,6 +1245,19 @@ tu_alloc_memory(struct tu_device *device, if (mem == NULL) return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY); + mem->bo = fd_bo_new(device->physical_device->drm_device, pAllocateInfo->allocationSize, + DRM_FREEDRENO_GEM_CACHE_WCOMBINE | + DRM_FREEDRENO_GEM_TYPE_KMEM); + if (!mem->bo) { + vk_free2(&device->alloc, pAllocator, mem); + return vk_error(device->instance, VK_ERROR_OUT_OF_DEVICE_MEMORY); + } + mem->size = pAllocateInfo->allocationSize; + mem->type_index = pAllocateInfo->memoryTypeIndex; + + mem->map = NULL; + mem->user_ptr = NULL; + *pMem = tu_device_memory_to_handle(mem); return VK_SUCCESS; @@ -1271,6 +1284,9 @@ tu_FreeMemory(VkDevice _device, if (mem == NULL) return; + if (mem->bo) + fd_bo_del(mem->bo); + vk_free2(&device->alloc, pAllocator, mem); } @@ -1290,8 +1306,12 @@ tu_MapMemory(VkDevice _device, return VK_SUCCESS; } - if (mem->user_ptr) + if (mem->user_ptr) { *ppData = mem->user_ptr; + } else if (!mem->map){ + *ppData = mem->map = fd_bo_map(mem->bo); + } else + *ppData = mem->map; if (*ppData) { *ppData += offset; @@ -1304,10 +1324,7 @@ tu_MapMemory(VkDevice _device, void tu_UnmapMemory(VkDevice _device, VkDeviceMemory _memory) { - TU_FROM_HANDLE(tu_device_memory, mem, _memory); - - if (mem == NULL) - return; + /* I do not see any unmapping done by the freedreno Gallium driver. */ } VkResult |