free memory prior to exit
This commit is contained in:
parent
c1766f3396
commit
fcf77baf57
2
Makefile
2
Makefile
@ -22,7 +22,7 @@ CFLAGS += -I../SDL3-dist/include
|
|||||||
CFLAGS += -I../volk
|
CFLAGS += -I../volk
|
||||||
CFLAGS += -fpic
|
CFLAGS += -fpic
|
||||||
|
|
||||||
#FLAGS += -fstack-protector -fstack-protector-all -fno-omit-frame-pointer -fsanitize=address
|
FLAGS += -fstack-protector -fstack-protector-all -fno-omit-frame-pointer -fsanitize=address
|
||||||
|
|
||||||
LDFLAGS += -lm
|
LDFLAGS += -lm
|
||||||
ifeq ($(shell uname),Linux)
|
ifeq ($(shell uname),Linux)
|
||||||
|
|||||||
61
src/main.cpp
61
src/main.cpp
@ -107,6 +107,7 @@ VkImageView depthImageView{ VK_NULL_HANDLE };
|
|||||||
VkDeviceMemory depthImageMemory{ VK_NULL_HANDLE };
|
VkDeviceMemory depthImageMemory{ VK_NULL_HANDLE };
|
||||||
|
|
||||||
VkBuffer vertexIndexBuffer{ VK_NULL_HANDLE };
|
VkBuffer vertexIndexBuffer{ VK_NULL_HANDLE };
|
||||||
|
VkDeviceMemory vertexIndexBufferMemory{ VK_NULL_HANDLE };
|
||||||
|
|
||||||
VkFence fences[maxFramesInFlight];
|
VkFence fences[maxFramesInFlight];
|
||||||
VkSemaphore presentSemaphores[maxFramesInFlight];
|
VkSemaphore presentSemaphores[maxFramesInFlight];
|
||||||
@ -120,6 +121,7 @@ VkPipelineLayout pipelineLayout{ VK_NULL_HANDLE };
|
|||||||
|
|
||||||
VkImage textureImage{ VK_NULL_HANDLE };
|
VkImage textureImage{ VK_NULL_HANDLE };
|
||||||
VkImageView textureImageView{ VK_NULL_HANDLE };
|
VkImageView textureImageView{ VK_NULL_HANDLE };
|
||||||
|
VkDeviceMemory textureImageMemory{ VK_NULL_HANDLE };
|
||||||
VkSampler textureSampler{ VK_NULL_HANDLE };
|
VkSampler textureSampler{ VK_NULL_HANDLE };
|
||||||
|
|
||||||
VkDescriptorPool descriptorPool{ VK_NULL_HANDLE };
|
VkDescriptorPool descriptorPool{ VK_NULL_HANDLE };
|
||||||
@ -531,7 +533,6 @@ int main()
|
|||||||
.allocationSize = vertexIndexBufferMemoryRequirements.size,
|
.allocationSize = vertexIndexBufferMemoryRequirements.size,
|
||||||
.memoryTypeIndex = vertexIndexBufferMemoryTypeIndex,
|
.memoryTypeIndex = vertexIndexBufferMemoryTypeIndex,
|
||||||
};
|
};
|
||||||
VkDeviceMemory vertexIndexBufferMemory;
|
|
||||||
VK_CHECK(vkAllocateMemory(device, &vertexIndexBufferAllocateInfo, nullptr, &vertexIndexBufferMemory));
|
VK_CHECK(vkAllocateMemory(device, &vertexIndexBufferAllocateInfo, nullptr, &vertexIndexBufferMemory));
|
||||||
VK_CHECK(vkBindBufferMemory(device, vertexIndexBuffer, vertexIndexBufferMemory, 0));
|
VK_CHECK(vkBindBufferMemory(device, vertexIndexBuffer, vertexIndexBufferMemory, 0));
|
||||||
|
|
||||||
@ -572,19 +573,15 @@ int main()
|
|||||||
.allocationSize = shaderBufferMemoryRequirements.size,
|
.allocationSize = shaderBufferMemoryRequirements.size,
|
||||||
.memoryTypeIndex = shaderBufferMemoryTypeIndex,
|
.memoryTypeIndex = shaderBufferMemoryTypeIndex,
|
||||||
};
|
};
|
||||||
VkDeviceMemory shaderBufferMemory;
|
VK_CHECK(vkAllocateMemory(device, &shaderBufferAllocateInfo, nullptr, &shaderDataBuffers[i].memory));
|
||||||
VK_CHECK(vkAllocateMemory(device, &shaderBufferAllocateInfo, nullptr, &shaderBufferMemory));
|
VK_CHECK(vkBindBufferMemory(device, shaderDataBuffers[i].buffer, shaderDataBuffers[i].memory, 0));
|
||||||
VK_CHECK(vkBindBufferMemory(device, shaderDataBuffers[i].buffer, shaderBufferMemory, 0));
|
|
||||||
|
|
||||||
VkBufferDeviceAddressInfo shaderBufferDeviceAddressInfo{
|
VkBufferDeviceAddressInfo shaderBufferDeviceAddressInfo{
|
||||||
.sType = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO,
|
.sType = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO,
|
||||||
.buffer = shaderDataBuffers[i].buffer
|
.buffer = shaderDataBuffers[i].buffer
|
||||||
};
|
};
|
||||||
shaderDataBuffers[i].deviceAddress = vkGetBufferDeviceAddress(device, &shaderBufferDeviceAddressInfo);
|
shaderDataBuffers[i].deviceAddress = vkGetBufferDeviceAddress(device, &shaderBufferDeviceAddressInfo);
|
||||||
void * mappedData;
|
VK_CHECK(vkMapMemory(device, shaderDataBuffers[i].memory, 0, (sizeof (ShaderData)), 0, &shaderDataBuffers[i].mappedData));
|
||||||
VK_CHECK(vkMapMemory(device, shaderBufferMemory, 0, (sizeof (ShaderData)), 0, &mappedData));
|
|
||||||
shaderDataBuffers[i].memory = shaderBufferMemory;
|
|
||||||
shaderDataBuffers[i].mappedData = mappedData;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
@ -658,7 +655,6 @@ int main()
|
|||||||
.memoryTypeIndex = textureImageMemoryTypeIndex,
|
.memoryTypeIndex = textureImageMemoryTypeIndex,
|
||||||
};
|
};
|
||||||
|
|
||||||
VkDeviceMemory textureImageMemory;
|
|
||||||
VK_CHECK(vkAllocateMemory(device, &textureImageAllocateInfo, nullptr, &textureImageMemory));
|
VK_CHECK(vkAllocateMemory(device, &textureImageAllocateInfo, nullptr, &textureImageMemory));
|
||||||
VK_CHECK(vkBindImageMemory(device, textureImage, textureImageMemory, 0));
|
VK_CHECK(vkBindImageMemory(device, textureImage, textureImageMemory, 0));
|
||||||
|
|
||||||
@ -784,6 +780,9 @@ int main()
|
|||||||
};
|
};
|
||||||
VK_CHECK(vkQueueSubmit(queue, 1, &textureSubmitInfo, textureFence));
|
VK_CHECK(vkQueueSubmit(queue, 1, &textureSubmitInfo, textureFence));
|
||||||
VK_CHECK(vkWaitForFences(device, 1, &textureFence, VK_TRUE, UINT64_MAX));
|
VK_CHECK(vkWaitForFences(device, 1, &textureFence, VK_TRUE, UINT64_MAX));
|
||||||
|
vkDestroyFence(device, textureFence, nullptr);
|
||||||
|
vkDestroyBuffer(device, textureSourceBuffer, nullptr);
|
||||||
|
vkFreeMemory(device, textureSourceBufferMemory, nullptr);
|
||||||
|
|
||||||
// texture sampler
|
// texture sampler
|
||||||
|
|
||||||
@ -1193,4 +1192,48 @@ int main()
|
|||||||
recreateSwapchain(surfaceFormat, depthFormat, memoryProperties, surfaceCapabilities);
|
recreateSwapchain(surfaceFormat, depthFormat, memoryProperties, surfaceCapabilities);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VK_CHECK(vkDeviceWaitIdle(device));
|
||||||
|
for (uint32_t i = 0; i < maxFramesInFlight; i++) {
|
||||||
|
vkDestroyFence(device, fences[i], nullptr);
|
||||||
|
vkDestroySemaphore(device, presentSemaphores[i], nullptr);
|
||||||
|
|
||||||
|
vkUnmapMemory(device, shaderDataBuffers[i].memory);
|
||||||
|
vkDestroyBuffer(device, shaderDataBuffers[i].buffer, nullptr);
|
||||||
|
vkFreeMemory(device, shaderDataBuffers[i].memory, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < swapchainImageCount; i++) {
|
||||||
|
vkDestroySemaphore(device, renderSemaphores[i], nullptr);
|
||||||
|
vkDestroyImageView(device, swapchainImageViews[i], nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
vkDestroyImage(device, depthImage, nullptr);
|
||||||
|
vkFreeMemory(device, depthImageMemory, nullptr);
|
||||||
|
vkDestroyImageView(device, depthImageView, nullptr);
|
||||||
|
|
||||||
|
vkDestroyBuffer(device, vertexIndexBuffer, nullptr);
|
||||||
|
vkFreeMemory(device, vertexIndexBufferMemory, nullptr);
|
||||||
|
|
||||||
|
vkDestroyImageView(device, textureImageView, nullptr);
|
||||||
|
vkDestroySampler(device, textureSampler, nullptr);
|
||||||
|
vkDestroyImage(device, textureImage, nullptr);
|
||||||
|
vkFreeMemory(device, textureImageMemory, nullptr);
|
||||||
|
|
||||||
|
vkDestroyDescriptorSetLayout(device, textureDescriptorSetLayout, nullptr);
|
||||||
|
vkDestroyDescriptorPool(device, descriptorPool, nullptr);
|
||||||
|
vkDestroyPipelineLayout(device, pipelineLayout, nullptr);
|
||||||
|
vkDestroyPipeline(device, pipeline, nullptr);
|
||||||
|
vkDestroySwapchainKHR(device, swapchain, nullptr);
|
||||||
|
vkDestroySurfaceKHR(instance, surface, nullptr);
|
||||||
|
vkDestroyCommandPool(device, commandPool, nullptr);
|
||||||
|
vkDestroyShaderModule(device, vertexShaderModule, nullptr);
|
||||||
|
vkDestroyShaderModule(device, pixelShaderModule, nullptr);
|
||||||
|
|
||||||
|
SDL_DestroyWindow(window);
|
||||||
|
SDL_QuitSubSystem(SDL_INIT_VIDEO);
|
||||||
|
SDL_Quit();
|
||||||
|
|
||||||
|
vkDestroyDevice(device, nullptr);
|
||||||
|
vkDestroyInstance(instance, nullptr);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user