From 6a1c859e3e6de60e0df17a309cd34020db4599e3 Mon Sep 17 00:00:00 2001 From: David Steele Date: Fri, 8 Apr 2022 17:18:19 +0100 Subject: [PATCH] Test harness sync Change-Id: I6799eccd1e813351c87446dda4c379162e1b4f4d --- .../dali-toolkit-test-utils/test-gl-abstraction.h | 9 ++- .../test-graphics-reflection.cpp | 64 ++++++++++++++++------ 2 files changed, 56 insertions(+), 17 deletions(-) diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-gl-abstraction.h b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-gl-abstraction.h index cc7fac4..a1f8405 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-gl-abstraction.h +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-gl-abstraction.h @@ -997,10 +997,17 @@ public: { name = uniform.name.substr(0, iter); auto arrayCount = std::stoi(uniform.name.substr(iter + 1)); + iter = uniform.name.find("]"); + std::string suffix; + if(iter != std::string::npos && iter + 1 != uniform.name.length()) + { + suffix = uniform.name.substr(iter + 1); // If there is a suffix, it means its an element of an array of struct + } + for(int i = 0; i < arrayCount; ++i) { std::stringstream nss; - nss << name << "[" << i << "]"; + nss << name << "[" << i << "]" << suffix; GetUniformLocation(program, nss.str().c_str()); // Generate a GL loc per element } } diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-reflection.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-reflection.cpp index 5b3da8c..6cb90ba 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-reflection.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-reflection.cpp @@ -147,8 +147,6 @@ TestGraphicsReflection::TestGraphicsReflection(TestGlAbstraction& gl, uint32_t p for(const auto& data : mCustomUniforms) { fprintf(stderr, "\ncustom uniforms: %s\n", data.name.c_str()); - mDefaultUniformBlock.members.emplace_back(); - auto& item = mDefaultUniformBlock.members.back(); auto iter = data.name.find("[", 0); int numElements = 1; @@ -161,26 +159,60 @@ TestGraphicsReflection::TestGraphicsReflection(TestGlAbstraction& gl, uint32_t p { numElements = 1; } - - item.name = baseName; - item.binding = 0; - item.bufferIndex = 0; - item.uniformClass = Graphics::UniformClass::UNIFORM; - item.type = data.type; - item.numElements = numElements; - - for(int i = 0; i < numElements; ++i) + iter = data.name.find("]"); + std::string suffix; + if(iter != std::string::npos && iter + 1 != data.name.length()) { - std::stringstream elementNameStream; - elementNameStream << baseName << "[" << i << "]"; + suffix = data.name.substr(iter + 1); // If there is a suffix, it means it is an element of an array of struct + } - item.locations.push_back(gl.GetUniformLocation(programId, elementNameStream.str().c_str())); - item.offsets.push_back(offset); - offset += GetSizeForType(data.type); + if(!suffix.empty()) + { + // Write multiple items + for(int i = 0; i < numElements; ++i) + { + std::stringstream elementNameStream; + elementNameStream << baseName << "[" << i << "]" << suffix; + mDefaultUniformBlock.members.emplace_back(); + auto& item = mDefaultUniformBlock.members.back(); + item.name = elementNameStream.str(); + item.binding = 0; + item.offsets.push_back(offset); + item.locations.push_back(gl.GetUniformLocation(programId, elementNameStream.str().c_str())); + item.bufferIndex = 0; + item.uniformClass = Graphics::UniformClass::UNIFORM; + item.type = data.type; + offset += GetSizeForType(data.type); + } + } + else + { + // Write 1 item with multiple elements + mDefaultUniformBlock.members.emplace_back(); + auto& item = mDefaultUniformBlock.members.back(); + + item.name = baseName; + item.binding = 0; + item.bufferIndex = 0; + item.uniformClass = Graphics::UniformClass::UNIFORM; + item.type = data.type; + item.numElements = numElements; + + for(int i = 0; i < numElements; ++i) + { + std::stringstream elementNameStream; + elementNameStream << baseName << "[" << i << "]"; + item.locations.push_back(gl.GetUniformLocation(programId, elementNameStream.str().c_str())); + item.offsets.push_back(offset); + offset += GetSizeForType(data.type); + } } } else { + // Write 1 item with 1 element + mDefaultUniformBlock.members.emplace_back(); + auto& item = mDefaultUniformBlock.members.back(); item.name = data.name; item.binding = 0; item.offsets.push_back(offset); -- 2.7.4