IVGCVSW-5818 Enable import on GPU

Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: I4e4eb107aa2bfa09625840d738001f33152e6792
diff --git a/include/armnn/IRuntime.hpp b/include/armnn/IRuntime.hpp
index f296a5f..870e027 100644
--- a/include/armnn/IRuntime.hpp
+++ b/include/armnn/IRuntime.hpp
@@ -38,9 +38,9 @@
         , m_ExportEnabled(exportEnabled)
         , m_AsyncEnabled(asyncEnabled)
         , m_NumThreads(numThreads)
-        , m_InputSource(MemorySource::Undefined)
-        , m_OutputSource(MemorySource::Undefined)
-        {}
+        , m_InputSource(m_ImportEnabled ? MemorySource::Malloc : MemorySource::Undefined)
+        , m_OutputSource(m_ExportEnabled ? MemorySource::Malloc : MemorySource::Undefined)
+    {}
 
     INetworkProperties(bool asyncEnabled,
                        MemorySource m_InputSource,
diff --git a/include/armnn/backends/IBackendInternal.hpp b/include/armnn/backends/IBackendInternal.hpp
index 8035cff..135d279 100644
--- a/include/armnn/backends/IBackendInternal.hpp
+++ b/include/armnn/backends/IBackendInternal.hpp
@@ -126,6 +126,12 @@
         class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
         const ModelOptions& modelOptions) const;
 
+    virtual IWorkloadFactoryPtr CreateWorkloadFactory(
+        class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
+        const ModelOptions& modelOptions,
+        MemorySourceFlags inputFlags,
+        MemorySourceFlags outputFlags) const;
+
     /// Create the runtime context of the backend
     ///
     /// Implementations may return a default-constructed IBackendContextPtr if
@@ -162,6 +168,13 @@
     /// IWorkloadFactory::CreateTensor()/IWorkloadFactory::CreateSubtensor() methods must be implemented.
     virtual void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& /*registry*/) {}
 
+    /// (Optional) Register TensorHandleFactories
+    /// Either this method or CreateMemoryManager() and
+    /// IWorkloadFactory::CreateTensor()/IWorkloadFactory::CreateSubtensor() methods must be implemented.
+    virtual void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry,
+                                               MemorySourceFlags inputFlags,
+                                               MemorySourceFlags outputFlags);
+
     /// Returns the version of the Backend API
     static constexpr BackendVersion GetApiVersion() { return BackendVersion(1, 0); }
 
diff --git a/include/armnn/backends/ITensorHandleFactory.hpp b/include/armnn/backends/ITensorHandleFactory.hpp
index ae2f44e..501d97b 100644
--- a/include/armnn/backends/ITensorHandleFactory.hpp
+++ b/include/armnn/backends/ITensorHandleFactory.hpp
@@ -20,6 +20,7 @@
 enum class CapabilityClass
 {
     PaddingRequired = 1,
+    FallbackImportDisabled = 2,
 
     // add new enum values here
 
@@ -80,7 +81,7 @@
 
     virtual bool SupportsSubTensors() const = 0;
 
-    virtual bool SupportsMapUnmap() const final { return true; }
+    virtual bool SupportsMapUnmap() const { return true; }
 
     virtual MemorySourceFlags GetExportFlags() const { return 0; }
     virtual MemorySourceFlags GetImportFlags() const { return 0; }