Explicitly add "_2D" to applicable ops, and add fused activation
function enum.
- Add the fused activation enum to explicitly set the expectation that
only the included ones are supported for fused ops.
- Add "_2D" to CONV, DEPTHWISE_CONV, AVG_POOL, MAX_POOL, and L2_POOL,
since they are only supposed to do 2D computation.
- Updated the tests and the stack to plumbing the changes through.
Bug: 63905942
Test: mm
Test: NeuralNetworksTests pass for both CPU path and sample hidl driver.
Change-Id: I60aeabab1d193d26d938c0d1d3ffdd519740d222
diff --git a/runtime/NeuralNetworks.cpp b/runtime/NeuralNetworks.cpp
index 2257dee..eceacfe 100644
--- a/runtime/NeuralNetworks.cpp
+++ b/runtime/NeuralNetworks.cpp
@@ -51,48 +51,51 @@
// IMPORTANT: When adding new values, update kNumberOfOperationTypes in Utils.h.
static_assert(ANEURALNETWORKS_OEM_OPERATION == 0, "ANEURALNETWORKS_OEM_OPERATION may have changed");
static_assert(ANEURALNETWORKS_ADD == 1, "ANEURALNETWORKS_ADD may have changed");
-static_assert(ANEURALNETWORKS_AVERAGE_POOL == 2, "ANEURALNETWORKS_AVERAGE_POOL may have changed");
-static_assert(ANEURALNETWORKS_CAST == 3, "ANEURALNETWORKS_CAST may have changed");
-static_assert(ANEURALNETWORKS_CONCATENATION == 4, "ANEURALNETWORKS_CONCATENATION may have changed");
-static_assert(ANEURALNETWORKS_CONV == 5, "ANEURALNETWORKS_CONV may have changed");
-static_assert(ANEURALNETWORKS_DEPTHWISE_CONV == 6,
- "ANEURALNETWORKS_DEPTHWISE_CONV may have changed");
-static_assert(ANEURALNETWORKS_DEPTH_TO_SPACE == 7,
+static_assert(ANEURALNETWORKS_AVERAGE_POOL_2D == 2,
+ "ANEURALNETWORKS_AVERAGE_POOL_2D may have changed");
+static_assert(ANEURALNETWORKS_CONCATENATION == 3, "ANEURALNETWORKS_CONCATENATION may have changed");
+static_assert(ANEURALNETWORKS_CONV_2D == 4, "ANEURALNETWORKS_CONV_2D may have changed");
+static_assert(ANEURALNETWORKS_DEPTHWISE_CONV_2D == 5,
+ "ANEURALNETWORKS_DEPTHWISE_CONV_2D may have changed");
+static_assert(ANEURALNETWORKS_DEPTH_TO_SPACE == 6,
"ANEURALNETWORKS_DEPTH_TO_SPACE may have changed");
-static_assert(ANEURALNETWORKS_DEQUANTIZE == 8, "ANEURALNETWORKS_DEQUANTIZE may have changed");
-static_assert(ANEURALNETWORKS_EMBEDDING_LOOKUP == 9,
+static_assert(ANEURALNETWORKS_DEQUANTIZE == 7, "ANEURALNETWORKS_DEQUANTIZE may have changed");
+static_assert(ANEURALNETWORKS_EMBEDDING_LOOKUP == 8,
"ANEURALNETWORKS_EMBEDDING_LOOKUP may have changed");
-static_assert(ANEURALNETWORKS_FAKE_QUANT == 10, "ANEURALNETWORKS_FAKE_QUANT may have changed");
-static_assert(ANEURALNETWORKS_FLOOR == 11, "ANEURALNETWORKS_FLOOR may have changed");
-static_assert(ANEURALNETWORKS_FULLY_CONNECTED == 12,
+static_assert(ANEURALNETWORKS_FAKE_QUANT == 9, "ANEURALNETWORKS_FAKE_QUANT may have changed");
+static_assert(ANEURALNETWORKS_FLOOR == 10, "ANEURALNETWORKS_FLOOR may have changed");
+static_assert(ANEURALNETWORKS_FULLY_CONNECTED == 11,
"ANEURALNETWORKS_FULLY_CONNECTED may have changed");
-static_assert(ANEURALNETWORKS_GATHER == 13, "ANEURALNETWORKS_GATHER may have changed");
-static_assert(ANEURALNETWORKS_HASHTABLE_LOOKUP == 14,
+static_assert(ANEURALNETWORKS_HASHTABLE_LOOKUP == 12,
"ANEURALNETWORKS_HASHTABLE_LOOKUP may have changed");
-static_assert(ANEURALNETWORKS_L2_NORMALIZATION == 15,
+static_assert(ANEURALNETWORKS_L2_NORMALIZATION == 13,
"ANEURALNETWORKS_L2_NORMALIZATION may have changed");
-static_assert(ANEURALNETWORKS_L2_POOL == 16, "ANEURALNETWORKS_L2_POOL may have changed");
-static_assert(ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION == 17,
+static_assert(ANEURALNETWORKS_L2_POOL_2D == 14, "ANEURALNETWORKS_L2_POOL may have changed");
+static_assert(ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION == 15,
"ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION may have changed");
-static_assert(ANEURALNETWORKS_LOGISTIC == 18, "ANEURALNETWORKS_LOGISTIC may have changed");
-static_assert(ANEURALNETWORKS_LSH_PROJECTION == 19,
+static_assert(ANEURALNETWORKS_LOGISTIC == 16, "ANEURALNETWORKS_LOGISTIC may have changed");
+static_assert(ANEURALNETWORKS_LSH_PROJECTION == 17,
"ANEURALNETWORKS_LSH_PROJECTION may have changed");
-static_assert(ANEURALNETWORKS_LSTM == 20, "ANEURALNETWORKS_LSTM may have changed");
-static_assert(ANEURALNETWORKS_MAX_POOL == 21, "ANEURALNETWORKS_MAX_POOL may have changed");
-static_assert(ANEURALNETWORKS_MUL == 22, "ANEURALNETWORKS_MUL may have changed");
-static_assert(ANEURALNETWORKS_RELU == 23, "ANEURALNETWORKS_RELU may have changed");
-static_assert(ANEURALNETWORKS_RELU1 == 24, "ANEURALNETWORKS_RELU1 may have changed");
-static_assert(ANEURALNETWORKS_RELU6 == 25, "ANEURALNETWORKS_RELU6 may have changed");
-static_assert(ANEURALNETWORKS_RESHAPE == 26, "ANEURALNETWORKS_RESHAPE may have changed");
-static_assert(ANEURALNETWORKS_RESIZE_BILINEAR == 27,
+static_assert(ANEURALNETWORKS_LSTM == 18, "ANEURALNETWORKS_LSTM may have changed");
+static_assert(ANEURALNETWORKS_MAX_POOL_2D == 19, "ANEURALNETWORKS_MAX_POOL may have changed");
+static_assert(ANEURALNETWORKS_MUL == 20, "ANEURALNETWORKS_MUL may have changed");
+static_assert(ANEURALNETWORKS_RELU == 21, "ANEURALNETWORKS_RELU may have changed");
+static_assert(ANEURALNETWORKS_RELU1 == 22, "ANEURALNETWORKS_RELU1 may have changed");
+static_assert(ANEURALNETWORKS_RELU6 == 23, "ANEURALNETWORKS_RELU6 may have changed");
+static_assert(ANEURALNETWORKS_RESHAPE == 24, "ANEURALNETWORKS_RESHAPE may have changed");
+static_assert(ANEURALNETWORKS_RESIZE_BILINEAR == 25,
"ANEURALNETWORKS_RESIZE_BILINEAR may have changed");
-static_assert(ANEURALNETWORKS_RNN == 28, "ANEURALNETWORKS_RNN may have changed");
-static_assert(ANEURALNETWORKS_SOFTMAX == 29, "ANEURALNETWORKS_SOFTMAX may have changed");
-static_assert(ANEURALNETWORKS_SPACE_TO_DEPTH == 30,
+static_assert(ANEURALNETWORKS_RNN == 26, "ANEURALNETWORKS_RNN may have changed");
+static_assert(ANEURALNETWORKS_SOFTMAX == 27, "ANEURALNETWORKS_SOFTMAX may have changed");
+static_assert(ANEURALNETWORKS_SPACE_TO_DEPTH == 28,
"ANEURALNETWORKS_SPACE_TO_DEPTH may have changed");
-static_assert(ANEURALNETWORKS_SPLIT == 31, "ANEURALNETWORKS_SPLIT may have changed");
-static_assert(ANEURALNETWORKS_SVDF == 32, "ANEURALNETWORKS_SVDF may have changed");
-static_assert(ANEURALNETWORKS_TANH == 33, "ANEURALNETWORKS_TANH may have changed");
+static_assert(ANEURALNETWORKS_SVDF == 29, "ANEURALNETWORKS_SVDF may have changed");
+static_assert(ANEURALNETWORKS_TANH == 30, "ANEURALNETWORKS_TANH may have changed");
+
+static_assert(ANEURALNETWORKS_FUSED_NONE == 0, "ANEURALNETWORKS_FUSED_NONE may have changed");
+static_assert(ANEURALNETWORKS_FUSED_RELU == 1, "ANEURALNETWORKS_FUSED_RELU may have changed");
+static_assert(ANEURALNETWORKS_FUSED_RELU1 == 2, "ANEURALNETWORKS_FUSED_RELU1 may have changed");
+static_assert(ANEURALNETWORKS_FUSED_RELU6 == 3, "ANEURALNETWORKS_FUSED_RELU6 may have changed");
static_assert(ANEURALNETWORKS_PREFER_LOW_POWER == 0,
"ANEURALNETWORKS_PREFER_LOW_POWER may have changed");
@@ -137,17 +140,13 @@
static_assert(static_cast<uint32_t>(OperationType::ADD) == ANEURALNETWORKS_ADD,
"OperationType::ADD != ANEURALNETWORKS_ADD");
-static_assert(static_cast<uint32_t>(OperationType::AVERAGE_POOL) == ANEURALNETWORKS_AVERAGE_POOL,
- "OperationType::AVERAGE_POOL != ANEURALNETWORKS_AVERAGE_POOL");
-static_assert(static_cast<uint32_t>(OperationType::CAST) == ANEURALNETWORKS_CAST,
- "OperationType::CAST != ANEURALNETWORKS_CAST");
-static_assert(static_cast<uint32_t>(OperationType::CONCATENATION) == ANEURALNETWORKS_CONCATENATION,
- "OperationType::CONCATENATION != ANEURALNETWORKS_CONCATENATION");
-static_assert(static_cast<uint32_t>(OperationType::CONV) == ANEURALNETWORKS_CONV,
- "OperationType::CONV != ANEURALNETWORKS_CONV");
-static_assert(static_cast<uint32_t>(OperationType::DEPTHWISE_CONV) ==
- ANEURALNETWORKS_DEPTHWISE_CONV,
- "OperationType::DEPTHWISE_CONV != ANEURALNETWORKS_DEPTHWISE_CONV");
+static_assert(static_cast<uint32_t>(OperationType::AVERAGE_POOL_2D) == ANEURALNETWORKS_AVERAGE_POOL_2D,
+ "OperationType::AVERAGE_POOL_2D != ANEURALNETWORKS_AVERAGE_POOL_2D");
+static_assert(static_cast<uint32_t>(OperationType::CONV_2D) == ANEURALNETWORKS_CONV_2D,
+ "OperationType::CONV_2D != ANEURALNETWORKS_CONV_2D");
+static_assert(static_cast<uint32_t>(OperationType::DEPTHWISE_CONV_2D) ==
+ ANEURALNETWORKS_DEPTHWISE_CONV_2D,
+ "OperationType::DEPTHWISE_CONV_2D != ANEURALNETWORKS_DEPTHWISE_CONV_2D");
static_assert(static_cast<uint32_t>(OperationType::DEPTH_TO_SPACE) ==
ANEURALNETWORKS_DEPTH_TO_SPACE,
"OperationType::DEPTH_TO_SPACE != ANEURALNETWORKS_DEPTH_TO_SPACE");
@@ -163,16 +162,14 @@
static_assert(static_cast<uint32_t>(OperationType::FULLY_CONNECTED) ==
ANEURALNETWORKS_FULLY_CONNECTED,
"OperationType::FULLY_CONNECTED != ANEURALNETWORKS_FULLY_CONNECTED");
-static_assert(static_cast<uint32_t>(OperationType::GATHER) == ANEURALNETWORKS_GATHER,
- "OperationType::GATHER != ANEURALNETWORKS_GATHER");
static_assert(static_cast<uint32_t>(OperationType::HASHTABLE_LOOKUP) ==
ANEURALNETWORKS_HASHTABLE_LOOKUP,
"OperationType::HASHTABLE_LOOKUP != ANEURALNETWORKS_HASHTABLE_LOOKUP");
static_assert(static_cast<uint32_t>(OperationType::L2_NORMALIZATION) ==
ANEURALNETWORKS_L2_NORMALIZATION,
"OperationType::L2_NORMALIZATION != ANEURALNETWORKS_L2_NORMALIZATION");
-static_assert(static_cast<uint32_t>(OperationType::L2_POOL) == ANEURALNETWORKS_L2_POOL,
- "OperationType::L2_POOL != ANEURALNETWORKS_L2_POOL");
+static_assert(static_cast<uint32_t>(OperationType::L2_POOL_2D) == ANEURALNETWORKS_L2_POOL_2D,
+ "OperationType::L2_POOL_2D != ANEURALNETWORKS_L2_POOL_2D");
static_assert(static_cast<uint32_t>(OperationType::LOCAL_RESPONSE_NORMALIZATION) ==
ANEURALNETWORKS_LOCAL_RESPONSE_NORMALIZATION,
"OperationType::LOCAL_RESPONSE_NORMALIZATION != "
@@ -184,8 +181,8 @@
"OperationType::LSH_PROJECTION != ANEURALNETWORKS_LSH_PROJECTION");
static_assert(static_cast<uint32_t>(OperationType::LSTM) == ANEURALNETWORKS_LSTM,
"OperationType::LSTM != ANEURALNETWORKS_LSTM");
-static_assert(static_cast<uint32_t>(OperationType::MAX_POOL) == ANEURALNETWORKS_MAX_POOL,
- "OperationType::MAX_POOL != ANEURALNETWORKS_MAX_POOL");
+static_assert(static_cast<uint32_t>(OperationType::MAX_POOL_2D) == ANEURALNETWORKS_MAX_POOL_2D,
+ "OperationType::MAX_POOL_2D != ANEURALNETWORKS_MAX_POOL_2D");
static_assert(static_cast<uint32_t>(OperationType::MUL) == ANEURALNETWORKS_MUL,
"OperationType::MUL != ANEURALNETWORKS_MUL");
static_assert(static_cast<uint32_t>(OperationType::RELU) == ANEURALNETWORKS_RELU,
@@ -206,13 +203,20 @@
static_assert(static_cast<uint32_t>(OperationType::SPACE_TO_DEPTH) ==
ANEURALNETWORKS_SPACE_TO_DEPTH,
"OperationType::SPACE_TO_DEPTH != ANEURALNETWORKS_SPACE_TO_DEPTH");
-static_assert(static_cast<uint32_t>(OperationType::SPLIT) == ANEURALNETWORKS_SPLIT,
- "OperationType::SPLIT != ANEURALNETWORKS_SPLIT");
static_assert(static_cast<uint32_t>(OperationType::SVDF) == ANEURALNETWORKS_SVDF,
"OperationType::SVDF != ANEURALNETWORKS_SVDF");
static_assert(static_cast<uint32_t>(OperationType::TANH) == ANEURALNETWORKS_TANH,
"OperationType::TANH != ANEURALNETWORKS_TANH");
+static_assert(static_cast<uint32_t>(FusedActivationFunc::NONE) == ANEURALNETWORKS_FUSED_NONE,
+ "FusedActivationFunc::NONE != ANEURALNETWORKS_FUSED_NONE");
+static_assert(static_cast<uint32_t>(FusedActivationFunc::RELU) == ANEURALNETWORKS_FUSED_RELU,
+ "FusedActivationFunc::RELU != ANEURALNETWORKS_FUSED_RELU");
+static_assert(static_cast<uint32_t>(FusedActivationFunc::RELU1) == ANEURALNETWORKS_FUSED_RELU1,
+ "FusedActivationFunc::RELU1 != ANEURALNETWORKS_FUSED_RELU1");
+static_assert(static_cast<uint32_t>(FusedActivationFunc::RELU6) == ANEURALNETWORKS_FUSED_RELU6,
+ "FusedActivationFunc::RELU6 != ANEURALNETWORKS_FUSED_RELU6");
+
using android::sp;
using namespace android::nn;