| 204 | } |
| 205 | |
| 206 | void NEPadLayerKernel::configure(ITensor *input, |
| 207 | ITensor *output, |
| 208 | const PaddingList &padding, |
| 209 | const PixelValue constant_value, |
| 210 | const PaddingMode mode) |
| 211 | { |
| 212 | ARM_COMPUTE_ERROR_ON_NULLPTR(input, output); |
| 213 | // Auto-init |
| 214 | const TensorShape expected_output_shape = |
| 215 | arm_compute::misc::shape_calculator::compute_padded_shape(input->info()->tensor_shape(), padding); |
| 216 | const TensorInfo expected_output_info = input->info()->clone()->set_tensor_shape(expected_output_shape); |
| 217 | auto_init_if_empty(*output->info(), expected_output_info); |
| 218 | |
| 219 | // Perform validation step |
| 220 | ARM_COMPUTE_ERROR_THROW_ON(validate_arguments(input->info(), output->info(), padding, mode)); |
| 221 | |
| 222 | _input = input; |
| 223 | _output = output; |
| 224 | _padding = padding; |
| 225 | _constant_value = constant_value; |
| 226 | _mode = mode; |
| 227 | |
| 228 | if (_mode == PaddingMode::CONSTANT) |
| 229 | { |
| 230 | switch (_input->info()->element_size()) |
| 231 | { |
| 232 | case 1: |
| 233 | if (_input->info()->num_dimensions() == 3 && // Is 3D |
| 234 | padding.size() <= 3 && // Has 3D padding |
| 235 | !_input->info()->has_padding() && !_output->info()->has_padding()) // Input & Output have no padding |
| 236 | { |
| 237 | _func = &NEPadLayerKernel::run_pad_constant_uint8_3Dinput_3Dpad; |
| 238 | } |
| 239 | else |
| 240 | { |
| 241 | _func = &NEPadLayerKernel::run_pad_constant<uint8_t>; |
| 242 | } |
| 243 | break; |
| 244 | case 2: |
| 245 | _func = &NEPadLayerKernel::run_pad_constant<uint16_t>; |
| 246 | break; |
| 247 | case 4: |
| 248 | _func = &NEPadLayerKernel::run_pad_constant<uint32_t>; |
| 249 | break; |
| 250 | default: |
| 251 | ARM_COMPUTE_ERROR("Element size not supported"); |
| 252 | break; |
| 253 | } |
| 254 | } |
| 255 | else |
| 256 | { |
| 257 | ARM_COMPUTE_ERROR("Padding mode not supported"); |
| 258 | } |
| 259 | |
| 260 | // Configure kernel window |
| 261 | Window win = calculate_max_window(*output->info(), Steps()); |
| 262 | |
| 263 | // The NEPad doesn't need padding so update_window_and_padding() can be skipped |
nothing calls this directly
no test coverage detected