IVGCVSW-6510 Serialization + Deserialization implementation

Subtask of story: IVGCVSW-6164 Add a Pooling3d FrontEnd and Ref Implementation

* Add serialization support
* Add deserialization support
* Add corresponding unit tests

Change-Id: I7cce5421f0a9b7c47a03524e733f3315131ba125
Signed-off-by: Tamas Nyiri <tamas.nyiri@arm.com>
diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index a9f7b7d..4249e08 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -1079,6 +1079,39 @@
     CreateAnyLayer(fbPooling2dLayer.o, serializer::Layer::Layer_Pooling2dLayer);
 }
 
+void SerializerStrategy::SerializePooling3dLayer(const armnn::IConnectableLayer* layer,
+                                            const armnn::Pooling3dDescriptor& pooling3dDescriptor,
+                                            const char* name)
+{
+    IgnoreUnused(name);
+
+    auto fbPooling3dBaseLayer  = CreateLayerBase(layer, serializer::LayerType::LayerType_Pooling3d);
+    auto fbPooling3dDescriptor = serializer::CreatePooling3dDescriptor(
+        m_flatBufferBuilder,
+        GetFlatBufferPoolingAlgorithm(pooling3dDescriptor.m_PoolType),
+        pooling3dDescriptor.m_PadLeft,
+        pooling3dDescriptor.m_PadRight,
+        pooling3dDescriptor.m_PadTop,
+        pooling3dDescriptor.m_PadBottom,
+        pooling3dDescriptor.m_PadFront,
+        pooling3dDescriptor.m_PadBack,
+        pooling3dDescriptor.m_PoolWidth,
+        pooling3dDescriptor.m_PoolHeight,
+        pooling3dDescriptor.m_PoolDepth,
+        pooling3dDescriptor.m_StrideX,
+        pooling3dDescriptor.m_StrideY,
+        pooling3dDescriptor.m_StrideZ,
+        GetFlatBufferOutputShapeRounding(pooling3dDescriptor.m_OutputShapeRounding),
+        GetFlatBufferPaddingMethod(pooling3dDescriptor.m_PaddingMethod),
+        GetFlatBufferDataLayout(pooling3dDescriptor.m_DataLayout));
+
+    auto fbPooling3dLayer = serializer::CreatePooling3dLayer(m_flatBufferBuilder,
+                                                             fbPooling3dBaseLayer,
+                                                             fbPooling3dDescriptor);
+
+    CreateAnyLayer(fbPooling3dLayer.o, serializer::Layer::Layer_Pooling3dLayer);
+}
+
 void SerializerStrategy::SerializePreluLayer(const armnn::IConnectableLayer* layer,
                                         const char* name)
 {
@@ -2208,6 +2241,13 @@
             SerializePooling2dLayer(layer, layerDescriptor, name);
             break;
         }
+        case armnn::LayerType::Pooling3d :
+        {
+            const armnn::Pooling3dDescriptor& layerDescriptor =
+                    static_cast<const armnn::Pooling3dDescriptor&>(descriptor);
+            SerializePooling3dLayer(layer, layerDescriptor, name);
+            break;
+        }
         case armnn::LayerType::Prelu :
         {
             SerializePreluLayer(layer, name);