Add new swizzle math operation tests
authorJohn Richardson <john.richardson@mobica.com>
Thu, 23 Mar 2017 09:54:09 +0000 (09:54 +0000)
committerMika Isojärvi <misojarvi@google.com>
Tue, 11 Jul 2017 17:29:42 +0000 (10:29 -0700)
New tests for combined swizzle and math operations using various vector
types. Includes addition, subtraction, multiplication, and division
operations with repeated and non-repeated swizzles.

New tests:
- dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.*
- dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.*
- dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.*
- dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.*

Change-Id: I4541a88057f70dd41f4f27b81313748094e76037

android/cts/master/gles3-master.txt
data/gles3/shaders/swizzle_math_operations.test [new file with mode: 0644]
modules/gles3/functional/es3fFunctionalTests.cpp
modules/gles3/scripts/gen-swizzle-math-operations.py [new file with mode: 0644]

index 37e6728..946870b 100644 (file)
@@ -3474,6 +3474,550 @@ dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_bvec4_rgrr_vertex
 dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_bvec4_rgrr_fragment
 dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_bvec4_bbab_vertex
 dEQP-GLES3.functional.shaders.swizzles.vector_swizzles.mediump_bvec4_bbab_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec2_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec2_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec2_xx_xx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec2_xx_xx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec2_xy_yx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec2_xy_yx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec2_yx_xy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec2_yx_xy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec2_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec2_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec2_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec2_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec2_yxyx_xyxy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec2_yxyx_xyxy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_z_z_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_z_z_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_xz_zx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_xz_zx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_zz_zz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_zz_zz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_xyz_yzx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_xyz_yzx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_zyx_yxz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_zyx_yxz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_xxx_xxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_xxx_xxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_zzz_zzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_zzz_zzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_zzy_zyz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_zzy_zyz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_xzx_zxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_xzx_zxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_xyyx_yyxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_xyyx_yyxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_zxyz_xyzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec3_zxyz_xyzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_w_w_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_w_w_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_wx_xw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_wx_xw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_wz_zw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_wz_zw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_www_www_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_www_www_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_yyw_ywy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_yyw_ywy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_wzy_zyw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_wzy_zyw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_xyzw_yzwx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_xyzw_yzwx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_wzyx_zyxw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_wzyx_zyxw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_xyxy_yxyx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_xyxy_yxyx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_yzzy_zzyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_yzzy_zzyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_wxww_xwww_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_wxww_xwww_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_zzzz_zzzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_vec4_zzzz_zzzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec2_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec2_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec2_xx_xx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec2_xx_xx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec2_xy_yx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec2_xy_yx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec2_yx_xy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec2_yx_xy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec2_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec2_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec2_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec2_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec2_yxyx_xyxy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec2_yxyx_xyxy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_z_z_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_z_z_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_xz_zx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_xz_zx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_zz_zz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_zz_zz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_xyz_yzx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_xyz_yzx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_zyx_yxz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_zyx_yxz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_xxx_xxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_xxx_xxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_zzz_zzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_zzz_zzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_zzy_zyz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_zzy_zyz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_xzx_zxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_xzx_zxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_xyyx_yyxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_xyyx_yyxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_zxyz_xyzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec3_zxyz_xyzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_w_w_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_w_w_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_wx_xw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_wx_xw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_wz_zw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_wz_zw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_www_www_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_www_www_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_yyw_ywy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_yyw_ywy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_wzy_zyw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_wzy_zyw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_xyzw_yzwx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_xyzw_yzwx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_wzyx_zyxw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_wzyx_zyxw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_xyxy_yxyx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_xyxy_yxyx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_yzzy_zzyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_yzzy_zzyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_wxww_xwww_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_wxww_xwww_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_zzzz_zzzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_add.mediump_ivec4_zzzz_zzzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec2_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec2_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec2_xx_xx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec2_xx_xx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec2_xy_yx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec2_xy_yx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec2_yx_xy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec2_yx_xy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec2_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec2_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec2_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec2_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec2_yxyx_xyxy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec2_yxyx_xyxy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_z_z_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_z_z_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_xz_zx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_xz_zx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_zz_zz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_zz_zz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_xyz_yzx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_xyz_yzx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_zyx_yxz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_zyx_yxz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_xxx_xxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_xxx_xxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_zzz_zzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_zzz_zzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_zzy_zyz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_zzy_zyz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_xzx_zxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_xzx_zxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_xyyx_yyxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_xyyx_yyxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_zxyz_xyzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec3_zxyz_xyzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_w_w_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_w_w_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_wx_xw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_wx_xw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_wz_zw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_wz_zw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_www_www_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_www_www_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_yyw_ywy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_yyw_ywy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_wzy_zyw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_wzy_zyw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_xyzw_yzwx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_xyzw_yzwx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_wzyx_zyxw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_wzyx_zyxw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_xyxy_yxyx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_xyxy_yxyx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_yzzy_zzyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_yzzy_zzyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_wxww_xwww_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_wxww_xwww_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_zzzz_zzzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_vec4_zzzz_zzzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec2_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec2_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec2_xx_xx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec2_xx_xx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec2_xy_yx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec2_xy_yx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec2_yx_xy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec2_yx_xy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec2_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec2_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec2_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec2_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec2_yxyx_xyxy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec2_yxyx_xyxy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_z_z_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_z_z_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_xz_zx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_xz_zx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_zz_zz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_zz_zz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_xyz_yzx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_xyz_yzx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_zyx_yxz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_zyx_yxz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_xxx_xxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_xxx_xxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_zzz_zzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_zzz_zzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_zzy_zyz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_zzy_zyz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_xzx_zxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_xzx_zxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_xyyx_yyxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_xyyx_yyxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_zxyz_xyzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec3_zxyz_xyzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_w_w_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_w_w_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_wx_xw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_wx_xw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_wz_zw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_wz_zw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_www_www_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_www_www_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_yyw_ywy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_yyw_ywy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_wzy_zyw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_wzy_zyw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_xyzw_yzwx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_xyzw_yzwx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_wzyx_zyxw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_wzyx_zyxw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_xyxy_yxyx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_xyxy_yxyx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_yzzy_zzyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_yzzy_zzyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_wxww_xwww_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_wxww_xwww_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_zzzz_zzzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_subtract.mediump_ivec4_zzzz_zzzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec2_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec2_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec2_xx_xx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec2_xx_xx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec2_xy_yx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec2_xy_yx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec2_yx_xy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec2_yx_xy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec2_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec2_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec2_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec2_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec2_yxyx_xyxy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec2_yxyx_xyxy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_z_z_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_z_z_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_xz_zx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_xz_zx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_zz_zz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_zz_zz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_xyz_yzx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_xyz_yzx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_zyx_yxz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_zyx_yxz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_xxx_xxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_xxx_xxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_zzz_zzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_zzz_zzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_zzy_zyz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_zzy_zyz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_xzx_zxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_xzx_zxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_xyyx_yyxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_xyyx_yyxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_zxyz_xyzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec3_zxyz_xyzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_w_w_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_w_w_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_wx_xw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_wx_xw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_wz_zw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_wz_zw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_www_www_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_www_www_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_yyw_ywy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_yyw_ywy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_wzy_zyw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_wzy_zyw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_xyzw_yzwx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_xyzw_yzwx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_wzyx_zyxw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_wzyx_zyxw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_xyxy_yxyx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_xyxy_yxyx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_yzzy_zzyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_yzzy_zzyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_wxww_xwww_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_wxww_xwww_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_zzzz_zzzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_vec4_zzzz_zzzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec2_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec2_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec2_xx_xx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec2_xx_xx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec2_xy_yx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec2_xy_yx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec2_yx_xy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec2_yx_xy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec2_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec2_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec2_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec2_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec2_yxyx_xyxy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec2_yxyx_xyxy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_z_z_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_z_z_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_xz_zx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_xz_zx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_zz_zz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_zz_zz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_xyz_yzx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_xyz_yzx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_zyx_yxz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_zyx_yxz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_xxx_xxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_xxx_xxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_zzz_zzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_zzz_zzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_zzy_zyz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_zzy_zyz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_xzx_zxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_xzx_zxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_xyyx_yyxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_xyyx_yyxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_zxyz_xyzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec3_zxyz_xyzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_w_w_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_w_w_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_wx_xw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_wx_xw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_wz_zw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_wz_zw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_www_www_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_www_www_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_yyw_ywy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_yyw_ywy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_wzy_zyw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_wzy_zyw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_xyzw_yzwx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_xyzw_yzwx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_wzyx_zyxw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_wzyx_zyxw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_xyxy_yxyx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_xyxy_yxyx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_yzzy_zzyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_yzzy_zzyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_wxww_xwww_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_wxww_xwww_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_zzzz_zzzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_multiply.mediump_ivec4_zzzz_zzzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec2_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec2_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec2_xx_xx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec2_xx_xx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec2_xy_yx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec2_xy_yx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec2_yx_xy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec2_yx_xy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec2_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec2_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec2_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec2_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec2_yxyx_xyxy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec2_yxyx_xyxy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_z_z_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_z_z_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_xz_zx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_xz_zx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_zz_zz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_zz_zz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_xyz_yzx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_xyz_yzx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_zyx_yxz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_zyx_yxz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_xxx_xxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_xxx_xxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_zzz_zzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_zzz_zzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_zzy_zyz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_zzy_zyz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_xzx_zxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_xzx_zxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_xyyx_yyxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_xyyx_yyxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_zxyz_xyzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec3_zxyz_xyzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_w_w_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_w_w_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_wx_xw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_wx_xw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_wz_zw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_wz_zw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_www_www_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_www_www_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_yyw_ywy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_yyw_ywy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_wzy_zyw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_wzy_zyw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_xyzw_yzwx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_xyzw_yzwx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_wzyx_zyxw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_wzyx_zyxw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_xyxy_yxyx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_xyxy_yxyx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_yzzy_zzyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_yzzy_zzyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_wxww_xwww_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_wxww_xwww_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_zzzz_zzzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_vec4_zzzz_zzzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec2_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec2_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec2_xx_xx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec2_xx_xx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec2_xy_yx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec2_xy_yx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec2_yx_xy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec2_yx_xy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec2_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec2_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec2_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec2_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec2_yxyx_xyxy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec2_yxyx_xyxy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_z_z_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_z_z_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_xz_zx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_xz_zx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_zz_zz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_zz_zz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_xyz_yzx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_xyz_yzx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_zyx_yxz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_zyx_yxz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_xxx_xxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_xxx_xxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_zzz_zzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_zzz_zzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_zzy_zyz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_zzy_zyz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_yxy_xyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_yxy_xyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_xzx_zxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_xzx_zxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_xyyx_yyxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_xyyx_yyxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_zxyz_xyzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec3_zxyz_xyzz_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_x_x_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_x_x_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_w_w_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_w_w_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_wx_xw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_wx_xw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_wz_zw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_wz_zw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_www_www_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_www_www_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_yyw_ywy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_yyw_ywy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_wzy_zyw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_wzy_zyw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_xyzw_yzwx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_xyzw_yzwx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_wzyx_zyxw_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_wzyx_zyxw_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_xyxy_yxyx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_xyxy_yxyx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_yzzy_zzyy_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_yzzy_zzyy_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_wxww_xwww_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_wxww_xwww_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_xyxx_yxxx_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_xyxx_yxxx_fragment
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_zzzz_zzzz_vertex
+dEQP-GLES3.functional.shaders.swizzle_math_operations.vector_divide.mediump_ivec4_zzzz_zzzz_fragment
 dEQP-GLES3.functional.shaders.functions.datatypes.float_float_vertex
 dEQP-GLES3.functional.shaders.functions.datatypes.float_float_fragment
 dEQP-GLES3.functional.shaders.functions.datatypes.float_vec2_vertex
