diff options
author | Joel Liang <joel.liang@arm.com> | 2018-01-02 14:05:06 +0800 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:42:33 +0000 |
commit | 6387543b0ad0fbfa77d988437b4ad159803de7c3 (patch) | |
tree | c13935859f16d6f2e3e9855937cb1be38e8742ea /src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h | |
parent | 19e9142604edce6efbf117181578f8f408008134 (diff) | |
download | ComputeLibrary-6387543b0ad0fbfa77d988437b4ad159803de7c3.tar.gz |
APPBROWSER-371: Rewrite the direct_convolution3x3.cs with the new common code
Change-Id: I82a3ec133193433ba9ed3efcb49c51a2b95b16c0
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/114962
Tested-by: Jenkins <bsgcomp@arm.com>
Reviewed-by: Zhenglin Li <zhenglin.li@arm.com>
Reviewed-by: Pablo Tello <pablo.tello@arm.com>
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
Diffstat (limited to 'src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h')
-rwxr-xr-x | src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h | 19 |
1 files changed, 19 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 3fb0e238ae..fffc87d90d 100755 --- a/src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h +++ b/src/core/GLES_COMPUTE/cs_shaders/helpers_cs.h @@ -240,6 +240,9 @@ ImageIterator update_image_from_tensor3D_iter_offset(uint element_shift, uint of #define TENSOR_ITERATOR_ADVANCE_IN_BYTES(tensor_iter, n) \ tensor_iter.current_offset_in_bytes += int(n) +#define SET_TENSOR_ITERATOR_OFFSET_IN_BYTES(tensor_iter, n) \ + tensor_iter.current_offset_in_bytes = int(n) + /** Get the offset of a VectorIterator * * @param[in] vector_iter The VectorIterator object pointed to the starting position of the buffer @@ -369,6 +372,19 @@ mediump vec4[2] unpack8_half(highp uvec4 packed_data) vec4(unpackHalf2x16(packed_data.z), unpackHalf2x16(packed_data.w))); } +/** Unpacking the uvec2[3] object to 12 half-precision (16-bits) floating point values and converting to a vec4[3] object + * + * @param[in] packed_data The uvec2[3] object to be unpacked + * + * @return The unpacked vec4[3] object + */ +mediump vec4[3] unpack12_half(highp uvec2[3] packed_data) +{ + return vec4[3](vec4(unpackHalf2x16(packed_data[0].x), unpackHalf2x16(packed_data[0].y)), + vec4(unpackHalf2x16(packed_data[1].x), unpackHalf2x16(packed_data[1].y)), + vec4(unpackHalf2x16(packed_data[2].x), unpackHalf2x16(packed_data[2].y))); +} + // For half-precision (16-bits) floating point packed into a "uint" element #define LOAD_UNPACK2_HALF(tensor_ptr, offset) unpackHalf2x16(uint(LOAD(tensor_ptr, offset))) #define STORE_PACK2_HALF(tensor_ptr, offset, data) STORE(tensor_ptr, offset, packHalf2x16(data)) @@ -396,6 +412,9 @@ mediump vec4[2] unpack8_half(highp uvec4 packed_data) #define VLOAD2_UNPACK8_CURRENT_ITEM_HALF(tensor_ptr, tensor_iter) VLOAD2_UNPACK8_HALF(tensor_ptr, CURRENT_ITEM_OFFSET(tensor_iter)) #define VSTORE2_PACK8_CURRENT_ITEM_HALF(tensor_ptr, tensor_iter, data) VSTORE2_PACK8_HALF(tensor_ptr, CURRENT_ITEM_OFFSET(tensor_iter), data) +#define VLOAD3_UNPACK12_HALF(tensor_ptr, offset) unpack12_half(VLOAD3(uvec2[3], tensor_ptr, offset)) +#define VLOAD3_UNPACK12_CURRENT_ITEM_HALF(tensor_ptr, tensor_iter) VLOAD3_UNPACK12_HALF(tensor_ptr, CURRENT_ITEM_OFFSET(tensor_iter)) + // For half-precision (16-bits) floating point packed into a "uvec4" element #define LOAD_UNPACK8_HALF(tensor_ptr, offset) unpack8_half(uvec4(LOAD(tensor_ptr, offset))) #define STORE_PACK8_HALF(tensor_ptr, offset, data) STORE(tensor_ptr, offset, pack8_half(data)) |