-------------------------------------------------------------------------
| 259 | } |
| 260 | //------------------------------------------------------------------------- |
| 261 | void VulkanQueue::init( VkDevice device, VkQueue queue, VulkanRenderSystem *renderSystem ) |
| 262 | { |
| 263 | mDevice = device; |
| 264 | mQueue = queue; |
| 265 | mVaoManager = static_cast<VulkanVaoManager *>( renderSystem->getVaoManager() ); |
| 266 | mRenderSystem = renderSystem; |
| 267 | |
| 268 | const size_t maxNumFrames = mVaoManager->getDynamicBufferMultiplier(); |
| 269 | |
| 270 | VkDeviceQueueCreateInfo queueCreateInfo; |
| 271 | makeVkStruct( queueCreateInfo, VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO ); |
| 272 | |
| 273 | // Create at least maxNumFrames fences, though we may need more |
| 274 | mAvailableFences.resize( maxNumFrames ); |
| 275 | |
| 276 | VkFenceCreateInfo fenceCi; |
| 277 | makeVkStruct( fenceCi, VK_STRUCTURE_TYPE_FENCE_CREATE_INFO ); |
| 278 | for( size_t i = 0; i < maxNumFrames; ++i ) |
| 279 | { |
| 280 | VkResult result = vkCreateFence( mDevice, &fenceCi, 0, &mAvailableFences[i] ); |
| 281 | checkVkResult( result, "vkCreateFence" ); |
| 282 | } |
| 283 | |
| 284 | // Create one cmd pool per thread (assume single threaded for now) |
| 285 | mPerFrameData.resize( maxNumFrames ); |
| 286 | VkCommandPoolCreateInfo cmdPoolCreateInfo; |
| 287 | makeVkStruct( cmdPoolCreateInfo, VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO ); |
| 288 | cmdPoolCreateInfo.flags = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT; |
| 289 | cmdPoolCreateInfo.queueFamilyIndex = mFamilyIdx; |
| 290 | |
| 291 | for( size_t i = 0; i < maxNumFrames; ++i ) |
| 292 | vkCreateCommandPool( mDevice, &cmdPoolCreateInfo, 0, &mPerFrameData[i].mCmdPool ); |
| 293 | |
| 294 | newCommandBuffer(); |
| 295 | } |
| 296 | |
| 297 | void VulkanQueue::destroy() {} |
| 298 |
no test coverage detected