From: Bowon Ryu Date: Wed, 24 Jan 2024 05:34:35 +0000 (+0900) Subject: Revert "[Tizen] Reducing uniform memory usage" X-Git-Tag: accepted/tizen/unified/20240124.163244~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f7e3ba5b3d998fb010cad56b1c742bacca7c7211;p=platform%2Fcore%2Fuifw%2Fdali-core.git Revert "[Tizen] Reducing uniform memory usage" This reverts commit d071b6cc7e7504bda44b7f46122e8f25b57a1b26. --- diff --git a/dali/internal/event/common/property-input-impl.h b/dali/internal/event/common/property-input-impl.h index ab2ee09..2bb3a3b 100644 --- a/dali/internal/event/common/property-input-impl.h +++ b/dali/internal/event/common/property-input-impl.h @@ -2,7 +2,7 @@ #define DALI_INTERNAL_PROPERTY_INPUT_IMPL_H /* - * Copyright (c) 2023 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -181,18 +181,6 @@ public: return reinterpret_cast(*this); } - /** - * Retrieve the address of the property value. Only for use - * when writing uniforms. - */ - virtual const void* GetValueAddress(BufferIndex bufferIndex) const = 0; - - /** - * Retrieve the size of the property value for use in copying. - * Only for use when writing uniforms. - */ - virtual size_t GetValueSize() const = 0; - // Accessors for Constraint functions /** diff --git a/dali/internal/render/renderers/render-renderer.cpp b/dali/internal/render/renderers/render-renderer.cpp index 11a20f9..4baebf9 100644 --- a/dali/internal/render/renderers/render-renderer.cpp +++ b/dali/internal/render/renderers/render-renderer.cpp @@ -46,6 +46,98 @@ uint32_t mvpBufferIndex; namespace { +// Helper to get the property value getter by type +typedef const float& (PropertyInputImpl::*FuncGetter)(BufferIndex) const; +constexpr FuncGetter GetPropertyValueGetter(Property::Type type) +{ + switch(type) + { + case Property::BOOLEAN: + { + return FuncGetter(&PropertyInputImpl::GetBoolean); + } + case Property::INTEGER: + { + return FuncGetter(&PropertyInputImpl::GetInteger); + } + case Property::FLOAT: + { + return FuncGetter(&PropertyInputImpl::GetFloat); + } + case Property::VECTOR2: + { + return FuncGetter(&PropertyInputImpl::GetVector2); + } + case Property::VECTOR3: + { + return FuncGetter(&PropertyInputImpl::GetVector3); + } + case Property::VECTOR4: + { + return FuncGetter(&PropertyInputImpl::GetVector4); + } + case Property::MATRIX3: + { + return FuncGetter(&PropertyInputImpl::GetMatrix3); + } + case Property::MATRIX: + { + return FuncGetter(&PropertyInputImpl::GetMatrix); + } + default: + { + return nullptr; + } + } +} + +/** + * Helper function that returns size of uniform datatypes based + * on property type. + */ +constexpr int GetPropertyValueSizeForUniform(Property::Type type) +{ + switch(type) + { + case Property::Type::BOOLEAN: + { + return sizeof(bool); + } + case Property::Type::FLOAT: + { + return sizeof(float); + } + case Property::Type::INTEGER: + { + return sizeof(int); + } + case Property::Type::VECTOR2: + { + return sizeof(Vector2); + } + case Property::Type::VECTOR3: + { + return sizeof(Vector3); + } + case Property::Type::VECTOR4: + { + return sizeof(Vector4); + } + case Property::Type::MATRIX3: + { + return sizeof(Matrix3); + } + case Property::Type::MATRIX: + { + return sizeof(Matrix); + } + default: + { + return 0; + } + }; +} + /** * Helper function to calculate the correct alignment of data for uniform buffers * @param dataSize size of uniform buffer @@ -835,7 +927,7 @@ void Renderer::FillUniformBuffer(Program& { auto& uniform = iter; int arrayIndex = uniform.arrayIndex; - if(!uniform.initialized) + if(!uniform.uniformFunc) { auto uniformInfo = Graphics::UniformInfo{}; auto uniformFound = program.GetUniform(uniform.uniformName.GetStringView(), @@ -856,13 +948,15 @@ void Renderer::FillUniformBuffer(Program& uniform.uniformOffset = uniformInfo.offset; uniform.uniformLocation = uniformInfo.location; uniform.uniformBlockIndex = uniformInfo.bufferIndex; - uniform.initialized = true; auto dst = ubo->GetOffset() + uniformInfo.offset; - const auto typeSize = iter.propertyValue->GetValueSize(); + const auto typeSize = GetPropertyValueSizeForUniform(iter.propertyValue->GetType()); const auto dest = dst + static_cast(typeSize) * arrayIndex; + const auto func = GetPropertyValueGetter(iter.propertyValue->GetType()); + uniform.uniformSize = typeSize; + uniform.uniformFunc = func; - ubo->Write(iter.propertyValue->GetValueAddress(updateBufferIndex), + ubo->Write(&(iter.propertyValue->*func)(updateBufferIndex), typeSize, dest); } @@ -871,10 +965,11 @@ void Renderer::FillUniformBuffer(Program& UniformBufferView* ubo = uboViews[uniform.uniformBlockIndex].get(); auto dst = ubo->GetOffset() + uniform.uniformOffset; - const auto typeSize = iter.propertyValue->GetValueSize(); + const auto typeSize = uniform.uniformSize; const auto dest = dst + static_cast(typeSize) * arrayIndex; + const auto func = uniform.uniformFunc; - ubo->Write(iter.propertyValue->GetValueAddress(updateBufferIndex), + ubo->Write(&(iter.propertyValue->*func)(updateBufferIndex), typeSize, dest); } diff --git a/dali/internal/render/renderers/render-renderer.h b/dali/internal/render/renderers/render-renderer.h index af05bcc..c8e9d3c 100644 --- a/dali/internal/render/renderers/render-renderer.h +++ b/dali/internal/render/renderers/render-renderer.h @@ -630,6 +630,8 @@ private: using Hash = std::size_t; + typedef const float& (PropertyInputImpl::*FuncGetter)(BufferIndex) const; + struct UniformIndexMap { ConstString uniformName; ///< The uniform name @@ -638,10 +640,11 @@ private: Hash uniformNameHashNoArray{0u}; int32_t arrayIndex{-1}; ///< The array index - int16_t uniformLocation{0u}; - uint16_t uniformOffset{0u}; - uint16_t uniformBlockIndex{0u}; - bool initialized{false}; + int16_t uniformLocation{0u}; + uint16_t uniformOffset{0u}; + uint16_t uniformSize{0u}; + uint16_t uniformBlockIndex{0u}; + FuncGetter uniformFunc{0}; }; StencilParameters mStencilParameters; ///< Struct containing all stencil related options diff --git a/dali/internal/update/common/animatable-property.h b/dali/internal/update/common/animatable-property.h index c2bb6fe..612af3f 100644 --- a/dali/internal/update/common/animatable-property.h +++ b/dali/internal/update/common/animatable-property.h @@ -174,22 +174,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue[bufferIndex]; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(bool); - } - - /** * Set the property value. This will only persist for the current frame; the property * will be reset with the base value, at the beginning of the next frame. * @param[in] bufferIndex The buffer to write. @@ -356,22 +340,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue[bufferIndex]; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(int); - } - - /** * Set the property value. This will only persist for the current frame; the property * will be reset with the base value, at the beginning of the next frame. * @param[in] bufferIndex The buffer to write. @@ -547,22 +515,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue[bufferIndex]; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(float); - } - - /** * Set the property value. This will only persist for the current frame; the property * will be reset with the base value, at the beginning of the next frame. * @param[in] bufferIndex The buffer to write. @@ -740,22 +692,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue[bufferIndex]; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Vector2); - } - - /** * Set the property value. This will only persist for the current frame; the property * will be reset with the base value, at the beginning of the next frame. * @param[in] bufferIndex The buffer to write. @@ -1022,22 +958,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue[bufferIndex]; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Vector3); - } - - /** * Set the property value. This will only persist for the current frame; the property * will be reset with the base value, at the beginning of the next frame. * @param[in] bufferIndex The buffer to write. @@ -1358,22 +1278,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue[bufferIndex]; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Vector4); - } - - /** * Set the property value. This will only persist for the current frame; the property * will be reset with the base value, at the beginning of the next frame. * @param[in] bufferIndex The buffer to write. @@ -1766,22 +1670,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue[bufferIndex]; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Vector4); - } - - /** * Change the property value by a relative amount. * @param[in] bufferIndex The buffer to write. * @param[in] delta The property will change by this amount. @@ -1922,22 +1810,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue[bufferIndex]; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Matrix); - } - - /** * Set the property value. This will only persist for the current frame; the property * will be reset with the base value, at the beginning of the next frame. * @param[in] bufferIndex The buffer to write. @@ -2094,22 +1966,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue[bufferIndex]; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Matrix3); - } - - /** * Set the property value. This will only persist for the current frame; the property * will be reset with the base value, at the beginning of the next frame. * @param[in] bufferIndex The buffer to write. diff --git a/dali/internal/update/common/inherited-property.h b/dali/internal/update/common/inherited-property.h index 08d62b4..e4a8446 100644 --- a/dali/internal/update/common/inherited-property.h +++ b/dali/internal/update/common/inherited-property.h @@ -2,7 +2,7 @@ #define DALI_INTERNAL_SCENE_GRAPH_INHERITED_PROPERTY_H /* - * Copyright (c) 2023 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -123,22 +123,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue[bufferIndex]; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Vector3); - } - - /** * @copydoc Dali::PropertyInput::GetConstraintInputVector3() */ const Vector3& GetConstraintInputVector3(BufferIndex bufferIndex) const override @@ -285,22 +269,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue[bufferIndex]; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Vector4); - } - - /** * @copydoc Dali::PropertyInput::GetConstraintInputVector4() */ const Vector4& GetConstraintInputVector4(BufferIndex bufferIndex) const override @@ -465,22 +433,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue[bufferIndex]; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Vector4); - } - - /** * @copydoc Dali::PropertyInput::GetConstraintInputQuaternion() */ const Quaternion& GetConstraintInputQuaternion(BufferIndex bufferIndex) const override @@ -626,22 +578,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue[bufferIndex]; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Matrix); - } - - /** * @copydoc Dali::Internal::PropertyInputImpl::GetConstraintInputMatrix() */ const Matrix& GetConstraintInputMatrix(BufferIndex bufferIndex) const override diff --git a/dali/internal/update/gestures/gesture-properties.h b/dali/internal/update/gestures/gesture-properties.h index 92e635e..33e28b5 100644 --- a/dali/internal/update/gestures/gesture-properties.h +++ b/dali/internal/update/gestures/gesture-properties.h @@ -2,7 +2,7 @@ #define DALI_INTERNAL_SCENE_GRAPH_GESTURE_PROPERTIES_H /* - * Copyright (c) 2023 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -151,22 +151,6 @@ public: { return mValue; } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Vector2); - } }; /** @@ -187,22 +171,6 @@ public: { return mValue; } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &mValue; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(bool); - } }; } // namespace SceneGraph diff --git a/dali/internal/update/manager/transform-manager-property.h b/dali/internal/update/manager/transform-manager-property.h index e093e01..fe5fec4 100644 --- a/dali/internal/update/manager/transform-manager-property.h +++ b/dali/internal/update/manager/transform-manager-property.h @@ -196,22 +196,6 @@ struct TransformManagerPropertyVector3 final : public TransformManagerPropertyHa return Get(bufferIndex); } - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &GetVector3(bufferIndex); - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Vector3); - } - const float& GetFloatComponent(uint32_t component) const override { return GetTxManagerData()->Manager()->GetVector3PropertyComponentValue(GetTxManagerData()->Id(), PropertyT, component); @@ -328,22 +312,6 @@ public: { return Get(bufferIndex); } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &Get(bufferIndex); - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Vector4); - } }; /** @@ -447,22 +415,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &GetVector3(bufferIndex); - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Vector3); - } - - /** * @copydoc Dali::PropertyInput::GetConstraintInputVector3() */ const Vector3& GetConstraintInputVector3(BufferIndex bufferIndex) const override @@ -603,22 +555,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - return &GetQuaternion(bufferIndex); - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Vector4); - } - - /** * @copydoc Dali::PropertyInput::GetConstraintInputQuaternion() */ const Quaternion& GetConstraintInputQuaternion(BufferIndex bufferIndex) const override @@ -747,29 +683,6 @@ public: } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueAddress() - */ - const void* GetValueAddress(BufferIndex bufferIndex) const override - { - static const Matrix identityMatrix(Matrix::IDENTITY); - auto transformManagerData = GetTxManagerData(); - auto id = transformManagerData->Id(); - if(id != INVALID_TRANSFORM_ID) - { - return &(transformManagerData->Manager()->GetWorldMatrix(id)); - } - return &identityMatrix; - } - - /** - * @copydoc Dali::Internal::PropertyInputImpl::GetValueSize() - */ - size_t GetValueSize() const override - { - return sizeof(Matrix); - } - - /** * @copydoc Dali::PropertyInput::GetConstraintInputMatrix() */ const Matrix& GetConstraintInputMatrix(BufferIndex bufferIndex) const override