X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=automated-tests%2Fsrc%2Fdali-toolkit%2Fdali-toolkit-test-utils%2Ftest-graphics-buffer.cpp;h=21eecf414b6418f124c551ed09f68f1bd1f10528;hb=HEAD;hp=26960787e4c4493bf9ad9888a140ddc7f21751ef;hpb=57818b285f2485c7acd86d92f642f726b4a2bcca;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-buffer.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-buffer.cpp index 2696078..456d978 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-buffer.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-buffer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 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. @@ -15,36 +15,68 @@ */ #include "test-graphics-buffer.h" - #include +#include "dali-test-suite-utils.h" +#include "test-graphics-program.h" +#include "test-graphics-reflection.h" namespace Dali { -TestGraphicsBuffer::TestGraphicsBuffer(TraceCallStack& callStack, TestGlAbstraction& glAbstraction, uint32_t size, Graphics::BufferUsageFlags usage) +TestGraphicsBuffer::TestGraphicsBuffer(const Graphics::BufferCreateInfo& createInfo, TestGraphicsController& controller, TestGlAbstraction& glAbstraction, TraceCallStack& callStack) : mCallStack(callStack), + mController(controller), mGl(glAbstraction), - mUsage(usage) + mCreateInfo(createInfo), + mUsage(createInfo.usage) +{ + if(createInfo.propertiesFlags & int(Graphics::BufferPropertiesFlagBit::CPU_ALLOCATED)) + { + mCpuOnly = true; + } + else + { + mGl.GenBuffers(1, &mId); + } + memory.resize(createInfo.size); +} + +TestGraphicsBuffer::~TestGraphicsBuffer() +{ + // Not strictly parameters, but useful for testing + TraceCallStack::NamedParams namedParams; + namedParams["usage"] << "0x" << std::hex << mCreateInfo.usage; + namedParams["propertiesFlags"] << mCreateInfo.propertiesFlags; + + mCallStack.PushCall("Buffer::~Buffer", namedParams.str(), namedParams); + if(!mCpuOnly && mId) + { + mGl.DeleteBuffers(1, &mId); + } +} + +void TestGraphicsBuffer::DiscardResource() { - memory.reserve(size); - mGl.GetBufferTrace().EnableLogging(true); + mController.DiscardBuffer(this); } void TestGraphicsBuffer::Bind() { mCallStack.PushCall("Buffer::Bind", ""); - if(!mId) + if(!mCpuOnly && mId > 0) { - mGl.GenBuffers(1, &mId); + mGl.BindBuffer(GetTarget(), mId); } - mGl.BindBuffer(GetTarget(), mId); } void TestGraphicsBuffer::Unbind() { mCallStack.PushCall("Buffer::Unbind", ""); - if(mId) + if(!mCpuOnly) { - mGl.BindBuffer(GetTarget(), 0); + if(mId) + { + mGl.BindBuffer(GetTarget(), 0); + } } } @@ -53,18 +85,22 @@ void TestGraphicsBuffer::Upload(uint32_t offset, uint32_t size) std::ostringstream o; o << offset << ", " << size; TraceCallStack::NamedParams namedParams; - namedParams["offset"] = offset; - namedParams["size"] = size; + namedParams["offset"] << offset; + namedParams["size"] << size; mCallStack.PushCall("Buffer::Upload", o.str(), namedParams); - if(size <= memory.size() && mCreated) - { - // Use subData to avoid re-allocation - mGl.BufferSubData(GetTarget(), offset, size, &memory[offset]); - } - else + + if(!mCpuOnly) { - mGl.BufferData(GetTarget(), size, &memory[0], GL_STATIC_DRAW); //@todo Query - do we need other usages? - mCreated = true; + if(size <= memory.size() && mCreated) + { + // Use subData to avoid re-allocation + mGl.BufferSubData(GetTarget(), static_cast(static_cast(offset)), static_cast(static_cast(size)), &memory[offset]); + } + else + { + mGl.BufferData(GetTarget(), static_cast(static_cast(size)), &memory[0], GL_STATIC_DRAW); //@todo Query - do we need other usages? + mCreated = true; + } } } @@ -78,4 +114,72 @@ GLenum TestGraphicsBuffer::GetTarget() return target; } +void TestGraphicsBuffer::BindAsUniformBuffer(const TestGraphicsProgram* program, const Dali::UniformBufferBindingDescriptor& uboBinding) const +{ + auto* reflection = static_cast(&program->GetReflection()); + const auto& uboInfo = reflection->GetTestUniformBlock(0u); + + auto offset = uboBinding.offset; + auto* data = memory.data() + offset; + + for(const auto& member : uboInfo.members) + { + uint32_t numElements = member.numElements > 0 ? member.numElements : 1; + + for(uint32_t i = 0; i < numElements; ++i) + { + switch(member.type) + { + case Property::VECTOR4: + { + auto value = *reinterpret_cast(data + member.offsets[i]); + mGl.Uniform4f(member.locations[i], value.x, value.y, value.z, value.w); + break; + } + case Property::VECTOR3: + { + auto value = *reinterpret_cast(data + member.offsets[i]); + mGl.Uniform3f(member.locations[i], value.x, value.y, value.z); + break; + } + case Property::VECTOR2: + { + auto value = *reinterpret_cast(data + member.offsets[i]); + mGl.Uniform2f(member.locations[i], value.x, value.y); + break; + } + case Property::FLOAT: + { + auto value = *reinterpret_cast(data + member.offsets[i]); + mGl.Uniform1f(member.locations[i], value); + break; + } + case Property::INTEGER: + { + auto ptr = reinterpret_cast(data + member.offsets[i]); + auto value = *ptr; + mGl.Uniform1i(member.locations[i], value); + break; + } + case Property::MATRIX: + { + auto value = reinterpret_cast(data + member.offsets[i]); + mGl.UniformMatrix4fv(member.locations[i], 1, GL_FALSE, value); + break; + } + case Property::MATRIX3: + { + auto value = reinterpret_cast(data + member.offsets[i]); + mGl.UniformMatrix3fv(member.locations[i], 1, GL_FALSE, value); + break; + } + default: + { + fprintf(stderr, "\n%s type not found\n", member.name.c_str()); + } + } + } + } +} + } // namespace Dali