diff options
author | Michele Di Giorgio <michele.digiorgio@arm.com> | 2018-08-02 12:02:48 +0100 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:54:54 +0000 |
commit | 6b4e604aa2f8598bce37abe76654b87a41ababb7 (patch) | |
tree | 8e65c4144d77573dcd0022d4326c7c8e1b042675 /tests/validation/reference/DepthConvertLayer.cpp | |
parent | 088c2b038ea2de67e90f8a7179c129133127f854 (diff) | |
download | ComputeLibrary-6b4e604aa2f8598bce37abe76654b87a41ababb7.tar.gz |
COMPMID-1303: CLDepthConvert : Add support for FP32 -> FP16 and FP16 -> FP32 + validate() function
Change-Id: I6808de0254a7c4bca440322cc14b795b3b32465b
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/142427
Tested-by: Jenkins <bsgcomp@arm.com>
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
Diffstat (limited to 'tests/validation/reference/DepthConvertLayer.cpp')
-rw-r--r-- | tests/validation/reference/DepthConvertLayer.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/tests/validation/reference/DepthConvertLayer.cpp b/tests/validation/reference/DepthConvertLayer.cpp index 6f90963360..fd2e0ae378 100644 --- a/tests/validation/reference/DepthConvertLayer.cpp +++ b/tests/validation/reference/DepthConvertLayer.cpp @@ -60,6 +60,33 @@ SimpleTensor<T2> depth_convert(const SimpleTensor<T1> &src, DataType dt_out, Con return result; } +template < typename T1, typename T2, typename std::enable_if < is_floating_point<T1>::value &&is_floating_point<T2>::value &&!std::is_same<T1, T2>::value, int >::type > +SimpleTensor<T2> depth_convert(const SimpleTensor<T1> &src, DataType dt_out, ConvertPolicy policy, uint32_t shift) +{ + SimpleTensor<T2> result(src.shape(), dt_out); + + const uint32_t scale = 1 << shift; + + // Up-casting + if(src.data_type() <= dt_out) + { + for(int i = 0; i < src.num_elements(); ++i) + { + result[i] = src[i] * static_cast<T2>(scale); + } + } + // Down-casting + else + { + for(int i = 0; i < src.num_elements(); ++i) + { + T1 val = src[i] / static_cast<T1>(scale); + result[i] = (policy == ConvertPolicy::SATURATE) ? saturate_cast<T2>(val) : static_cast<T2>(val); + } + } + return result; +} + template SimpleTensor<uint16_t> depth_convert(const SimpleTensor<uint8_t> &src, DataType dt_out, ConvertPolicy policy, uint32_t shift); template SimpleTensor<int16_t> depth_convert(const SimpleTensor<uint8_t> &src, DataType dt_out, ConvertPolicy policy, uint32_t shift); template SimpleTensor<int32_t> depth_convert(const SimpleTensor<uint8_t> &src, DataType dt_out, ConvertPolicy policy, uint32_t shift); @@ -67,6 +94,8 @@ template SimpleTensor<uint8_t> depth_convert(const SimpleTensor<uint16_t> &src, template SimpleTensor<uint32_t> depth_convert(const SimpleTensor<uint16_t> &src, DataType dt_out, ConvertPolicy policy, uint32_t shift); template SimpleTensor<uint8_t> depth_convert(const SimpleTensor<int16_t> &src, DataType dt_out, ConvertPolicy policy, uint32_t shift); template SimpleTensor<int32_t> depth_convert(const SimpleTensor<int16_t> &src, DataType dt_out, ConvertPolicy policy, uint32_t shift); +template SimpleTensor<half> depth_convert(const SimpleTensor<float> &src, DataType dt_out, ConvertPolicy policy, uint32_t shift); +template SimpleTensor<float> depth_convert(const SimpleTensor<half> &src, DataType dt_out, ConvertPolicy policy, uint32_t shift); } // namespace reference } // namespace validation } // namespace test |