IVGCVSW-7104: BatchMatMul Serializer/Deserializer Support

  * Updated FlatBuffers schema for BatchMatMul layer type
  * Added Serializer and Deserializer implementations for BatchMatMul
  * Added unit tests for BatchMatMul serialization and deserialization
  * Updated CMakeLists and docs

Signed-off-by: Samuel Yap <samuel.yap@arm.com>
Change-Id: Iad63afbd036a3eb648683eb7416a475561aa20cb
diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index 488dac6..c9a3022 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -218,6 +218,33 @@
     CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ArgMinMaxLayer);
 }
 
+void SerializerStrategy::SerializeBatchMatMulLayer(const armnn::IConnectableLayer* layer,
+                                                   const armnn::BatchMatMulDescriptor& descriptor,
+                                                   const char* name)
+{
+    IgnoreUnused(name);
+
+    // Create FlatBuffer BaseLayer
+    auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_BatchMatMul);
+
+    // Create the FlatBuffer BatchMatMulDescriptor
+    auto flatBufferDescriptor = CreateBatchMatMulDescriptor(m_flatBufferBuilder,
+                                                            descriptor.m_TransposeX,
+                                                            descriptor.m_TransposeY,
+                                                            descriptor.m_AdjointX,
+                                                            descriptor.m_AdjointY,
+                                                            GetFlatBufferDataLayout(descriptor.m_DataLayoutX),
+                                                            GetFlatBufferDataLayout(descriptor.m_DataLayoutY));
+
+    // Create the FlatBuffer BatchMatMulLayer
+    auto flatBufferBatchMatMulLayer = CreateBatchMatMulLayer(m_flatBufferBuilder,
+                                                             flatBufferBaseLayer,
+                                                             flatBufferDescriptor);
+
+    // Add the AnyLayer to the FlatBufferLayers
+    CreateAnyLayer(flatBufferBatchMatMulLayer.o, serializer::Layer::Layer_BatchMatMulLayer);
+}
+
 // Build FlatBuffer for BatchToSpaceNd Layer
 void SerializerStrategy::SerializeBatchToSpaceNdLayer(const armnn::IConnectableLayer* layer,
                                                       const armnn::BatchToSpaceNdDescriptor& descriptor,
@@ -1971,6 +1998,15 @@
             SerializeArgMinMaxLayer(layer, layerDescriptor, name);
             break;
         }
+        case armnn::LayerType::BatchMatMul:
+        {
+            const armnn::BatchMatMulDescriptor& layerDescriptor =
+                    static_cast<const armnn::BatchMatMulDescriptor&>(descriptor);
+            SerializeBatchMatMulLayer(layer,
+                                      layerDescriptor,
+                                      name);
+            break;
+        }
         case armnn::LayerType::BatchNormalization :
         {
             const armnn::BatchNormalizationDescriptor& layerDescriptor =