Moved frameIndex to KRSurface

This commit is contained in:
2022-03-27 22:14:41 -07:00
parent 36f804e176
commit 5e8c9223ac
6 changed files with 18 additions and 9 deletions

View File

@@ -72,6 +72,7 @@ KRPipeline* KRPipelineManager::getPipeline(KRSurface& surface, KRRenderPass& ren
key.second.push_back(surface.m_swapChainExtent.height); key.second.push_back(surface.m_swapChainExtent.height);
key.second.push_back(vertexAttributes); key.second.push_back(vertexAttributes);
key.second.push_back(modelFormat); key.second.push_back(modelFormat);
// TODO - Add renderPass unique identifier to key
PipelineMap::iterator itr = m_pipelines.find(key); PipelineMap::iterator itr = m_pipelines.find(key);
if (itr != m_pipelines.end()) { if (itr != m_pipelines.end()) {
return itr->second; return itr->second;

View File

@@ -96,9 +96,6 @@ void KRPresentationThread::run()
void KRPresentationThread::renderFrame() 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 // TODO - We should use fences to eliminate this mutex
const std::lock_guard<std::mutex> surfaceLock(KRContext::g_SurfaceInfoMutex); const std::lock_guard<std::mutex> surfaceLock(KRContext::g_SurfaceInfoMutex);
@@ -155,7 +152,7 @@ void KRPresentationThread::renderFrame()
} }
KRRenderPass& forwardOpaquePass = surface.getForwardOpaquePass(); KRRenderPass& forwardOpaquePass = surface.getForwardOpaquePass();
forwardOpaquePass.begin(commandBuffer, surface, frameIndex); forwardOpaquePass.begin(commandBuffer, surface);
KRMeshManager::KRVBOData& testVertices = getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES; KRMeshManager::KRVBOData& testVertices = getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES;
bool haveMesh = testVertices.isVBOReady(); bool haveMesh = testVertices.isVBOReady();
@@ -209,7 +206,7 @@ void KRPresentationThread::renderFrame()
presentInfo.pImageIndices = &imageIndex; presentInfo.pImageIndices = &imageIndex;
presentInfo.pResults = nullptr; presentInfo.pResults = nullptr;
vkQueuePresentKHR(device.m_graphicsQueue, &presentInfo); vkQueuePresentKHR(device.m_graphicsQueue, &presentInfo);
}
frameIndex++; surface.endFrame();
}
} }

View File

@@ -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<VkClearValue, 2> clearValues{}; std::array<VkClearValue, 2> clearValues{};
clearValues[0].color = { {0.0f, 0.0f, 0.0f, 1.0f} }; 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{}; VkRenderPassBeginInfo renderPassInfo{};
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
renderPassInfo.renderPass = m_renderPass; 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.offset = { 0, 0 };
renderPassInfo.renderArea.extent = surface.m_swapChainExtent; renderPassInfo.renderArea.extent = surface.m_swapChainExtent;
renderPassInfo.clearValueCount = static_cast<uint32_t>(clearValues.size()); renderPassInfo.clearValueCount = static_cast<uint32_t>(clearValues.size());

View File

@@ -45,7 +45,7 @@ public:
void create(KRDevice& device, VkFormat swapChainImageFormat, VkFormat depthImageFormat); void create(KRDevice& device, VkFormat swapChainImageFormat, VkFormat depthImageFormat);
void destroy(KRDevice& device); void destroy(KRDevice& device);
void begin(VkCommandBuffer &commandBuffer, KRSurface& surface, uint64_t frameIndex); void begin(VkCommandBuffer &commandBuffer, KRSurface& surface);
void end(VkCommandBuffer& commandBuffer); void end(VkCommandBuffer& commandBuffer);
// private: // private:

View File

@@ -52,6 +52,7 @@ KRSurface::KRSurface(KRContext& context)
, m_depthImageView(VK_NULL_HANDLE) , m_depthImageView(VK_NULL_HANDLE)
, m_imageAvailableSemaphore(VK_NULL_HANDLE) , m_imageAvailableSemaphore(VK_NULL_HANDLE)
, m_renderFinishedSemaphore(VK_NULL_HANDLE) , m_renderFinishedSemaphore(VK_NULL_HANDLE)
, m_frameIndex(0)
{ {
m_forwardOpaquePass = std::make_unique<KRRenderPass>(context); m_forwardOpaquePass = std::make_unique<KRRenderPass>(context);
} }
@@ -416,3 +417,8 @@ KRRenderPass& KRSurface::getForwardOpaquePass()
{ {
return *m_forwardOpaquePass; return *m_forwardOpaquePass;
} }
void KRSurface::endFrame()
{
m_frameIndex++;;
}

View File

@@ -61,6 +61,8 @@ public:
void createRenderPasses(); void createRenderPasses();
KRRenderPass& getForwardOpaquePass(); KRRenderPass& getForwardOpaquePass();
void endFrame();
#ifdef WIN32 #ifdef WIN32
HWND m_hWnd; HWND m_hWnd;
#endif #endif
@@ -81,6 +83,9 @@ public:
std::unique_ptr<KRRenderPass> m_forwardOpaquePass; std::unique_ptr<KRRenderPass> m_forwardOpaquePass;
// TODO - This needs to be advanced per swap chain
uint64_t m_frameIndex;
private: private:
void destroySwapChain(); void destroySwapChain();
KrResult createSwapChain(); KrResult createSwapChain();