diff options
author | Joel Liang <joel.liang@arm.com> | 2017-12-04 15:30:53 +0800 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:41:58 +0000 |
commit | c5114d33293e3124c04655a6f50df5394c424fd6 (patch) | |
tree | 937b042a7e8682c5eae8ec3e48de0772654501b6 /src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h | |
parent | f6a43c576e4eb731e5e0fa70ce4a0d3bd6a01a61 (diff) | |
download | ComputeLibrary-c5114d33293e3124c04655a6f50df5394c424fd6.tar.gz |
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 <stephen.li@arm.com>
Tested-by: BSG Visual Compute Jenkins server to access repositories on http://mpd-gerrit.cambridge.arm.com <bsgcomp@arm.com>
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
Diffstat (limited to 'src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h')
-rw-r--r-- | src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h | 41 |
1 files changed, 41 insertions, 0 deletions
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 |