From 5e8c9223ac1e5bc92a798e763a7302bfbe245724 Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Sun, 27 Mar 2022 22:14:41 -0700 Subject: [PATCH] Moved frameIndex to KRSurface --- kraken/KRPipelineManager.cpp | 1 + kraken/KRPresentationThread.cpp | 9 +++------ kraken/KRRenderPass.cpp | 4 ++-- kraken/KRRenderPass.h | 2 +- kraken/KRSurface.cpp | 6 ++++++ kraken/KRSurface.h | 5 +++++ 6 files changed, 18 insertions(+), 9 deletions(-) diff --git a/kraken/KRPipelineManager.cpp b/kraken/KRPipelineManager.cpp index a8a0657..db4b9c8 100644 --- a/kraken/KRPipelineManager.cpp +++ b/kraken/KRPipelineManager.cpp @@ -72,6 +72,7 @@ KRPipeline* KRPipelineManager::getPipeline(KRSurface& surface, KRRenderPass& ren key.second.push_back(surface.m_swapChainExtent.height); key.second.push_back(vertexAttributes); key.second.push_back(modelFormat); + // TODO - Add renderPass unique identifier to key PipelineMap::iterator itr = m_pipelines.find(key); if (itr != m_pipelines.end()) { return itr->second; diff --git a/kraken/KRPresentationThread.cpp b/kraken/KRPresentationThread.cpp index 1db19b5..5b13fda 100644 --- a/kraken/KRPresentationThread.cpp +++ b/kraken/KRPresentationThread.cpp @@ -96,9 +96,6 @@ void KRPresentationThread::run() void KRPresentationThread::renderFrame() { - // TODO - Eliminate this and use system wide index once Vulkan path is working - static uint64_t frameIndex = 0; - // TODO - We should use fences to eliminate this mutex const std::lock_guard surfaceLock(KRContext::g_SurfaceInfoMutex); @@ -155,7 +152,7 @@ void KRPresentationThread::renderFrame() } KRRenderPass& forwardOpaquePass = surface.getForwardOpaquePass(); - forwardOpaquePass.begin(commandBuffer, surface, frameIndex); + forwardOpaquePass.begin(commandBuffer, surface); KRMeshManager::KRVBOData& testVertices = getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES; bool haveMesh = testVertices.isVBOReady(); @@ -209,7 +206,7 @@ void KRPresentationThread::renderFrame() presentInfo.pImageIndices = &imageIndex; presentInfo.pResults = nullptr; vkQueuePresentKHR(device.m_graphicsQueue, &presentInfo); - } - frameIndex++; + surface.endFrame(); + } } \ No newline at end of file diff --git a/kraken/KRRenderPass.cpp b/kraken/KRRenderPass.cpp index 973535f..5940bb4 100644 --- a/kraken/KRRenderPass.cpp +++ b/kraken/KRRenderPass.cpp @@ -117,7 +117,7 @@ void KRRenderPass::destroy(KRDevice &device) } } -void KRRenderPass::begin(VkCommandBuffer& commandBuffer, KRSurface& surface, uint64_t frameIndex) +void KRRenderPass::begin(VkCommandBuffer& commandBuffer, KRSurface& surface) { std::array clearValues{}; clearValues[0].color = { {0.0f, 0.0f, 0.0f, 1.0f} }; @@ -126,7 +126,7 @@ void KRRenderPass::begin(VkCommandBuffer& commandBuffer, KRSurface& surface, uin VkRenderPassBeginInfo renderPassInfo{}; renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; renderPassInfo.renderPass = m_renderPass; - renderPassInfo.framebuffer = surface.m_swapChainFramebuffers[frameIndex % surface.m_swapChainFramebuffers.size()]; + renderPassInfo.framebuffer = surface.m_swapChainFramebuffers[surface.m_frameIndex % surface.m_swapChainFramebuffers.size()]; renderPassInfo.renderArea.offset = { 0, 0 }; renderPassInfo.renderArea.extent = surface.m_swapChainExtent; renderPassInfo.clearValueCount = static_cast(clearValues.size()); diff --git a/kraken/KRRenderPass.h b/kraken/KRRenderPass.h index 8e29be3..a0a73f0 100644 --- a/kraken/KRRenderPass.h +++ b/kraken/KRRenderPass.h @@ -45,7 +45,7 @@ public: void create(KRDevice& device, VkFormat swapChainImageFormat, VkFormat depthImageFormat); void destroy(KRDevice& device); - void begin(VkCommandBuffer &commandBuffer, KRSurface& surface, uint64_t frameIndex); + void begin(VkCommandBuffer &commandBuffer, KRSurface& surface); void end(VkCommandBuffer& commandBuffer); // private: diff --git a/kraken/KRSurface.cpp b/kraken/KRSurface.cpp index fefc3c9..86163ae 100644 --- a/kraken/KRSurface.cpp +++ b/kraken/KRSurface.cpp @@ -52,6 +52,7 @@ KRSurface::KRSurface(KRContext& context) , m_depthImageView(VK_NULL_HANDLE) , m_imageAvailableSemaphore(VK_NULL_HANDLE) , m_renderFinishedSemaphore(VK_NULL_HANDLE) + , m_frameIndex(0) { m_forwardOpaquePass = std::make_unique(context); } @@ -416,3 +417,8 @@ KRRenderPass& KRSurface::getForwardOpaquePass() { return *m_forwardOpaquePass; } + +void KRSurface::endFrame() +{ + m_frameIndex++;; +} diff --git a/kraken/KRSurface.h b/kraken/KRSurface.h index 525ac4f..9ad098f 100644 --- a/kraken/KRSurface.h +++ b/kraken/KRSurface.h @@ -61,6 +61,8 @@ public: void createRenderPasses(); KRRenderPass& getForwardOpaquePass(); + void endFrame(); + #ifdef WIN32 HWND m_hWnd; #endif @@ -81,6 +83,9 @@ public: std::unique_ptr m_forwardOpaquePass; + // TODO - This needs to be advanced per swap chain + uint64_t m_frameIndex; + private: void destroySwapChain(); KrResult createSwapChain();