Changeset c1c2021 in opengl-game for vulkan-game.cpp
- Timestamp:
- Sep 23, 2019, 12:32:48 AM (6 years ago)
- Branches:
- feature/imgui-sdl, master, points-test
- Children:
- 502bd0b
- Parents:
- a0c5f28
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vulkan-game.cpp
ra0c5f28 rc1c2021 2 2 3 3 #include <iostream> 4 #include <set> 4 5 5 6 #include "consts.hpp" … … 98 99 createVulkanSurface(); 99 100 pickPhysicalDevice(deviceExtensions); 101 createLogicalDevice(validationLayers, deviceExtensions); 100 102 } 101 103 … … 142 144 renderScene(); 143 145 } 146 147 vkDeviceWaitIdle(device); 144 148 } 145 149 … … 153 157 154 158 void VulkanGame::cleanup() { 159 cleanupSwapChain(); 160 161 vkDestroyDevice(device, nullptr); 162 vkDestroySurfaceKHR(instance, surface, nullptr); 163 155 164 if (ENABLE_VALIDATION_LAYERS) { 156 165 VulkanUtils::destroyDebugUtilsMessengerEXT(instance, debugMessenger, nullptr); 157 166 } 167 158 168 vkDestroyInstance(instance, nullptr); 159 169 … … 164 174 gui->shutdown(); 165 175 delete gui; 176 } 177 178 void VulkanGame::cleanupSwapChain() { 166 179 } 167 180 … … 295 308 return indices.isComplete() && extensionsSupported && swapChainAdequate && supportedFeatures.samplerAnisotropy; 296 309 } 310 311 void VulkanGame::createLogicalDevice( 312 const vector<const char*> validationLayers, 313 const vector<const char*>& deviceExtensions) { 314 QueueFamilyIndices indices = VulkanUtils::findQueueFamilies(physicalDevice, surface); 315 316 vector<VkDeviceQueueCreateInfo> queueCreateInfos; 317 set<uint32_t> uniqueQueueFamilies = { indices.graphicsFamily.value(), indices.presentFamily.value() }; 318 319 float queuePriority = 1.0f; 320 for (uint32_t queueFamily : uniqueQueueFamilies) { 321 VkDeviceQueueCreateInfo queueCreateInfo = {}; 322 queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; 323 queueCreateInfo.queueFamilyIndex = queueFamily; 324 queueCreateInfo.queueCount = 1; 325 queueCreateInfo.pQueuePriorities = &queuePriority; 326 327 queueCreateInfos.push_back(queueCreateInfo); 328 } 329 330 VkPhysicalDeviceFeatures deviceFeatures = {}; 331 deviceFeatures.samplerAnisotropy = VK_TRUE; 332 333 VkDeviceCreateInfo createInfo = {}; 334 createInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; 335 createInfo.queueCreateInfoCount = static_cast<uint32_t>(queueCreateInfos.size()); 336 createInfo.pQueueCreateInfos = queueCreateInfos.data(); 337 338 createInfo.pEnabledFeatures = &deviceFeatures; 339 340 createInfo.enabledExtensionCount = static_cast<uint32_t>(deviceExtensions.size()); 341 createInfo.ppEnabledExtensionNames = deviceExtensions.data(); 342 343 // These fields are ignored by up-to-date Vulkan implementations, 344 // but it's a good idea to set them for backwards compatibility 345 if (ENABLE_VALIDATION_LAYERS) { 346 createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size()); 347 createInfo.ppEnabledLayerNames = validationLayers.data(); 348 } else { 349 createInfo.enabledLayerCount = 0; 350 } 351 352 if (vkCreateDevice(physicalDevice, &createInfo, nullptr, &device) != VK_SUCCESS) { 353 throw runtime_error("failed to create logical device!"); 354 } 355 356 vkGetDeviceQueue(device, indices.graphicsFamily.value(), 0, &graphicsQueue); 357 vkGetDeviceQueue(device, indices.presentFamily.value(), 0, &presentQueue); 358 }
Note:
See TracChangeset
for help on using the changeset viewer.