From: seungho baek Date: Wed, 19 Jul 2023 08:30:46 +0000 (+0900) Subject: To Caching UniformMap per node/renderer/program triple. X-Git-Tag: accepted/tizen/unified/20230803.034118^2^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8fba034ec8fa20df21a41c24fe89df53e706f8b3;p=platform%2Fcore%2Fuifw%2Fdali-core.git To Caching UniformMap per node/renderer/program triple. Change-Id: I67dee410688be3f5e0e7e2911fdaa89b66354938 Signed-off-by: seungho baek --- diff --git a/dali/internal/render/renderers/render-renderer.cpp b/dali/internal/render/renderers/render-renderer.cpp index 60f3a5362..06d8b6847 100644 --- a/dali/internal/render/renderers/render-renderer.cpp +++ b/dali/internal/render/renderers/render-renderer.cpp @@ -696,11 +696,12 @@ std::size_t Renderer::BuildUniformIndexMap(BufferIndex bufferIndex, const SceneG // Specially, if node don't have uniformMap, we mark nodePtr as nullptr. // So, all nodes without uniformMap will share same UniformIndexMap, contains only render data providers. const auto nodePtr = uniformMapNode.Count() ? &node : nullptr; + const auto programPtr = &program; const auto nodeChangeCounter = nodePtr ? uniformMapNode.GetChangeCounter() : 0; const auto renderItemMapChangeCounter = uniformMap.GetChangeCounter(); - auto iter = std::find_if(mNodeIndexMap.begin(), mNodeIndexMap.end(), [nodePtr](RenderItemLookup& element) { return element.node == nodePtr; }); + auto iter = std::find_if(mNodeIndexMap.begin(), mNodeIndexMap.end(), [nodePtr, programPtr](RenderItemLookup& element) { return (element.node == nodePtr && element.program == programPtr); }); std::size_t renderItemMapIndex; if(iter == mNodeIndexMap.end()) @@ -708,6 +709,7 @@ std::size_t Renderer::BuildUniformIndexMap(BufferIndex bufferIndex, const SceneG renderItemMapIndex = mUniformIndexMaps.size(); RenderItemLookup renderItemLookup; renderItemLookup.node = nodePtr; + renderItemLookup.program = programPtr; renderItemLookup.index = renderItemMapIndex; renderItemLookup.nodeChangeCounter = nodeChangeCounter; renderItemLookup.renderItemMapChangeCounter = renderItemMapChangeCounter; @@ -1017,8 +1019,7 @@ void Renderer::DetachFromNodeDataProvider(const SceneGraph::NodeDataProvider& no // Remove mNodeIndexMap and mUniformIndexMaps. auto iter = std::find_if(mNodeIndexMap.begin(), mNodeIndexMap.end(), [&node](RenderItemLookup& element) { return element.node == &node; }); - - if(iter != mNodeIndexMap.end()) + while(iter != mNodeIndexMap.end()) { // Swap between end of mUniformIndexMaps and removed. auto nodeIndex = iter->index; @@ -1043,6 +1044,8 @@ void Renderer::DetachFromNodeDataProvider(const SceneGraph::NodeDataProvider& no // Remove uniform index maps. mUniformIndexMaps.pop_back(); + + iter = std::find_if(mNodeIndexMap.begin(), mNodeIndexMap.end(), [&node](RenderItemLookup& element) { return element.node == &node; }); } } diff --git a/dali/internal/render/renderers/render-renderer.h b/dali/internal/render/renderers/render-renderer.h index a348bb411..c12d253cf 100644 --- a/dali/internal/render/renderers/render-renderer.h +++ b/dali/internal/render/renderers/render-renderer.h @@ -657,7 +657,8 @@ private: /** Struct to map node to index into mNodeMapCounters and mUniformIndexMaps */ struct RenderItemLookup { - const SceneGraph::NodeDataProvider* node{nullptr}; ///