From 38cdbb6ce58a59201ff11dc632cc6584cf04e009 Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Sun, 14 Jun 2026 15:27:20 -0700 Subject: [PATCH] Pipeline key now includes the VertexBufferLayout --- kraken/KRPipelineManager.cpp | 28 +++++++++------------------- kraken/KRPipelineManager.h | 3 +-- kraken/resources/mesh/KRMesh.cpp | 6 +----- 3 files changed, 11 insertions(+), 26 deletions(-) diff --git a/kraken/KRPipelineManager.cpp b/kraken/KRPipelineManager.cpp index e7b1fd8..c95a86e 100644 --- a/kraken/KRPipelineManager.cpp +++ b/kraken/KRPipelineManager.cpp @@ -67,13 +67,15 @@ KRPipelineManager::~KRPipelineManager() KRPipeline* KRPipelineManager::getPipeline(KRSurface& surface, const PipelineInfo& info) { - std::pair > key; - key.first = *info.shader_name; - key.second.push_back(surface.m_deviceHandle); - key.second.push_back(surface.m_swapChain->m_imageFormat); - key.second.push_back(surface.m_swapChain->m_extent.width); - key.second.push_back(surface.m_swapChain->m_extent.height); - // key.second.push_back(info.layout); // FINDME!! KIPG!! HACK!!! Need to add a unique key generated from info.layout + const char* szShaderName = info.shader_name->c_str(); + std::vector key; + key.insert(key.begin(), (std::byte*)szShaderName, (std::byte*)szShaderName + strlen(szShaderName) + 1); // purposefully include the zero terminator + key.insert(key.begin(), (std::byte*)&surface.m_deviceHandle, (std::byte*)&surface.m_deviceHandle + sizeof(surface.m_deviceHandle)); + key.insert(key.begin(), (std::byte*)&surface.m_swapChain->m_imageFormat, (std::byte*)&surface.m_swapChain->m_imageFormat + sizeof(surface.m_swapChain->m_imageFormat)); + key.insert(key.begin(), (std::byte*)&surface.m_swapChain->m_extent.width, (std::byte*)&surface.m_swapChain->m_extent.width + sizeof(surface.m_swapChain->m_extent.width)); + key.insert(key.begin(), (std::byte*)&surface.m_swapChain->m_extent.height, (std::byte*)&surface.m_swapChain->m_extent.height + sizeof(surface.m_swapChain->m_extent.height)); + key.insert(key.begin(), (std::byte*)info.layout, (std::byte*)info.layout + sizeof(*info.layout)); + // TODO - Add renderPass unique identifier to key PipelineMap::iterator itr = m_pipelines.find(key); if (itr != m_pipelines.end()) { @@ -308,15 +310,3 @@ size_t KRPipelineManager::getPipelineHandlesUsed() { return m_pipelines.size(); } - - -KRPipeline* KRPipelineManager::get(const char* name) -{ - std::pair > key; - key.first = name; - auto itr = m_pipelines.find(key); - if (itr == m_pipelines.end()) { - return nullptr; - } - return (*itr).second; -} diff --git a/kraken/KRPipelineManager.h b/kraken/KRPipelineManager.h index 754b3dd..8c7bf14 100644 --- a/kraken/KRPipelineManager.h +++ b/kraken/KRPipelineManager.h @@ -54,7 +54,6 @@ public: KRPipelineManager(KRContext& context); virtual ~KRPipelineManager(); - KRPipeline* get(const char* szKey); KRPipeline* getPipeline(KRSurface& surface, const PipelineInfo& info); @@ -63,6 +62,6 @@ public: KRPipeline* m_active_pipeline; private: - typedef std::map >, KRPipeline*> PipelineMap; + typedef std::map, KRPipeline* > PipelineMap; PipelineMap m_pipelines; }; diff --git a/kraken/resources/mesh/KRMesh.cpp b/kraken/resources/mesh/KRMesh.cpp index 1d951bf..2fef0ab 100755 --- a/kraken/resources/mesh/KRMesh.cpp +++ b/kraken/resources/mesh/KRMesh.cpp @@ -481,11 +481,7 @@ void KRMesh::renderSubmesh(VkCommandBuffer& commandBuffer, int iSubmesh, const K if (iVertex + cVertexes >= MAX_VBO_SIZE) { assert(iVertex + (MAX_VBO_SIZE - iVertex) <= cBufferVertexes); - if (getIndexCount(0) == 0) { - vkCmdDraw(commandBuffer, (MAX_VBO_SIZE - iVertex), 1, iVertex, 0); - } else { - vkCmdDrawIndexed(commandBuffer, (MAX_VBO_SIZE - iVertex), 1, iVertex, 0, 0); - } + vkCmdDraw(commandBuffer, (MAX_VBO_SIZE - iVertex), 1, iVertex, 0); m_pContext->getMeshManager()->log_draw_call(renderPass->getType(), object_name, material_name, (MAX_VBO_SIZE - iVertex)); cVertexes -= (MAX_VBO_SIZE - iVertex);