Skip to content

Instantly share code, notes, and snippets.

@m1lkweed
Last active January 26, 2025 06:50
Show Gist options
  • Save m1lkweed/041859d97e5ff6d8ef21917a041aed62 to your computer and use it in GitHub Desktop.
Save m1lkweed/041859d97e5ff6d8ef21917a041aed62 to your computer and use it in GitHub Desktop.
The closest ISO C can get to GLSL vectors. Tested to work on GCC, clang, msvc, and CompCert.
#ifndef SWIZZLE_H_
#define SWIZZLE_H_
// (c) m1lkweed 2025, GPLv3+
#define _SWIZZLE_x(T, ...) ((__VA_ARGS__).x)
#define _SWIZZLE_y(T, ...) ((__VA_ARGS__).y)
#define _SWIZZLE_z(T, ...) ((__VA_ARGS__).z)
#define _SWIZZLE_w(T, ...) ((__VA_ARGS__).w)
#define _SWIZZLE_xx(T, ...) (T ## vec2){{((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xy(T, ...) (T ## vec2){{((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xz(T, ...) (T ## vec2){{((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xw(T, ...) (T ## vec2){{((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yx(T, ...) (T ## vec2){{((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yy(T, ...) (T ## vec2){{((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yz(T, ...) (T ## vec2){{((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yw(T, ...) (T ## vec2){{((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zx(T, ...) (T ## vec2){{((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zy(T, ...) (T ## vec2){{((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zz(T, ...) (T ## vec2){{((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zw(T, ...) (T ## vec2){{((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wx(T, ...) (T ## vec2){{((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wy(T, ...) (T ## vec2){{((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wz(T, ...) (T ## vec2){{((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_ww(T, ...) (T ## vec2){{((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xxx(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xxy(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xxz(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xxw(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xyx(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xyy(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xyz(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xyw(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xzx(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xzy(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xzz(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xzw(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xwx(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xwy(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xwz(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xww(T, ...) (T ## vec3){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yxx(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yxy(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yxz(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yxw(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yyx(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yyy(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yyz(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yyw(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yzx(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yzy(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yzz(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yzw(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_ywx(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_ywy(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_ywz(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yww(T, ...) (T ## vec3){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zxx(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zxy(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zxz(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zxw(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zyx(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zyy(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zyz(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zyw(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zzx(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zzy(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zzz(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zzw(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zwx(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zwy(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zwz(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zww(T, ...) (T ## vec3){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wxx(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wxy(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wxz(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wxw(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wyx(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wyy(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wyz(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wyw(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wzx(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wzy(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wzz(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wzw(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wwx(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wwy(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wwz(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_www(T, ...) (T ## vec3){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xxxx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xxxy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xxxz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xxxw(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xxyx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xxyy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xxyz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xxyw(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xxzx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xxzy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xxzz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xxzw(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xxwx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xxwy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xxwz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xxww(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xyxx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xyxy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xyxz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xyxw(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xyyx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xyyy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xyyz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xyyw(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xyzx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xyzy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xyzz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xyzw(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xywx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xywy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xywz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xyww(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xzxx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xzxy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xzxz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xzxw(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xzyx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xzyy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xzyz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xzyw(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xzzx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xzzy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xzzz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xzzw(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xzwx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xzwy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xzwz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xzww(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xwxx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xwxy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xwxz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xwxw(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xwyx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xwyy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xwyz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xwyw(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xwzx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xwzy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xwzz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xwzw(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_xwwx(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_xwwy(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_xwwz(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_xwww(T, ...) (T ## vec4){{((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yxxx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yxxy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yxxz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yxxw(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yxyx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yxyy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yxyz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yxyw(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yxzx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yxzy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yxzz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yxzw(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yxwx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yxwy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yxwz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yxww(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yyxx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yyxy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yyxz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yyxw(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yyyx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yyyy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yyyz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yyyw(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yyzx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yyzy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yyzz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yyzw(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yywx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yywy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yywz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yyww(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yzxx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yzxy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yzxz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yzxw(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yzyx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yzyy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yzyz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yzyw(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yzzx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yzzy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yzzz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yzzw(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_yzwx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_yzwy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_yzwz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_yzww(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_ywxx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_ywxy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_ywxz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_ywxw(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_ywyx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_ywyy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_ywyz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_ywyw(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_ywzx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_ywzy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_ywzz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_ywzw(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_ywwx(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_ywwy(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_ywwz(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_ywww(T, ...) (T ## vec4){{((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zxxx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zxxy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zxxz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zxxw(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zxyx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zxyy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zxyz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zxyw(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zxzx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zxzy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zxzz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zxzw(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zxwx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zxwy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zxwz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zxww(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zyxx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zyxy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zyxz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zyxw(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zyyx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zyyy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zyyz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zyyw(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zyzx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zyzy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zyzz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zyzw(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zywx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zywy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zywz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zyww(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zzxx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zzxy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zzxz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zzxw(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zzyx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zzyy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zzyz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zzyw(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zzzx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zzzy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zzzz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zzzw(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zzwx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zzwy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zzwz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zzww(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zwxx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zwxy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zwxz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zwxw(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zwyx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zwyy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zwyz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zwyw(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zwzx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zwzy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zwzz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zwzw(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_zwwx(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_zwwy(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_zwwz(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_zwww(T, ...) (T ## vec4){{((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wxxx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wxxy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wxxz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wxxw(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wxyx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wxyy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wxyz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wxyw(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wxzx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wxzy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wxzz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wxzw(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wxwx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wxwy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wxwz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wxww(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wyxx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wyxy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wyxz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wyxw(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wyyx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wyyy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wyyz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wyyw(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wyzx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wyzy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wyzz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wyzw(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wywx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wywy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wywz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wyww(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wzxx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wzxy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wzxz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wzxw(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wzyx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wzyy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wzyz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wzyw(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wzzx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wzzy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wzzz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wzzw(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wzwx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wzwy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wzwz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wzww(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wwxx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wwxy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wwxz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wwxw(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).x), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wwyx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wwyy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wwyz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wwyw(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).y), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wwzx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wwzy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wwzz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wwzw(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).z), ((__VA_ARGS__).w)}}
#define _SWIZZLE_wwwx(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).x)}}
#define _SWIZZLE_wwwy(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).y)}}
#define _SWIZZLE_wwwz(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).z)}}
#define _SWIZZLE_wwww(T, ...) (T ## vec4){{((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).w), ((__VA_ARGS__).w)}}
#define _SWIZZLE_r(T, ...) ((__VA_ARGS__).r)
#define _SWIZZLE_g(T, ...) ((__VA_ARGS__).g)
#define _SWIZZLE_b(T, ...) ((__VA_ARGS__).b)
#define _SWIZZLE_a(T, ...) ((__VA_ARGS__).a)
#define _SWIZZLE_rr(T, ...) (T ## vec2){{((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rg(T, ...) (T ## vec2){{((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rb(T, ...) (T ## vec2){{((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_ra(T, ...) (T ## vec2){{((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_gr(T, ...) (T ## vec2){{((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_gg(T, ...) (T ## vec2){{((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_gb(T, ...) (T ## vec2){{((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_ga(T, ...) (T ## vec2){{((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_br(T, ...) (T ## vec2){{((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_bg(T, ...) (T ## vec2){{((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_bb(T, ...) (T ## vec2){{((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_ba(T, ...) (T ## vec2){{((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_ar(T, ...) (T ## vec2){{((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_ag(T, ...) (T ## vec2){{((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_ab(T, ...) (T ## vec2){{((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_aa(T, ...) (T ## vec2){{((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rrr(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rrg(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rrb(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rra(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rgr(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rgg(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rgb(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rga(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rbr(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rbg(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rbb(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rba(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rar(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rag(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rab(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_raa(T, ...) (T ## vec3){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_grr(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_grg(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_grb(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_gra(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_ggr(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_ggg(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_ggb(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_gga(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_gbr(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_gbg(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_gbb(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_gba(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_gar(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_gag(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_gab(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_gaa(T, ...) (T ## vec3){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_brr(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_brg(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_brb(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_bra(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_bgr(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_bgg(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_bgb(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_bga(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_bbr(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_bbg(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_bbb(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_bba(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_bar(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_bag(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_bab(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_baa(T, ...) (T ## vec3){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_arr(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_arg(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_arb(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_ara(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_agr(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_agg(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_agb(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_aga(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_abr(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_abg(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_abb(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_aba(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_aar(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_aag(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_aab(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_aaa(T, ...) (T ## vec3){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rrrr(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rrrg(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rrrb(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rrra(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rrgr(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rrgg(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rrgb(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rrga(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rrbr(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rrbg(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rrbb(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rrba(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rrar(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rrag(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rrab(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rraa(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rgrr(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rgrg(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rgrb(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rgra(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rggr(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rggg(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rggb(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rgga(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rgbr(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rgbg(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rgbb(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rgba(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rgar(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rgag(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rgab(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rgaa(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rbrr(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rbrg(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rbrb(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rbra(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rbgr(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rbgg(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rbgb(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rbga(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rbbr(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rbbg(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rbbb(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rbba(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rbar(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rbag(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rbab(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rbaa(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rarr(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rarg(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rarb(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_rara(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_ragr(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_ragg(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_ragb(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_raga(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_rabr(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_rabg(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_rabb(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_raba(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_raar(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_raag(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_raab(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_raaa(T, ...) (T ## vec4){{((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_grrr(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_grrg(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_grrb(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_grra(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_grgr(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_grgg(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_grgb(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_grga(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_grbr(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_grbg(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_grbb(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_grba(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_grar(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_grag(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_grab(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_graa(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_ggrr(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_ggrg(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_ggrb(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_ggra(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_gggr(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_gggg(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_gggb(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_ggga(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_ggbr(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_ggbg(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_ggbb(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_ggba(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_ggar(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_ggag(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_ggab(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_ggaa(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_gbrr(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_gbrg(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_gbrb(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_gbra(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_gbgr(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_gbgg(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_gbgb(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_gbga(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_gbbr(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_gbbg(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_gbbb(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_gbba(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_gbar(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_gbag(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_gbab(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_gbaa(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_garr(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_garg(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_garb(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_gara(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_gagr(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_gagg(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_gagb(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_gaga(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_gabr(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_gabg(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_gabb(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_gaba(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_gaar(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_gaag(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_gaab(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_gaaa(T, ...) (T ## vec4){{((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_brrr(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_brrg(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_brrb(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_brra(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_brgr(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_brgg(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_brgb(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_brga(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_brbr(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_brbg(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_brbb(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_brba(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_brar(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_brag(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_brab(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_braa(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_bgrr(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_bgrg(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_bgrb(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_bgra(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_bggr(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_bggg(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_bggb(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_bgga(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_bgbr(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_bgbg(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_bgbb(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_bgba(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_bgar(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_bgag(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_bgab(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_bgaa(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_bbrr(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_bbrg(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_bbrb(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_bbra(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_bbgr(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_bbgg(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_bbgb(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_bbga(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_bbbr(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_bbbg(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_bbbb(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_bbba(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_bbar(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_bbag(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_bbab(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_bbaa(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_barr(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_barg(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_barb(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_bara(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_bagr(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_bagg(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_bagb(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_baga(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_babr(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_babg(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_babb(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_baba(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_baar(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_baag(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_baab(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_baaa(T, ...) (T ## vec4){{((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_arrr(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_arrg(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_arrb(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_arra(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_argr(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_argg(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_argb(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_arga(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_arbr(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_arbg(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_arbb(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_arba(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_arar(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_arag(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_arab(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_araa(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_agrr(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_agrg(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_agrb(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_agra(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_aggr(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_aggg(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_aggb(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_agga(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_agbr(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_agbg(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_agbb(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_agba(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_agar(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_agag(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_agab(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_agaa(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_abrr(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_abrg(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_abrb(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_abra(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_abgr(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_abgg(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_abgb(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_abga(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_abbr(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_abbg(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_abbb(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_abba(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_abar(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_abag(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_abab(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_abaa(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_aarr(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).r)}}
#define _SWIZZLE_aarg(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).g)}}
#define _SWIZZLE_aarb(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).b)}}
#define _SWIZZLE_aara(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).r), ((__VA_ARGS__).a)}}
#define _SWIZZLE_aagr(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).r)}}
#define _SWIZZLE_aagg(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).g)}}
#define _SWIZZLE_aagb(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).b)}}
#define _SWIZZLE_aaga(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).g), ((__VA_ARGS__).a)}}
#define _SWIZZLE_aabr(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).r)}}
#define _SWIZZLE_aabg(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).g)}}
#define _SWIZZLE_aabb(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).b)}}
#define _SWIZZLE_aaba(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).b), ((__VA_ARGS__).a)}}
#define _SWIZZLE_aaar(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).r)}}
#define _SWIZZLE_aaag(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).g)}}
#define _SWIZZLE_aaab(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).b)}}
#define _SWIZZLE_aaaa(T, ...) (T ## vec4){{((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).a), ((__VA_ARGS__).a)}}
#define _SWIZZLE_s(T, ...) ((__VA_ARGS__).s)
#define _SWIZZLE_t(T, ...) ((__VA_ARGS__).t)
#define _SWIZZLE_p(T, ...) ((__VA_ARGS__).p)
#define _SWIZZLE_q(T, ...) ((__VA_ARGS__).q)
#define _SWIZZLE_ss(T, ...) (T ## vec2){{((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_st(T, ...) (T ## vec2){{((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_sp(T, ...) (T ## vec2){{((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_sq(T, ...) (T ## vec2){{((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ts(T, ...) (T ## vec2){{((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tt(T, ...) (T ## vec2){{((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tp(T, ...) (T ## vec2){{((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tq(T, ...) (T ## vec2){{((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ps(T, ...) (T ## vec2){{((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_pt(T, ...) (T ## vec2){{((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_pp(T, ...) (T ## vec2){{((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_pq(T, ...) (T ## vec2){{((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qs(T, ...) (T ## vec2){{((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qt(T, ...) (T ## vec2){{((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qp(T, ...) (T ## vec2){{((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qq(T, ...) (T ## vec2){{((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_sss(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_sst(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_ssp(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_ssq(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_sts(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_stt(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_stp(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_stq(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_sps(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_spt(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_spp(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_spq(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_sqs(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_sqt(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_sqp(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_sqq(T, ...) (T ## vec3){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tss(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tst(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tsp(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tsq(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tts(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_ttt(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_ttp(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_ttq(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tps(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tpt(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tpp(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tpq(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tqs(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tqt(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tqp(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tqq(T, ...) (T ## vec3){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_pss(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_pst(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_psp(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_psq(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_pts(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_ptt(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_ptp(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_ptq(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_pps(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_ppt(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_ppp(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_ppq(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_pqs(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_pqt(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_pqp(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_pqq(T, ...) (T ## vec3){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qss(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qst(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qsp(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qsq(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qts(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qtt(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qtp(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qtq(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qps(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qpt(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qpp(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qpq(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qqs(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qqt(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qqp(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qqq(T, ...) (T ## vec3){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ssss(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_ssst(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_sssp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_sssq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ssts(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_sstt(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_sstp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_sstq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ssps(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_sspt(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_sspp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_sspq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ssqs(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_ssqt(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_ssqp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_ssqq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_stss(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_stst(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_stsp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_stsq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_stts(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_sttt(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_sttp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_sttq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_stps(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_stpt(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_stpp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_stpq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_stqs(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_stqt(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_stqp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_stqq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_spss(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_spst(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_spsp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_spsq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_spts(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_sptt(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_sptp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_sptq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_spps(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_sppt(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_sppp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_sppq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_spqs(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_spqt(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_spqp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_spqq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_sqss(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_sqst(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_sqsp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_sqsq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_sqts(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_sqtt(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_sqtp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_sqtq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_sqps(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_sqpt(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_sqpp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_sqpq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_sqqs(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_sqqt(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_sqqp(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_sqqq(T, ...) (T ## vec4){{((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tsss(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tsst(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tssp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tssq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tsts(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tstt(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tstp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tstq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tsps(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tspt(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tspp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tspq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tsqs(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tsqt(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tsqp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tsqq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ttss(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_ttst(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_ttsp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_ttsq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ttts(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tttt(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tttp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tttq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ttps(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_ttpt(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_ttpp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_ttpq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ttqs(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_ttqt(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_ttqp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_ttqq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tpss(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tpst(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tpsp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tpsq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tpts(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tptt(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tptp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tptq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tpps(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tppt(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tppp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tppq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tpqs(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tpqt(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tpqp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tpqq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tqss(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tqst(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tqsp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tqsq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tqts(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tqtt(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tqtp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tqtq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tqps(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tqpt(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tqpp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tqpq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_tqqs(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_tqqt(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_tqqp(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_tqqq(T, ...) (T ## vec4){{((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_psss(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_psst(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_pssp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_pssq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_psts(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_pstt(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_pstp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_pstq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_psps(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_pspt(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_pspp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_pspq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_psqs(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_psqt(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_psqp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_psqq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ptss(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_ptst(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_ptsp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_ptsq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ptts(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_pttt(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_pttp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_pttq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ptps(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_ptpt(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_ptpp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_ptpq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ptqs(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_ptqt(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_ptqp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_ptqq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ppss(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_ppst(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_ppsp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_ppsq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ppts(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_pptt(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_pptp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_pptq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ppps(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_pppt(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_pppp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_pppq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_ppqs(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_ppqt(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_ppqp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_ppqq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_pqss(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_pqst(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_pqsp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_pqsq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_pqts(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_pqtt(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_pqtp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_pqtq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_pqps(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_pqpt(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_pqpp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_pqpq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_pqqs(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_pqqt(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_pqqp(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_pqqq(T, ...) (T ## vec4){{((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qsss(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qsst(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qssp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qssq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qsts(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qstt(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qstp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qstq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qsps(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qspt(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qspp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qspq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qsqs(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qsqt(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qsqp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qsqq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qtss(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qtst(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qtsp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qtsq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qtts(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qttt(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qttp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qttq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qtps(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qtpt(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qtpp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qtpq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qtqs(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qtqt(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qtqp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qtqq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qpss(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qpst(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qpsp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qpsq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qpts(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qptt(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qptp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qptq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qpps(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qppt(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qppp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qppq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qpqs(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qpqt(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qpqp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qpqq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qqss(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qqst(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qqsp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qqsq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).s), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qqts(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qqtt(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qqtp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qqtq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).t), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qqps(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qqpt(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qqpp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qqpq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).p), ((__VA_ARGS__).q)}}
#define _SWIZZLE_qqqs(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).s)}}
#define _SWIZZLE_qqqt(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).t)}}
#define _SWIZZLE_qqqp(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).p)}}
#define _SWIZZLE_qqqq(T, ...) (T ## vec4){{((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).q), ((__VA_ARGS__).q)}}
#define swizzle(swizz, ...) _Generic(((__VA_ARGS__).x), \
float: _SWIZZLE_ ## swizz (, __VA_ARGS__), int: _SWIZZLE_ ## swizz (i, __VA_ARGS__), \
bool: _SWIZZLE_ ## swizz (b, __VA_ARGS__), unsigned: _SWIZZLE_ ## swizz (u, __VA_ARGS__), \
double: _SWIZZLE_ ## swizz (d, __VA_ARGS__), default: (void)0 \
)
#define MAKE_VECTORS(T, type) \
typedef union{ \
type xyzw[4]; \
struct{ \
type xy[2]; \
union{ \
type z; \
type zw[2]; \
}; \
}; \
struct{ \
type x; \
union{ \
type y; \
type yz[2]; \
type yzw[3]; \
}; \
}; \
struct{ \
type xyz[3]; \
type w; \
}; \
type rgba[4]; \
struct{ \
type rg[2]; \
union{ \
type b; \
type ba[2]; \
}; \
}; \
struct{ \
type r; \
union{ \
type g; \
type gb[2]; \
type gba[3]; \
}; \
}; \
struct{ \
type rgb[3]; \
type a; \
}; \
type stpq[4]; \
struct{ \
type st[2]; \
union{ \
type p; \
type pq[2]; \
}; \
}; \
struct{ \
type s; \
union{ \
type t; \
type tp[2]; \
type tpq[3]; \
}; \
}; \
struct{ \
type stp[3]; \
type q; \
}; \
}T ## vec4; \
typedef union{ \
type xyz[3]; \
struct{ \
type xy[2]; \
type z; \
}; \
struct{ \
type x; \
union{ \
type yz[2]; \
type y; \
}; \
}; \
type rgb[3]; \
struct{ \
type rg[2]; \
type b; \
}; \
struct{ \
type r; \
union{ \
type gb[2]; \
type g; \
}; \
}; \
type stp[3]; \
struct{ \
type st[2]; \
type p; \
}; \
struct{ \
type s; \
union{ \
type tp[2]; \
type t; \
}; \
}; \
}T ## vec3; \
typedef union{ \
type xy[2]; \
struct{ \
type x; \
type y; \
}; \
type rg[2]; \
struct{ \
type r; \
type g; \
}; \
type st[2]; \
struct{ \
type s; \
type t; \
}; \
}T ## vec2;
MAKE_VECTORS(, float)
MAKE_VECTORS(b, bool)
MAKE_VECTORS(i, int)
MAKE_VECTORS(u, unsigned)
MAKE_VECTORS(d, double)
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment