Added support of reading short4/ushort4/char4/uchar4 from buffers in Glsl.

PiperOrigin-RevId: 432399398
diff --git a/tensorflow/lite/delegates/gpu/common/task/tensor_desc.cc b/tensorflow/lite/delegates/gpu/common/task/tensor_desc.cc
index 639db2a..9fc01ab 100644
--- a/tensorflow/lite/delegates/gpu/common/task/tensor_desc.cc
+++ b/tensorflow/lite/delegates/gpu/common/task/tensor_desc.cc
@@ -493,6 +493,22 @@
           return absl::StrCat("vec4(unpackHalf2x16(buffer[", coords[0],
                               "].x), unpackHalf2x16(buffer[", coords[0],
                               "].y))");
+        } else if (data_type == DataType::INT16 ||
+                   data_type == DataType::UINT16) {
+          const std::string vec_type =
+              data_type == DataType::INT16 ? "ivec4" : "uvec4";
+          return absl::Substitute(
+              "$1(buffer[$0].x & 0xffff, (buffer[$0].x >> 16) & 0xffff, "
+              "buffer[$0].y & 0xffff, (buffer[$0].y >> 16) & 0xffff)",
+              coords[0], vec_type);
+        } else if (data_type == DataType::INT8 ||
+                   data_type == DataType::UINT8) {
+          const std::string vec_type =
+              data_type == DataType::INT8 ? "ivec4" : "uvec4";
+          return absl::Substitute(
+              "$1(buffer[$0] & 0xff, (buffer[$0] >> 8) & 0xff, "
+              "(buffer[$0] >> 16) & 0xff, (buffer[$0] >> 24) & 0xff)",
+              coords[0], vec_type);
         } else {
           return absl::StrCat("buffer[", coords[0], "]");
         }