aboutsummaryrefslogtreecommitdiff
path: root/src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h
diff options
context:
space:
mode:
authorJoel Liang <joel.liang@arm.com>2017-12-04 15:30:53 +0800
committerAnthony Barbier <anthony.barbier@arm.com>2018-11-02 16:41:58 +0000
commitc5114d33293e3124c04655a6f50df5394c424fd6 (patch)
tree937b042a7e8682c5eae8ec3e48de0772654501b6 /src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h
parentf6a43c576e4eb731e5e0fa70ce4a0d3bd6a01a61 (diff)
downloadComputeLibrary-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.h41
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