From ee50f51206a41e0fbc7fc156659eaa8b8de5c46e Mon Sep 17 00:00:00 2001 From: Anthony Barbier Date: Thu, 15 Nov 2018 09:58:00 +0000 Subject: COMPMID-1784 Fixed the padding checks in AccessWindowRectangle::update_window_if_needed() Change-Id: I56426cc9c9688a0aa0acdd439d5887c7ef208cd2 Note: The code to shrink the window hasn't been fixed yet. --- arm_compute/core/IAccessWindow.h | 2 ++ src/core/IAccessWindow.cpp | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/arm_compute/core/IAccessWindow.h b/arm_compute/core/IAccessWindow.h index ab05fbf5e4..22232ab554 100644 --- a/arm_compute/core/IAccessWindow.h +++ b/arm_compute/core/IAccessWindow.h @@ -193,6 +193,8 @@ public: bool update_window_if_needed(Window &window) const override; bool update_padding_if_needed(const Window &window) override; +protected: + PaddingSize get_needed_padding(const Window &window)const; protected: ITensorInfo *_info; diff --git a/src/core/IAccessWindow.cpp b/src/core/IAccessWindow.cpp index c73f4e7bb2..be65102cd2 100644 --- a/src/core/IAccessWindow.cpp +++ b/src/core/IAccessWindow.cpp @@ -102,6 +102,16 @@ bool AccessWindowRectangle::update_window_if_needed(Window &window) const return false; } + PaddingSize needed = get_needed_padding(window); + PaddingSize available = _info->padding(); + + if(needed.top <= available.top && needed.right <= available.right + && needed.bottom <= available.bottom + && needed.left <= available.left) + { + return false; + } + const TensorShape &shape = _info->tensor_shape(); const Strides &strides = _info->strides_in_bytes(); const size_t offset_first_element = _info->offset_first_element_in_bytes(); @@ -206,7 +216,12 @@ bool AccessWindowRectangle::update_padding_if_needed(const Window &window) { return false; } + // Update strides in tensor info + return _info->extend_padding( get_needed_padding(window)); +} +PaddingSize AccessWindowRectangle::get_needed_padding(const Window &window)const +{ ARM_COMPUTE_ERROR_ON(_scale_x == 0); ARM_COMPUTE_ERROR_ON(_scale_y == 0); @@ -223,6 +238,5 @@ bool AccessWindowRectangle::update_padding_if_needed(const Window &window) padding.top = std::max(0, -min_y); padding.bottom = std::max(0, max_y - shape[1]); - // Update strides in tensor info - return _info->extend_padding(padding); + return padding; } -- cgit v1.2.1