| 143 | } |
| 144 | |
| 145 | Status ClConcatenate::validate(const std::vector<const ITensorInfo *> &src_vector, const ITensorInfo *dst, size_t axis) |
| 146 | { |
| 147 | ARM_COMPUTE_RETURN_ERROR_ON(dst == nullptr); |
| 148 | const unsigned int num_inputs = src_vector.size(); |
| 149 | |
| 150 | ARM_COMPUTE_RETURN_ERROR_ON_NULLPTR(dst); |
| 151 | ARM_COMPUTE_RETURN_ERROR_ON(num_inputs < 2); |
| 152 | |
| 153 | unsigned int offset = 0; |
| 154 | switch (axis) |
| 155 | { |
| 156 | case Window::DimX: |
| 157 | { |
| 158 | switch (num_inputs) |
| 159 | { |
| 160 | case 2: |
| 161 | // Validate WidthConcatenate2Tensors kernels if there are 2 inputs |
| 162 | ARM_COMPUTE_RETURN_ERROR_ON_NULLPTR(src_vector[0], src_vector[1]); |
| 163 | ARM_COMPUTE_RETURN_ON_ERROR( |
| 164 | kernels::ClWidthConcatenate2TensorsKernel::validate(src_vector[0], src_vector[1], dst)); |
| 165 | break; |
| 166 | case 4: |
| 167 | // Validate WidthConcatenate4Tensors kernels if there are 4 inputs |
| 168 | ARM_COMPUTE_RETURN_ERROR_ON_NULLPTR(src_vector[0], src_vector[1], src_vector[2], src_vector[3]); |
| 169 | ARM_COMPUTE_RETURN_ON_ERROR(kernels::ClWidthConcatenate4TensorsKernel::validate( |
| 170 | src_vector[0], src_vector[1], src_vector[2], src_vector[3], dst)); |
| 171 | break; |
| 172 | default: |
| 173 | // Validate generic case of WidthConcatenate kernel |
| 174 | for (const auto &src : src_vector) |
| 175 | { |
| 176 | ARM_COMPUTE_RETURN_ERROR_ON_NULLPTR(src); |
| 177 | ARM_COMPUTE_RETURN_ON_ERROR(kernels::ClWidthConcatenateKernel::validate(src, offset, dst)); |
| 178 | offset += src->dimension(axis); |
| 179 | } |
| 180 | break; |
| 181 | } |
| 182 | break; |
| 183 | } |
| 184 | case Window::DimY: |
| 185 | { |
| 186 | for (const auto &src : src_vector) |
| 187 | { |
| 188 | ARM_COMPUTE_RETURN_ON_ERROR(kernels::ClHeightConcatenateKernel::validate(src, offset, dst)); |
| 189 | offset += src->dimension(axis); |
| 190 | } |
| 191 | break; |
| 192 | } |
| 193 | case Window::DimZ: |
| 194 | { |
| 195 | for (const auto &src : src_vector) |
| 196 | { |
| 197 | ARM_COMPUTE_RETURN_ON_ERROR(kernels::ClDepthConcatenateKernel::validate(src, offset, dst)); |
| 198 | offset += src->dimension(axis); |
| 199 | } |
| 200 | break; |
| 201 | } |
| 202 | case 3: |
nothing calls this directly
no test coverage detected