IVGCVSW-3705 Add Channel Shuffle Front end and Ref Implementation

* Add front end
* Add reference workload
* Add unit tests
* Add Serializer and Deserializer
* Update ArmNN Versioning

Signed-off-by: Simon Obute <simon.obute@arm.com>
Change-Id: I9ac1f953af3974382eac8e8d62d794d2344e8f47
diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index 195b416..9a3a270 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -302,6 +302,19 @@
     CreateAnyLayer(fbCastLayer.o, serializer::Layer::Layer_CastLayer);
 }
 
+void SerializerStrategy::SerializeChannelShuffleLayer(const armnn::IConnectableLayer* layer,
+                                                      const armnn::ChannelShuffleDescriptor& descriptor,
+                                                      const char* name)
+{
+    IgnoreUnused(name);
+    auto fbDescriptor = CreateChannelShuffleDescriptor(m_flatBufferBuilder,
+                                                       descriptor.m_Axis,
+                                                       descriptor.m_NumGroups);
+    auto fbBaseLayer  = CreateLayerBase(layer, serializer::LayerType::LayerType_ChannelShuffle);
+    auto fbChannelShuffleLayer = serializer::CreateChannelShuffleLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
+    CreateAnyLayer(fbChannelShuffleLayer.o, serializer::Layer::Layer_ChannelShuffleLayer);
+}
+
 void SerializerStrategy::SerializeComparisonLayer(const armnn::IConnectableLayer* layer,
                                              const armnn::ComparisonDescriptor& descriptor,
                                              const char* name)
@@ -1997,6 +2010,15 @@
             SerializeCastLayer(layer, name);
             break;
         }
+        case armnn::LayerType::ChannelShuffle :
+        {
+            const armnn::ChannelShuffleDescriptor& layerDescriptor =
+                                                     static_cast<const armnn::ChannelShuffleDescriptor&>(descriptor);
+            SerializeChannelShuffleLayer(layer,
+                                         layerDescriptor,
+                                         name);
+            break;
+        }
         case armnn::LayerType::Comparison :
         {
             const armnn::ComparisonDescriptor& layerDescriptor =