diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2023-11-22 15:24:34 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2023-11-22 15:24:34 -0500 |
| commit | 39342b24c2b3695b1d2259b4dd6670e3d910a2d3 (patch) | |
| tree | 3dce95a4e12911b5fc2e9a7c93d0aa2673bef0d7 /src/window.cpp | |
| parent | 400e8aae5fb36105aea9f22457526dbda5cdf925 (diff) | |
refactor vulkan allocation functions to better align with spec
Diffstat (limited to 'src/window.cpp')
| -rw-r--r-- | src/window.cpp | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/src/window.cpp b/src/window.cpp index 3773643..3771ece 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -241,8 +241,8 @@ unsigned int FindQueueFamilyIndex(VkPhysicalDevice device, short hasPresentSuppo } void PKE_vkFreeFunction(void *pUserData, void *pMemory) { - pke_vkAllocData *chunk = nullptr; if (pMemory == nullptr) return; + pke_vkAllocData *chunk = nullptr; size_t index = -1; size_t count = vulkanAllocs->Count(); for (long i = 0; i < count; ++i) { @@ -252,9 +252,13 @@ void PKE_vkFreeFunction(void *pUserData, void *pMemory) { break; } } - assert(chunk != nullptr); - Pke_Delete(chunk->data, chunk->size, MemBkt_Vulkan); - vulkanAllocs->Remove(index); + if (chunk != nullptr) { + assert(chunk != nullptr); + Pke_Delete(chunk->data, chunk->size, MemBkt_Vulkan); + vulkanAllocs->Remove(index); + } else { + fprintf(stderr, "%s\n", "PKE_vkFreeFunction - untracked pointer"); + } } void *PKE_vkAllocateFunction(void *pUserData, size_t size, size_t alignment, VkSystemAllocationScope allocScope) { @@ -270,8 +274,6 @@ void *PKE_vkAllocateFunction(void *pUserData, size_t size, size_t alignment, VkS } void *PKE_vkReallocationFunction(void *pUserData, void *pOriginal, size_t size, size_t alignment, VkSystemAllocationScope allocScope) { - pke_vkAllocData *chunk = nullptr; - size_t index = -1; if (pOriginal == nullptr) { return PKE_vkAllocateFunction(pUserData, size, alignment, allocScope); } @@ -279,22 +281,29 @@ void *PKE_vkReallocationFunction(void *pUserData, void *pOriginal, size_t size, PKE_vkFreeFunction(pUserData, pOriginal); return nullptr; } + pke_vkAllocData *chunk = nullptr; + size_t index = -1; size_t count = vulkanAllocs->Count(); for (long i = 0; i < count; ++i) { if ((*vulkanAllocs)[i].data == pOriginal) { - chunk = &(*vulkanAllocs)[i]; + chunk = &((*vulkanAllocs)[i]); index = i; break; } } - assert(chunk != nullptr); - if (chunk->size >= size) { - return pOriginal; + if (chunk != nullptr) { + if (chunk->size >= size) { + return pOriginal; + } } void *newPtr = PKE_vkAllocateFunction(pUserData, size, alignment, allocScope); - memcpy(newPtr, chunk->data, (chunk->size < size ? chunk->size : size) - 1); - Pke_Delete(chunk->data, chunk->size, MemBkt_Vulkan); - vulkanAllocs->Remove(index); + if (chunk != nullptr) { + memcpy(newPtr, chunk->data, (chunk->size < size ? chunk->size : size) - 1); + Pke_Delete(chunk->data, chunk->size, MemBkt_Vulkan); + vulkanAllocs->Remove(index); + } else { + + } return newPtr; } |
