Definition componentTypeCount(t : componentTypeT): nat :=
  match t with
  | INTEGER_SIGNED_8
  | INTEGER_UNSIGNED_8
  | INTEGER_SIGNED_16
  | INTEGER_UNSIGNED_16
  | INTEGER_SIGNED_32
  | INTEGER_UNSIGNED_32
  | INTEGER_SIGNED_64
  | INTEGER_UNSIGNED_64
  | FLOAT_16
  | FLOAT_32
  | FLOAT_64 => 1

  | INTEGER_SIGNED_8_VEC2
  | INTEGER_UNSIGNED_8_VEC2
  | INTEGER_SIGNED_16_VEC2
  | INTEGER_UNSIGNED_16_VEC2
  | INTEGER_SIGNED_32_VEC2
  | INTEGER_UNSIGNED_32_VEC2
  | INTEGER_SIGNED_64_VEC2
  | INTEGER_UNSIGNED_64_VEC2
  | FLOAT_16_VEC2
  | FLOAT_32_VEC2
  | FLOAT_64_VEC2 => 2

  | INTEGER_SIGNED_8_VEC3
  | INTEGER_UNSIGNED_8_VEC3
  | INTEGER_SIGNED_16_VEC3
  | INTEGER_UNSIGNED_16_VEC3
  | INTEGER_SIGNED_32_VEC3
  | INTEGER_UNSIGNED_32_VEC3
  | INTEGER_SIGNED_64_VEC3
  | INTEGER_UNSIGNED_64_VEC3
  | FLOAT_16_VEC3
  | FLOAT_32_VEC3
  | FLOAT_64_VEC3 => 3

  | INTEGER_SIGNED_8_VEC4
  | INTEGER_UNSIGNED_8_VEC4
  | INTEGER_SIGNED_16_VEC4
  | INTEGER_UNSIGNED_16_VEC4
  | INTEGER_SIGNED_32_VEC4
  | INTEGER_UNSIGNED_32_VEC4
  | INTEGER_SIGNED_64_VEC4
  | INTEGER_UNSIGNED_64_VEC4
  | FLOAT_16_VEC4
  | FLOAT_32_VEC4
  | FLOAT_64_VEC4 => 4
  end.
