| 1174 | } |
| 1175 | |
| 1176 | void RenderSystem::initVkCommandBuffers() |
| 1177 | { |
| 1178 | _INTR_LOG_INFO("Creating Vulkan command buffers..."); |
| 1179 | |
| 1180 | // Primary cmd buffer |
| 1181 | { |
| 1182 | const uint32_t actualPrimCmdBufferCount = |
| 1183 | (uint32_t)_vkSwapchainImages.size(); |
| 1184 | _vkCommandBuffers.resize(actualPrimCmdBufferCount); |
| 1185 | |
| 1186 | VkCommandBufferAllocateInfo cmd = {}; |
| 1187 | { |
| 1188 | cmd.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; |
| 1189 | cmd.pNext = nullptr; |
| 1190 | cmd.commandPool = _vkPrimaryCommandPool; |
| 1191 | cmd.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; |
| 1192 | cmd.commandBufferCount = actualPrimCmdBufferCount; |
| 1193 | } |
| 1194 | |
| 1195 | VkResult result = |
| 1196 | vkAllocateCommandBuffers(_vkDevice, &cmd, _vkCommandBuffers.data()); |
| 1197 | _INTR_VK_CHECK_RESULT(result); |
| 1198 | } |
| 1199 | |
| 1200 | // Secondary cmd buffers |
| 1201 | { |
| 1202 | const uint32_t actualSecondCmdBufferCount = |
| 1203 | (uint32_t)_vkSwapchainImages.size() * |
| 1204 | _INTR_VK_SECONDARY_COMMAND_BUFFER_COUNT; |
| 1205 | _vkSecondaryCommandBuffers.resize(actualSecondCmdBufferCount); |
| 1206 | |
| 1207 | for (uint32_t i = 0u; i < actualSecondCmdBufferCount; ++i) |
| 1208 | { |
| 1209 | VkCommandBufferAllocateInfo cmd = {}; |
| 1210 | { |
| 1211 | cmd.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; |
| 1212 | cmd.pNext = nullptr; |
| 1213 | // Reuse command pools from frame to frame |
| 1214 | cmd.commandPool = |
| 1215 | _vkSecondaryCommandPools[i % |
| 1216 | _INTR_VK_SECONDARY_COMMAND_BUFFER_COUNT]; |
| 1217 | cmd.level = VK_COMMAND_BUFFER_LEVEL_SECONDARY; |
| 1218 | cmd.commandBufferCount = 1u; |
| 1219 | } |
| 1220 | |
| 1221 | VkResult result = vkAllocateCommandBuffers( |
| 1222 | _vkDevice, &cmd, &_vkSecondaryCommandBuffers[i]); |
| 1223 | _INTR_VK_CHECK_RESULT(result); |
| 1224 | } |
| 1225 | } |
| 1226 | } |
| 1227 | |
| 1228 | void RenderSystem::destroyVkCommandBuffers() |
| 1229 | { |