IVGCVSW-2709 Serialize / de-serialize the Splitter layer

* fixed typo in Ref Merger Workload comment
* fixed typo in ViewsDescriptor comment
* made the origins descriptor accessable in the ViewsDescriptor
  (needed for serialization)
* based the unit test on the use of the splitter in the CaffeParser

Change-Id: I3e716839adb4eee5a695633377b49e7e18ec2aa9
Signed-off-by: Ferran Balaguer <ferran.balaguer@arm.com>
Signed-off-by: Francis Murtagh <francis.murtagh@arm.com>
Signed-off-by: Jim Flynn <jim.flynn@arm.com>
diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index eaf19d5..3774c25 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -634,6 +634,71 @@
     CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_SpaceToBatchNdLayer);
 }
 
+// Build FlatBuffer for Splitter Layer
+void SerializerVisitor::VisitSplitterLayer(const armnn::IConnectableLayer* layer,
+                                           const armnn::ViewsDescriptor& viewsDescriptor,
+                                           const char* name)
+{
+    // Create FlatBuffer ViewOrigins
+    std::vector<flatbuffers::Offset<UintVector>> flatBufferViewOrigins;
+    flatBufferViewOrigins.reserve(viewsDescriptor.GetNumViews());
+
+    for(unsigned int vIdx = 0; vIdx < viewsDescriptor.GetNumViews(); ++vIdx)
+    {
+        std::vector<uint32_t> viewOrigin;
+        viewOrigin.reserve(viewsDescriptor.GetNumDimensions());
+
+        // Copy vector
+        for(unsigned int dIdx = 0; dIdx < viewsDescriptor.GetNumDimensions(); ++dIdx)
+        {
+            viewOrigin.push_back(viewsDescriptor.GetViewOrigin(vIdx)[dIdx]);
+        }
+
+        flatBufferViewOrigins.push_back(CreateUintVector(m_flatBufferBuilder,
+                                                         m_flatBufferBuilder.CreateVector(viewOrigin)));
+    }
+
+    // Create FlatBuffer OriginsDescriptor
+    auto flatBufferOriginDescriptor = CreateOriginsDescriptor(m_flatBufferBuilder,
+                                                              viewsDescriptor.GetOrigins().GetConcatAxis(),
+                                                              viewsDescriptor.GetOrigins().GetNumViews(),
+                                                              viewsDescriptor.GetOrigins().GetNumDimensions(),
+                                                              m_flatBufferBuilder.CreateVector(flatBufferViewOrigins));
+
+    // Create FlatBuffer ViewOrigins
+    std::vector<flatbuffers::Offset<UintVector>> flatBufferViewSizes;
+    flatBufferViewSizes.reserve(viewsDescriptor.GetNumViews());
+
+    for(unsigned int vIdx = 0; vIdx < viewsDescriptor.GetNumViews(); ++vIdx)
+    {
+        std::vector<uint32_t> viewSize;
+        viewSize.reserve(viewsDescriptor.GetNumDimensions());
+
+        // Copy vector
+        for(unsigned int dIdx = 0; dIdx < viewsDescriptor.GetNumDimensions(); ++dIdx)
+        {
+            viewSize.push_back(viewsDescriptor.GetViewSizes(vIdx)[dIdx]);
+        }
+
+        flatBufferViewSizes.push_back(CreateUintVector(m_flatBufferBuilder,
+                                                       m_flatBufferBuilder.CreateVector(viewSize)));
+    }
+
+    // Create FlatBuffer ViewsDescriptor
+    auto flatBufferViewsDescriptor = CreateViewsDescriptor(m_flatBufferBuilder,
+                                                           flatBufferOriginDescriptor,
+                                                           m_flatBufferBuilder.CreateVector(flatBufferViewSizes));
+
+    // Create FlatBuffer BaseLayer
+    auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Splitter);
+
+    auto flatBufferSplitterLayer = serializer::CreateSplitterLayer(m_flatBufferBuilder,
+                                                                   flatBufferBaseLayer,
+                                                                   flatBufferViewsDescriptor);
+
+    CreateAnyLayer(flatBufferSplitterLayer.o, serializer::Layer::Layer_SplitterLayer);
+}
+
 void SerializerVisitor::VisitNormalizationLayer(const armnn::IConnectableLayer* layer,
                                                 const armnn::NormalizationDescriptor& descriptor,
                                                 const char* name)