From 978ae126bac155b190ad6e0ff6bad189f9ec2ef3 Mon Sep 17 00:00:00 2001 From: Adam Bialogonski Date: Thu, 13 May 2021 17:02:02 +0100 Subject: [PATCH] Managed Unified Uniform Buffer Single uniform buffer is created in order to store uniform data for all rendered items. Change-Id: I6ab17d1652eb9cc0cb8500ea3fd8dcc25d5795d3 --- .../src/dali-adaptor/dali-test-suite-utils/test-graphics-buffer.cpp | 5 +++-- .../src/dali-adaptor/dali-test-suite-utils/test-graphics-buffer.h | 3 ++- .../dali-adaptor/dali-test-suite-utils/test-graphics-controller.cpp | 2 +- dali/internal/graphics/gles-impl/gles-context.cpp | 2 +- dali/internal/graphics/gles-impl/gles2-graphics-memory.cpp | 3 +-- dali/internal/graphics/gles-impl/gles3-graphics-memory.cpp | 6 ++++-- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-buffer.cpp b/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-buffer.cpp index d8a1b1a..21eecf4 100644 --- a/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-buffer.cpp +++ b/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-buffer.cpp @@ -80,14 +80,15 @@ GLenum TestGraphicsBuffer::GetTarget() return target; } -void TestGraphicsBuffer::BindAsUniformBuffer(const TestGraphicsProgram* program) const +void TestGraphicsBuffer::BindAsUniformBuffer(const TestGraphicsProgram* program, const Dali::UniformBufferBindingDescriptor& uboBinding) const { auto* reflection = static_cast(&program->GetReflection()); Graphics::UniformBlockInfo uboInfo{}; reflection->GetUniformBlock(0, uboInfo); - auto* data = memory.data(); + auto offset = uboBinding.offset; + auto* data = memory.data() + offset; for(const auto& member : uboInfo.members) { diff --git a/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-buffer.h b/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-buffer.h index 87c9f87..1dc2715 100644 --- a/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-buffer.h +++ b/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-buffer.h @@ -26,6 +26,7 @@ namespace Dali { class TestGraphicsProgram; +class UniformBufferBindingDescriptor; class TestGraphicsBuffer : public Graphics::Buffer { public: @@ -40,7 +41,7 @@ public: return true; } - void BindAsUniformBuffer(const TestGraphicsProgram* program) const; + void BindAsUniformBuffer(const TestGraphicsProgram* program, const Dali::UniformBufferBindingDescriptor& uboBinding) const; TraceCallStack& mCallStack; TestGlAbstraction& mGl; diff --git a/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-controller.cpp b/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-controller.cpp index 517463f..cbdd5dd 100644 --- a/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-controller.cpp +++ b/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-controller.cpp @@ -604,7 +604,7 @@ void TestGraphicsController::ProcessCommandBuffer(TestGraphicsCommandBuffer& com auto buffer = bindings.standaloneUniformsBufferBinding; // based on reflection, issue gl calls - buffer.buffer->BindAsUniformBuffer(static_cast(currentPipeline->programState.program)); + buffer.buffer->BindAsUniformBuffer(static_cast(currentPipeline->programState.program), bindings.standaloneUniformsBufferBinding); break; } case CommandType::BIND_SAMPLERS: diff --git a/dali/internal/graphics/gles-impl/gles-context.cpp b/dali/internal/graphics/gles-impl/gles-context.cpp index 7d04067..974869a 100644 --- a/dali/internal/graphics/gles-impl/gles-context.cpp +++ b/dali/internal/graphics/gles-impl/gles-context.cpp @@ -331,7 +331,7 @@ void Context::ResolveStandaloneUniforms() auto extraInfos = reflection.GetStandaloneUniformExtraInfo(); - const auto ptr = reinterpret_cast(mImpl->mCurrentStandaloneUBOBinding.buffer->GetCPUAllocatedAddress()); + const auto ptr = reinterpret_cast(mImpl->mCurrentStandaloneUBOBinding.buffer->GetCPUAllocatedAddress()) + mImpl->mCurrentStandaloneUBOBinding.offset; for(const auto& info : extraInfos) { diff --git a/dali/internal/graphics/gles-impl/gles2-graphics-memory.cpp b/dali/internal/graphics/gles-impl/gles2-graphics-memory.cpp index a514a34..4c2e45c 100644 --- a/dali/internal/graphics/gles-impl/gles2-graphics-memory.cpp +++ b/dali/internal/graphics/gles-impl/gles2-graphics-memory.cpp @@ -45,7 +45,7 @@ Memory2::Memory2(const Graphics::MapTextureInfo& mapInfo, EglGraphicsController& Memory2::~Memory2() { - //Unlock(true); + Unlock(true); } void* Memory2::LockRegion(uint32_t offset, uint32_t size) @@ -82,7 +82,6 @@ void Memory2::Unlock(bool flush) auto buffer = static_cast(mMapBufferInfo.buffer); if(!buffer->IsCPUAllocated()) { - buffer->Bind(BufferUsage::VERTEX_BUFFER); gl->BufferSubData(GL_ARRAY_BUFFER, mMapBufferInfo.offset, mMapBufferInfo.size, mMappedPointer); } diff --git a/dali/internal/graphics/gles-impl/gles3-graphics-memory.cpp b/dali/internal/graphics/gles-impl/gles3-graphics-memory.cpp index 3fb5da4..8b3908d 100644 --- a/dali/internal/graphics/gles-impl/gles3-graphics-memory.cpp +++ b/dali/internal/graphics/gles-impl/gles3-graphics-memory.cpp @@ -57,8 +57,8 @@ void* Memory3::LockRegion(uint32_t offset, uint32_t size) if(buffer->IsCPUAllocated()) { - using Ptr = char*; - return Ptr(buffer->GetCPUAllocatedAddress()) + offset; + using Ptr = char*; + mMappedPointer = Ptr(buffer->GetCPUAllocatedAddress()) + offset; } else { @@ -92,6 +92,8 @@ void Memory3::Unlock(bool flush) { Flush(); } + + mMappedPointer = nullptr; } void Memory3::Flush() -- 2.7.4