| 68 | } |
| 69 | |
| 70 | Status validate_arguments(const ITensorInfo *src, |
| 71 | const ITensorInfo *weights, |
| 72 | const ITensorInfo *biases, |
| 73 | const ITensorInfo *dst, |
| 74 | const PadStrideInfo &conv_info) |
| 75 | { |
| 76 | ARM_COMPUTE_UNUSED(dst, weights); |
| 77 | ARM_COMPUTE_RETURN_ERROR_ON_CPU_F16_UNSUPPORTED(src); |
| 78 | |
| 79 | ARM_COMPUTE_RETURN_ERROR_ON_MSG(conv_info.stride().first != 1 || conv_info.stride().second != 1, |
| 80 | "Winograd layer only supports unit strides."); |
| 81 | if (biases != nullptr) |
| 82 | { |
| 83 | ARM_COMPUTE_RETURN_ERROR_ON_MISMATCHING_DATA_TYPES(src, biases); |
| 84 | ARM_COMPUTE_RETURN_ERROR_ON(biases->num_dimensions() > 1); |
| 85 | } |
| 86 | ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(src, 1, DataType::F16, DataType::F32); |
| 87 | ARM_COMPUTE_RETURN_ERROR_ON_MISMATCHING_DATA_TYPES(src, weights); |
| 88 | return Status{}; |
| 89 | } |
| 90 | |
| 91 | bool get_winograd_kernel_implementation(const ITensorInfo *src, |
| 92 | const ITensorInfo *weights, |
no test coverage detected