summaryrefslogtreecommitdiff
path: root/src/window.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-11-22 15:24:34 -0500
committerJonathan Bradley <jcb@pikum.xyz>2023-11-22 15:24:34 -0500
commit39342b24c2b3695b1d2259b4dd6670e3d910a2d3 (patch)
tree3dce95a4e12911b5fc2e9a7c93d0aa2673bef0d7 /src/window.cpp
parent400e8aae5fb36105aea9f22457526dbda5cdf925 (diff)
refactor vulkan allocation functions to better align with spec
Diffstat (limited to 'src/window.cpp')
-rw-r--r--src/window.cpp35
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;
}