diff --git a/1.0/HexagonOperationsCheck.cpp b/1.0/HexagonOperationsCheck.cpp
index e67cd0b..23e01f8 100644
--- a/1.0/HexagonOperationsCheck.cpp
+++ b/1.0/HexagonOperationsCheck.cpp
@@ -85,8 +85,11 @@
         filter_width   = model->getScalar<int32_t>(ins[7]);
         filter_height  = model->getScalar<int32_t>(ins[8]);
 
-        HEXAGON_SOFT_ASSERT_NE(getPadding(filter_width, filter_height, padding_left,
-                                          padding_right, padding_top, padding_bottom),
+        HEXAGON_SOFT_ASSERT_NE(getPadding(inShape.dimensions[2], inShape.dimensions[1],
+                                          stride_width, stride_height,
+                                          filter_width, filter_height,
+                                          padding_left, padding_right,
+                                          padding_top, padding_bottom),
                                NN_PAD_NA, "Unknown padding");
     }
     else {
@@ -178,8 +181,9 @@
         stride_width   = model->getScalar<int32_t>(ins[7]);
         stride_height  = model->getScalar<int32_t>(ins[8]);
 
-        HEXAGON_SOFT_ASSERT_NE(getPadding(filterShape.dimensions[2], filterShape.dimensions[1],
-                                          padding_left, padding_right,
+        HEXAGON_SOFT_ASSERT_NE(getPadding(inputShape.dimensions[2], inputShape.dimensions[1],
+                                          stride_width, stride_height, filterShape.dimensions[2],
+                                          filterShape.dimensions[1], padding_left, padding_right,
                                           padding_top, padding_bottom),
                                NN_PAD_NA, "Unknown padding");
     }
@@ -238,10 +242,12 @@
         stride_width   = model->getScalar<int32_t>(ins[7]);
         stride_height  = model->getScalar<int32_t>(ins[8]);
 
-        HEXAGON_SOFT_ASSERT_NE(getPadding(filterShape.dimensions[2], filterShape.dimensions[1],
-                                          padding_left, padding_right,
+        HEXAGON_SOFT_ASSERT_NE(getPadding(inputShape.dimensions[2], inputShape.dimensions[1],
+                                          stride_width, stride_height, filterShape.dimensions[2],
+                                          filterShape.dimensions[1], padding_left, padding_right,
                                           padding_top, padding_bottom),
                                NN_PAD_NA, "Unknown padding");
+
     }
     else {
         const int32_t padding_implicit = model->getScalar<int32_t>(ins[3]);
diff --git a/1.0/HexagonOperationsPrepare.cpp b/1.0/HexagonOperationsPrepare.cpp
index efae956..1c2d7cd 100644
--- a/1.0/HexagonOperationsPrepare.cpp
+++ b/1.0/HexagonOperationsPrepare.cpp
@@ -76,8 +76,10 @@
         filter_height                = model->getScalar<int32_t>(ins[8]);
         act                          = model->getFloatActivation(ins[9]);
 
-        pad = getPadding(filter_width, filter_height, padding_left,
-                         padding_right, padding_top, padding_bottom);
+        const Shape inputShape = model->getShape(ins[0]);
+        pad = getPadding(inputShape.dimensions[2], inputShape.dimensions[1],
+                         stride_width, stride_height, filter_width, filter_height,
+                         padding_left, padding_right, padding_top, padding_bottom);
         HEXAGON_SOFT_ASSERT_NE(pad, NN_PAD_NA, "Unknown padding");
     }
     else {
@@ -146,9 +148,12 @@
         stride_height                = model->getScalar<int32_t>(ins[8]);
         act                          = model->getFloatActivation(ins[9]);
 
+        const Shape inputShape = model->getShape(ins[0]);
         const Shape filterShape = model->getShape(ins[1]);
-        pad = getPadding(filterShape.dimensions[2], filterShape.dimensions[1], padding_left,
-                         padding_right, padding_top, padding_bottom);
+        pad = getPadding(inputShape.dimensions[2], inputShape.dimensions[1],
+                         stride_width, stride_height, filterShape.dimensions[2],
+                         filterShape.dimensions[1], padding_left, padding_right,
+                         padding_top, padding_bottom);
         HEXAGON_SOFT_ASSERT_NE(pad, NN_PAD_NA, "Unknown padding");
     }
     else {
@@ -195,9 +200,12 @@
         depth_multiplier             = model->getScalar<int32_t>(ins[9]);
         act                          = model->getFloatActivation(ins[10]);
 
+        const Shape inputShape = model->getShape(ins[0]);
         const Shape filterShape = model->getShape(ins[1]);
-        pad = getPadding(filterShape.dimensions[2], filterShape.dimensions[1], padding_left,
-                         padding_right, padding_top, padding_bottom);
+        pad = getPadding(inputShape.dimensions[2], inputShape.dimensions[1],
+                         stride_width, stride_height, filterShape.dimensions[2],
+                         filterShape.dimensions[1], padding_left, padding_right,
+                         padding_top, padding_bottom);
         HEXAGON_SOFT_ASSERT_NE(pad, NN_PAD_NA, "Unknown padding");
     }
     else {
@@ -262,8 +270,10 @@
         filter_height                = model->getScalar<int32_t>(ins[8]);
         act                          = model->getFloatActivation(ins[9]);
 
-        pad = getPadding(filter_width, filter_height, padding_left,
-                         padding_right, padding_top, padding_bottom);
+        const Shape inputShape = model->getShape(ins[0]);
+        pad = getPadding(inputShape.dimensions[2], inputShape.dimensions[1],
+                         stride_width, stride_height, filter_width, filter_height,
+                         padding_left, padding_right, padding_top, padding_bottom);
         HEXAGON_SOFT_ASSERT_NE(pad, NN_PAD_NA, "Unknown padding");
     }
     else {
@@ -346,8 +356,10 @@
         filter_height                = model->getScalar<int32_t>(ins[8]);
         act                          = model->getFloatActivation(ins[9]);
 
-        pad = getPadding(filter_width, filter_height, padding_left,
-                         padding_right, padding_top, padding_bottom);
+        const Shape inputShape = model->getShape(ins[0]);
+        pad = getPadding(inputShape.dimensions[2], inputShape.dimensions[1],
+                         stride_width, stride_height, filter_width, filter_height,
+                         padding_left, padding_right, padding_top, padding_bottom);
         HEXAGON_SOFT_ASSERT_NE(pad, NN_PAD_NA, "Unknown padding");
     }
     else {
@@ -531,8 +543,10 @@
         filter_height                = model->getScalar<int32_t>(ins[8]);
         act                          = model->getQuantizedActivation(ins[9]);
 
-        pad = getPadding(filter_width, filter_height, padding_left,
-                         padding_right, padding_top, padding_bottom);
+        const Shape inputShape = model->getShape(ins[0]);
+        pad = getPadding(inputShape.dimensions[2], inputShape.dimensions[1],
+                         stride_width, stride_height, filter_width, filter_height,
+                         padding_left, padding_right, padding_top, padding_bottom);
         HEXAGON_SOFT_ASSERT_NE(pad, NN_PAD_NA, "Unknown padding");
     }
     else {
@@ -605,9 +619,12 @@
         stride_height                = model->getScalar<int32_t>(ins[8]);
         act                          = model->getQuantizedActivation(ins[9]);
 
+        const Shape inputShape = model->getShape(ins[0]);
         const Shape filterShape = model->getShape(ins[1]);
-        pad = getPadding(filterShape.dimensions[2], filterShape.dimensions[1], padding_left,
-                         padding_right, padding_top, padding_bottom);
+        pad = getPadding(inputShape.dimensions[2], inputShape.dimensions[1],
+                         stride_width, stride_height, filterShape.dimensions[2],
+                         filterShape.dimensions[1], padding_left, padding_right,
+                         padding_top, padding_bottom);
         HEXAGON_SOFT_ASSERT_NE(pad, NN_PAD_NA, "Unknown padding");
     }
     else {
@@ -658,9 +675,12 @@
         depth_multiplier             = model->getScalar<int32_t>(ins[9]);
         act                          = model->getQuantizedActivation(ins[10]);
 
+        const Shape inputShape = model->getShape(ins[0]);
         const Shape filterShape = model->getShape(ins[1]);
-        pad = getPadding(filterShape.dimensions[2], filterShape.dimensions[1], padding_left,
-                         padding_right, padding_top, padding_bottom);
+        pad = getPadding(inputShape.dimensions[2], inputShape.dimensions[1],
+                         stride_width, stride_height, filterShape.dimensions[2],
+                         filterShape.dimensions[1], padding_left, padding_right,
+                         padding_top, padding_bottom);
         HEXAGON_SOFT_ASSERT_NE(pad, NN_PAD_NA, "Unknown padding");
     }
     else {
@@ -770,8 +790,10 @@
         filter_height                = model->getScalar<int32_t>(ins[8]);
         act                          = model->getQuantizedActivation(ins[9]);
 
-        pad = getPadding(filter_width, filter_height, padding_left,
-                         padding_right, padding_top, padding_bottom);
+        const Shape inputShape = model->getShape(ins[0]);
+        pad = getPadding(inputShape.dimensions[2], inputShape.dimensions[1],
+                         stride_width, stride_height, filter_width, filter_height,
+                         padding_left, padding_right, padding_top, padding_bottom);
         HEXAGON_SOFT_ASSERT_NE(pad, NN_PAD_NA, "Unknown padding");
     }
     else {
diff --git a/1.0/HexagonUtils.cpp b/1.0/HexagonUtils.cpp
index 74a4c4d..a1c55d2 100644
--- a/1.0/HexagonUtils.cpp
+++ b/1.0/HexagonUtils.cpp
@@ -48,10 +48,13 @@
     };
 }
 
-hexagon_nn_padding_type getPadding(uint32_t filterWidth, uint32_t filterHeight,
-                                   uint32_t paddingLeft, uint32_t paddingRight,
-                                   uint32_t paddingTop, uint32_t paddingBottom) {
-    return getPadding(::android::nn::getPaddingScheme(filterWidth, filterHeight, paddingLeft,
+hexagon_nn_padding_type getPadding(int32_t inWidth, int32_t inHeight,
+                                   int32_t strideWidth, int32_t strideHeight,
+                                   int32_t filterWidth, int32_t filterHeight,
+                                   int32_t paddingLeft, int32_t paddingRight,
+                                   int32_t paddingTop, int32_t paddingBottom) {
+    return getPadding(::android::nn::getPaddingScheme(inWidth, inHeight, strideWidth, strideHeight,
+                                                      filterWidth, filterHeight, paddingLeft,
                                                       paddingRight, paddingTop, paddingBottom));
 }
 
diff --git a/1.0/HexagonUtils.h b/1.0/HexagonUtils.h
index cd027b0..88379d2 100644
--- a/1.0/HexagonUtils.h
+++ b/1.0/HexagonUtils.h
@@ -61,9 +61,11 @@
 bool isHexagonAvailable();
 
 hexagon_nn_padding_type getPadding(uint32_t pad);
-hexagon_nn_padding_type getPadding(uint32_t filterWidth, uint32_t filterHeight,
-                                   uint32_t paddingLeft, uint32_t paddingRight,
-                                   uint32_t paddingTop, uint32_t paddingBottom);
+hexagon_nn_padding_type getPadding(int32_t inWidth, int32_t inHeight,
+                                   int32_t strideWidth, int32_t strideHeight,
+                                   int32_t filterWidth, int32_t filterHeight,
+                                   int32_t paddingLeft, int32_t paddingRight,
+                                   int32_t paddingTop, int32_t paddingBottom);
 op_type getFloatActivationFunction(FusedActivationFunc act);
 op_type getQuantizedActivationFunction(FusedActivationFunc act);
 
