| 219 | //<- |
| 220 | |
| 221 | void RenderSystem::releaseQueuedResources() |
| 222 | { |
| 223 | _INTR_PROFILE_CPU("Render System", "Releae Queued Resources"); |
| 224 | |
| 225 | for (auto it = _resourcesToFree.begin(); it != _resourcesToFree.end();) |
| 226 | { |
| 227 | ResourceReleaseEntry& entry = *it; |
| 228 | |
| 229 | if (entry.age >= (uint32_t)RenderSystem::_vkSwapchainImages.size()) |
| 230 | { |
| 231 | VkResult result = VK_SUCCESS; |
| 232 | if (entry.typeName == _N(VkDescriptorSet)) |
| 233 | { |
| 234 | result = vkFreeDescriptorSets(RenderSystem::_vkDevice, |
| 235 | (VkDescriptorPool)entry.userData1, 1u, |
| 236 | (VkDescriptorSet*)&entry.userData0); |
| 237 | } |
| 238 | else if (entry.typeName == _N(VkImage)) |
| 239 | { |
| 240 | vkDestroyImage(RenderSystem::_vkDevice, (VkImage)entry.userData0, |
| 241 | nullptr); |
| 242 | } |
| 243 | else if (entry.typeName == _N(VkImageView)) |
| 244 | { |
| 245 | vkDestroyImageView(RenderSystem::_vkDevice, |
| 246 | (VkImageView)entry.userData0, nullptr); |
| 247 | } |
| 248 | else if (entry.typeName == _N(VkDeviceMemory)) |
| 249 | { |
| 250 | vkFreeMemory(RenderSystem::_vkDevice, (VkDeviceMemory)entry.userData0, |
| 251 | nullptr); |
| 252 | } |
| 253 | else if (entry.typeName == _N(VkBuffer)) |
| 254 | { |
| 255 | vkDestroyBuffer(RenderSystem::_vkDevice, (VkBuffer)entry.userData0, |
| 256 | nullptr); |
| 257 | } |
| 258 | else if (entry.typeName == _N(VkPipeline)) |
| 259 | { |
| 260 | vkDestroyPipeline(RenderSystem::_vkDevice, (VkPipeline)entry.userData0, |
| 261 | nullptr); |
| 262 | } |
| 263 | else |
| 264 | { |
| 265 | _INTR_ASSERT(false); |
| 266 | } |
| 267 | _INTR_VK_CHECK_RESULT(result); |
| 268 | |
| 269 | it = _resourcesToFree.erase(it); |
| 270 | } |
| 271 | else |
| 272 | { |
| 273 | ++entry.age; |
| 274 | ++it; |
| 275 | } |
| 276 | } |
| 277 | } |
| 278 | |