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(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;

View File

@@ -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<std::mutex> 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();
}
}

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{};
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<uint32_t>(clearValues.size());

View File

@@ -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:

View File

@@ -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<KRRenderPass>(context);
}
@@ -416,3 +417,8 @@ KRRenderPass& KRSurface::getForwardOpaquePass()
{
return *m_forwardOpaquePass;
}
void KRSurface::endFrame()
{
m_frameIndex++;;
}

View File

@@ -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<KRRenderPass> m_forwardOpaquePass;
// TODO - This needs to be advanced per swap chain
uint64_t m_frameIndex;
private:
void destroySwapChain();
KrResult createSwapChain();