swscale/uops: simplify permute naming scheme

We also drop the useless/unused mask from the permute ops.

Avoids a bunch of otherwise duplicate permute ops. Now that this is
handled by SWS_UOP_MOVE for x86, there is no downside to this.

The FATE change is a pure rename of the uops dumps.

Sponsored-by: Sovereign Tech Fund
Signed-off-by: Niklas Haas <git@haasn.dev>
This commit is contained in:
Niklas Haas
2026-06-20 02:56:18 +02:00
parent 8cc6b2ddaf
commit b3689e792f
3 changed files with 112 additions and 170 deletions

View File

@@ -155,6 +155,10 @@ void ff_sws_uop_name(const SwsUOp *op, char buf[SWS_UOP_NAME_MAX])
av_bprintf(&bp, "_%u", par->shift.amount);
break;
case SWS_UOP_PERMUTE:
av_bprint_chars(&bp, '_', 1);
for (int i = 0; i < 4; i++)
av_bprint_chars(&bp, "xyzw"[par->swizzle.in[i]], 1);
break;
case SWS_UOP_COPY:
av_bprint_chars(&bp, '_', 1);
for (int i = 0; i < 4; i++) {
@@ -597,13 +601,13 @@ static int translate_swizzle(SwsUOpList *ops, SwsUOpFlags flags, const SwsOp *op
SwsUOp uop = {
.type = pixel_type_to_int(op->type),
.uop = SWS_UOP_PERMUTE,
.mask = ff_sws_comp_mask_needed(op),
.par.swizzle.in = {0, 1, 2, 3},
};
SwsCompMask needed = ff_sws_comp_mask_needed(op);
SwsCompMask seen = 0;
for (int i = 0; i < 4; i++) {
if (!SWS_COMP_TEST(uop.mask, i))
if (!SWS_COMP_TEST(needed, i))
continue;
const int src = op->swizzle.in[i];
if (SWS_COMP_TEST(seen, src))
@@ -615,7 +619,7 @@ static int translate_swizzle(SwsUOpList *ops, SwsUOpFlags flags, const SwsOp *op
if (uop.uop == SWS_UOP_PERMUTE) {
/* Prevent overlap by moving unused components to unseen indices */
for (int i = 0; i < 4; i++) {
if (SWS_COMP_TEST(uop.mask, i))
if (SWS_COMP_TEST(needed, i))
continue;
/* Prefer identity mapping if possible */
@@ -634,10 +638,14 @@ static int translate_swizzle(SwsUOpList *ops, SwsUOpFlags flags, const SwsOp *op
}
}
/* Remove remaining trivial / identity components from the mask */
for (int i = 0; i < 4; i++) {
if (uop.par.swizzle.in[i] == i)
uop.mask &= ~SWS_COMP(i);
if (uop.uop == SWS_UOP_COPY) {
/* Remove remaining trivial / identity components from the mask */
for (int i = 0; i < 4; i++) {
if (uop.par.swizzle.in[i] == i)
needed &= ~SWS_COMP(i);
}
uop.mask = needed;
}
return ff_sws_uop_list_append(ops, &uop);

View File

@@ -102,67 +102,43 @@
#define SWS_FOR_STRUCT_U8_WRITE_BIT(MACRO, ...) \
MACRO(__VA_ARGS__, u8_write_bit_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_WRITE_BIT , .mask = 0x1)
#define SWS_FOR_U8_PERMUTE(MACRO, ...) \
MACRO(__VA_ARGS__, u8_permute_x_y , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x1, 1, 0, 2, 3) \
MACRO(__VA_ARGS__, u8_permute_x_z , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x1, 2, 1, 0, 3) \
MACRO(__VA_ARGS__, u8_permute_x_w , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x1, 3, 1, 2, 0) \
MACRO(__VA_ARGS__, u8_permute_y_w , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x2, 0, 3, 2, 1) \
MACRO(__VA_ARGS__, u8_permute_y_x , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x2, 1, 0, 2, 3) \
MACRO(__VA_ARGS__, u8_permute_xy_yx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x3, 1, 0, 2, 3) \
MACRO(__VA_ARGS__, u8_permute_xy_yw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x3, 1, 3, 2, 0) \
MACRO(__VA_ARGS__, u8_permute_xy_zw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x3, 2, 3, 0, 1) \
MACRO(__VA_ARGS__, u8_permute_xy_wx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x3, 3, 0, 2, 1) \
MACRO(__VA_ARGS__, u8_permute_z_x , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x4, 1, 2, 0, 3) \
MACRO(__VA_ARGS__, u8_permute_xz_zx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x5, 2, 1, 0, 3) \
MACRO(__VA_ARGS__, u8_permute_yz_zy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x6, 0, 2, 1, 3) \
MACRO(__VA_ARGS__, u8_permute_xyz_yzx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 1, 2, 0, 3) \
MACRO(__VA_ARGS__, u8_permute_xyz_yzw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 1, 2, 3, 0) \
MACRO(__VA_ARGS__, u8_permute_xyz_zxy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 2, 0, 1, 3) \
MACRO(__VA_ARGS__, u8_permute_xyz_zwy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 2, 3, 1, 0) \
MACRO(__VA_ARGS__, u8_permute_xyz_wzy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 3, 2, 1, 0) \
MACRO(__VA_ARGS__, u8_permute_w_x , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x8, 3, 1, 2, 0) \
MACRO(__VA_ARGS__, u8_permute_yw_wy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xa, 0, 3, 2, 1) \
MACRO(__VA_ARGS__, u8_permute_zw_xz , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xc, 3, 1, 0, 2) \
MACRO(__VA_ARGS__, u8_permute_xzw_zwx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xd, 2, 1, 3, 0) \
MACRO(__VA_ARGS__, u8_permute_xzw_wxz , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xd, 3, 1, 0, 2) \
MACRO(__VA_ARGS__, u8_permute_yzw_zwy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 0, 2, 3, 1) \
MACRO(__VA_ARGS__, u8_permute_yzw_xyz , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 3, 0, 1, 2) \
MACRO(__VA_ARGS__, u8_permute_yzw_zxy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 3, 2, 0, 1) \
MACRO(__VA_ARGS__, u8_permute_yzw_zyx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 3, 2, 1, 0) \
MACRO(__VA_ARGS__, u8_permute_xyzw_yzwx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 1, 2, 3, 0) \
MACRO(__VA_ARGS__, u8_permute_xyzw_wxyz , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 3, 0, 1, 2) \
MACRO(__VA_ARGS__, u8_permute_xyzw_wzxy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 3, 2, 0, 1) \
MACRO(__VA_ARGS__, u8_permute_xyzw_wzyx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 3, 2, 1, 0)
MACRO(__VA_ARGS__, u8_permute_xzyw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 0, 2, 1, 3) \
MACRO(__VA_ARGS__, u8_permute_xzwy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 0, 2, 3, 1) \
MACRO(__VA_ARGS__, u8_permute_xwzy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 0, 3, 2, 1) \
MACRO(__VA_ARGS__, u8_permute_yxzw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 1, 0, 2, 3) \
MACRO(__VA_ARGS__, u8_permute_yzxw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 1, 2, 0, 3) \
MACRO(__VA_ARGS__, u8_permute_yzwx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 1, 2, 3, 0) \
MACRO(__VA_ARGS__, u8_permute_ywzx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 1, 3, 2, 0) \
MACRO(__VA_ARGS__, u8_permute_zxyw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 2, 0, 1, 3) \
MACRO(__VA_ARGS__, u8_permute_zyxw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 2, 1, 0, 3) \
MACRO(__VA_ARGS__, u8_permute_zywx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 2, 1, 3, 0) \
MACRO(__VA_ARGS__, u8_permute_zwxy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 2, 3, 0, 1) \
MACRO(__VA_ARGS__, u8_permute_zwyx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 2, 3, 1, 0) \
MACRO(__VA_ARGS__, u8_permute_wxyz , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 3, 0, 1, 2) \
MACRO(__VA_ARGS__, u8_permute_wxzy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 3, 0, 2, 1) \
MACRO(__VA_ARGS__, u8_permute_wyxz , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 3, 1, 0, 2) \
MACRO(__VA_ARGS__, u8_permute_wyzx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 3, 1, 2, 0) \
MACRO(__VA_ARGS__, u8_permute_wzxy , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 3, 2, 0, 1) \
MACRO(__VA_ARGS__, u8_permute_wzyx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x0, 3, 2, 1, 0)
#define SWS_FOR_STRUCT_U8_PERMUTE(MACRO, ...) \
MACRO(__VA_ARGS__, u8_permute_x_y , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x1, .par.swizzle.in = {1, 0, 2, 3}) \
MACRO(__VA_ARGS__, u8_permute_x_z , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x1, .par.swizzle.in = {2, 1, 0, 3}) \
MACRO(__VA_ARGS__, u8_permute_x_w , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x1, .par.swizzle.in = {3, 1, 2, 0}) \
MACRO(__VA_ARGS__, u8_permute_y_w , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x2, .par.swizzle.in = {0, 3, 2, 1}) \
MACRO(__VA_ARGS__, u8_permute_y_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x2, .par.swizzle.in = {1, 0, 2, 3}) \
MACRO(__VA_ARGS__, u8_permute_xy_yx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x3, .par.swizzle.in = {1, 0, 2, 3}) \
MACRO(__VA_ARGS__, u8_permute_xy_yw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x3, .par.swizzle.in = {1, 3, 2, 0}) \
MACRO(__VA_ARGS__, u8_permute_xy_zw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x3, .par.swizzle.in = {2, 3, 0, 1}) \
MACRO(__VA_ARGS__, u8_permute_xy_wx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x3, .par.swizzle.in = {3, 0, 2, 1}) \
MACRO(__VA_ARGS__, u8_permute_z_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x4, .par.swizzle.in = {1, 2, 0, 3}) \
MACRO(__VA_ARGS__, u8_permute_xz_zx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x5, .par.swizzle.in = {2, 1, 0, 3}) \
MACRO(__VA_ARGS__, u8_permute_yz_zy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x6, .par.swizzle.in = {0, 2, 1, 3}) \
MACRO(__VA_ARGS__, u8_permute_xyz_yzx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {1, 2, 0, 3}) \
MACRO(__VA_ARGS__, u8_permute_xyz_yzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {1, 2, 3, 0}) \
MACRO(__VA_ARGS__, u8_permute_xyz_zxy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {2, 0, 1, 3}) \
MACRO(__VA_ARGS__, u8_permute_xyz_zwy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {2, 3, 1, 0}) \
MACRO(__VA_ARGS__, u8_permute_xyz_wzy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {3, 2, 1, 0}) \
MACRO(__VA_ARGS__, u8_permute_w_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x8, .par.swizzle.in = {3, 1, 2, 0}) \
MACRO(__VA_ARGS__, u8_permute_yw_wy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xa, .par.swizzle.in = {0, 3, 2, 1}) \
MACRO(__VA_ARGS__, u8_permute_zw_xz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xc, .par.swizzle.in = {3, 1, 0, 2}) \
MACRO(__VA_ARGS__, u8_permute_xzw_zwx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xd, .par.swizzle.in = {2, 1, 3, 0}) \
MACRO(__VA_ARGS__, u8_permute_xzw_wxz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xd, .par.swizzle.in = {3, 1, 0, 2}) \
MACRO(__VA_ARGS__, u8_permute_yzw_zwy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.swizzle.in = {0, 2, 3, 1}) \
MACRO(__VA_ARGS__, u8_permute_yzw_xyz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.swizzle.in = {3, 0, 1, 2}) \
MACRO(__VA_ARGS__, u8_permute_yzw_zxy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.swizzle.in = {3, 2, 0, 1}) \
MACRO(__VA_ARGS__, u8_permute_yzw_zyx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.swizzle.in = {3, 2, 1, 0}) \
MACRO(__VA_ARGS__, u8_permute_xyzw_yzwx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.swizzle.in = {1, 2, 3, 0}) \
MACRO(__VA_ARGS__, u8_permute_xyzw_wxyz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.swizzle.in = {3, 0, 1, 2}) \
MACRO(__VA_ARGS__, u8_permute_xyzw_wzxy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.swizzle.in = {3, 2, 0, 1}) \
MACRO(__VA_ARGS__, u8_permute_xyzw_wzyx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.swizzle.in = {3, 2, 1, 0})
MACRO(__VA_ARGS__, u8_permute_xzyw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 2, 1, 3}) \
MACRO(__VA_ARGS__, u8_permute_xzwy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 2, 3, 1}) \
MACRO(__VA_ARGS__, u8_permute_xwzy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 3, 2, 1}) \
MACRO(__VA_ARGS__, u8_permute_yxzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 0, 2, 3}) \
MACRO(__VA_ARGS__, u8_permute_yzxw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 2, 0, 3}) \
MACRO(__VA_ARGS__, u8_permute_yzwx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 2, 3, 0}) \
MACRO(__VA_ARGS__, u8_permute_ywzx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 3, 2, 0}) \
MACRO(__VA_ARGS__, u8_permute_zxyw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 0, 1, 3}) \
MACRO(__VA_ARGS__, u8_permute_zyxw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 1, 0, 3}) \
MACRO(__VA_ARGS__, u8_permute_zywx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 1, 3, 0}) \
MACRO(__VA_ARGS__, u8_permute_zwxy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 3, 0, 1}) \
MACRO(__VA_ARGS__, u8_permute_zwyx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 3, 1, 0}) \
MACRO(__VA_ARGS__, u8_permute_wxyz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 0, 1, 2}) \
MACRO(__VA_ARGS__, u8_permute_wxzy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 0, 2, 1}) \
MACRO(__VA_ARGS__, u8_permute_wyxz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 1, 0, 2}) \
MACRO(__VA_ARGS__, u8_permute_wyzx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 1, 2, 0}) \
MACRO(__VA_ARGS__, u8_permute_wzxy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 2, 0, 1}) \
MACRO(__VA_ARGS__, u8_permute_wzyx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 2, 1, 0})
#define SWS_FOR_U8_COPY(MACRO, ...) \
MACRO(__VA_ARGS__, u8_copy_yz_xx , SWS_PIXEL_U8 , SWS_UOP_COPY , 0x6, 0, 0, 0, 3) \
MACRO(__VA_ARGS__, u8_copy_yzw_xxx , SWS_PIXEL_U8 , SWS_UOP_COPY , 0xe, 0, 0, 0, 0) \
@@ -440,51 +416,35 @@
#define SWS_FOR_U16_WRITE_BIT(MACRO, ...)
#define SWS_FOR_STRUCT_U16_WRITE_BIT(MACRO, ...)
#define SWS_FOR_U16_PERMUTE(MACRO, ...) \
MACRO(__VA_ARGS__, u16_permute_x_y , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x1, 1, 0, 2, 3) \
MACRO(__VA_ARGS__, u16_permute_x_z , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x1, 2, 1, 0, 3) \
MACRO(__VA_ARGS__, u16_permute_x_w , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x1, 3, 1, 2, 0) \
MACRO(__VA_ARGS__, u16_permute_y_w , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x2, 0, 3, 2, 1) \
MACRO(__VA_ARGS__, u16_permute_y_x , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x2, 1, 0, 2, 3) \
MACRO(__VA_ARGS__, u16_permute_xy_yx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x3, 1, 0, 2, 3) \
MACRO(__VA_ARGS__, u16_permute_xy_wx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x3, 3, 0, 2, 1) \
MACRO(__VA_ARGS__, u16_permute_xz_zx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x5, 2, 1, 0, 3) \
MACRO(__VA_ARGS__, u16_permute_xz_zw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x5, 2, 1, 3, 0) \
MACRO(__VA_ARGS__, u16_permute_xyz_yzx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 1, 2, 0, 3) \
MACRO(__VA_ARGS__, u16_permute_xyz_yzw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 1, 2, 3, 0) \
MACRO(__VA_ARGS__, u16_permute_xyz_zxy , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 2, 0, 1, 3) \
MACRO(__VA_ARGS__, u16_permute_xyz_zwy , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 2, 3, 1, 0) \
MACRO(__VA_ARGS__, u16_permute_xyz_wzy , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 3, 2, 1, 0) \
MACRO(__VA_ARGS__, u16_permute_w_x , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x8, 3, 1, 2, 0) \
MACRO(__VA_ARGS__, u16_permute_zw_xz , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xc, 3, 1, 0, 2) \
MACRO(__VA_ARGS__, u16_permute_yzw_zwy , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xe, 0, 2, 3, 1) \
MACRO(__VA_ARGS__, u16_permute_yzw_xyz , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xe, 3, 0, 1, 2) \
MACRO(__VA_ARGS__, u16_permute_yzw_zyx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xe, 3, 2, 1, 0) \
MACRO(__VA_ARGS__, u16_permute_xyzw_yzwx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 1, 2, 3, 0) \
MACRO(__VA_ARGS__, u16_permute_xyzw_wxyz , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 3, 0, 1, 2) \
MACRO(__VA_ARGS__, u16_permute_xyzw_wzyx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 3, 2, 1, 0)
MACRO(__VA_ARGS__, u16_permute_xzwy , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 0, 2, 3, 1) \
MACRO(__VA_ARGS__, u16_permute_xwzy , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 0, 3, 2, 1) \
MACRO(__VA_ARGS__, u16_permute_yxzw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 1, 0, 2, 3) \
MACRO(__VA_ARGS__, u16_permute_yzxw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 1, 2, 0, 3) \
MACRO(__VA_ARGS__, u16_permute_yzwx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 1, 2, 3, 0) \
MACRO(__VA_ARGS__, u16_permute_zxyw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 2, 0, 1, 3) \
MACRO(__VA_ARGS__, u16_permute_zyxw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 2, 1, 0, 3) \
MACRO(__VA_ARGS__, u16_permute_zywx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 2, 1, 3, 0) \
MACRO(__VA_ARGS__, u16_permute_zwyx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 2, 3, 1, 0) \
MACRO(__VA_ARGS__, u16_permute_wxyz , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 3, 0, 1, 2) \
MACRO(__VA_ARGS__, u16_permute_wxzy , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 3, 0, 2, 1) \
MACRO(__VA_ARGS__, u16_permute_wyxz , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 3, 1, 0, 2) \
MACRO(__VA_ARGS__, u16_permute_wyzx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 3, 1, 2, 0) \
MACRO(__VA_ARGS__, u16_permute_wzyx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x0, 3, 2, 1, 0)
#define SWS_FOR_STRUCT_U16_PERMUTE(MACRO, ...) \
MACRO(__VA_ARGS__, u16_permute_x_y , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x1, .par.swizzle.in = {1, 0, 2, 3}) \
MACRO(__VA_ARGS__, u16_permute_x_z , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x1, .par.swizzle.in = {2, 1, 0, 3}) \
MACRO(__VA_ARGS__, u16_permute_x_w , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x1, .par.swizzle.in = {3, 1, 2, 0}) \
MACRO(__VA_ARGS__, u16_permute_y_w , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x2, .par.swizzle.in = {0, 3, 2, 1}) \
MACRO(__VA_ARGS__, u16_permute_y_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x2, .par.swizzle.in = {1, 0, 2, 3}) \
MACRO(__VA_ARGS__, u16_permute_xy_yx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x3, .par.swizzle.in = {1, 0, 2, 3}) \
MACRO(__VA_ARGS__, u16_permute_xy_wx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x3, .par.swizzle.in = {3, 0, 2, 1}) \
MACRO(__VA_ARGS__, u16_permute_xz_zx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x5, .par.swizzle.in = {2, 1, 0, 3}) \
MACRO(__VA_ARGS__, u16_permute_xz_zw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x5, .par.swizzle.in = {2, 1, 3, 0}) \
MACRO(__VA_ARGS__, u16_permute_xyz_yzx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {1, 2, 0, 3}) \
MACRO(__VA_ARGS__, u16_permute_xyz_yzw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {1, 2, 3, 0}) \
MACRO(__VA_ARGS__, u16_permute_xyz_zxy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {2, 0, 1, 3}) \
MACRO(__VA_ARGS__, u16_permute_xyz_zwy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {2, 3, 1, 0}) \
MACRO(__VA_ARGS__, u16_permute_xyz_wzy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {3, 2, 1, 0}) \
MACRO(__VA_ARGS__, u16_permute_w_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x8, .par.swizzle.in = {3, 1, 2, 0}) \
MACRO(__VA_ARGS__, u16_permute_zw_xz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xc, .par.swizzle.in = {3, 1, 0, 2}) \
MACRO(__VA_ARGS__, u16_permute_yzw_zwy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.swizzle.in = {0, 2, 3, 1}) \
MACRO(__VA_ARGS__, u16_permute_yzw_xyz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.swizzle.in = {3, 0, 1, 2}) \
MACRO(__VA_ARGS__, u16_permute_yzw_zyx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.swizzle.in = {3, 2, 1, 0}) \
MACRO(__VA_ARGS__, u16_permute_xyzw_yzwx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.swizzle.in = {1, 2, 3, 0}) \
MACRO(__VA_ARGS__, u16_permute_xyzw_wxyz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.swizzle.in = {3, 0, 1, 2}) \
MACRO(__VA_ARGS__, u16_permute_xyzw_wzyx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.swizzle.in = {3, 2, 1, 0})
MACRO(__VA_ARGS__, u16_permute_xzwy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 2, 3, 1}) \
MACRO(__VA_ARGS__, u16_permute_xwzy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 3, 2, 1}) \
MACRO(__VA_ARGS__, u16_permute_yxzw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 0, 2, 3}) \
MACRO(__VA_ARGS__, u16_permute_yzxw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 2, 0, 3}) \
MACRO(__VA_ARGS__, u16_permute_yzwx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 2, 3, 0}) \
MACRO(__VA_ARGS__, u16_permute_zxyw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 0, 1, 3}) \
MACRO(__VA_ARGS__, u16_permute_zyxw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 1, 0, 3}) \
MACRO(__VA_ARGS__, u16_permute_zywx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 1, 3, 0}) \
MACRO(__VA_ARGS__, u16_permute_zwyx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 3, 1, 0}) \
MACRO(__VA_ARGS__, u16_permute_wxyz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 0, 1, 2}) \
MACRO(__VA_ARGS__, u16_permute_wxzy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 0, 2, 1}) \
MACRO(__VA_ARGS__, u16_permute_wyxz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 1, 0, 2}) \
MACRO(__VA_ARGS__, u16_permute_wyzx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 1, 2, 0}) \
MACRO(__VA_ARGS__, u16_permute_wzyx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 2, 1, 0})
#define SWS_FOR_U16_COPY(MACRO, ...) \
MACRO(__VA_ARGS__, u16_copy_yz_xx , SWS_PIXEL_U16, SWS_UOP_COPY , 0x6, 0, 0, 0, 3) \
MACRO(__VA_ARGS__, u16_copy_yzw_xxy , SWS_PIXEL_U16, SWS_UOP_COPY , 0xe, 0, 0, 0, 1)
@@ -744,65 +704,39 @@
#define SWS_FOR_U32_WRITE_BIT(MACRO, ...)
#define SWS_FOR_STRUCT_U32_WRITE_BIT(MACRO, ...)
#define SWS_FOR_U32_PERMUTE(MACRO, ...) \
MACRO(__VA_ARGS__, u32_permute_x_y , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x1, 1, 0, 2, 3) \
MACRO(__VA_ARGS__, u32_permute_x_z , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x1, 2, 1, 0, 3) \
MACRO(__VA_ARGS__, u32_permute_x_w , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x1, 3, 1, 2, 0) \
MACRO(__VA_ARGS__, u32_permute_y_w , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x2, 0, 3, 2, 1) \
MACRO(__VA_ARGS__, u32_permute_y_x , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x2, 1, 0, 2, 3) \
MACRO(__VA_ARGS__, u32_permute_xy_yx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x3, 1, 0, 2, 3) \
MACRO(__VA_ARGS__, u32_permute_z_x , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x4, 1, 2, 0, 3) \
MACRO(__VA_ARGS__, u32_permute_xz_zx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x5, 2, 1, 0, 3) \
MACRO(__VA_ARGS__, u32_permute_xz_zw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x5, 2, 1, 3, 0) \
MACRO(__VA_ARGS__, u32_permute_xz_wx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x5, 3, 1, 0, 2) \
MACRO(__VA_ARGS__, u32_permute_yz_zy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x6, 0, 2, 1, 3) \
MACRO(__VA_ARGS__, u32_permute_xyz_yzx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 1, 2, 0, 3) \
MACRO(__VA_ARGS__, u32_permute_xyz_yzw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 1, 2, 3, 0) \
MACRO(__VA_ARGS__, u32_permute_xyz_zxy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 2, 0, 1, 3) \
MACRO(__VA_ARGS__, u32_permute_xyz_zwy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 2, 3, 1, 0) \
MACRO(__VA_ARGS__, u32_permute_xyz_wzy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 3, 2, 1, 0) \
MACRO(__VA_ARGS__, u32_permute_w_y , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x8, 0, 2, 3, 1) \
MACRO(__VA_ARGS__, u32_permute_w_x , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x8, 3, 1, 2, 0) \
MACRO(__VA_ARGS__, u32_permute_xw_yx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x9, 1, 2, 3, 0) \
MACRO(__VA_ARGS__, u32_permute_yw_wy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xa, 0, 3, 2, 1) \
MACRO(__VA_ARGS__, u32_permute_yw_xy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xa, 3, 0, 2, 1) \
MACRO(__VA_ARGS__, u32_permute_zw_xz , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xc, 3, 1, 0, 2) \
MACRO(__VA_ARGS__, u32_permute_yzw_xyz , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 3, 0, 1, 2) \
MACRO(__VA_ARGS__, u32_permute_yzw_zxy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 3, 2, 0, 1) \
MACRO(__VA_ARGS__, u32_permute_yzw_zyx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 3, 2, 1, 0) \
MACRO(__VA_ARGS__, u32_permute_xyzw_yzwx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 1, 2, 3, 0) \
MACRO(__VA_ARGS__, u32_permute_xyzw_wxyz , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 3, 0, 1, 2) \
MACRO(__VA_ARGS__, u32_permute_xyzw_wzxy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 3, 2, 0, 1) \
MACRO(__VA_ARGS__, u32_permute_xyzw_wzyx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 3, 2, 1, 0)
MACRO(__VA_ARGS__, u32_permute_xzyw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 0, 2, 1, 3) \
MACRO(__VA_ARGS__, u32_permute_xzwy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 0, 2, 3, 1) \
MACRO(__VA_ARGS__, u32_permute_xwzy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 0, 3, 2, 1) \
MACRO(__VA_ARGS__, u32_permute_yxzw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 1, 0, 2, 3) \
MACRO(__VA_ARGS__, u32_permute_yzxw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 1, 2, 0, 3) \
MACRO(__VA_ARGS__, u32_permute_yzwx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 1, 2, 3, 0) \
MACRO(__VA_ARGS__, u32_permute_zxyw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 2, 0, 1, 3) \
MACRO(__VA_ARGS__, u32_permute_zyxw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 2, 1, 0, 3) \
MACRO(__VA_ARGS__, u32_permute_zywx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 2, 1, 3, 0) \
MACRO(__VA_ARGS__, u32_permute_zwyx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 2, 3, 1, 0) \
MACRO(__VA_ARGS__, u32_permute_wxyz , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 3, 0, 1, 2) \
MACRO(__VA_ARGS__, u32_permute_wxzy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 3, 0, 2, 1) \
MACRO(__VA_ARGS__, u32_permute_wyxz , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 3, 1, 0, 2) \
MACRO(__VA_ARGS__, u32_permute_wyzx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 3, 1, 2, 0) \
MACRO(__VA_ARGS__, u32_permute_wzxy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 3, 2, 0, 1) \
MACRO(__VA_ARGS__, u32_permute_wzyx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x0, 3, 2, 1, 0)
#define SWS_FOR_STRUCT_U32_PERMUTE(MACRO, ...) \
MACRO(__VA_ARGS__, u32_permute_x_y , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x1, .par.swizzle.in = {1, 0, 2, 3}) \
MACRO(__VA_ARGS__, u32_permute_x_z , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x1, .par.swizzle.in = {2, 1, 0, 3}) \
MACRO(__VA_ARGS__, u32_permute_x_w , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x1, .par.swizzle.in = {3, 1, 2, 0}) \
MACRO(__VA_ARGS__, u32_permute_y_w , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x2, .par.swizzle.in = {0, 3, 2, 1}) \
MACRO(__VA_ARGS__, u32_permute_y_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x2, .par.swizzle.in = {1, 0, 2, 3}) \
MACRO(__VA_ARGS__, u32_permute_xy_yx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x3, .par.swizzle.in = {1, 0, 2, 3}) \
MACRO(__VA_ARGS__, u32_permute_z_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x4, .par.swizzle.in = {1, 2, 0, 3}) \
MACRO(__VA_ARGS__, u32_permute_xz_zx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x5, .par.swizzle.in = {2, 1, 0, 3}) \
MACRO(__VA_ARGS__, u32_permute_xz_zw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x5, .par.swizzle.in = {2, 1, 3, 0}) \
MACRO(__VA_ARGS__, u32_permute_xz_wx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x5, .par.swizzle.in = {3, 1, 0, 2}) \
MACRO(__VA_ARGS__, u32_permute_yz_zy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x6, .par.swizzle.in = {0, 2, 1, 3}) \
MACRO(__VA_ARGS__, u32_permute_xyz_yzx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {1, 2, 0, 3}) \
MACRO(__VA_ARGS__, u32_permute_xyz_yzw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {1, 2, 3, 0}) \
MACRO(__VA_ARGS__, u32_permute_xyz_zxy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {2, 0, 1, 3}) \
MACRO(__VA_ARGS__, u32_permute_xyz_zwy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {2, 3, 1, 0}) \
MACRO(__VA_ARGS__, u32_permute_xyz_wzy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.swizzle.in = {3, 2, 1, 0}) \
MACRO(__VA_ARGS__, u32_permute_w_y , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x8, .par.swizzle.in = {0, 2, 3, 1}) \
MACRO(__VA_ARGS__, u32_permute_w_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x8, .par.swizzle.in = {3, 1, 2, 0}) \
MACRO(__VA_ARGS__, u32_permute_xw_yx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x9, .par.swizzle.in = {1, 2, 3, 0}) \
MACRO(__VA_ARGS__, u32_permute_yw_wy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xa, .par.swizzle.in = {0, 3, 2, 1}) \
MACRO(__VA_ARGS__, u32_permute_yw_xy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xa, .par.swizzle.in = {3, 0, 2, 1}) \
MACRO(__VA_ARGS__, u32_permute_zw_xz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xc, .par.swizzle.in = {3, 1, 0, 2}) \
MACRO(__VA_ARGS__, u32_permute_yzw_xyz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.swizzle.in = {3, 0, 1, 2}) \
MACRO(__VA_ARGS__, u32_permute_yzw_zxy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.swizzle.in = {3, 2, 0, 1}) \
MACRO(__VA_ARGS__, u32_permute_yzw_zyx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.swizzle.in = {3, 2, 1, 0}) \
MACRO(__VA_ARGS__, u32_permute_xyzw_yzwx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.swizzle.in = {1, 2, 3, 0}) \
MACRO(__VA_ARGS__, u32_permute_xyzw_wxyz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.swizzle.in = {3, 0, 1, 2}) \
MACRO(__VA_ARGS__, u32_permute_xyzw_wzxy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.swizzle.in = {3, 2, 0, 1}) \
MACRO(__VA_ARGS__, u32_permute_xyzw_wzyx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.swizzle.in = {3, 2, 1, 0})
MACRO(__VA_ARGS__, u32_permute_xzyw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 2, 1, 3}) \
MACRO(__VA_ARGS__, u32_permute_xzwy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 2, 3, 1}) \
MACRO(__VA_ARGS__, u32_permute_xwzy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {0, 3, 2, 1}) \
MACRO(__VA_ARGS__, u32_permute_yxzw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 0, 2, 3}) \
MACRO(__VA_ARGS__, u32_permute_yzxw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 2, 0, 3}) \
MACRO(__VA_ARGS__, u32_permute_yzwx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {1, 2, 3, 0}) \
MACRO(__VA_ARGS__, u32_permute_zxyw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 0, 1, 3}) \
MACRO(__VA_ARGS__, u32_permute_zyxw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 1, 0, 3}) \
MACRO(__VA_ARGS__, u32_permute_zywx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 1, 3, 0}) \
MACRO(__VA_ARGS__, u32_permute_zwyx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {2, 3, 1, 0}) \
MACRO(__VA_ARGS__, u32_permute_wxyz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 0, 1, 2}) \
MACRO(__VA_ARGS__, u32_permute_wxzy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 0, 2, 1}) \
MACRO(__VA_ARGS__, u32_permute_wyxz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 1, 0, 2}) \
MACRO(__VA_ARGS__, u32_permute_wyzx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 1, 2, 0}) \
MACRO(__VA_ARGS__, u32_permute_wzxy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 2, 0, 1}) \
MACRO(__VA_ARGS__, u32_permute_wzyx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x0, .par.swizzle.in = {3, 2, 1, 0})
#define SWS_FOR_U32_COPY(MACRO, ...) \
MACRO(__VA_ARGS__, u32_copy_yz_xx , SWS_PIXEL_U32, SWS_UOP_COPY , 0x6, 0, 0, 0, 3) \
MACRO(__VA_ARGS__, u32_copy_yzw_xxx , SWS_PIXEL_U32, SWS_UOP_COPY , 0xe, 0, 0, 0, 0) \