From: Eunki, Hong Date: Wed, 7 May 2025 00:32:34 +0000 (+0900) Subject: (VisualRenderer) Forcibly ignore shared UBO if we call RegisterVisualTransformUniform() X-Git-Tag: accepted/tizen/unified/20250509.015138~1^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2ee503f49d556dee485caee76769fa4965629e23;p=platform%2Fcore%2Fuifw%2Fdali-core.git (VisualRenderer) Forcibly ignore shared UBO if we call RegisterVisualTransformUniform() Since the change of Pipeline give overhead for real world applications, let we just forcibly ignore shared UBO if we don't use default visual UBO cases. Change-Id: I1edec4752c54d55f91b61f6a12c8ccebf860e32f Signed-off-by: Eunki, Hong --- diff --git a/dali/internal/event/rendering/visual-renderer-impl.cpp b/dali/internal/event/rendering/visual-renderer-impl.cpp index c70d61f0b..6261f7785 100644 --- a/dali/internal/event/rendering/visual-renderer-impl.cpp +++ b/dali/internal/event/rendering/visual-renderer-impl.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -522,6 +523,10 @@ void VisualRenderer::RegisterVisualTransformUniform() { if(!mUniformMapped) { + // Mark as we will not use shared uniform block. + // TODO : Currently, we ignore whole shared uniform blocks. We should specify the name of UBO in future. + EnableSharedUniformBlockMessage(GetEventThreadServices(), GetRendererSceneObject(), false); + mUniformMapped = true; AddUniformMapping(Dali::VisualRenderer::Property::TRANSFORM_OFFSET, ConstString("offset")); AddUniformMapping(Dali::VisualRenderer::Property::TRANSFORM_SIZE, ConstString("size")); diff --git a/dali/internal/render/common/render-manager.cpp b/dali/internal/render/common/render-manager.cpp index a8e86eebb..8ae43a334 100644 --- a/dali/internal/render/common/render-manager.cpp +++ b/dali/internal/render/common/render-manager.cpp @@ -1104,6 +1104,11 @@ void RenderManager::RenderScene(Integration::RenderStatus& status, Integration:: totalSizeCPU += memoryRequirements.totalCpuSizeRequired; totalSizeGPU += memoryRequirements.totalGpuSizeRequired; + + if(!item.mRenderer->UseSharedUniformBlock()) + { + totalSizeGPU += memoryRequirements.sharedGpuSizeRequired; + } } } } diff --git a/dali/internal/render/renderers/render-renderer.cpp b/dali/internal/render/renderers/render-renderer.cpp index 2cbd5da70..a729ef9a1 100644 --- a/dali/internal/render/renderers/render-renderer.cpp +++ b/dali/internal/render/renderers/render-renderer.cpp @@ -156,7 +156,8 @@ Renderer::Renderer(SceneGraph::RenderDataProvider* dataProvider, mDepthTestMode(depthTestMode), mPremultipliedAlphaEnabled(preMultipliedAlphaEnabled), mShaderChanged(false), - mPipelineCached(false) + mPipelineCached(false), + mUseSharedUniformBlock(true) { if(blendingBitmask != 0u) { @@ -830,7 +831,8 @@ void Renderer::WriteUniformBuffer( mUniformBufferBindings[i].dataSize = reflection.GetUniformBlockSize(i); bool useSharedBlock = !standaloneUniforms && - programRequirements.sharedBlock[i]; + programRequirements.sharedBlock[i] && + UseSharedUniformBlock(); if(useSharedBlock) { @@ -1013,7 +1015,6 @@ void Renderer::FillUniformBuffer(Program& program, auto* ubo = uboViews[uniform.uniformBlockIndex]; if(ubo == nullptr) // Uniform belongs to shared UniformBlock, can't overwrite { - uniform.state = UniformIndexMap::State::NOT_USED; continue; } WriteDynUniform(iter.propertyValue, uniform, *ubo, updateBufferIndex); diff --git a/dali/internal/render/renderers/render-renderer.h b/dali/internal/render/renderers/render-renderer.h index 2ce51494d..182c6fd8a 100644 --- a/dali/internal/render/renderers/render-renderer.h +++ b/dali/internal/render/renderers/render-renderer.h @@ -550,6 +550,28 @@ public: */ Vector4 GetTextureUpdateArea() const noexcept; + /** + * @brief Mark whether we should consider shared uniform block, or ignore it. + * @todo Currently, we ignore whole shared uniform blocks. We should specify the name of UBO in future. + * + * @param[in] enabled True if we will use shared uniform block. False otherwise. + */ + void EnableSharedUniformBlock(bool enabled) + { + mUseSharedUniformBlock = enabled; + } + + /** + * @brief Check whether we should consider shared uniform block, or ignore it. + * @todo Currently, we ignore whole shared uniform blocks. We should specify the name of UBO in future. + * + * @return True if we will use shared uniform block. False otherwise. + */ + [[nodiscard]] bool UseSharedUniformBlock() const + { + return mUseSharedUniformBlock; + } + public: // From Program::LifecycleObserver /** * @copydoc Dali::Internal::Program::LifecycleObserver::ProgramDestroyed() @@ -731,6 +753,7 @@ private: bool mPremultipliedAlphaEnabled : 1; ///< Flag indicating whether the Pre-multiplied Alpha Blending is required bool mShaderChanged : 1; ///< Flag indicating the shader changed and uniform maps have to be updated bool mPipelineCached : 1; ///< Flag indicating whether renderer cache valid pipeline or not. + bool mUseSharedUniformBlock : 1; ///< Flag whether we should use shared uniform block or not. Usually it must be true. std::vector mDrawCommands; // Devel stuff RenderCallback* mRenderCallback{nullptr}; diff --git a/dali/internal/update/rendering/scene-graph-renderer-messages.h b/dali/internal/update/rendering/scene-graph-renderer-messages.h index 4f648dc6c..7b8d308d0 100644 --- a/dali/internal/update/rendering/scene-graph-renderer-messages.h +++ b/dali/internal/update/rendering/scene-graph-renderer-messages.h @@ -330,6 +330,13 @@ inline void SetUpdateAreaExtentsMessage(EventThreadServices& eventThreadServices new(slot) LocalType(&renderer, &SceneGraph::Renderer::SetUpdateAreaExtents, updateAreaExtents); } +inline void EnableSharedUniformBlockMessage(EventThreadServices& eventThreadServices, const Renderer& renderer, bool enabled) +{ + using LocalType = MessageValue1; + uint32_t* slot = eventThreadServices.ReserveMessageSlot(sizeof(LocalType)); + new(slot) LocalType(&renderer, &Renderer::EnableSharedUniformBlock, enabled); +} + } // namespace Dali::Internal::SceneGraph #endif //DALI_INTERNAL_SCENE_GRAPH_RENDERER_MESSAGES_H diff --git a/dali/internal/update/rendering/scene-graph-renderer.cpp b/dali/internal/update/rendering/scene-graph-renderer.cpp index 474f20555..fd4d20b7b 100644 --- a/dali/internal/update/rendering/scene-graph-renderer.cpp +++ b/dali/internal/update/rendering/scene-graph-renderer.cpp @@ -81,7 +81,8 @@ enum Flags RESEND_WRITE_TO_COLOR_BUFFER = 1 << 18, RESEND_SHADER = 1 << 19, RESEND_DRAW_COMMANDS = 1 << 20, - RESEND_SET_RENDER_CALLBACK = 1 << 21 + RESEND_SET_RENDER_CALLBACK = 1 << 21, + RESEND_SHARED_UNIFORM_BLOCK_USED = 1 << 22, }; inline Vector4 AdjustExtents(const Vector4& updateArea, const Dali::Extents& updateAreaExtents) @@ -135,6 +136,7 @@ Renderer::Renderer() mVisualPropertiesDirtyFlags(CLEAN_FLAG), mRegenerateUniformMap(false), mPremultipledAlphaEnabled(false), + mUseSharedUniformBlock(true), mMixColor(Color::WHITE), mDepthIndex(0) { @@ -353,6 +355,13 @@ bool Renderer::PrepareRender(BufferIndex updateBufferIndex) uint32_t* slot = mSceneController->GetRenderQueue().ReserveMessageSlot(updateBufferIndex, sizeof(DerivedType)); new(slot) DerivedType(rendererPtr, &Render::Renderer::SetRenderCallback, mRenderCallback); } + + if(mResendFlag & RESEND_SHARED_UNIFORM_BLOCK_USED) + { + using DerivedType = MessageValue1; + uint32_t* slot = mSceneController->GetRenderQueue().ReserveMessageSlot(updateBufferIndex, sizeof(DerivedType)); + new(slot) DerivedType(rendererPtr, &Render::Renderer::EnableSharedUniformBlock, mUseSharedUniformBlock); + } mResendFlag = 0; } @@ -923,6 +932,16 @@ const CollectedUniformMap& Renderer::GetCollectedUniformMap() const return mCollectedUniformMap; } +void Renderer::EnableSharedUniformBlock(bool enabled) +{ + if(mUseSharedUniformBlock != enabled) + { + mUseSharedUniformBlock = enabled; + mResendFlag |= RESEND_SHARED_UNIFORM_BLOCK_USED; + SetUpdated(true); + } +} + bool Renderer::IsUpdated() const { // We should check Whether diff --git a/dali/internal/update/rendering/scene-graph-renderer.h b/dali/internal/update/rendering/scene-graph-renderer.h index 9f6aae8ea..0141fba15 100644 --- a/dali/internal/update/rendering/scene-graph-renderer.h +++ b/dali/internal/update/rendering/scene-graph-renderer.h @@ -560,6 +560,12 @@ public: // From UniformMapDataProvider */ const CollectedUniformMap& GetCollectedUniformMap() const override; +public: // For VisualRenderer + /** + * Mark whether we should consider shared uniform block, or ignore it. + */ + void EnableSharedUniformBlock(bool enabled); + public: // For VisualProperties /** * To be used only for 1st stage initialization in event thread. @@ -640,6 +646,7 @@ private: bool mRegenerateUniformMap : 1; ///< true if the map should be regenerated bool mPremultipledAlphaEnabled : 1; ///< Flag indicating whether the Pre-multiplied Alpha Blending is required + bool mUseSharedUniformBlock : 1; std::vector mDrawCommands; Dali::RenderCallback* mRenderCallback{nullptr};