From 07487be2bfb84c446323908ddf19a4be285048ee Mon Sep 17 00:00:00 2001 From: ink-soul Date: Tue, 16 Apr 2024 15:12:42 +0800 Subject: [PATCH] fix bufferSize control --- base/vulkanexamplebase.cpp | 28 ++++++++++++++++++++++++++-- base/vulkanexamplebase.h | 2 ++ src/render/render.cpp | 12 +++++++----- src/render/render.h | 2 ++ 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/base/vulkanexamplebase.cpp b/base/vulkanexamplebase.cpp index b11dea9..d152d33 100644 --- a/base/vulkanexamplebase.cpp +++ b/base/vulkanexamplebase.cpp @@ -123,7 +123,7 @@ void VulkanExampleBase::prepare() */ VkCommandPoolCreateInfo cmdPoolInfo = {}; cmdPoolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; - cmdPoolInfo.queueFamilyIndex = swapChain.queueNodeIndex; + cmdPoolInfo.queueFamilyIndex = queueFamilyIndex; cmdPoolInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT; VK_CHECK_RESULT(vkCreateCommandPool(device, &cmdPoolInfo, nullptr, &cmdPool)); @@ -334,7 +334,7 @@ void VulkanExampleBase::renderLoop() { renderFrame(); } - + renderingFrameIndex++; // Flush device to make sure all resources can be freed vkDeviceWaitIdle(device); } @@ -501,6 +501,28 @@ void VulkanExampleBase::initVulkan() vkGetPhysicalDeviceFeatures(physicalDevice, &deviceFeatures); vkGetPhysicalDeviceMemoryProperties(physicalDevice, &deviceMemoryProperties); + /* + queueFamilyIndex creation + */ + + const float defaultQueuePriority(0.0f); + VkDeviceQueueCreateInfo queueCreateInfo = {}; + uint32_t queueFamilyCount; + vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyCount, nullptr); + std::vector queueFamilyProperties(queueFamilyCount); + vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyCount, queueFamilyProperties.data()); + for (uint32_t i = 0; i < static_cast(queueFamilyProperties.size()); i++) { + if (queueFamilyProperties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) { + queueFamilyIndex = i; + queueCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO; + queueCreateInfo.queueFamilyIndex = i; + queueCreateInfo.queueCount = 1; + queueCreateInfo.pQueuePriorities = &defaultQueuePriority; + break; + } + } + + /* Device creation */ @@ -522,6 +544,8 @@ void VulkanExampleBase::initVulkan() */ vkGetDeviceQueue(device, vulkanDevice->queueFamilyIndices.graphics, 0, &queue); + + /* Suitable depth format */ diff --git a/base/vulkanexamplebase.h b/base/vulkanexamplebase.h index b903434..7bf0d18 100644 --- a/base/vulkanexamplebase.h +++ b/base/vulkanexamplebase.h @@ -113,6 +113,8 @@ public: uint32_t lastFPS = 0; VkFormat colorFormat = VK_FORMAT_R8G8B8A8_SRGB; + uint32_t queueFamilyIndex; + uint32_t renderingFrameIndex; struct Signal { diff --git a/src/render/render.cpp b/src/render/render.cpp index 1dcb3e0..b763bec 100644 --- a/src/render/render.cpp +++ b/src/render/render.cpp @@ -1553,13 +1553,14 @@ PlumageRender::PlumageRender() camera.rotationSpeed = 0.25f; camera.movementSpeed = 0.1f; + auto frameRange = settings.outputFrameCount - settings.startFrameCount + 1; waitFences.resize(renderAhead); presentCompleteSemaphores.resize(renderAhead); renderCompleteSemaphores.resize(renderAhead); - commandBuffers.resize(swapChain.imageCount); - uniformBuffers.resize(swapChain.imageCount); - descriptorSets.resize(swapChain.imageCount); + commandBuffers.resize(renderingFrameIndex); + uniformBuffers.resize(renderingFrameIndex); + descriptorSets.resize(renderingFrameIndex); // Command buffer execution fences for (auto& waitFence : waitFences) { VkFenceCreateInfo fenceCI{ VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, nullptr, VK_FENCE_CREATE_SIGNALED_BIT }; @@ -1598,8 +1599,8 @@ PlumageRender::PlumageRender() sampleCount = settings.sampleCount; } - gui = new UI(vulkanDevice, renderPass, queue, pipelineCache, sampleCount); - updateUIOverlay(); + //gui = new UI(vulkanDevice, renderPass, queue, pipelineCache, sampleCount); + //updateUIOverlay(); buildCommandBuffers(); @@ -2311,6 +2312,7 @@ PlumageRender::PlumageRender() { for (int32_t i = 0; i < __argc; i++) { PlumageRender::args.push_back(__argv[i]); }; plumageRender = new PlumageRender(); + std::cout << "start to init vulkan" << std::endl; plumageRender->initVulkan(); //plumageRender->setupWindow(hInstance, WndProc); plumageRender->prepare(); diff --git a/src/render/render.h b/src/render/render.h index 03b9791..6b3142f 100644 --- a/src/render/render.h +++ b/src/render/render.h @@ -56,6 +56,8 @@ public: } info ; + + struct Models