From c5114d33293e3124c04655a6f50df5394c424fd6 Mon Sep 17 00:00:00 2001 From: Joel Liang Date: Mon, 4 Dec 2017 15:30:53 +0800 Subject: APPBROWSER-331: Code refactoring for absdiff shader and fix the example running issue The 8-bits unsigned integer pack/unpack functions have been removed accidentally. Added new pack/unpack functions to the new common shader code. Change-Id: I0ef4507b1758f29686b1dadb76781e4f1f220249 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/111637 Reviewed-by: Stephen Li Tested-by: BSG Visual Compute Jenkins server to access repositories on http://mpd-gerrit.cambridge.arm.com Reviewed-by: Georgios Pinitas Reviewed-by: Anthony Barbier --- src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h | 41 +++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h') diff --git a/src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h b/src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h index 55a598354a..31deaf67e3 100644 --- a/src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h +++ b/src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h @@ -393,4 +393,45 @@ mediump vec4[2] unpack8_half(highp uvec4 packed_data) #define LOAD_UNPACK8_CURRENT_ITEM_HALF(tensor_ptr, tensor_iter) LOAD_UNPACK8_HALF(tensor_ptr, CURRENT_ITEM_OFFSET(tensor_iter)) #define STORE_PACK8_CURRENT_ITEM_HALF(tensor_ptr, tensor_iter, data) STORE_PACK8_HALF(tensor_ptr, CURRENT_ITEM_OFFSET(tensor_iter), data) +/** Converting the uvec4 object to 4 low-precision uint values and packing into a uint object + * + * @param[in] data The uvec4 object to be packed + * + * @return The packed uint object + */ +highp uint pack4_u8(lowp uvec4 data) +{ + highp uint r = uint(0); + + for(int i = 0; i < 4; i++) + { + r |= data[i] << uint(i * 8); + } + + return r; +} + +/** Unpacking the uint object to 4 low-precision uint values and converting to a uvec4 object + * + * @param[in] packed_data The uint object to be unpacked + * + * @return The unpacked uvec4 object + */ +lowp uvec4 unpack4_u8(highp uint packed_data) +{ + lowp uvec4 uvec; + + for(int i = 0; i < 4; i++) + { + uvec[i] = (packed_data >> uint(i * 8)) & uint(0xFF); + } + + return uvec; +} + +#define LOAD_UNPACK4_U8(tensor_ptr, offset) unpack4_u8(uint(LOAD(tensor_ptr, offset))) +#define STORE_PACK4_U8(tensor_ptr, offset, data) STORE(tensor_ptr, offset, pack4_u8(data)) +#define LOAD_UNPACK4_CURRENT_ITEM_U8(tensor_ptr, tensor_iter) LOAD_UNPACK4_U8(tensor_ptr, CURRENT_ITEM_OFFSET(tensor_iter)) +#define STORE_PACK4_CURRENT_ITEM_U8(tensor_ptr, tensor_iter, data) STORE_PACK4_U8(tensor_ptr, CURRENT_ITEM_OFFSET(tensor_iter), data) + #endif // ARM_COMPUTE_HELPER_CS_H -- cgit v1.2.1