diff --git a/data/gles3/shaders/swizzle_math_operations.test b/data/gles3/shaders/swizzle_math_operations.test
new file mode 100644 (file)
index 0000000..7a17199
--- /dev/null
@@ -0,0 +1,6547 @@
+# WARNING: This file is auto-generated. Do NOT modify it manually, but rather
+# modify the generating script file. Otherwise changes will be lost!
+
+group vector_add "Vector swizzle math operations"
+
+       case mediump_vec2_x_x
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output float out0 = [ 0.2 | 2.0 | -1.0 | -64.0 | -1.5 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x + in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_xx_xx
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec2 out0 = [ vec2(0.2, 0.2) | vec2(2.0, 2.0) | vec2(-1.0, -1.0) | vec2(-64.0, -64.0) | vec2(-1.5, -1.5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xx + in1.xx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_xy_yx
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec2 out0 = [ vec2(0.6, 0.6) | vec2(2.25, 2.25) | vec2(-2.75, -2.75) | vec2(32.0, 32.0) | vec2(-0.782258064516, -0.782258064516) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xy + in1.yx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_yx_xy
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec2 out0 = [ vec2(0.6, 0.6) | vec2(2.25, 2.25) | vec2(-2.75, -2.75) | vec2(32.0, 32.0) | vec2(-0.782258064516, -0.782258064516) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yx + in1.xy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_yxy_xyy
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec3 out0 = [ vec3(0.6, 0.6, 1.0) | vec3(2.25, 2.25, 2.5) | vec3(-2.75, -2.75, -4.5) | vec3(32.0, 32.0, 128.0) | vec3(-0.782258064516, -0.782258064516, -0.0645161290323) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy + in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec4 out0 = [ vec4(0.6, 0.6, 0.2, 0.2) | vec4(2.25, 2.25, 2.0, 2.0) | vec4(-2.75, -2.75, -1.0, -1.0) | vec4(32.0, 32.0, -64.0, -64.0) | vec4(-0.782258064516, -0.782258064516, -1.5, -1.5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx + in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_yxyx_xyxy
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec4 out0 = [ vec4(0.6, 0.6, 0.6, 0.6) | vec4(2.25, 2.25, 2.25, 2.25) | vec4(-2.75, -2.75, -2.75, -2.75) | vec4(32.0, 32.0, 32.0, 32.0) | vec4(-0.782258064516, -0.782258064516, -0.782258064516, -0.782258064516) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxyx + in1.xyxy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_x_x
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output float out0 = [ 0.2 | 2.0 | -1.0 | -64.0 | -1.5 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x + in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_z_z
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output float out0 = [ 1.5 | 2.25 | -9.75 | -102.0 | 0.105263157895 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.z + in1.z;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xz_zx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec2 out0 = [ vec2(0.85, 0.85) | vec2(2.125, 2.125) | vec2(-5.375, -5.375) | vec2(-83.0, -83.0) | vec2(-0.697368421053, -0.697368421053) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xz + in1.zx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zz_zz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec2 out0 = [ vec2(1.5, 1.5) | vec2(2.25, 2.25) | vec2(-9.75, -9.75) | vec2(-102.0, -102.0) | vec2(0.105263157895, 0.105263157895) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zz + in1.zz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xyz_yzx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.6, 1.25, 0.85) | vec3(2.25, 2.375, 2.125) | vec3(-2.75, -7.125, -5.375) | vec3(32.0, 13.0, -83.0) | vec3(-0.782258064516, 0.0203735144312, -0.697368421053) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyz + in1.yzx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zyx_yxz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(1.25, 0.6, 0.85) | vec3(2.375, 2.25, 2.125) | vec3(-7.125, -2.75, -5.375) | vec3(13.0, 32.0, -83.0) | vec3(0.0203735144312, -0.782258064516, -0.697368421053) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zyx + in1.yxz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xxx_xxx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.2, 0.2, 0.2) | vec3(2.0, 2.0, 2.0) | vec3(-1.0, -1.0, -1.0) | vec3(-64.0, -64.0, -64.0) | vec3(-1.5, -1.5, -1.5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xxx + in1.xxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zzz_zzz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(1.5, 1.5, 1.5) | vec3(2.25, 2.25, 2.25) | vec3(-9.75, -9.75, -9.75) | vec3(-102.0, -102.0, -102.0) | vec3(0.105263157895, 0.105263157895, 0.105263157895) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzz + in1.zzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zzy_zyz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(1.5, 1.25, 1.25) | vec3(2.25, 2.375, 2.375) | vec3(-9.75, -7.125, -7.125) | vec3(-102.0, 13.0, 13.0) | vec3(0.105263157895, 0.0203735144312, 0.0203735144312) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzy + in1.zyz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_yxy_xyy
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.6, 0.6, 1.0) | vec3(2.25, 2.25, 2.5) | vec3(-2.75, -2.75, -4.5) | vec3(32.0, 32.0, 128.0) | vec3(-0.782258064516, -0.782258064516, -0.0645161290323) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy + in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xzx_zxx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.85, 0.85, 0.2) | vec3(2.125, 2.125, 2.0) | vec3(-5.375, -5.375, -1.0) | vec3(-83.0, -83.0, -64.0) | vec3(-0.697368421053, -0.697368421053, -1.5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xzx + in1.zxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xyyx_yyxx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec4 out0 = [ vec4(0.6, 1.0, 0.6, 0.2) | vec4(2.25, 2.5, 2.25, 2.0) | vec4(-2.75, -4.5, -2.75, -1.0) | vec4(32.0, 128.0, 32.0, -64.0) | vec4(-0.782258064516, -0.0645161290323, -0.782258064516, -1.5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyyx + in1.yyxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zxyz_xyzz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec4 out0 = [ vec4(0.85, 0.6, 1.25, 1.5) | vec4(2.125, 2.25, 2.375, 2.25) | vec4(-5.375, -2.75, -7.125, -9.75) | vec4(-83.0, 32.0, 13.0, -102.0) | vec4(-0.697368421053, -0.782258064516, 0.0203735144312, 0.105263157895) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zxyz + in1.xyzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_x_x
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output float out0 = [ 0.2 | 2.0 | -1.0 | -64.0 | -1.5 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x + in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_w_w
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output float out0 = [ 1.65 | 3.5 | 18.0 | 48.0 | 0.5 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.w + in1.w;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wx_xw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec2 out0 = [ vec2(0.925, 0.925) | vec2(2.75, 2.75) | vec2(8.5, 8.5) | vec2(-8.0, -8.0) | vec2(-0.5, -0.5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wx + in1.xw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wz_zw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec2 out0 = [ vec2(1.575, 1.575) | vec2(2.875, 2.875) | vec2(4.125, 4.125) | vec2(-27.0, -27.0) | vec2(0.302631578947, 0.302631578947) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wz + in1.zw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_www_www
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec3 out0 = [ vec3(1.65, 1.65, 1.65) | vec3(3.5, 3.5, 3.5) | vec3(18.0, 18.0, 18.0) | vec3(48.0, 48.0, 48.0) | vec3(0.5, 0.5, 0.5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.www + in1.www;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_yyw_ywy
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec3 out0 = [ vec3(1.0, 1.325, 1.325) | vec3(2.5, 3.0, 3.0) | vec3(-4.5, 6.75, 6.75) | vec3(128.0, 88.0, 88.0) | vec3(-0.0645161290323, 0.217741935484, 0.217741935484) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yyw + in1.ywy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wzy_zyw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec3 out0 = [ vec3(1.575, 1.25, 1.325) | vec3(2.875, 2.375, 3.0) | vec3(4.125, -7.125, 6.75) | vec3(-27.0, 13.0, 88.0) | vec3(0.302631578947, 0.0203735144312, 0.217741935484) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzy + in1.zyw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_xyzw_yzwx
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.6, 1.25, 1.575, 0.925) | vec4(2.25, 2.375, 2.875, 2.75) | vec4(-2.75, -7.125, 4.125, 8.5) | vec4(32.0, 13.0, -27.0, -8.0) | vec4(-0.782258064516, 0.0203735144312, 0.302631578947, -0.5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyzw + in1.yzwx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wzyx_zyxw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(1.575, 1.25, 0.6, 0.925) | vec4(2.875, 2.375, 2.25, 2.75) | vec4(4.125, -7.125, -2.75, 8.5) | vec4(-27.0, 13.0, 32.0, -8.0) | vec4(0.302631578947, 0.0203735144312, -0.782258064516, -0.5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzyx + in1.zyxw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_xyxy_yxyx
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.6, 0.6, 0.6, 0.6) | vec4(2.25, 2.25, 2.25, 2.25) | vec4(-2.75, -2.75, -2.75, -2.75) | vec4(32.0, 32.0, 32.0, 32.0) | vec4(-0.782258064516, -0.782258064516, -0.782258064516, -0.782258064516) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxy + in1.yxyx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_yzzy_zzyy
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(1.25, 1.5, 1.25, 1.0) | vec4(2.375, 2.25, 2.375, 2.5) | vec4(-7.125, -9.75, -7.125, -4.5) | vec4(13.0, -102.0, 13.0, 128.0) | vec4(0.0203735144312, 0.105263157895, 0.0203735144312, -0.0645161290323) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yzzy + in1.zzyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wxww_xwww
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.925, 0.925, 1.65, 1.65) | vec4(2.75, 2.75, 3.5, 3.5) | vec4(8.5, 8.5, 18.0, 18.0) | vec4(-8.0, -8.0, 48.0, 48.0) | vec4(-0.5, -0.5, 0.5, 0.5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wxww + in1.xwww;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.6, 0.6, 0.2, 0.2) | vec4(2.25, 2.25, 2.0, 2.0) | vec4(-2.75, -2.75, -1.0, -1.0) | vec4(32.0, 32.0, -64.0, -64.0) | vec4(-0.782258064516, -0.782258064516, -1.5, -1.5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx + in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_zzzz_zzzz
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(1.5, 1.5, 1.5, 1.5) | vec4(2.25, 2.25, 2.25, 2.25) | vec4(-9.75, -9.75, -9.75, -9.75) | vec4(-102.0, -102.0, -102.0, -102.0) | vec4(0.105263157895, 0.105263157895, 0.105263157895, 0.105263157895) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzzz + in1.zzzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_x_x
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output int out0 = [ -2 | 2 | -2 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x + in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_xx_xx
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec2 out0 = [ ivec2(-2, -2) | ivec2(2, 2) | ivec2(-2, -2) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xx + in1.xx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_xy_yx
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec2 out0 = [ ivec2(0, 0) | ivec2(3, 3) | ivec2(-3, -3) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xy + in1.yx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_yx_xy
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec2 out0 = [ ivec2(0, 0) | ivec2(3, 3) | ivec2(-3, -3) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yx + in1.xy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_yxy_xyy
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec3 out0 = [ ivec3(0, 0, 2) | ivec3(3, 3, 4) | ivec3(-3, -3, -4) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy + in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec4 out0 = [ ivec4(0, 0, -2, -2) | ivec4(3, 3, 2, 2) | ivec4(-3, -3, -2, -2) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx + in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_yxyx_xyxy
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec4 out0 = [ ivec4(0, 0, 0, 0) | ivec4(3, 3, 3, 3) | ivec4(-3, -3, -3, -3) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxyx + in1.xyxy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_x_x
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output int out0 = [ -2 | 2 | -2 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x + in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_z_z
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output int out0 = [ -2 | 6 | -8 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.z + in1.z;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xz_zx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec2 out0 = [ ivec2(-2, -2) | ivec2(4, 4) | ivec2(-5, -5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xz + in1.zx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zz_zz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec2 out0 = [ ivec2(-2, -2) | ivec2(6, 6) | ivec2(-8, -8) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zz + in1.zz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xyz_yzx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(0, 0, -2) | ivec3(3, 5, 4) | ivec3(-3, -6, -5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyz + in1.yzx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zyx_yxz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(0, 0, -2) | ivec3(5, 3, 4) | ivec3(-6, -3, -5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zyx + in1.yxz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xxx_xxx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(-2, -2, -2) | ivec3(2, 2, 2) | ivec3(-2, -2, -2) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xxx + in1.xxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zzz_zzz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(-2, -2, -2) | ivec3(6, 6, 6) | ivec3(-8, -8, -8) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzz + in1.zzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zzy_zyz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(-2, 0, 0) | ivec3(6, 5, 5) | ivec3(-8, -6, -6) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzy + in1.zyz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_yxy_xyy
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(0, 0, 2) | ivec3(3, 3, 4) | ivec3(-3, -3, -4) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy + in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xzx_zxx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(-2, -2, -2) | ivec3(4, 4, 2) | ivec3(-5, -5, -2) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xzx + in1.zxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xyyx_yyxx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec4 out0 = [ ivec4(0, 2, 0, -2) | ivec4(3, 4, 3, 2) | ivec4(-3, -4, -3, -2) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyyx + in1.yyxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zxyz_xyzz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec4 out0 = [ ivec4(-2, 0, 0, -2) | ivec4(4, 3, 5, 6) | ivec4(-5, -3, -6, -8) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zxyz + in1.xyzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_x_x
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output int out0 = [ -2 | 2 | -2 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x + in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_w_w
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output int out0 = [ 2 | 8 | -18 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.w + in1.w;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wx_xw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec2 out0 = [ ivec2(0, 0) | ivec2(5, 5) | ivec2(-10, -10) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wx + in1.xw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wz_zw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec2 out0 = [ ivec2(0, 0) | ivec2(7, 7) | ivec2(-13, -13) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wz + in1.zw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_www_www
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec3 out0 = [ ivec3(2, 2, 2) | ivec3(8, 8, 8) | ivec3(-18, -18, -18) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.www + in1.www;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_yyw_ywy
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec3 out0 = [ ivec3(2, 2, 2) | ivec3(4, 6, 6) | ivec3(-4, -11, -11) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yyw + in1.ywy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wzy_zyw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec3 out0 = [ ivec3(0, 0, 2) | ivec3(7, 5, 6) | ivec3(-13, -6, -11) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzy + in1.zyw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_xyzw_yzwx
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(0, 0, 0, 0) | ivec4(3, 5, 7, 5) | ivec4(-3, -6, -13, -10) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyzw + in1.yzwx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wzyx_zyxw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(0, 0, 0, 0) | ivec4(7, 5, 3, 5) | ivec4(-13, -6, -3, -10) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzyx + in1.zyxw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_xyxy_yxyx
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(0, 0, 0, 0) | ivec4(3, 3, 3, 3) | ivec4(-3, -3, -3, -3) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxy + in1.yxyx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_yzzy_zzyy
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(0, -2, 0, 2) | ivec4(5, 6, 5, 4) | ivec4(-6, -8, -6, -4) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yzzy + in1.zzyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wxww_xwww
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(0, 0, 2, 2) | ivec4(5, 5, 8, 8) | ivec4(-10, -10, -18, -18) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wxww + in1.xwww;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(0, 0, -2, -2) | ivec4(3, 3, 2, 2) | ivec4(-3, -3, -2, -2) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx + in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_zzzz_zzzz
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-2, -2, -2, -2) | ivec4(6, 6, 6, 6) | ivec4(-8, -8, -8, -8) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzzz + in1.zzzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+
+end # vector_add
+group vector_subtract "Vector swizzle math operations"
+
+       case mediump_vec2_x_x
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output float out0 = [ 0.0 | 0.0 | 0.0 | 0.0 | 0.0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x - in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_xx_xx
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec2 out0 = [ vec2(0.0, 0.0) | vec2(0.0, 0.0) | vec2(0.0, 0.0) | vec2(0.0, 0.0) | vec2(0.0, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xx - in1.xx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_xy_yx
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec2 out0 = [ vec2(-0.4, 0.4) | vec2(-0.25, 0.25) | vec2(1.75, -1.75) | vec2(-96.0, 96.0) | vec2(-0.717741935484, 0.717741935484) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xy - in1.yx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_yx_xy
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec2 out0 = [ vec2(0.4, -0.4) | vec2(0.25, -0.25) | vec2(-1.75, 1.75) | vec2(96.0, -96.0) | vec2(0.717741935484, -0.717741935484) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yx - in1.xy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_yxy_xyy
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec3 out0 = [ vec3(0.4, -0.4, 0.0) | vec3(0.25, -0.25, 0.0) | vec3(-1.75, 1.75, 0.0) | vec3(96.0, -96.0, 0.0) | vec3(0.717741935484, -0.717741935484, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy - in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec4 out0 = [ vec4(-0.4, 0.4, 0.0, 0.0) | vec4(-0.25, 0.25, 0.0, 0.0) | vec4(1.75, -1.75, 0.0, 0.0) | vec4(-96.0, 96.0, 0.0, 0.0) | vec4(-0.717741935484, 0.717741935484, 0.0, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx - in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_yxyx_xyxy
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec4 out0 = [ vec4(0.4, -0.4, 0.4, -0.4) | vec4(0.25, -0.25, 0.25, -0.25) | vec4(-1.75, 1.75, -1.75, 1.75) | vec4(96.0, -96.0, 96.0, -96.0) | vec4(0.717741935484, -0.717741935484, 0.717741935484, -0.717741935484) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxyx - in1.xyxy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_x_x
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output float out0 = [ 0.0 | 0.0 | 0.0 | 0.0 | 0.0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x - in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_z_z
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output float out0 = [ 0.0 | 0.0 | 0.0 | 0.0 | 0.0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.z - in1.z;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xz_zx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec2 out0 = [ vec2(-0.65, 0.65) | vec2(-0.125, 0.125) | vec2(4.375, -4.375) | vec2(19.0, -19.0) | vec2(-0.802631578947, 0.802631578947) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xz - in1.zx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zz_zz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec2 out0 = [ vec2(0.0, 0.0) | vec2(0.0, 0.0) | vec2(0.0, 0.0) | vec2(0.0, 0.0) | vec2(0.0, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zz - in1.zz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xyz_yzx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(-0.4, -0.25, 0.65) | vec3(-0.25, 0.125, 0.125) | vec3(1.75, 2.625, -4.375) | vec3(-96.0, 115.0, -19.0) | vec3(-0.717741935484, -0.0848896434635, 0.802631578947) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyz - in1.yzx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zyx_yxz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.25, 0.4, -0.65) | vec3(-0.125, 0.25, -0.125) | vec3(-2.625, -1.75, 4.375) | vec3(-115.0, 96.0, 19.0) | vec3(0.0848896434635, 0.717741935484, -0.802631578947) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zyx - in1.yxz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xxx_xxx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.0, 0.0, 0.0) | vec3(0.0, 0.0, 0.0) | vec3(0.0, 0.0, 0.0) | vec3(0.0, 0.0, 0.0) | vec3(0.0, 0.0, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xxx - in1.xxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zzz_zzz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.0, 0.0, 0.0) | vec3(0.0, 0.0, 0.0) | vec3(0.0, 0.0, 0.0) | vec3(0.0, 0.0, 0.0) | vec3(0.0, 0.0, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzz - in1.zzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zzy_zyz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.0, 0.25, -0.25) | vec3(0.0, -0.125, 0.125) | vec3(0.0, -2.625, 2.625) | vec3(0.0, -115.0, 115.0) | vec3(0.0, 0.0848896434635, -0.0848896434635) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzy - in1.zyz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_yxy_xyy
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.4, -0.4, 0.0) | vec3(0.25, -0.25, 0.0) | vec3(-1.75, 1.75, 0.0) | vec3(96.0, -96.0, 0.0) | vec3(0.717741935484, -0.717741935484, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy - in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xzx_zxx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(-0.65, 0.65, 0.0) | vec3(-0.125, 0.125, 0.0) | vec3(4.375, -4.375, 0.0) | vec3(19.0, -19.0, 0.0) | vec3(-0.802631578947, 0.802631578947, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xzx - in1.zxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xyyx_yyxx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec4 out0 = [ vec4(-0.4, 0.0, 0.4, 0.0) | vec4(-0.25, 0.0, 0.25, 0.0) | vec4(1.75, 0.0, -1.75, 0.0) | vec4(-96.0, 0.0, 96.0, 0.0) | vec4(-0.717741935484, 0.0, 0.717741935484, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyyx - in1.yyxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zxyz_xyzz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec4 out0 = [ vec4(0.65, -0.4, -0.25, 0.0) | vec4(0.125, -0.25, 0.125, 0.0) | vec4(-4.375, 1.75, 2.625, 0.0) | vec4(-19.0, -96.0, 115.0, 0.0) | vec4(0.802631578947, -0.717741935484, -0.0848896434635, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zxyz - in1.xyzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_x_x
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output float out0 = [ 0.0 | 0.0 | 0.0 | 0.0 | 0.0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x - in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_w_w
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output float out0 = [ 0.0 | 0.0 | 0.0 | 0.0 | 0.0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.w - in1.w;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wx_xw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec2 out0 = [ vec2(0.725, -0.725) | vec2(0.75, -0.75) | vec2(9.5, -9.5) | vec2(56.0, -56.0) | vec2(1.0, -1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wx - in1.xw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wz_zw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec2 out0 = [ vec2(0.075, -0.075) | vec2(0.625, -0.625) | vec2(13.875, -13.875) | vec2(75.0, -75.0) | vec2(0.197368421053, -0.197368421053) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wz - in1.zw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_www_www
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec3 out0 = [ vec3(0.0, 0.0, 0.0) | vec3(0.0, 0.0, 0.0) | vec3(0.0, 0.0, 0.0) | vec3(0.0, 0.0, 0.0) | vec3(0.0, 0.0, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.www - in1.www;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_yyw_ywy
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec3 out0 = [ vec3(0.0, -0.325, 0.325) | vec3(0.0, -0.5, 0.5) | vec3(0.0, -11.25, 11.25) | vec3(0.0, 40.0, -40.0) | vec3(0.0, -0.282258064516, 0.282258064516) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yyw - in1.ywy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wzy_zyw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec3 out0 = [ vec3(0.075, 0.25, -0.325) | vec3(0.625, -0.125, -0.5) | vec3(13.875, -2.625, -11.25) | vec3(75.0, -115.0, 40.0) | vec3(0.197368421053, 0.0848896434635, -0.282258064516) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzy - in1.zyw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_xyzw_yzwx
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(-0.4, -0.25, -0.075, 0.725) | vec4(-0.25, 0.125, -0.625, 0.75) | vec4(1.75, 2.625, -13.875, 9.5) | vec4(-96.0, 115.0, -75.0, 56.0) | vec4(-0.717741935484, -0.0848896434635, -0.197368421053, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyzw - in1.yzwx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wzyx_zyxw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.075, 0.25, 0.4, -0.725) | vec4(0.625, -0.125, 0.25, -0.75) | vec4(13.875, -2.625, -1.75, -9.5) | vec4(75.0, -115.0, 96.0, -56.0) | vec4(0.197368421053, 0.0848896434635, 0.717741935484, -1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzyx - in1.zyxw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_xyxy_yxyx
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(-0.4, 0.4, -0.4, 0.4) | vec4(-0.25, 0.25, -0.25, 0.25) | vec4(1.75, -1.75, 1.75, -1.75) | vec4(-96.0, 96.0, -96.0, 96.0) | vec4(-0.717741935484, 0.717741935484, -0.717741935484, 0.717741935484) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxy - in1.yxyx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_yzzy_zzyy
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(-0.25, 0.0, 0.25, 0.0) | vec4(0.125, 0.0, -0.125, 0.0) | vec4(2.625, 0.0, -2.625, 0.0) | vec4(115.0, 0.0, -115.0, 0.0) | vec4(-0.0848896434635, 0.0, 0.0848896434635, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yzzy - in1.zzyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wxww_xwww
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.725, -0.725, 0.0, 0.0) | vec4(0.75, -0.75, 0.0, 0.0) | vec4(9.5, -9.5, 0.0, 0.0) | vec4(56.0, -56.0, 0.0, 0.0) | vec4(1.0, -1.0, 0.0, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wxww - in1.xwww;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(-0.4, 0.4, 0.0, 0.0) | vec4(-0.25, 0.25, 0.0, 0.0) | vec4(1.75, -1.75, 0.0, 0.0) | vec4(-96.0, 96.0, 0.0, 0.0) | vec4(-0.717741935484, 0.717741935484, 0.0, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx - in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_zzzz_zzzz
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.0, 0.0, 0.0, 0.0) | vec4(0.0, 0.0, 0.0, 0.0) | vec4(0.0, 0.0, 0.0, 0.0) | vec4(0.0, 0.0, 0.0, 0.0) | vec4(0.0, 0.0, 0.0, 0.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzzz - in1.zzzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_x_x
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output int out0 = [ 0 | 0 | 0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x - in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_xx_xx
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec2 out0 = [ ivec2(0, 0) | ivec2(0, 0) | ivec2(0, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xx - in1.xx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_xy_yx
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec2 out0 = [ ivec2(-2, 2) | ivec2(-1, 1) | ivec2(1, -1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xy - in1.yx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_yx_xy
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec2 out0 = [ ivec2(2, -2) | ivec2(1, -1) | ivec2(-1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yx - in1.xy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_yxy_xyy
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec3 out0 = [ ivec3(2, -2, 0) | ivec3(1, -1, 0) | ivec3(-1, 1, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy - in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec4 out0 = [ ivec4(-2, 2, 0, 0) | ivec4(-1, 1, 0, 0) | ivec4(1, -1, 0, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx - in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_yxyx_xyxy
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec4 out0 = [ ivec4(2, -2, 2, -2) | ivec4(1, -1, 1, -1) | ivec4(-1, 1, -1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxyx - in1.xyxy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_x_x
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output int out0 = [ 0 | 0 | 0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x - in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_z_z
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output int out0 = [ 0 | 0 | 0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.z - in1.z;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xz_zx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec2 out0 = [ ivec2(0, 0) | ivec2(-2, 2) | ivec2(3, -3) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xz - in1.zx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zz_zz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec2 out0 = [ ivec2(0, 0) | ivec2(0, 0) | ivec2(0, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zz - in1.zz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xyz_yzx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(-2, 2, 0) | ivec3(-1, -1, 2) | ivec3(1, 2, -3) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyz - in1.yzx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zyx_yxz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(-2, 2, 0) | ivec3(1, 1, -2) | ivec3(-2, -1, 3) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zyx - in1.yxz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xxx_xxx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(0, 0, 0) | ivec3(0, 0, 0) | ivec3(0, 0, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xxx - in1.xxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zzz_zzz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(0, 0, 0) | ivec3(0, 0, 0) | ivec3(0, 0, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzz - in1.zzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zzy_zyz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(0, -2, 2) | ivec3(0, 1, -1) | ivec3(0, -2, 2) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzy - in1.zyz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_yxy_xyy
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(2, -2, 0) | ivec3(1, -1, 0) | ivec3(-1, 1, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy - in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xzx_zxx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(0, 0, 0) | ivec3(-2, 2, 0) | ivec3(3, -3, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xzx - in1.zxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xyyx_yyxx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec4 out0 = [ ivec4(-2, 0, 2, 0) | ivec4(-1, 0, 1, 0) | ivec4(1, 0, -1, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyyx - in1.yyxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zxyz_xyzz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec4 out0 = [ ivec4(0, -2, 2, 0) | ivec4(2, -1, -1, 0) | ivec4(-3, 1, 2, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zxyz - in1.xyzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_x_x
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output int out0 = [ 0 | 0 | 0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x - in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_w_w
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output int out0 = [ 0 | 0 | 0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.w - in1.w;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wx_xw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec2 out0 = [ ivec2(2, -2) | ivec2(3, -3) | ivec2(-8, 8) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wx - in1.xw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wz_zw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec2 out0 = [ ivec2(2, -2) | ivec2(1, -1) | ivec2(-5, 5) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wz - in1.zw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_www_www
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec3 out0 = [ ivec3(0, 0, 0) | ivec3(0, 0, 0) | ivec3(0, 0, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.www - in1.www;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_yyw_ywy
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec3 out0 = [ ivec3(0, 0, 0) | ivec3(0, -2, 2) | ivec3(0, 7, -7) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yyw - in1.ywy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wzy_zyw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec3 out0 = [ ivec3(2, -2, 0) | ivec3(1, 1, -2) | ivec3(-5, -2, 7) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzy - in1.zyw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_xyzw_yzwx
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-2, 2, -2, 2) | ivec4(-1, -1, -1, 3) | ivec4(1, 2, 5, -8) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyzw - in1.yzwx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wzyx_zyxw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(2, -2, 2, -2) | ivec4(1, 1, 1, -3) | ivec4(-5, -2, -1, 8) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzyx - in1.zyxw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_xyxy_yxyx
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-2, 2, -2, 2) | ivec4(-1, 1, -1, 1) | ivec4(1, -1, 1, -1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxy - in1.yxyx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_yzzy_zzyy
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(2, 0, -2, 0) | ivec4(-1, 0, 1, 0) | ivec4(2, 0, -2, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yzzy - in1.zzyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wxww_xwww
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(2, -2, 0, 0) | ivec4(3, -3, 0, 0) | ivec4(-8, 8, 0, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wxww - in1.xwww;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-2, 2, 0, 0) | ivec4(-1, 1, 0, 0) | ivec4(1, -1, 0, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx - in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_zzzz_zzzz
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(0, 0, 0, 0) | ivec4(0, 0, 0, 0) | ivec4(0, 0, 0, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzzz - in1.zzzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+
+end # vector_subtract
+group vector_multiply "Vector swizzle math operations"
+
+       case mediump_vec2_x_x
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output float out0 = [ 0.01 | 1.0 | 0.25 | 1024.0 | 0.5625 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x * in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_xx_xx
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec2 out0 = [ vec2(0.01, 0.01) | vec2(1.0, 1.0) | vec2(0.25, 0.25) | vec2(1024.0, 1024.0) | vec2(0.5625, 0.5625) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xx * in1.xx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_xy_yx
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec2 out0 = [ vec2(0.05, 0.05) | vec2(1.25, 1.25) | vec2(1.125, 1.125) | vec2(-2048.0, -2048.0) | vec2(0.0241935483871, 0.0241935483871) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xy * in1.yx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_yx_xy
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec2 out0 = [ vec2(0.05, 0.05) | vec2(1.25, 1.25) | vec2(1.125, 1.125) | vec2(-2048.0, -2048.0) | vec2(0.0241935483871, 0.0241935483871) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yx * in1.xy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_yxy_xyy
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec3 out0 = [ vec3(0.05, 0.05, 0.25) | vec3(1.25, 1.25, 1.5625) | vec3(1.125, 1.125, 5.0625) | vec3(-2048.0, -2048.0, 4096.0) | vec3(0.0241935483871, 0.0241935483871, 0.00104058272633) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy * in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec4 out0 = [ vec4(0.05, 0.05, 0.01, 0.01) | vec4(1.25, 1.25, 1.0, 1.0) | vec4(1.125, 1.125, 0.25, 0.25) | vec4(-2048.0, -2048.0, 1024.0, 1024.0) | vec4(0.0241935483871, 0.0241935483871, 0.5625, 0.5625) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx * in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_yxyx_xyxy
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec4 out0 = [ vec4(0.05, 0.05, 0.05, 0.05) | vec4(1.25, 1.25, 1.25, 1.25) | vec4(1.125, 1.125, 1.125, 1.125) | vec4(-2048.0, -2048.0, -2048.0, -2048.0) | vec4(0.0241935483871, 0.0241935483871, 0.0241935483871, 0.0241935483871) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxyx * in1.xyxy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_x_x
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output float out0 = [ 0.01 | 1.0 | 0.25 | 1024.0 | 0.5625 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x * in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_z_z
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output float out0 = [ 0.5625 | 1.265625 | 23.765625 | 2601.0 | 0.00277008310249 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.z * in1.z;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xz_zx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec2 out0 = [ vec2(0.075, 0.075) | vec2(1.125, 1.125) | vec2(2.4375, 2.4375) | vec2(1632.0, 1632.0) | vec2(-0.0394736842105, -0.0394736842105) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xz * in1.zx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zz_zz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec2 out0 = [ vec2(0.5625, 0.5625) | vec2(1.265625, 1.265625) | vec2(23.765625, 23.765625) | vec2(2601.0, 2601.0) | vec2(0.00277008310249, 0.00277008310249) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zz * in1.zz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xyz_yzx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.05, 0.375, 0.075) | vec3(1.25, 1.40625, 1.125) | vec3(1.125, 10.96875, 2.4375) | vec3(-2048.0, -3264.0, 1632.0) | vec3(0.0241935483871, -0.00169779286927, -0.0394736842105) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyz * in1.yzx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zyx_yxz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.375, 0.05, 0.075) | vec3(1.40625, 1.25, 1.125) | vec3(10.96875, 1.125, 2.4375) | vec3(-3264.0, -2048.0, 1632.0) | vec3(-0.00169779286927, 0.0241935483871, -0.0394736842105) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zyx * in1.yxz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xxx_xxx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.01, 0.01, 0.01) | vec3(1.0, 1.0, 1.0) | vec3(0.25, 0.25, 0.25) | vec3(1024.0, 1024.0, 1024.0) | vec3(0.5625, 0.5625, 0.5625) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xxx * in1.xxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zzz_zzz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.5625, 0.5625, 0.5625) | vec3(1.265625, 1.265625, 1.265625) | vec3(23.765625, 23.765625, 23.765625) | vec3(2601.0, 2601.0, 2601.0) | vec3(0.00277008310249, 0.00277008310249, 0.00277008310249) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzz * in1.zzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zzy_zyz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.5625, 0.375, 0.375) | vec3(1.265625, 1.40625, 1.40625) | vec3(23.765625, 10.96875, 10.96875) | vec3(2601.0, -3264.0, -3264.0) | vec3(0.00277008310249, -0.00169779286927, -0.00169779286927) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzy * in1.zyz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_yxy_xyy
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.05, 0.05, 0.25) | vec3(1.25, 1.25, 1.5625) | vec3(1.125, 1.125, 5.0625) | vec3(-2048.0, -2048.0, 4096.0) | vec3(0.0241935483871, 0.0241935483871, 0.00104058272633) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy * in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xzx_zxx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.075, 0.075, 0.01) | vec3(1.125, 1.125, 1.0) | vec3(2.4375, 2.4375, 0.25) | vec3(1632.0, 1632.0, 1024.0) | vec3(-0.0394736842105, -0.0394736842105, 0.5625) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xzx * in1.zxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xyyx_yyxx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec4 out0 = [ vec4(0.05, 0.25, 0.05, 0.01) | vec4(1.25, 1.5625, 1.25, 1.0) | vec4(1.125, 5.0625, 1.125, 0.25) | vec4(-2048.0, 4096.0, -2048.0, 1024.0) | vec4(0.0241935483871, 0.00104058272633, 0.0241935483871, 0.5625) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyyx * in1.yyxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zxyz_xyzz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec4 out0 = [ vec4(0.075, 0.05, 0.375, 0.5625) | vec4(1.125, 1.25, 1.40625, 1.265625) | vec4(2.4375, 1.125, 10.96875, 23.765625) | vec4(1632.0, -2048.0, -3264.0, 2601.0) | vec4(-0.0394736842105, 0.0241935483871, -0.00169779286927, 0.00277008310249) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zxyz * in1.xyzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_x_x
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output float out0 = [ 0.01 | 1.0 | 0.25 | 1024.0 | 0.5625 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x * in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_w_w
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output float out0 = [ 0.680625 | 3.0625 | 81.0 | 576.0 | 0.0625 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.w * in1.w;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wx_xw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec2 out0 = [ vec2(0.0825, 0.0825) | vec2(1.75, 1.75) | vec2(-4.5, -4.5) | vec2(-768.0, -768.0) | vec2(-0.1875, -0.1875) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wx * in1.xw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wz_zw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec2 out0 = [ vec2(0.61875, 0.61875) | vec2(1.96875, 1.96875) | vec2(-43.875, -43.875) | vec2(-1224.0, -1224.0) | vec2(0.0131578947368, 0.0131578947368) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wz * in1.zw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_www_www
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec3 out0 = [ vec3(0.680625, 0.680625, 0.680625) | vec3(3.0625, 3.0625, 3.0625) | vec3(81.0, 81.0, 81.0) | vec3(576.0, 576.0, 576.0) | vec3(0.0625, 0.0625, 0.0625) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.www * in1.www;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_yyw_ywy
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec3 out0 = [ vec3(0.25, 0.4125, 0.4125) | vec3(1.5625, 2.1875, 2.1875) | vec3(5.0625, -20.25, -20.25) | vec3(4096.0, 1536.0, 1536.0) | vec3(0.00104058272633, -0.00806451612903, -0.00806451612903) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yyw * in1.ywy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wzy_zyw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec3 out0 = [ vec3(0.61875, 0.375, 0.4125) | vec3(1.96875, 1.40625, 2.1875) | vec3(-43.875, 10.96875, -20.25) | vec3(-1224.0, -3264.0, 1536.0) | vec3(0.0131578947368, -0.00169779286927, -0.00806451612903) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzy * in1.zyw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_xyzw_yzwx
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.05, 0.375, 0.61875, 0.0825) | vec4(1.25, 1.40625, 1.96875, 1.75) | vec4(1.125, 10.96875, -43.875, -4.5) | vec4(-2048.0, -3264.0, -1224.0, -768.0) | vec4(0.0241935483871, -0.00169779286927, 0.0131578947368, -0.1875) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyzw * in1.yzwx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wzyx_zyxw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.61875, 0.375, 0.05, 0.0825) | vec4(1.96875, 1.40625, 1.25, 1.75) | vec4(-43.875, 10.96875, 1.125, -4.5) | vec4(-1224.0, -3264.0, -2048.0, -768.0) | vec4(0.0131578947368, -0.00169779286927, 0.0241935483871, -0.1875) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzyx * in1.zyxw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_xyxy_yxyx
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.05, 0.05, 0.05, 0.05) | vec4(1.25, 1.25, 1.25, 1.25) | vec4(1.125, 1.125, 1.125, 1.125) | vec4(-2048.0, -2048.0, -2048.0, -2048.0) | vec4(0.0241935483871, 0.0241935483871, 0.0241935483871, 0.0241935483871) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxy * in1.yxyx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_yzzy_zzyy
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.375, 0.5625, 0.375, 0.25) | vec4(1.40625, 1.265625, 1.40625, 1.5625) | vec4(10.96875, 23.765625, 10.96875, 5.0625) | vec4(-3264.0, 2601.0, -3264.0, 4096.0) | vec4(-0.00169779286927, 0.00277008310249, -0.00169779286927, 0.00104058272633) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yzzy * in1.zzyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wxww_xwww
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.0825, 0.0825, 0.680625, 0.680625) | vec4(1.75, 1.75, 3.0625, 3.0625) | vec4(-4.5, -4.5, 81.0, 81.0) | vec4(-768.0, -768.0, 576.0, 576.0) | vec4(-0.1875, -0.1875, 0.0625, 0.0625) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wxww * in1.xwww;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.05, 0.05, 0.01, 0.01) | vec4(1.25, 1.25, 1.0, 1.0) | vec4(1.125, 1.125, 0.25, 0.25) | vec4(-2048.0, -2048.0, 1024.0, 1024.0) | vec4(0.0241935483871, 0.0241935483871, 0.5625, 0.5625) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx * in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_zzzz_zzzz
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.5625, 0.5625, 0.5625, 0.5625) | vec4(1.265625, 1.265625, 1.265625, 1.265625) | vec4(23.765625, 23.765625, 23.765625, 23.765625) | vec4(2601.0, 2601.0, 2601.0, 2601.0) | vec4(0.00277008310249, 0.00277008310249, 0.00277008310249, 0.00277008310249) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzzz * in1.zzzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_x_x
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output int out0 = [ 1 | 1 | 1 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x * in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_xx_xx
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec2 out0 = [ ivec2(1, 1) | ivec2(1, 1) | ivec2(1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xx * in1.xx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_xy_yx
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec2 out0 = [ ivec2(-1, -1) | ivec2(2, 2) | ivec2(2, 2) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xy * in1.yx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_yx_xy
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec2 out0 = [ ivec2(-1, -1) | ivec2(2, 2) | ivec2(2, 2) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yx * in1.xy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_yxy_xyy
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec3 out0 = [ ivec3(-1, -1, 1) | ivec3(2, 2, 4) | ivec3(2, 2, 4) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy * in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec4 out0 = [ ivec4(-1, -1, 1, 1) | ivec4(2, 2, 1, 1) | ivec4(2, 2, 1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx * in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_yxyx_xyxy
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec4 out0 = [ ivec4(-1, -1, -1, -1) | ivec4(2, 2, 2, 2) | ivec4(2, 2, 2, 2) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxyx * in1.xyxy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_x_x
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output int out0 = [ 1 | 1 | 1 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x * in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_z_z
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output int out0 = [ 1 | 9 | 16 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.z * in1.z;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xz_zx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec2 out0 = [ ivec2(1, 1) | ivec2(3, 3) | ivec2(4, 4) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xz * in1.zx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zz_zz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec2 out0 = [ ivec2(1, 1) | ivec2(9, 9) | ivec2(16, 16) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zz * in1.zz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xyz_yzx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(-1, -1, 1) | ivec3(2, 6, 3) | ivec3(2, 8, 4) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyz * in1.yzx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zyx_yxz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(-1, -1, 1) | ivec3(6, 2, 3) | ivec3(8, 2, 4) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zyx * in1.yxz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xxx_xxx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(1, 1, 1) | ivec3(1, 1, 1) | ivec3(1, 1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xxx * in1.xxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zzz_zzz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(1, 1, 1) | ivec3(9, 9, 9) | ivec3(16, 16, 16) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzz * in1.zzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zzy_zyz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(1, -1, -1) | ivec3(9, 6, 6) | ivec3(16, 8, 8) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzy * in1.zyz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_yxy_xyy
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(-1, -1, 1) | ivec3(2, 2, 4) | ivec3(2, 2, 4) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy * in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xzx_zxx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(1, 1, 1) | ivec3(3, 3, 1) | ivec3(4, 4, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xzx * in1.zxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xyyx_yyxx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec4 out0 = [ ivec4(-1, 1, -1, 1) | ivec4(2, 4, 2, 1) | ivec4(2, 4, 2, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyyx * in1.yyxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zxyz_xyzz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec4 out0 = [ ivec4(1, -1, -1, 1) | ivec4(3, 2, 6, 9) | ivec4(4, 2, 8, 16) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zxyz * in1.xyzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_x_x
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output int out0 = [ 1 | 1 | 1 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x * in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_w_w
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output int out0 = [ 1 | 16 | 81 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.w * in1.w;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wx_xw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec2 out0 = [ ivec2(-1, -1) | ivec2(4, 4) | ivec2(9, 9) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wx * in1.xw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wz_zw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec2 out0 = [ ivec2(-1, -1) | ivec2(12, 12) | ivec2(36, 36) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wz * in1.zw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_www_www
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec3 out0 = [ ivec3(1, 1, 1) | ivec3(16, 16, 16) | ivec3(81, 81, 81) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.www * in1.www;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_yyw_ywy
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec3 out0 = [ ivec3(1, 1, 1) | ivec3(4, 8, 8) | ivec3(4, 18, 18) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yyw * in1.ywy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wzy_zyw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec3 out0 = [ ivec3(-1, -1, 1) | ivec3(12, 6, 8) | ivec3(36, 8, 18) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzy * in1.zyw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_xyzw_yzwx
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-1, -1, -1, -1) | ivec4(2, 6, 12, 4) | ivec4(2, 8, 36, 9) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyzw * in1.yzwx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wzyx_zyxw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-1, -1, -1, -1) | ivec4(12, 6, 2, 4) | ivec4(36, 8, 2, 9) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzyx * in1.zyxw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_xyxy_yxyx
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-1, -1, -1, -1) | ivec4(2, 2, 2, 2) | ivec4(2, 2, 2, 2) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxy * in1.yxyx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_yzzy_zzyy
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-1, 1, -1, 1) | ivec4(6, 9, 6, 4) | ivec4(8, 16, 8, 4) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yzzy * in1.zzyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wxww_xwww
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-1, -1, 1, 1) | ivec4(4, 4, 16, 16) | ivec4(9, 9, 81, 81) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wxww * in1.xwww;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-1, -1, 1, 1) | ivec4(2, 2, 1, 1) | ivec4(2, 2, 1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx * in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_zzzz_zzzz
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(1, 1, 1, 1) | ivec4(9, 9, 9, 9) | ivec4(16, 16, 16, 16) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzzz * in1.zzzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+
+end # vector_multiply
+group vector_divide "Vector swizzle math operations"
+
+       case mediump_vec2_x_x
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output float out0 = [ 1.0 | 1.0 | 1.0 | 1.0 | 1.0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x / in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_xx_xx
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec2 out0 = [ vec2(1.0, 1.0) | vec2(1.0, 1.0) | vec2(1.0, 1.0) | vec2(1.0, 1.0) | vec2(1.0, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xx / in1.xx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_xy_yx
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec2 out0 = [ vec2(0.2, 5.0) | vec2(0.8, 1.25) | vec2(0.222222222222, 4.5) | vec2(-0.5, -2.0) | vec2(23.25, 0.0430107526882) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xy / in1.yx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_yx_xy
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec2 out0 = [ vec2(5.0, 0.2) | vec2(1.25, 0.8) | vec2(4.5, 0.222222222222) | vec2(-2.0, -0.5) | vec2(0.0430107526882, 23.25) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yx / in1.xy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_yxy_xyy
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec3 out0 = [ vec3(5.0, 0.2, 1.0) | vec3(1.25, 0.8, 1.0) | vec3(4.5, 0.222222222222, 1.0) | vec3(-2.0, -0.5, 1.0) | vec3(0.0430107526882, 23.25, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy / in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec4 out0 = [ vec4(0.2, 5.0, 1.0, 1.0) | vec4(0.8, 1.25, 1.0, 1.0) | vec4(0.222222222222, 4.5, 1.0, 1.0) | vec4(-0.5, -2.0, 1.0, 1.0) | vec4(23.25, 0.0430107526882, 1.0, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx / in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec2_yxyx_xyxy
+               version 300 es
+               values
+               {
+                       input vec2 in0 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       input vec2 in1 = [ vec2(0.1, 0.5) | vec2(1.0, 1.25) | vec2(-0.5, -2.25) | vec2(-32.0, 64.0) | vec2(-0.75, -0.0322580645161) ];
+                       output vec4 out0 = [ vec4(5.0, 0.2, 5.0, 0.2) | vec4(1.25, 0.8, 1.25, 0.8) | vec4(4.5, 0.222222222222, 4.5, 0.222222222222) | vec4(-2.0, -0.5, -2.0, -0.5) | vec4(0.0430107526882, 23.25, 0.0430107526882, 23.25) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxyx / in1.xyxy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_x_x
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output float out0 = [ 1.0 | 1.0 | 1.0 | 1.0 | 1.0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x / in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_z_z
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output float out0 = [ 1.0 | 1.0 | 1.0 | 1.0 | 1.0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.z / in1.z;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xz_zx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec2 out0 = [ vec2(0.133333333333, 7.5) | vec2(0.888888888889, 1.125) | vec2(0.102564102564, 9.75) | vec2(0.627450980392, 1.59375) | vec2(-14.25, -0.0701754385965) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xz / in1.zx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zz_zz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec2 out0 = [ vec2(1.0, 1.0) | vec2(1.0, 1.0) | vec2(1.0, 1.0) | vec2(1.0, 1.0) | vec2(1.0, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zz / in1.zz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xyz_yzx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.2, 0.666666666667, 7.5) | vec3(0.8, 1.11111111111, 1.125) | vec3(0.222222222222, 0.461538461538, 9.75) | vec3(-0.5, -1.25490196078, 1.59375) | vec3(23.25, -0.612903225806, -0.0701754385965) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyz / in1.yzx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zyx_yxz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(1.5, 5.0, 0.133333333333) | vec3(0.9, 1.25, 0.888888888889) | vec3(2.16666666667, 4.5, 0.102564102564) | vec3(-0.796875, -2.0, 0.627450980392) | vec3(-1.63157894737, 0.0430107526882, -14.25) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zyx / in1.yxz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xxx_xxx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(1.0, 1.0, 1.0) | vec3(1.0, 1.0, 1.0) | vec3(1.0, 1.0, 1.0) | vec3(1.0, 1.0, 1.0) | vec3(1.0, 1.0, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xxx / in1.xxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zzz_zzz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(1.0, 1.0, 1.0) | vec3(1.0, 1.0, 1.0) | vec3(1.0, 1.0, 1.0) | vec3(1.0, 1.0, 1.0) | vec3(1.0, 1.0, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzz / in1.zzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zzy_zyz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(1.0, 1.5, 0.666666666667) | vec3(1.0, 0.9, 1.11111111111) | vec3(1.0, 2.16666666667, 0.461538461538) | vec3(1.0, -0.796875, -1.25490196078) | vec3(1.0, -1.63157894737, -0.612903225806) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzy / in1.zyz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_yxy_xyy
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(5.0, 0.2, 1.0) | vec3(1.25, 0.8, 1.0) | vec3(4.5, 0.222222222222, 1.0) | vec3(-2.0, -0.5, 1.0) | vec3(0.0430107526882, 23.25, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy / in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xzx_zxx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec3 out0 = [ vec3(0.133333333333, 7.5, 1.0) | vec3(0.888888888889, 1.125, 1.0) | vec3(0.102564102564, 9.75, 1.0) | vec3(0.627450980392, 1.59375, 1.0) | vec3(-14.25, -0.0701754385965, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xzx / in1.zxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_xyyx_yyxx
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec4 out0 = [ vec4(0.2, 1.0, 5.0, 1.0) | vec4(0.8, 1.0, 1.25, 1.0) | vec4(0.222222222222, 1.0, 4.5, 1.0) | vec4(-0.5, 1.0, -2.0, 1.0) | vec4(23.25, 1.0, 0.0430107526882, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyyx / in1.yyxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec3_zxyz_xyzz
+               version 300 es
+               values
+               {
+                       input vec3 in0 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       input vec3 in1 = [ vec3(0.1, 0.5, 0.75) | vec3(1.0, 1.25, 1.125) | vec3(-0.5, -2.25, -4.875) | vec3(-32.0, 64.0, -51.0) | vec3(-0.75, -0.0322580645161, 0.0526315789474) ];
+                       output vec4 out0 = [ vec4(7.5, 0.2, 0.666666666667, 1.0) | vec4(1.125, 0.8, 1.11111111111, 1.0) | vec4(9.75, 0.222222222222, 0.461538461538, 1.0) | vec4(1.59375, -0.5, -1.25490196078, 1.0) | vec4(-0.0701754385965, 23.25, -0.612903225806, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zxyz / in1.xyzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_x_x
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output float out0 = [ 1.0 | 1.0 | 1.0 | 1.0 | 1.0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x / in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_w_w
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output float out0 = [ 1.0 | 1.0 | 1.0 | 1.0 | 1.0 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.w / in1.w;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wx_xw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec2 out0 = [ vec2(8.25, 0.121212121212) | vec2(1.75, 0.571428571429) | vec2(-18.0, -0.0555555555556) | vec2(-0.75, -1.33333333333) | vec2(-0.333333333333, -3.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wx / in1.xw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wz_zw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec2 out0 = [ vec2(1.1, 0.909090909091) | vec2(1.55555555556, 0.642857142857) | vec2(-1.84615384615, -0.541666666667) | vec2(-0.470588235294, -2.125) | vec2(4.75, 0.210526315789) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wz / in1.zw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_www_www
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec3 out0 = [ vec3(1.0, 1.0, 1.0) | vec3(1.0, 1.0, 1.0) | vec3(1.0, 1.0, 1.0) | vec3(1.0, 1.0, 1.0) | vec3(1.0, 1.0, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.www / in1.www;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_yyw_ywy
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec3 out0 = [ vec3(1.0, 0.606060606061, 1.65) | vec3(1.0, 0.714285714286, 1.4) | vec3(1.0, -0.25, -4.0) | vec3(1.0, 2.66666666667, 0.375) | vec3(1.0, -0.129032258065, -7.75) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yyw / in1.ywy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wzy_zyw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec3 out0 = [ vec3(1.1, 1.5, 0.606060606061) | vec3(1.55555555556, 0.9, 0.714285714286) | vec3(-1.84615384615, 2.16666666667, -0.25) | vec3(-0.470588235294, -0.796875, 2.66666666667) | vec3(4.75, -1.63157894737, -0.129032258065) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzy / in1.zyw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_xyzw_yzwx
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.2, 0.666666666667, 0.909090909091, 8.25) | vec4(0.8, 1.11111111111, 0.642857142857, 1.75) | vec4(0.222222222222, 0.461538461538, -0.541666666667, -18.0) | vec4(-0.5, -1.25490196078, -2.125, -0.75) | vec4(23.25, -0.612903225806, 0.210526315789, -0.333333333333) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyzw / in1.yzwx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wzyx_zyxw
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(1.1, 1.5, 5.0, 0.121212121212) | vec4(1.55555555556, 0.9, 1.25, 0.571428571429) | vec4(-1.84615384615, 2.16666666667, 4.5, -0.0555555555556) | vec4(-0.470588235294, -0.796875, -2.0, -1.33333333333) | vec4(4.75, -1.63157894737, 0.0430107526882, -3.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzyx / in1.zyxw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_xyxy_yxyx
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.2, 5.0, 0.2, 5.0) | vec4(0.8, 1.25, 0.8, 1.25) | vec4(0.222222222222, 4.5, 0.222222222222, 4.5) | vec4(-0.5, -2.0, -0.5, -2.0) | vec4(23.25, 0.0430107526882, 23.25, 0.0430107526882) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxy / in1.yxyx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_yzzy_zzyy
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.666666666667, 1.0, 1.5, 1.0) | vec4(1.11111111111, 1.0, 0.9, 1.0) | vec4(0.461538461538, 1.0, 2.16666666667, 1.0) | vec4(-1.25490196078, 1.0, -0.796875, 1.0) | vec4(-0.612903225806, 1.0, -1.63157894737, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yzzy / in1.zzyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_wxww_xwww
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(8.25, 0.121212121212, 1.0, 1.0) | vec4(1.75, 0.571428571429, 1.0, 1.0) | vec4(-18.0, -0.0555555555556, 1.0, 1.0) | vec4(-0.75, -1.33333333333, 1.0, 1.0) | vec4(-0.333333333333, -3.0, 1.0, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wxww / in1.xwww;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(0.2, 5.0, 1.0, 1.0) | vec4(0.8, 1.25, 1.0, 1.0) | vec4(0.222222222222, 4.5, 1.0, 1.0) | vec4(-0.5, -2.0, 1.0, 1.0) | vec4(23.25, 0.0430107526882, 1.0, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx / in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_vec4_zzzz_zzzz
+               version 300 es
+               values
+               {
+                       input vec4 in0 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       input vec4 in1 = [ vec4(0.1, 0.5, 0.75, 0.825) | vec4(1.0, 1.25, 1.125, 1.75) | vec4(-0.5, -2.25, -4.875, 9.0) | vec4(-32.0, 64.0, -51.0, 24.0) | vec4(-0.75, -0.0322580645161, 0.0526315789474, 0.25) ];
+                       output vec4 out0 = [ vec4(1.0, 1.0, 1.0, 1.0) | vec4(1.0, 1.0, 1.0, 1.0) | vec4(1.0, 1.0, 1.0, 1.0) | vec4(1.0, 1.0, 1.0, 1.0) | vec4(1.0, 1.0, 1.0, 1.0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzzz / in1.zzzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_x_x
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output int out0 = [ 1 | 1 | 1 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x / in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_xx_xx
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec2 out0 = [ ivec2(1, 1) | ivec2(1, 1) | ivec2(1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xx / in1.xx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_xy_yx
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec2 out0 = [ ivec2(-1, -1) | ivec2(0, 2) | ivec2(0, 2) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xy / in1.yx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_yx_xy
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec2 out0 = [ ivec2(-1, -1) | ivec2(2, 0) | ivec2(2, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yx / in1.xy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_yxy_xyy
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec3 out0 = [ ivec3(-1, -1, 1) | ivec3(2, 0, 1) | ivec3(2, 0, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy / in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec4 out0 = [ ivec4(-1, -1, 1, 1) | ivec4(0, 2, 1, 1) | ivec4(0, 2, 1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx / in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec2_yxyx_xyxy
+               version 300 es
+               values
+               {
+                       input ivec2 in0 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       input ivec2 in1 = [ ivec2(-1, 1) | ivec2(1, 2) | ivec2(-1, -2) ];
+                       output ivec4 out0 = [ ivec4(-1, -1, -1, -1) | ivec4(2, 0, 2, 0) | ivec4(2, 0, 2, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxyx / in1.xyxy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_x_x
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output int out0 = [ 1 | 1 | 1 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x / in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_z_z
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output int out0 = [ 1 | 1 | 1 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.z / in1.z;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xz_zx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec2 out0 = [ ivec2(1, 1) | ivec2(0, 3) | ivec2(0, 4) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xz / in1.zx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zz_zz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec2 out0 = [ ivec2(1, 1) | ivec2(1, 1) | ivec2(1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zz / in1.zz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xyz_yzx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(-1, -1, 1) | ivec3(0, 0, 3) | ivec3(0, 0, 4) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyz / in1.yzx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zyx_yxz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(-1, -1, 1) | ivec3(1, 2, 0) | ivec3(2, 2, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zyx / in1.yxz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xxx_xxx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(1, 1, 1) | ivec3(1, 1, 1) | ivec3(1, 1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xxx / in1.xxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zzz_zzz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(1, 1, 1) | ivec3(1, 1, 1) | ivec3(1, 1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzz / in1.zzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zzy_zyz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(1, -1, -1) | ivec3(1, 1, 0) | ivec3(1, 2, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzy / in1.zyz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_yxy_xyy
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(-1, -1, 1) | ivec3(2, 0, 1) | ivec3(2, 0, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yxy / in1.xyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xzx_zxx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec3 out0 = [ ivec3(1, 1, 1) | ivec3(0, 3, 1) | ivec3(0, 4, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xzx / in1.zxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_xyyx_yyxx
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec4 out0 = [ ivec4(-1, 1, -1, 1) | ivec4(0, 1, 2, 1) | ivec4(0, 1, 2, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyyx / in1.yyxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec3_zxyz_xyzz
+               version 300 es
+               values
+               {
+                       input ivec3 in0 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       input ivec3 in1 = [ ivec3(-1, 1, -1) | ivec3(1, 2, 3) | ivec3(-1, -2, -4) ];
+                       output ivec4 out0 = [ ivec4(1, -1, -1, 1) | ivec4(3, 0, 0, 1) | ivec4(4, 0, 0, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zxyz / in1.xyzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_x_x
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output int out0 = [ 1 | 1 | 1 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.x / in1.x;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_w_w
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output int out0 = [ 1 | 1 | 1 ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.w / in1.w;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wx_xw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec2 out0 = [ ivec2(-1, -1) | ivec2(4, 0) | ivec2(9, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wx / in1.xw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wz_zw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec2 out0 = [ ivec2(-1, -1) | ivec2(1, 0) | ivec2(2, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wz / in1.zw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_www_www
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec3 out0 = [ ivec3(1, 1, 1) | ivec3(1, 1, 1) | ivec3(1, 1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.www / in1.www;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_yyw_ywy
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec3 out0 = [ ivec3(1, 1, 1) | ivec3(1, 0, 2) | ivec3(1, 0, 4) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yyw / in1.ywy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wzy_zyw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec3 out0 = [ ivec3(-1, -1, 1) | ivec3(1, 1, 0) | ivec3(2, 2, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzy / in1.zyw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_xyzw_yzwx
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-1, -1, -1, -1) | ivec4(0, 0, 0, 4) | ivec4(0, 0, 0, 9) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyzw / in1.yzwx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wzyx_zyxw
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-1, -1, -1, -1) | ivec4(1, 1, 2, 0) | ivec4(2, 2, 2, 0) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wzyx / in1.zyxw;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_xyxy_yxyx
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-1, -1, -1, -1) | ivec4(0, 2, 0, 2) | ivec4(0, 2, 0, 2) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxy / in1.yxyx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_yzzy_zzyy
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-1, 1, -1, 1) | ivec4(0, 1, 1, 1) | ivec4(0, 1, 2, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.yzzy / in1.zzyy;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_wxww_xwww
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-1, -1, 1, 1) | ivec4(4, 0, 1, 1) | ivec4(9, 0, 1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.wxww / in1.xwww;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_xyxx_yxxx
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(-1, -1, 1, 1) | ivec4(0, 2, 1, 1) | ivec4(0, 2, 1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.xyxx / in1.yxxx;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+       case mediump_ivec4_zzzz_zzzz
+               version 300 es
+               values
+               {
+                       input ivec4 in0 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       input ivec4 in1 = [ ivec4(-1, 1, -1, 1) | ivec4(1, 2, 3, 4) | ivec4(-1, -2, -4, -9) ];
+                       output ivec4 out0 = [ ivec4(1, 1, 1, 1) | ivec4(1, 1, 1, 1) | ivec4(1, 1, 1, 1) ];
+               }
+
+               both ""
+                       #version 300 es
+                       precision mediump float;
+
+                       ${DECLARATIONS}
+
+                       void main()
+                       {
+                               ${SETUP}
+                               out0 = in0.zzzz / in1.zzzz;
+                               ${OUTPUT}
+                       }
+               ""
+       end
+
+
+end # vector_divide
index 6f6f308..8315c8b 100644 (file)
@@ -191,20 +191,21 @@ public:
 
        void init (void)
        {
-               addChild(new ShaderLibraryTest                  (m_context, "preprocessor",                     "Preprocessor Tests"));
-               addChild(new ShaderLibraryTest                  (m_context, "constants",                        "Constant Literal Tests"));
-               addChild(new ShaderLibraryTest                  (m_context, "linkage",                          "Linkage Tests"));
-               addChild(new ShaderLibraryTest                  (m_context, "conversions",                      "Type Conversion Tests"));
-               addChild(new ShaderLibraryTest                  (m_context, "conditionals",                     "Conditionals Tests"));
-               addChild(new ShaderLibraryTest                  (m_context, "declarations",                     "Declarations Tests"));
-               addChild(new ShaderLibraryTest                  (m_context, "swizzles",                         "Swizzle Tests"));
-               addChild(new ShaderLibraryTest                  (m_context, "functions",                        "Function Tests"));
-               addChild(new ShaderLibraryTest                  (m_context, "arrays",                           "Array Tests"));
-               addChild(new ShaderLibraryTest                  (m_context, "keywords",                         "Keyword Tests"));
-               addChild(new ShaderLibraryTest                  (m_context, "qualification_order",      "Order Of Qualification Tests"));
-               addChild(new ShaderLibraryTest                  (m_context, "scoping",                          "Scoping of Declarations"));
-               addChild(new ShaderLibraryTest                  (m_context, "negative",                         "Miscellaneous Negative Shader Compilation Tests"));
-               addChild(new ShaderLibraryTest                  (m_context, "uniform_block",            "Uniform block tests"));
+               addChild(new ShaderLibraryTest                  (m_context, "preprocessor",                             "Preprocessor Tests"));
+               addChild(new ShaderLibraryTest                  (m_context, "constants",                                "Constant Literal Tests"));
+               addChild(new ShaderLibraryTest                  (m_context, "linkage",                                  "Linkage Tests"));
+               addChild(new ShaderLibraryTest                  (m_context, "conversions",                              "Type Conversion Tests"));
+               addChild(new ShaderLibraryTest                  (m_context, "conditionals",                             "Conditionals Tests"));
+               addChild(new ShaderLibraryTest                  (m_context, "declarations",                             "Declarations Tests"));
+               addChild(new ShaderLibraryTest                  (m_context, "swizzles",                                 "Swizzle Tests"));
+               addChild(new ShaderLibraryTest                  (m_context, "swizzle_math_operations",  "Swizzle Math Operations Tests"));
+               addChild(new ShaderLibraryTest                  (m_context, "functions",                                "Function Tests"));
+               addChild(new ShaderLibraryTest                  (m_context, "arrays",                                   "Array Tests"));
+               addChild(new ShaderLibraryTest                  (m_context, "keywords",                                 "Keyword Tests"));
+               addChild(new ShaderLibraryTest                  (m_context, "qualification_order",              "Order Of Qualification Tests"));
+               addChild(new ShaderLibraryTest                  (m_context, "scoping",                                  "Scoping of Declarations"));
+               addChild(new ShaderLibraryTest                  (m_context, "negative",                                 "Miscellaneous Negative Shader Compilation Tests"));
+               addChild(new ShaderLibraryTest                  (m_context, "uniform_block",                    "Uniform block tests"));
 
                addChild(new ShaderDiscardTests                 (m_context));
                addChild(new ShaderIndexingTests                (m_context));
diff --git a/modules/gles3/scripts/gen-swizzle-math-operations.py b/modules/gles3/scripts/gen-swizzle-math-operations.py
new file mode 100644 (file)
index 0000000..65de314
--- /dev/null
@@ -0,0 +1,201 @@
+# -*- coding: utf-8 -*-
+
+#-------------------------------------------------------------------------
+# drawElements Quality Program utilities
+# --------------------------------------
+#
+# Copyright 2017 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#-------------------------------------------------------------------------
+
+import operator as op
+from genutil import *
+from collections import OrderedDict
+
+VECTOR_TYPES   = ["vec2", "vec3", "vec4", "ivec2", "ivec3", "ivec4"]
+PRECISION_TYPES = ["mediump"]
+SWIZZLE_NAMES  = ["xyzw"]
+
+s_swizzleCaseTemplate = """
+case ${{NAME}}
+       version 300 es
+       values
+       {
+               ${{VALUES}}
+       }
+
+       both ""
+               #version 300 es
+               precision mediump float;
+
+               ${DECLARATIONS}
+
+               void main()
+               {
+                       ${SETUP}
+                       ${{OP}}
+                       ${OUTPUT}
+               }
+       ""
+end
+"""[1:]
+
+def getDataTypeScalarSize (dt):
+       return {
+               "vec2":         2,
+               "vec3":         3,
+               "vec4":         4,
+               "ivec2":        2,
+               "ivec3":        3,
+               "ivec4":        4,
+       }[dt]
+
+def getSwizzlesForWidth(width):
+       if (width == 2):
+               return [(0, ),
+                       (0,0), (0,1), (1,0),
+                       (1,0,1), (0,1,0,0), (1,0,1,0)]
+       elif (width == 3):
+               return [(0,), (2,),
+                       (0,2), (2,2),
+                       (0,1,2), (2,1,0), (0,0,0), (2,2,2), (2,2,1), (1,0,1), (0,2,0),
+                       (0,1,1,0), (2,0,1,2)]
+       elif (width == 4):
+               return [(0,), (3,),
+                       (3,0), (3,2),
+                       (3,3,3), (1,1,3), (3,2,1),
+                       (0,1,2,3), (3,2,1,0), (0,1,0,1), (1,2,2,1), (3,0,3,3), (0,1,0,0), (2,2,2,2)]
+       else:
+               assert False
+
+def operatorToSymbol(operator):
+       if operator == "add":           return "+"
+       if operator == "subtract":      return "-"
+       if operator == "multiply":      return "*"
+       if operator == "divide":        return "/"
+
+def rotate(l, n) :
+       return l[n:] + l[:n]
+
+class SwizzleCase(ShaderCase):
+       def __init__(self, name, precision, dataType, swizzle1, swizzle2, inputs1, inputs2, operator, outputs):
+               self.name       = name
+               self.precision  = precision
+               self.dataType   = dataType
+               self.swizzle1   = swizzle1
+               self.swizzle2   = swizzle2
+               self.inputs1    = inputs1
+               self.inputs2    = inputs2
+               self.inputs     = inputs1 + inputs2
+               self.outputs    = outputs
+               self.op         = "out0 = in0.%s %s in1.%s;" % (swizzle1, operator, swizzle2)
+
+       def __str__(self):
+               params = {
+                       "NAME":         self.name,
+                       "VALUES":       genValues(self.inputs, self.outputs),
+                       "OP":           self.op
+               }
+               return fillTemplate(s_swizzleCaseTemplate, params)
+
+
+# CASE DECLARATIONS
+inFloat = [Scalar(x) for x in [0.0, 1.0, 2.0, 3.5, -0.5, -20.125, 36.8125]]
+inInt  = [Scalar(x) for x in [0, 1, 2, 5, 8, 11, -12, -66, -192, 255]]
+
+inVec4 = [
+       Vec4(0.1, 0.5, 0.75, 0.825),
+       Vec4(1.0, 1.25, 1.125, 1.75),
+       Vec4(-0.5, -2.25, -4.875, 9.0),
+       Vec4(-32.0, 64.0, -51.0, 24.0),
+       Vec4(-0.75, -1.0/31.0, 1.0/19.0, 1.0/4.0),
+]
+
+inVec3 = toVec3(inVec4)
+inVec2 = toVec2(inVec4)
+
+inIVec4 = toIVec4(
+       [
+           Vec4(-1, 1, -1, 1),
+           Vec4(1, 2, 3, 4),
+           Vec4(-1, -2, -4, -9),
+       ]
+)
+
+inIVec3 = toIVec3(inIVec4)
+inIVec2 = toIVec2(inIVec4)
+
+INPUTS = OrderedDict([
+       ("float",       inFloat),
+       ("vec2",        inVec2),
+       ("vec3",        inVec3),
+       ("vec4",        inVec4),
+       ("int",         inInt),
+       ("ivec2",       inIVec2),
+       ("ivec3",       inIVec3),
+       ("ivec4",       inIVec4),
+])
+
+OPERATORS = OrderedDict([
+       ("add",         op.add),
+       ("subtract",    op.sub),
+       ("multiply",    op.mul),
+       ("divide",      op.div),
+])
+
+vectorSwizzleGroupCases = {
+       "add":          [],
+       "subtract" :    [],
+       "multiply" :    [],
+       "divide" :      [],
+}
+
+allCases = []
+
+for operator in OPERATORS:
+       for dataType in VECTOR_TYPES:
+               scalarSize = getDataTypeScalarSize(dataType)
+               for precision in PRECISION_TYPES:
+                       for swizzleComponents in SWIZZLE_NAMES:
+                               for swizzleIndices in getSwizzlesForWidth(scalarSize):
+                                       swizzle1 = "".join(map(lambda x: swizzleComponents[x], swizzleIndices))
+
+                                       swizzle2 = rotate(swizzle1, 1)
+                                       rotatedSwizzleIndices = rotate(swizzleIndices, 1)
+
+                                       operands1 = INPUTS[dataType]
+                                       operands2 = INPUTS[dataType]  # these input values will be swizzled
+
+                                       outputs = map(lambda x, y: OPERATORS[operator](x.swizzle(swizzleIndices), y.swizzle(rotatedSwizzleIndices)), operands1, operands2)
+                                       outType = outputs[0].typeString()
+                                       caseName = "%s_%s_%s_%s" % (precision, dataType, swizzle1, swizzle2)
+
+                                       case = SwizzleCase(     caseName,
+                                                               precision,
+                                                               dataType,
+                                                               swizzle1,
+                                                               swizzle2,
+                                                               [("%s in0" % dataType, operands1)],
+                                                               [("%s in1" % dataType, operands2)],
+                                                               operatorToSymbol(operator),
+                                                               [("%s out0" % outType, outputs)])
+
+                                       vectorSwizzleGroupCases[operator].append(case)
+
+       allCases.append(CaseGroup("vector_" + operator, "Vector swizzle math operations", vectorSwizzleGroupCases[operator]))
+
+if __name__ == "__main__":
+       print "Generating shader case files."
+       writeAllCases("swizzle_math_operations.test", allCases)