From: Eunki, Hong Date: Thu, 24 Apr 2025 08:55:22 +0000 (+0900) Subject: Calculate align size at UniformBuffer, not external X-Git-Tag: dali_2.4.17~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F28%2F323228%2F2;p=platform%2Fcore%2Fuifw%2Fdali-core.git Calculate align size at UniformBuffer, not external We don't need to give alignment ownership of memory offset to outsize. Let we open the size freely, and calculate offset internally. Change-Id: I7cd0ef88f15e716a75b7caff74830e35e3da076f Signed-off-by: Eunki, Hong --- diff --git a/dali/internal/render/renderers/uniform-buffer-manager.cpp b/dali/internal/render/renderers/uniform-buffer-manager.cpp index 1935ca622..cd6fbe7ea 100644 --- a/dali/internal/render/renderers/uniform-buffer-manager.cpp +++ b/dali/internal/render/renderers/uniform-buffer-manager.cpp @@ -77,9 +77,7 @@ Graphics::UniquePtr UniformBufferManager::CreateUniformBuffer auto offset = ubo->GetCurrentOffset(); auto retval = Graphics::UniquePtr(UniformBufferView::TryRecycle(oldView, *ubo.get(), offset)); - // make sure new offset will meet alignment requirements - uint32_t alignedSize = ubo->AlignSize(size); - ubo->IncrementOffsetBy(alignedSize); + ubo->IncrementOffsetBy(size); return retval; } diff --git a/dali/internal/render/renderers/uniform-buffer.cpp b/dali/internal/render/renderers/uniform-buffer.cpp index 4f664fed4..55f46dfa8 100644 --- a/dali/internal/render/renderers/uniform-buffer.cpp +++ b/dali/internal/render/renderers/uniform-buffer.cpp @@ -27,10 +27,22 @@ Debug::Filter* gUniformBufferLogFilter = Debug::Filter::New(Debug::NoLogging, fa namespace Dali::Internal::Render { +namespace +{ // GPU UBOs need to be double-buffered in order to avoid stalling the CPU during mapping/unmapping constexpr uint32_t INTERNAL_UBO_BUFFER_COUNT = 2u; constexpr uint32_t DEFAUT_MEMORY_ALIGNMENT{1}; +/** + * Align size to the current block size. + */ +int AlignSize(int size, int align) +{ + return (size % align == 0) ? size : ((size / align) + 1) * align; +} + +} // namespace + Graphics::UniquePtr UniformBufferV2::New(Dali::Graphics::Controller* controller, bool emulated, uint32_t alignment) { return Graphics::UniquePtr(new UniformBufferV2(controller, emulated, alignment)); @@ -137,12 +149,12 @@ uint32_t UniformBufferV2::IncrementOffsetBy(uint32_t value) { if(mEmulated && !mBufferList.empty()) { - mBufferList[mCurrentGraphicsBufferIndex].currentOffset += value; // reset offset + mBufferList[mCurrentGraphicsBufferIndex].currentOffset += AlignSize(value, mBlockAlignment); // reset offset return mBufferList[mCurrentGraphicsBufferIndex].currentOffset; } // GPU else if(!mBufferList.empty()) { - mBufferList[mCurrentGraphicsBufferIndex].currentOffset += value; // reset offset + mBufferList[mCurrentGraphicsBufferIndex].currentOffset += AlignSize(value, mBlockAlignment); // reset offset return mBufferList[mCurrentGraphicsBufferIndex].currentOffset; } DALI_LOG_INFO(gUniformBufferLogFilter, Debug::General, "Buffer should be allocated before incrementing offset\n"); diff --git a/dali/internal/render/renderers/uniform-buffer.h b/dali/internal/render/renderers/uniform-buffer.h index d1e4f3835..173b76b51 100644 --- a/dali/internal/render/renderers/uniform-buffer.h +++ b/dali/internal/render/renderers/uniform-buffer.h @@ -64,17 +64,9 @@ public: void Rollback(); /** - * Align size to the current block size + * Increase offset by value. + * Note that new offset will meet alignment requirements */ - uint32_t AlignSize(uint32_t size) const - { - if(size % mBlockAlignment != 0) - { - size = ((size / mBlockAlignment) + 1) * mBlockAlignment; - } - return size; - } - uint32_t IncrementOffsetBy(uint32_t value); bool MemoryCompare(void* data, uint32_t offset, uint32_t size);