Archived
1
Fork 0

Properly choose swapchain format

This commit is contained in:
Joshua Goins 2018-10-16 08:18:19 -04:00
parent c6fd8e49c9
commit 0568c6e5d2

View file

@ -18,25 +18,25 @@ Renderer::Renderer() {
createLogicalDevice(); createLogicalDevice();
createCommandPool(); createCommandPool();
createPresentationRenderPass(); createPresentationRenderPass();
worldPass_ = new WorldPass(*this); worldPass_ = new WorldPass(*this);
} }
Renderer::~Renderer() { Renderer::~Renderer() {
vkDeviceWaitIdle(device_); vkDeviceWaitIdle(device_);
delete worldPass_; delete worldPass_;
vkDestroyRenderPass(device_, presentationRenderPass_, nullptr); vkDestroyRenderPass(device_, presentationRenderPass_, nullptr);
vkDestroyCommandPool(device_, commandPool_, nullptr); vkDestroyCommandPool(device_, commandPool_, nullptr);
#ifdef DEBUG #ifdef DEBUG
destroyMessenger_(instance_, messenger_, nullptr); destroyMessenger_(instance_, messenger_, nullptr);
#endif #endif
vkDestroyDevice(device_, nullptr); vkDestroyDevice(device_, nullptr);
vkDestroyInstance(instance_, nullptr); vkDestroyInstance(instance_, nullptr);
} }
@ -46,7 +46,7 @@ void Renderer::render(RenderTarget* target) {
vkWaitForFences(device_, 1, &target->fences[imageIndex], true, UINT64_MAX); vkWaitForFences(device_, 1, &target->fences[imageIndex], true, UINT64_MAX);
vkResetFences(device_, 1, &target->fences[imageIndex]); vkResetFences(device_, 1, &target->fences[imageIndex]);
const VkCommandBuffer commandBuffer = target->commandBuffers[imageIndex]; const VkCommandBuffer commandBuffer = target->commandBuffers[imageIndex];
VkCommandBufferBeginInfo beginInfo = {}; VkCommandBufferBeginInfo beginInfo = {};
@ -58,14 +58,14 @@ void Renderer::render(RenderTarget* target) {
viewport.width = target->extent.width; viewport.width = target->extent.width;
viewport.height = target->extent.height; viewport.height = target->extent.height;
viewport.maxDepth = 1.0f; viewport.maxDepth = 1.0f;
vkCmdSetViewport(commandBuffer, 0, 1, &viewport); vkCmdSetViewport(commandBuffer, 0, 1, &viewport);
VkRect2D scissor = {}; VkRect2D scissor = {};
scissor.extent = target->extent; scissor.extent = target->extent;
vkCmdSetScissor(commandBuffer, 0, 1, &scissor); vkCmdSetScissor(commandBuffer, 0, 1, &scissor);
VkClearValue clearColor = {}; VkClearValue clearColor = {};
clearColor.color.float32[0] = sin((platform::getTime() / 500.0f) * 0.2f) * 0.5f + 0.5f; clearColor.color.float32[0] = sin((platform::getTime() / 500.0f) * 0.2f) * 0.5f + 0.5f;
clearColor.color.float32[1] = sin((platform::getTime() / 500.0f) * 0.4f) * 0.5f + 0.5f; clearColor.color.float32[1] = sin((platform::getTime() / 500.0f) * 0.4f) * 0.5f + 0.5f;
@ -80,15 +80,15 @@ void Renderer::render(RenderTarget* target) {
renderPassBeginInfo.pClearValues = &clearColor; renderPassBeginInfo.pClearValues = &clearColor;
vkCmdBeginRenderPass(commandBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); vkCmdBeginRenderPass(commandBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
worldPass_->render(commandBuffer); worldPass_->render(commandBuffer);
vkCmdEndRenderPass(commandBuffer); vkCmdEndRenderPass(commandBuffer);
vkEndCommandBuffer(commandBuffer); vkEndCommandBuffer(commandBuffer);
const VkPipelineStageFlags waitStage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; const VkPipelineStageFlags waitStage = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
VkSubmitInfo submitInfo = {}; VkSubmitInfo submitInfo = {};
submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
submitInfo.waitSemaphoreCount = 1; submitInfo.waitSemaphoreCount = 1;
@ -100,7 +100,7 @@ void Renderer::render(RenderTarget* target) {
submitInfo.pSignalSemaphores = &target->renderFinishedSemaphore; submitInfo.pSignalSemaphores = &target->renderFinishedSemaphore;
vkQueueSubmit(graphicsQueue_, 1, &submitInfo, target->fences[imageIndex]); vkQueueSubmit(graphicsQueue_, 1, &submitInfo, target->fences[imageIndex]);
VkPresentInfoKHR presentInfo = {}; VkPresentInfoKHR presentInfo = {};
presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
presentInfo.waitSemaphoreCount = 1; presentInfo.waitSemaphoreCount = 1;
@ -114,30 +114,30 @@ void Renderer::render(RenderTarget* target) {
RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTarget* oldTarget) { RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTarget* oldTarget) {
vkDeviceWaitIdle(device_); vkDeviceWaitIdle(device_);
RenderTarget* target = new RenderTarget(); RenderTarget* target = new RenderTarget();
target->surface = surface; target->surface = surface;
VkSurfaceCapabilitiesKHR surfaceCapabilities = {}; VkSurfaceCapabilitiesKHR surfaceCapabilities = {};
vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice_, surface, &surfaceCapabilities); vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice_, surface, &surfaceCapabilities);
target->extent = surfaceCapabilities.currentExtent; target->extent = surfaceCapabilities.currentExtent;
uint32_t surfaceFormatCount = 0; uint32_t surfaceFormatCount = 0;
vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice_, surface, &surfaceFormatCount, nullptr); vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice_, surface, &surfaceFormatCount, nullptr);
VkSurfaceFormatKHR* surfaceFormats = new VkSurfaceFormatKHR[surfaceFormatCount]; VkSurfaceFormatKHR* surfaceFormats = new VkSurfaceFormatKHR[surfaceFormatCount];
vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice_, surface, &surfaceFormatCount, surfaceFormats); vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice_, surface, &surfaceFormatCount, surfaceFormats);
uint32_t chosenFormat = 0; uint32_t chosenFormat = 0;
for(uint32_t i = 0; i < surfaceFormatCount; i++) { for(uint32_t i = 0; i < surfaceFormatCount; i++) {
if(surfaceFormats[i].colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR) if(surfaceFormats[i].format == VK_FORMAT_R8G8B8_SRGB)
chosenFormat = i; chosenFormat = i;
} }
VkBool32 supported = false; VkBool32 supported = false;
vkGetPhysicalDeviceSurfaceSupportKHR(physicalDevice_, queueIndices.presentation, surface, &supported); vkGetPhysicalDeviceSurfaceSupportKHR(physicalDevice_, queueIndices.presentation, surface, &supported);
VkSwapchainCreateInfoKHR swapchainCreateInfo = {}; VkSwapchainCreateInfoKHR swapchainCreateInfo = {};
swapchainCreateInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; swapchainCreateInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
swapchainCreateInfo.surface = surface; swapchainCreateInfo.surface = surface;
@ -156,22 +156,22 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
if(oldTarget) if(oldTarget)
swapchainCreateInfo.oldSwapchain = oldTarget->swapchain; swapchainCreateInfo.oldSwapchain = oldTarget->swapchain;
vkCreateSwapchainKHR(device_, &swapchainCreateInfo, nullptr, &target->swapchain); vkCreateSwapchainKHR(device_, &swapchainCreateInfo, nullptr, &target->swapchain);
if(oldTarget) if(oldTarget)
destroyRenderTarget(oldTarget); destroyRenderTarget(oldTarget);
delete[] surfaceFormats; delete[] surfaceFormats;
uint32_t swapchainImageCount = 0; uint32_t swapchainImageCount = 0;
vkGetSwapchainImagesKHR(device_, target->swapchain, &swapchainImageCount, nullptr); vkGetSwapchainImagesKHR(device_, target->swapchain, &swapchainImageCount, nullptr);
target->numImages = swapchainImageCount; target->numImages = swapchainImageCount;
target->images = new VkImage[swapchainImageCount]; target->images = new VkImage[swapchainImageCount];
vkGetSwapchainImagesKHR(device_, target->swapchain, &swapchainImageCount, target->images); vkGetSwapchainImagesKHR(device_, target->swapchain, &swapchainImageCount, target->images);
target->imageViews = new VkImageView[swapchainImageCount]; target->imageViews = new VkImageView[swapchainImageCount];
for(uint32_t i = 0; i < swapchainImageCount; i++) { for(uint32_t i = 0; i < swapchainImageCount; i++) {
VkImageViewCreateInfo createInfo = {}; VkImageViewCreateInfo createInfo = {};
@ -205,23 +205,23 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
allocateInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; allocateInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
allocateInfo.commandPool = commandPool_; allocateInfo.commandPool = commandPool_;
allocateInfo.commandBufferCount = swapchainImageCount; allocateInfo.commandBufferCount = swapchainImageCount;
target->commandBuffers = new VkCommandBuffer[swapchainImageCount]; target->commandBuffers = new VkCommandBuffer[swapchainImageCount];
vkAllocateCommandBuffers(device_, &allocateInfo, target->commandBuffers); vkAllocateCommandBuffers(device_, &allocateInfo, target->commandBuffers);
VkSemaphoreCreateInfo semaphoreCreateInfo = {}; VkSemaphoreCreateInfo semaphoreCreateInfo = {};
semaphoreCreateInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; semaphoreCreateInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
vkCreateSemaphore(device_, &semaphoreCreateInfo, nullptr, &target->imageAvailableSemaphore); vkCreateSemaphore(device_, &semaphoreCreateInfo, nullptr, &target->imageAvailableSemaphore);
vkCreateSemaphore(device_, &semaphoreCreateInfo, nullptr, &target->renderFinishedSemaphore); vkCreateSemaphore(device_, &semaphoreCreateInfo, nullptr, &target->renderFinishedSemaphore);
VkFenceCreateInfo fenceCreateInfo = {}; VkFenceCreateInfo fenceCreateInfo = {};
fenceCreateInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; fenceCreateInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
fenceCreateInfo.flags = VK_FENCE_CREATE_SIGNALED_BIT; fenceCreateInfo.flags = VK_FENCE_CREATE_SIGNALED_BIT;
target->fences = new VkFence[swapchainImageCount]; target->fences = new VkFence[swapchainImageCount];
for(uint32_t i = 0; i < swapchainImageCount; i++) for(uint32_t i = 0; i < swapchainImageCount; i++)
vkCreateFence(device_, &fenceCreateInfo, nullptr, &target->fences[i]); vkCreateFence(device_, &fenceCreateInfo, nullptr, &target->fences[i]);
@ -230,36 +230,36 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
void Renderer::destroyRenderTarget(RenderTarget* target) { void Renderer::destroyRenderTarget(RenderTarget* target) {
vkDeviceWaitIdle(device_); vkDeviceWaitIdle(device_);
for(uint32_t i = 0; i < target->numImages; i++) for(uint32_t i = 0; i < target->numImages; i++)
vkDestroyFence(device_, target->fences[i], nullptr); vkDestroyFence(device_, target->fences[i], nullptr);
delete[] target->fences; delete[] target->fences;
vkDestroySemaphore(device_, target->renderFinishedSemaphore, nullptr); vkDestroySemaphore(device_, target->renderFinishedSemaphore, nullptr);
vkDestroySemaphore(device_, target->imageAvailableSemaphore, nullptr); vkDestroySemaphore(device_, target->imageAvailableSemaphore, nullptr);
vkFreeCommandBuffers(device_, commandPool_, target->numImages, target->commandBuffers); vkFreeCommandBuffers(device_, commandPool_, target->numImages, target->commandBuffers);
delete[] target->commandBuffers; delete[] target->commandBuffers;
for(uint32_t i = 0; i < target->numImages; i++) { for(uint32_t i = 0; i < target->numImages; i++) {
vkDestroyFramebuffer(device_, target->framebuffers[i], nullptr); vkDestroyFramebuffer(device_, target->framebuffers[i], nullptr);
vkDestroyImageView(device_, target->imageViews[i], nullptr); vkDestroyImageView(device_, target->imageViews[i], nullptr);
} }
delete[] target->framebuffers; delete[] target->framebuffers;
delete[] target->imageViews; delete[] target->imageViews;
delete[] target->images; delete[] target->images;
vkDestroySwapchainKHR(device_, target->swapchain, nullptr); vkDestroySwapchainKHR(device_, target->swapchain, nullptr);
delete target; delete target;
} }
VkShaderModule Renderer::createShader(const char* path) { VkShaderModule Renderer::createShader(const char* path) {
std::ifstream file(path, std::ios::ate | std::ios::binary); std::ifstream file(path, std::ios::ate | std::ios::binary);
size_t fileSize = (size_t) file.tellg(); size_t fileSize = (size_t) file.tellg();
std::vector<char> buffer(fileSize); std::vector<char> buffer(fileSize);
file.seekg(0); file.seekg(0);
@ -280,10 +280,10 @@ VkShaderModule Renderer::createShader(const char* path) {
void Renderer::createInstance() { void Renderer::createInstance() {
uint32_t layerCount = 0; uint32_t layerCount = 0;
vkEnumerateInstanceLayerProperties(&layerCount, nullptr); vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
VkLayerProperties* availableLayers = new VkLayerProperties[layerCount]; VkLayerProperties* availableLayers = new VkLayerProperties[layerCount];
vkEnumerateInstanceLayerProperties(&layerCount, availableLayers); vkEnumerateInstanceLayerProperties(&layerCount, availableLayers);
std::vector<const char*> enabledLayers; std::vector<const char*> enabledLayers;
#ifdef DEBUG #ifdef DEBUG
for(uint32_t i = 0; i < layerCount; i++) { for(uint32_t i = 0; i < layerCount; i++) {
@ -293,10 +293,10 @@ void Renderer::createInstance() {
#endif #endif
delete[] availableLayers; delete[] availableLayers;
uint32_t extensionCount = 0; uint32_t extensionCount = 0;
vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr); vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);
VkExtensionProperties* availableExtensions = new VkExtensionProperties[extensionCount]; VkExtensionProperties* availableExtensions = new VkExtensionProperties[extensionCount];
vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, availableExtensions); vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, availableExtensions);
@ -311,7 +311,7 @@ void Renderer::createInstance() {
#endif #endif
delete[] availableExtensions; delete[] availableExtensions;
auto requiredExtensions = platform::getRequiredExtensions(); auto requiredExtensions = platform::getRequiredExtensions();
enabledExtensions.insert(enabledExtensions.end(), requiredExtensions.begin(), requiredExtensions.end()); enabledExtensions.insert(enabledExtensions.end(), requiredExtensions.begin(), requiredExtensions.end());
@ -321,7 +321,7 @@ void Renderer::createInstance() {
instanceCreateInfo.ppEnabledLayerNames = enabledLayers.data(); instanceCreateInfo.ppEnabledLayerNames = enabledLayers.data();
instanceCreateInfo.enabledExtensionCount = enabledExtensions.size(); instanceCreateInfo.enabledExtensionCount = enabledExtensions.size();
instanceCreateInfo.ppEnabledExtensionNames = enabledExtensions.data(); instanceCreateInfo.ppEnabledExtensionNames = enabledExtensions.data();
vkCreateInstance(&instanceCreateInfo, nullptr, &instance_); vkCreateInstance(&instanceCreateInfo, nullptr, &instance_);
} }
@ -336,10 +336,10 @@ void Renderer::createDebugMessenger() {
messengerCreateInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; messengerCreateInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
messengerCreateInfo.pfnUserCallback = [](VkDebugUtilsMessageSeverityFlagBitsEXT, unsigned int, const VkDebugUtilsMessengerCallbackDataEXT* callback, void*) -> unsigned int { messengerCreateInfo.pfnUserCallback = [](VkDebugUtilsMessageSeverityFlagBitsEXT, unsigned int, const VkDebugUtilsMessengerCallbackDataEXT* callback, void*) -> unsigned int {
std::cout << callback->pMessage << std::endl; std::cout << callback->pMessage << std::endl;
return VK_SUCCESS; return VK_SUCCESS;
}; };
createMessenger_(instance_, &messengerCreateInfo, nullptr, &messenger_); createMessenger_(instance_, &messengerCreateInfo, nullptr, &messenger_);
} }
#endif #endif
@ -347,59 +347,59 @@ void Renderer::createDebugMessenger() {
void Renderer::createLogicalDevice() { void Renderer::createLogicalDevice() {
uint32_t physicalDeviceCount = 0; uint32_t physicalDeviceCount = 0;
vkEnumeratePhysicalDevices(instance_, &physicalDeviceCount, nullptr); vkEnumeratePhysicalDevices(instance_, &physicalDeviceCount, nullptr);
VkPhysicalDevice* physicalDevices = new VkPhysicalDevice[physicalDeviceCount]; VkPhysicalDevice* physicalDevices = new VkPhysicalDevice[physicalDeviceCount];
vkEnumeratePhysicalDevices(instance_, &physicalDeviceCount, physicalDevices); vkEnumeratePhysicalDevices(instance_, &physicalDeviceCount, physicalDevices);
for(uint32_t i = 0; i < physicalDeviceCount; i++) { for(uint32_t i = 0; i < physicalDeviceCount; i++) {
VkPhysicalDeviceProperties properties = {}; VkPhysicalDeviceProperties properties = {};
vkGetPhysicalDeviceProperties(physicalDevices[i], &properties); vkGetPhysicalDeviceProperties(physicalDevices[i], &properties);
physicalDevice_ = physicalDevices[i]; physicalDevice_ = physicalDevices[i];
} }
delete[] physicalDevices; delete[] physicalDevices;
uint32_t queueFamilyPropertiesCount = 0; uint32_t queueFamilyPropertiesCount = 0;
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice_, &queueFamilyPropertiesCount, nullptr); vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice_, &queueFamilyPropertiesCount, nullptr);
VkQueueFamilyProperties* queueFamilyProperties = new VkQueueFamilyProperties[queueFamilyPropertiesCount]; VkQueueFamilyProperties* queueFamilyProperties = new VkQueueFamilyProperties[queueFamilyPropertiesCount];
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice_, &queueFamilyPropertiesCount, queueFamilyProperties); vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice_, &queueFamilyPropertiesCount, queueFamilyProperties);
for(uint32_t i = 0; i < queueFamilyPropertiesCount; i++) { for(uint32_t i = 0; i < queueFamilyPropertiesCount; i++) {
if(queueFamilyProperties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) if(queueFamilyProperties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT)
queueIndices.graphics = i; queueIndices.graphics = i;
} }
delete[] queueFamilyProperties; delete[] queueFamilyProperties;
queueIndices.presentation = queueIndices.graphics; //FIXME: this may not always be true!! queueIndices.presentation = queueIndices.graphics; //FIXME: this may not always be true!!
const std::set<uint32_t> queueFamilyIndices = {queueIndices.graphics}; const std::set<uint32_t> queueFamilyIndices = {queueIndices.graphics};
std::vector<VkDeviceQueueCreateInfo> deviceQueueCreateInfos; std::vector<VkDeviceQueueCreateInfo> deviceQueueCreateInfos;
for(auto queueFamilyIndex : queueFamilyIndices) { for(auto queueFamilyIndex : queueFamilyIndices) {
const float priority = 1.0f; const float priority = 1.0f;
VkDeviceQueueCreateInfo queueCreateInfo = {}; VkDeviceQueueCreateInfo queueCreateInfo = {};
queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
queueCreateInfo.queueFamilyIndex = queueFamilyIndex; queueCreateInfo.queueFamilyIndex = queueFamilyIndex;
queueCreateInfo.queueCount = 1; queueCreateInfo.queueCount = 1;
queueCreateInfo.pQueuePriorities = &priority; queueCreateInfo.pQueuePriorities = &priority;
deviceQueueCreateInfos.push_back(queueCreateInfo); deviceQueueCreateInfos.push_back(queueCreateInfo);
} }
const std::vector<const char*> enabledExtensions = {"VK_KHR_swapchain"}; const std::vector<const char*> enabledExtensions = {"VK_KHR_swapchain"};
VkDeviceCreateInfo deviceCreateInfo = {}; VkDeviceCreateInfo deviceCreateInfo = {};
deviceCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; deviceCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
deviceCreateInfo.queueCreateInfoCount = deviceQueueCreateInfos.size(); deviceCreateInfo.queueCreateInfoCount = deviceQueueCreateInfos.size();
deviceCreateInfo.pQueueCreateInfos = deviceQueueCreateInfos.data(); deviceCreateInfo.pQueueCreateInfos = deviceQueueCreateInfos.data();
deviceCreateInfo.enabledExtensionCount = enabledExtensions.size(); deviceCreateInfo.enabledExtensionCount = enabledExtensions.size();
deviceCreateInfo.ppEnabledExtensionNames = enabledExtensions.data(); deviceCreateInfo.ppEnabledExtensionNames = enabledExtensions.data();
vkCreateDevice(physicalDevice_, &deviceCreateInfo, nullptr, &device_); vkCreateDevice(physicalDevice_, &deviceCreateInfo, nullptr, &device_);
vkGetDeviceQueue(device_, queueIndices.graphics, 0, &graphicsQueue_); vkGetDeviceQueue(device_, queueIndices.graphics, 0, &graphicsQueue_);
} }
@ -408,7 +408,7 @@ void Renderer::createCommandPool() {
poolCreateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; poolCreateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
poolCreateInfo.queueFamilyIndex = queueIndices.graphics; poolCreateInfo.queueFamilyIndex = queueIndices.graphics;
poolCreateInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; poolCreateInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
vkCreateCommandPool(device_, &poolCreateInfo, nullptr, &commandPool_); vkCreateCommandPool(device_, &poolCreateInfo, nullptr, &commandPool_);
} }