From 214aac69c6f01cd0544afe05e4c4d7060092b190 Mon Sep 17 00:00:00 2001 From: Adam Bialogonski Date: Fri, 26 Feb 2021 16:29:57 +0000 Subject: [PATCH] Shaders, Pipeline, Program test harness update Change-Id: Id5fadf14b543fe09d9e175e8660c7b2192a1f597 --- .../src/dali-scene-loader-internal/CMakeLists.txt | 2 + .../src/dali-scene-loader/CMakeLists.txt | 2 + .../src/dali-toolkit-internal/CMakeLists.txt | 2 + .../src/dali-toolkit-styling/CMakeLists.txt | 4 +- .../src/dali-toolkit-third-party/CMakeLists.txt | 2 + automated-tests/src/dali-toolkit/CMakeLists.txt | 2 + .../test-graphics-controller.cpp | 79 +++++++++++++--------- .../test-graphics-controller.h | 46 +++++++++++-- .../test-graphics-pipeline.cpp | 4 +- .../test-graphics-pipeline.h | 18 ++++- .../test-graphics-program.cpp | 28 ++++++++ .../test-graphics-program.h | 53 +++++++++++++++ .../test-graphics-reflection.cpp | 37 +++++++++- .../test-graphics-reflection.h | 16 ++++- .../test-graphics-shader.cpp | 27 ++++++++ .../dali-toolkit-test-utils/test-graphics-shader.h | 38 +++++++++++ 16 files changed, 314 insertions(+), 46 deletions(-) create mode 100644 automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-program.cpp create mode 100644 automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-program.h create mode 100644 automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-shader.cpp create mode 100644 automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-shader.h diff --git a/automated-tests/src/dali-scene-loader-internal/CMakeLists.txt b/automated-tests/src/dali-scene-loader-internal/CMakeLists.txt index 539bcd4..16f96f0 100755 --- a/automated-tests/src/dali-scene-loader-internal/CMakeLists.txt +++ b/automated-tests/src/dali-scene-loader-internal/CMakeLists.txt @@ -49,6 +49,8 @@ SET(TEST_HARNESS_SOURCES ${TEST_HARNESS_DIR}/test-graphics-texture.cpp ${TEST_HARNESS_DIR}/test-graphics-sampler.cpp ${TEST_HARNESS_DIR}/test-graphics-pipeline.cpp + ${TEST_HARNESS_DIR}/test-graphics-program.cpp + ${TEST_HARNESS_DIR}/test-graphics-shader.cpp ${TEST_HARNESS_DIR}/test-graphics-reflection.cpp ${TEST_HARNESS_DIR}/test-platform-abstraction.cpp ${TEST_HARNESS_DIR}/test-render-controller.cpp diff --git a/automated-tests/src/dali-scene-loader/CMakeLists.txt b/automated-tests/src/dali-scene-loader/CMakeLists.txt index 6c44670..f0d84fb 100755 --- a/automated-tests/src/dali-scene-loader/CMakeLists.txt +++ b/automated-tests/src/dali-scene-loader/CMakeLists.txt @@ -62,7 +62,9 @@ SET(TEST_HARNESS_SOURCES ${TEST_HARNESS_DIR}/test-graphics-controller.cpp ${TEST_HARNESS_DIR}/test-graphics-texture.cpp ${TEST_HARNESS_DIR}/test-graphics-sampler.cpp + ${TEST_HARNESS_DIR}/test-graphics-program.cpp ${TEST_HARNESS_DIR}/test-graphics-pipeline.cpp + ${TEST_HARNESS_DIR}/test-graphics-shader.cpp ${TEST_HARNESS_DIR}/test-graphics-reflection.cpp ${TEST_HARNESS_DIR}/test-platform-abstraction.cpp ${TEST_HARNESS_DIR}/test-render-controller.cpp diff --git a/automated-tests/src/dali-toolkit-internal/CMakeLists.txt b/automated-tests/src/dali-toolkit-internal/CMakeLists.txt index cd5e140..cc18fe6 100755 --- a/automated-tests/src/dali-toolkit-internal/CMakeLists.txt +++ b/automated-tests/src/dali-toolkit-internal/CMakeLists.txt @@ -84,9 +84,11 @@ SET(TEST_HARNESS_SOURCES ../dali-toolkit/dali-toolkit-test-utils/test-graphics-command-buffer.cpp ../dali-toolkit/dali-toolkit-test-utils/test-graphics-controller.cpp ../dali-toolkit/dali-toolkit-test-utils/test-graphics-texture.cpp + ../dali-toolkit/dali-toolkit-test-utils/test-graphics-program.cpp ../dali-toolkit/dali-toolkit-test-utils/test-graphics-pipeline.cpp ../dali-toolkit/dali-toolkit-test-utils/test-graphics-reflection.cpp ../dali-toolkit/dali-toolkit-test-utils/test-graphics-sampler.cpp + ../dali-toolkit/dali-toolkit-test-utils/test-graphics-shader.cpp ../dali-toolkit/dali-toolkit-test-utils/test-platform-abstraction.cpp ../dali-toolkit/dali-toolkit-test-utils/test-render-controller.cpp ../dali-toolkit/dali-toolkit-test-utils/test-trace-call-stack.cpp diff --git a/automated-tests/src/dali-toolkit-styling/CMakeLists.txt b/automated-tests/src/dali-toolkit-styling/CMakeLists.txt index ebbc8cb..cc1488e 100644 --- a/automated-tests/src/dali-toolkit-styling/CMakeLists.txt +++ b/automated-tests/src/dali-toolkit-styling/CMakeLists.txt @@ -51,8 +51,10 @@ SET(TEST_HARNESS_SOURCES ../dali-toolkit/dali-toolkit-test-utils/test-graphics-controller.cpp ../dali-toolkit/dali-toolkit-test-utils/test-graphics-texture.cpp ../dali-toolkit/dali-toolkit-test-utils/test-graphics-pipeline.cpp - ../dali-toolkit/dali-toolkit-test-utils/test-graphics-reflection.cpp + ../dali-toolkit/dali-toolkit-test-utils/test-graphics-program.cpp ../dali-toolkit/dali-toolkit-test-utils/test-graphics-sampler.cpp + ../dali-toolkit/dali-toolkit-test-utils/test-graphics-shader.cpp + ../dali-toolkit/dali-toolkit-test-utils/test-graphics-reflection.cpp ../dali-toolkit/dali-toolkit-test-utils/test-render-controller.cpp ../dali-toolkit/dali-toolkit-test-utils/test-trace-call-stack.cpp ../dali-toolkit/dali-toolkit-test-utils/test-native-image.cpp diff --git a/automated-tests/src/dali-toolkit-third-party/CMakeLists.txt b/automated-tests/src/dali-toolkit-third-party/CMakeLists.txt index e8fa652..820a4a5 100644 --- a/automated-tests/src/dali-toolkit-third-party/CMakeLists.txt +++ b/automated-tests/src/dali-toolkit-third-party/CMakeLists.txt @@ -38,6 +38,8 @@ SET(TEST_HARNESS_SOURCES ../dali-toolkit/dali-toolkit-test-utils/test-graphics-texture.cpp ../dali-toolkit/dali-toolkit-test-utils/test-graphics-sampler.cpp ../dali-toolkit/dali-toolkit-test-utils/test-graphics-pipeline.cpp + ../dali-toolkit/dali-toolkit-test-utils/test-graphics-program.cpp + ../dali-toolkit/dali-toolkit-test-utils/test-graphics-shader.cpp ../dali-toolkit/dali-toolkit-test-utils/test-graphics-reflection.cpp ../dali-toolkit/dali-toolkit-test-utils/test-platform-abstraction.cpp ../dali-toolkit/dali-toolkit-test-utils/test-render-controller.cpp diff --git a/automated-tests/src/dali-toolkit/CMakeLists.txt b/automated-tests/src/dali-toolkit/CMakeLists.txt index 6dddc1a..ee1ff65 100755 --- a/automated-tests/src/dali-toolkit/CMakeLists.txt +++ b/automated-tests/src/dali-toolkit/CMakeLists.txt @@ -115,8 +115,10 @@ SET(TEST_HARNESS_SOURCES dali-toolkit-test-utils/test-graphics-controller.cpp dali-toolkit-test-utils/test-graphics-texture.cpp dali-toolkit-test-utils/test-graphics-pipeline.cpp + dali-toolkit-test-utils/test-graphics-program.cpp dali-toolkit-test-utils/test-graphics-reflection.cpp dali-toolkit-test-utils/test-graphics-sampler.cpp + dali-toolkit-test-utils/test-graphics-shader.cpp dali-toolkit-test-utils/test-platform-abstraction.cpp dali-toolkit-test-utils/test-render-controller.cpp dali-toolkit-test-utils/test-trace-call-stack.cpp diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-controller.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-controller.cpp index 41d13c9..220e5e5 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-controller.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-controller.cpp @@ -20,6 +20,8 @@ #include "test-graphics-command-buffer.h" #include "test-graphics-reflection.h" #include "test-graphics-sampler.h" +#include "test-graphics-shader.h" +#include "test-graphics-program.h" #include "test-graphics-texture.h" #include @@ -444,7 +446,9 @@ void TestGraphicsController::SubmitCommandBuffers(const Graphics::SubmitInfo& su namedParams["submitInfo"] << "cmdBuffer[" << submitInfo.cmdBuffer.size() << "], flags:" << std::hex << submitInfo.flags; - mCallStack.PushCall("Controller::SubmitCommandBuffers", "", namedParams); + mCallStack.PushCall("SubmitCommandBuffers", "", namedParams); + + mSubmitStack.emplace_back(submitInfo); for(auto& graphicsCommandBuffer : submitInfo.cmdBuffer) { @@ -576,7 +580,7 @@ void TestGraphicsController::PresentRenderTarget(Graphics::RenderTarget* renderT { TraceCallStack::NamedParams namedParams; namedParams["renderTarget"] << std::hex << renderTarget; - mCallStack.PushCall("Controller::PresentRenderTarget", "", namedParams); + mCallStack.PushCall("PresentRenderTarget", "", namedParams); } /** @@ -584,7 +588,7 @@ void TestGraphicsController::PresentRenderTarget(Graphics::RenderTarget* renderT */ void TestGraphicsController::WaitIdle() { - mCallStack.PushCall("Controller::WaitIdle", ""); + mCallStack.PushCall("WaitIdle", ""); } /** @@ -592,7 +596,7 @@ void TestGraphicsController::WaitIdle() */ void TestGraphicsController::Pause() { - mCallStack.PushCall("Controller::Pause", ""); + mCallStack.PushCall("Pause", ""); } /** @@ -600,7 +604,7 @@ void TestGraphicsController::Pause() */ void TestGraphicsController::Resume() { - mCallStack.PushCall("Controller::Resume", ""); + mCallStack.PushCall("Resume", ""); } void TestGraphicsController::UpdateTextures(const std::vector& updateInfoList, @@ -610,7 +614,7 @@ void TestGraphicsController::UpdateTextures(const std::vector TestGraphicsController::CreateBuffer(const { std::ostringstream oss; oss << "bufferCreateInfo:" << createInfo; - mCallStack.PushCall("Controller::CreateBuffer", oss.str()); + mCallStack.PushCall("CreateBuffer", oss.str()); return Graphics::MakeUnique(mCallStack, mGl, createInfo.size, createInfo.usage); } @@ -674,13 +678,13 @@ Graphics::UniquePtr TestGraphicsController::CreateComma { std::ostringstream oss; oss << "commandBufferCreateInfo:" << commandBufferCreateInfo; - mCallStack.PushCall("Controller::CreateCommandBuffer", oss.str()); + mCallStack.PushCall("CreateCommandBuffer", oss.str()); return Graphics::MakeUnique(mCommandBufferCallStack, mGl); } Graphics::UniquePtr TestGraphicsController::CreateRenderPass(const Graphics::RenderPassCreateInfo& renderPassCreateInfo, Graphics::UniquePtr&& oldRenderPass) { - mCallStack.PushCall("Controller::CreateRenderPass", ""); + mCallStack.PushCall("CreateRenderPass", ""); return nullptr; } @@ -688,47 +692,53 @@ Graphics::UniquePtr TestGraphicsController::CreateTexture(con { TraceCallStack::NamedParams namedParams; namedParams["textureCreateInfo"] << textureCreateInfo; - mCallStack.PushCall("Controller::CreateTexture", namedParams.str(), namedParams); + mCallStack.PushCall("CreateTexture", namedParams.str(), namedParams); return Graphics::MakeUnique(mGl, textureCreateInfo); } Graphics::UniquePtr TestGraphicsController::CreateFramebuffer(const Graphics::FramebufferCreateInfo& framebufferCreateInfo, Graphics::UniquePtr&& oldFramebuffer) { - mCallStack.PushCall("Controller::CreateFramebuffer", ""); + mCallStack.PushCall("CreateFramebuffer", ""); return nullptr; } Graphics::UniquePtr TestGraphicsController::CreatePipeline(const Graphics::PipelineCreateInfo& pipelineCreateInfo, Graphics::UniquePtr&& oldPipeline) { - mCallStack.PushCall("Controller::CreatePipeline", ""); + mCallStack.PushCall("CreatePipeline", ""); return std::make_unique(mGl, pipelineCreateInfo); } +Graphics::UniquePtr TestGraphicsController::CreateProgram(const Graphics::ProgramCreateInfo& programCreateInfo, Graphics::UniquePtr&& oldProgram) +{ + mCallStack.PushCall("CreateProgram", ""); + return Graphics::MakeUnique(mGl, programCreateInfo, mVertexFormats); +} + Graphics::UniquePtr TestGraphicsController::CreateShader(const Graphics::ShaderCreateInfo& shaderCreateInfo, Graphics::UniquePtr&& oldShader) { - mCallStack.PushCall("Controller::CreateShader", ""); - return nullptr; + mCallStack.PushCall("CreateShader", ""); + return Graphics::MakeUnique(mGl, shaderCreateInfo); } Graphics::UniquePtr TestGraphicsController::CreateSampler(const Graphics::SamplerCreateInfo& samplerCreateInfo, Graphics::UniquePtr&& oldSampler) { TraceCallStack::NamedParams namedParams; namedParams["samplerCreateInfo"] << samplerCreateInfo; - mCallStack.PushCall("Controller::CreateSampler", namedParams.str(), namedParams); + mCallStack.PushCall("CreateSampler", namedParams.str(), namedParams); return Graphics::MakeUnique(mGl, samplerCreateInfo); } Graphics::UniquePtr TestGraphicsController::CreateRenderTarget(const Graphics::RenderTargetCreateInfo& renderTargetCreateInfo, Graphics::UniquePtr&& oldRenderTarget) { - mCallStack.PushCall("Controller::CreateRenderTarget", ""); + mCallStack.PushCall("CreateRenderTarget", ""); return nullptr; } Graphics::UniquePtr TestGraphicsController::MapBufferRange(const Graphics::MapBufferInfo& mapInfo) { - mCallStack.PushCall("Controller::MapBufferRange", ""); + mCallStack.PushCall("MapBufferRange", ""); auto buffer = static_cast(mapInfo.buffer); buffer->memory.resize(mapInfo.offset + mapInfo.size); // For initial testing, allow writes past capacity @@ -738,46 +748,51 @@ Graphics::UniquePtr TestGraphicsController::MapBufferRange(con Graphics::UniquePtr TestGraphicsController::MapTextureRange(const Graphics::MapTextureInfo& mapInfo) { - mCallStack.PushCall("Controller::MapTextureRange", ""); + mCallStack.PushCall("MapTextureRange", ""); return nullptr; } void TestGraphicsController::UnmapMemory(Graphics::UniquePtr memory) { - mCallStack.PushCall("Controller::UnmapMemory", ""); + mCallStack.PushCall("UnmapMemory", ""); } Graphics::MemoryRequirements TestGraphicsController::GetTextureMemoryRequirements(Graphics::Texture& texture) const { - mCallStack.PushCall("Controller::GetTextureMemoryRequirements", ""); + mCallStack.PushCall("GetTextureMemoryRequirements", ""); return Graphics::MemoryRequirements{}; } Graphics::MemoryRequirements TestGraphicsController::GetBufferMemoryRequirements(Graphics::Buffer& buffer) const { - mCallStack.PushCall("Controller::GetBufferMemoryRequirements", ""); + mCallStack.PushCall("GetBufferMemoryRequirements", ""); return Graphics::MemoryRequirements{}; } const Graphics::TextureProperties& TestGraphicsController::GetTextureProperties(const Graphics::Texture& texture) { static Graphics::TextureProperties textureProperties{}; - mCallStack.PushCall("Controller::GetTextureProperties", ""); + mCallStack.PushCall("GetTextureProperties", ""); return textureProperties; } -const Graphics::Reflection& TestGraphicsController::GetPipelineReflection(const Graphics::Pipeline& pipeline) +const Graphics::Reflection& TestGraphicsController::GetProgramReflection(const Graphics::Program& program) { - static TestGraphicsReflection reflection(mGl); - mCallStack.PushCall("Controller::GetPipelineReflection", ""); + mCallStack.PushCall("GetProgramReflection", ""); - return reflection; + return static_cast(&program)->GetReflection(); } bool TestGraphicsController::PipelineEquals(const Graphics::Pipeline& pipeline0, const Graphics::Pipeline& pipeline1) const { - mCallStack.PushCall("Controller::PipelineEquals", ""); + mCallStack.PushCall("PipelineEquals", ""); + return false; +} + +bool TestGraphicsController::GetProgramParameter(Graphics::Program& program, uint32_t parameterId, void* outData ) +{ + mCallStack.PushCall("GetProgramParameter", ""); return false; } diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-controller.h b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-controller.h index bf2ba21..9179a39 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-controller.h +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-controller.h @@ -176,6 +176,14 @@ public: Graphics::UniquePtr CreatePipeline(const Graphics::PipelineCreateInfo& pipelineCreateInfo, Graphics::UniquePtr&& oldPipeline) override; /** + * @brief Creates new Program object + * + * @param[in] programCreateInfo The valid ProgramCreateInfo structure + * @return pointer to the Program object + */ + Graphics::UniquePtr CreateProgram(const Graphics::ProgramCreateInfo& programCreateInfo, Graphics::UniquePtr&& oldProgram) override; + + /** * @brief Creates new Shader object * * @param[in] shaderCreateInfo The valid ShaderCreateInfo structure @@ -268,12 +276,12 @@ public: const Graphics::TextureProperties& GetTextureProperties(const Graphics::Texture& texture) override; /** - * @brief Returns the reflection of the given pipeline + * @brief Returns the reflection of the given program * - * @param[in] pipeline The pipeline - * @return The reflection of the pipeline + * @param[in] program The program + * @return The reflection of the program */ - const Graphics::Reflection& GetPipelineReflection(const Graphics::Pipeline& pipeline) override; + const Graphics::Reflection& GetProgramReflection(const Graphics::Program& program) override; /** * @brief Tests whether two Pipelines are the same. @@ -284,9 +292,33 @@ public: */ bool PipelineEquals(const Graphics::Pipeline& pipeline0, const Graphics::Pipeline& pipeline1) const override; +public: // Test Functions + void SetVertexFormats(Property::Array& vfs) + { + mVertexFormats = vfs; + } + + void ClearSubmitStack() + { + mSubmitStack.clear(); + } + + /** + * @brief Retrieves program parameters + * + * This function can be used to retrieve data from internal implementation + * + * @param[in] program Valid program object + * @param[in] parameterId Integer parameter id + * @param[out] outData Pointer to output memory + * @return True on success + */ + bool GetProgramParameter(Graphics::Program& program, uint32_t parameterId, void* outData ) override; + public: - mutable TraceCallStack mCallStack; - mutable TraceCallStack mCommandBufferCallStack; + mutable TraceCallStack mCallStack; + mutable TraceCallStack mCommandBufferCallStack; + mutable std::vector mSubmitStack; TestGlAbstraction mGl; TestGlSyncAbstraction mGlSyncAbstraction; @@ -294,6 +326,8 @@ public: bool isDiscardQueueEmptyResult{true}; bool isDrawOnResumeRequiredResult{true}; + + Property::Array mVertexFormats; }; } // namespace Dali diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-pipeline.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-pipeline.cpp index 0cc4194..d303d56 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-pipeline.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-pipeline.cpp @@ -26,8 +26,8 @@ TestGraphicsPipeline::TestGraphicsPipeline(TestGlAbstraction& gl, const Graphics if(createInfo.colorBlendState) colorBlendState = *createInfo.colorBlendState; - if(createInfo.shaderState) - shaderState = *createInfo.shaderState; + if(createInfo.programState) + programState = *createInfo.programState; if(createInfo.viewportState) viewportState = *createInfo.viewportState; diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-pipeline.h b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-pipeline.h index 666e0d4..a748e71 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-pipeline.h +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-pipeline.h @@ -20,18 +20,34 @@ #include #include #include "test-gl-abstraction.h" +#include "test-graphics-program.h" +#include "test-graphics-reflection.h" namespace Dali { +class TestGraphicsReflection; + +template +T* Uncast(const Graphics::Program* object) +{ + return const_cast(static_cast(object)); +} + class TestGraphicsPipeline : public Graphics::Pipeline { public: TestGraphicsPipeline(TestGlAbstraction& gl, const Graphics::PipelineCreateInfo& createInfo); + const TestGraphicsReflection& GetReflection() const + { + return Uncast(programState.program)->GetReflection(); + } + +public: TestGlAbstraction& mGl; Graphics::ColorBlendState colorBlendState; - std::vector shaderState; + Graphics::ProgramState programState; Graphics::ViewportState viewportState; Graphics::FramebufferState framebufferState; Graphics::Pipeline basePipeline; diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-program.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-program.cpp new file mode 100644 index 0000000..db5a9f7 --- /dev/null +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-program.cpp @@ -0,0 +1,28 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "test-graphics-program.h" + +namespace Dali +{ +TestGraphicsProgram::TestGraphicsProgram(TestGlAbstraction& gl, const Graphics::ProgramCreateInfo& createInfo, Property::Array& vertexFormats) +: mGl(gl), + mCreateInfo(createInfo), + mReflection(gl, vertexFormats) +{ +} + +} // namespace Dali diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-program.h b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-program.h new file mode 100644 index 0000000..2bd04de --- /dev/null +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-program.h @@ -0,0 +1,53 @@ +#ifndef DALI_TEST_GRAPHICS_PROGRAM_H +#define DALI_TEST_GRAPHICS_PROGRAM_H + +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "test-gl-abstraction.h" +#include "test-graphics-reflection.h" + +namespace Dali +{ +class TestGraphicsProgram : public Graphics::Program +{ +public: + TestGraphicsProgram(TestGlAbstraction& gl, const Graphics::ProgramCreateInfo& createInfo, Property::Array& vertexFormats); + + // For API + const TestGraphicsReflection& GetReflection() const + { + // Build a reflection + return mReflection; + } + + // For tests + TestGraphicsReflection& GetProgamReflection() + { + return mReflection; + } + +public: + TestGlAbstraction& mGl; + Graphics::ProgramCreateInfo mCreateInfo; + TestGraphicsReflection mReflection; +}; + +} // namespace Dali + +#endif //DALI_TEST_GRAPHICS_PROGRAM_H 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 9bce79a2..c9ef2d0 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 @@ -15,16 +15,44 @@ */ #include "test-graphics-reflection.h" +#include namespace Dali { -TestGraphicsReflection::TestGraphicsReflection(TestGlAbstraction& gl) +TestGraphicsReflection::TestGraphicsReflection(TestGlAbstraction& gl, Property::Array& vfs) : mGl(gl) { + for(Property::Array::SizeType i = 0; i < vfs.Count(); ++i) + { + Property::Map* vertexFormat = vfs[i].GetMap(); + if(vertexFormat) + { + for(Property::Map::SizeType j = 0; j < vertexFormat->Count(); ++j) + { + auto key = vertexFormat->GetKeyAt(j); + if(key.type == Property::Key::STRING) + { + mAttributes.push_back(key.stringKey); + } + } + } + } } uint32_t TestGraphicsReflection::GetVertexAttributeLocation(const std::string& name) const { + // Automatically assign locations to named attributes when requested + auto iter = std::find(mAttributes.begin(), mAttributes.end(), name); + if(iter != mAttributes.end()) + { + return iter - mAttributes.begin(); + } + else + { + uint32_t location = mAttributes.size(); + mAttributes.push_back(name); + return location; + } return 0u; } @@ -40,7 +68,12 @@ std::string TestGraphicsReflection::GetVertexAttributeName(uint32_t location) co std::vector TestGraphicsReflection::GetVertexAttributeLocations() const { - return std::vector{}; + std::vector locs; + for(uint32_t i = 0; i < mAttributes.size(); ++i) + { + locs.push_back(i); + } + return locs; } uint32_t TestGraphicsReflection::GetUniformBlockCount() const diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-reflection.h b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-reflection.h index 1c9f62b..9311e07 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-reflection.h +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-reflection.h @@ -25,7 +25,7 @@ namespace Dali class TestGraphicsReflection : public Graphics::Reflection { public: - TestGraphicsReflection(TestGlAbstraction& gl); + TestGraphicsReflection(TestGlAbstraction& gl, Property::Array& vertexFormats); uint32_t GetVertexAttributeLocation(const std::string& name) const override; Dali::Graphics::VertexInputAttributeFormat GetVertexAttributeFormat(uint32_t location) const override; @@ -44,7 +44,19 @@ public: std::vector GetSamplers() const override; Graphics::ShaderLanguage GetLanguage() const override; - TestGlAbstraction& mGl; +public: // Test methods + void SetAttributes(std::vector locations) + { + mAttributes.clear(); + mAttributes.resize(locations.size()); + for(auto& location : locations) + { + mAttributes.push_back(location); + } + } + + TestGlAbstraction& mGl; + mutable std::vector mAttributes; }; } // namespace Dali diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-shader.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-shader.cpp new file mode 100644 index 0000000..db2d1a2 --- /dev/null +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-shader.cpp @@ -0,0 +1,27 @@ +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "test-graphics-shader.h" + +namespace Dali +{ +TestGraphicsShader::TestGraphicsShader(TestGlAbstraction& gl, const Graphics::ShaderCreateInfo& createInfo) +: mGl(gl), + mCreateInfo(createInfo) +{ +} + +} // namespace Dali diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-shader.h b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-shader.h new file mode 100644 index 0000000..ad6f9c5 --- /dev/null +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-graphics-shader.h @@ -0,0 +1,38 @@ +#ifndef DALI_TEST_GRAPHICS_SHADER_H +#define DALI_TEST_GRAPHICS_SHADER_H + +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "test-gl-abstraction.h" + +namespace Dali +{ +class TestGraphicsShader : public Graphics::Shader +{ +public: + TestGraphicsShader(TestGlAbstraction& gl, const Graphics::ShaderCreateInfo& createInfo); + +public: + TestGlAbstraction& mGl; + Graphics::ShaderCreateInfo mCreateInfo; +}; + +} // namespace Dali + +#endif //DALI_TEST_GRAPHICS_SHADER_H -- 2.7.4