Reactor: Switch swizzles over to 16-bit hex codes
This migrates from 2-bit swizzle codes per lane to 4-bit, which reads more fluently in hex.
The order has been reversed so that the most significant nibble (leftmost on little-endian CPUs) represents the first output lane.
Fixed up Swizzle, Mask, and ShuffleLowHigh
Bug: b/145746360
Change-Id: I132bd757801a5ca543ef2b9b0ed34d0527db5bfa
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/39049
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: David Turner <digit@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
diff --git a/src/Device/QuadRasterizer.cpp b/src/Device/QuadRasterizer.cpp
index a3494d8..0f23599 100644
--- a/src/Device/QuadRasterizer.cpp
+++ b/src/Device/QuadRasterizer.cpp
@@ -179,8 +179,8 @@
xLeft[q] = *Pointer<Short4>(primitive + q * sizeof(Primitive) + OFFSET(Primitive,outline) + y * sizeof(Primitive::Span));
xRight[q] = xLeft[q];
- xLeft[q] = Swizzle(xLeft[q], 0xA0) - Short4(1, 2, 1, 2);
- xRight[q] = Swizzle(xRight[q], 0xF5) - Short4(0, 1, 0, 1);
+ xLeft[q] = Swizzle(xLeft[q], 0x0022) - Short4(1, 2, 1, 2);
+ xRight[q] = Swizzle(xRight[q], 0x1133) - Short4(0, 1, 0, 1);
}
For(Int x = x0, x < x1, x += 2)
diff --git a/src/Main/FrameBuffer.cpp b/src/Main/FrameBuffer.cpp
index 5e4f6c3..2dc5cd6 100644
--- a/src/Main/FrameBuffer.cpp
+++ b/src/Main/FrameBuffer.cpp
@@ -217,8 +217,8 @@
case FORMAT_A16B16G16R16:
For(, x < width - 1, x += 2)
{
- Short4 c0 = As<UShort4>(Swizzle(*Pointer<Short4>(s + 0), 0xC6)) >> 8;
- Short4 c1 = As<UShort4>(Swizzle(*Pointer<Short4>(s + 8), 0xC6)) >> 8;
+ Short4 c0 = As<UShort4>(Swizzle(*Pointer<Short4>(s + 0), 0x2103)) >> 8;
+ Short4 c1 = As<UShort4>(Swizzle(*Pointer<Short4>(s + 8), 0x2103)) >> 8;
*Pointer<Int2>(d) = As<Int2>(PackUnsigned(c0, c1));
@@ -264,7 +264,7 @@
break;
case FORMAT_A16B16G16R16:
{
- Short4 c = As<UShort4>(Swizzle(*Pointer<Short4>(s), 0xC6)) >> 8;
+ Short4 c = As<UShort4>(Swizzle(*Pointer<Short4>(s), 0x2103)) >> 8;
*Pointer<Int>(d) = Int(As<Int2>(PackUnsigned(c, c)));
}
@@ -545,10 +545,10 @@
break;
case FORMAT_X8B8G8R8:
case FORMAT_A8B8G8R8:
- c2 = Swizzle(Unpack(*Pointer<Byte4>(s)), 0xC6);
+ c2 = Swizzle(Unpack(*Pointer<Byte4>(s)), 0x2103);
break;
case FORMAT_A16B16G16R16:
- c2 = Swizzle(*Pointer<Short4>(s), 0xC6);
+ c2 = Swizzle(*Pointer<Short4>(s), 0x2103);
break;
case FORMAT_R5G6B5:
{
@@ -568,7 +568,7 @@
c1 = As<Short4>(As<UShort4>(c1) >> 9);
c2 = As<Short4>(As<UShort4>(c2) >> 9);
- Short4 alpha = Swizzle(c1, 0xFF) & Short4(0xFFFFu, 0xFFFFu, 0xFFFFu, 0x0000);
+ Short4 alpha = Swizzle(c1, 0x3333) & Short4(0xFFFFu, 0xFFFFu, 0xFFFFu, 0x0000);
c1 = (c1 - c2) * alpha;
c1 = c1 >> 7;
@@ -586,7 +586,7 @@
case FORMAT_SRGB8_X8:
case FORMAT_SRGB8_A8:
{
- c1 = Swizzle(c1, 0xC6);
+ c1 = Swizzle(c1, 0x2103);
*Pointer<Byte4>(d) = Byte4(PackUnsigned(c1, c1));
}
diff --git a/src/Pipeline/PixelRoutine.cpp b/src/Pipeline/PixelRoutine.cpp
index 999afe8..6fe6e74 100644
--- a/src/Pipeline/PixelRoutine.cpp
+++ b/src/Pipeline/PixelRoutine.cpp
@@ -1852,8 +1852,8 @@
buffer += *Pointer<Int>(data + OFFSET(DrawData,colorPitchB[index]));
pixel.y = *Pointer<Float4>(buffer + 8 * x, 16);
pixel.z = pixel.x;
- pixel.x = ShuffleLowHigh(pixel.x, pixel.y, 0x88);
- pixel.z = ShuffleLowHigh(pixel.z, pixel.y, 0xDD);
+ pixel.x = ShuffleLowHigh(pixel.x, pixel.y, 0x0202);
+ pixel.z = ShuffleLowHigh(pixel.z, pixel.y, 0x1313);
pixel.y = pixel.z;
pixel.z = pixel.w = one;
break;
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index 0360138..05d4b42 100644
--- a/src/Reactor/LLVMReactor.cpp
+++ b/src/Reactor/LLVMReactor.cpp
@@ -2604,7 +2604,7 @@
#else
auto result = V(lowerPack(V(x.value), V(y.value), true));
#endif
- return As<SByte8>(Swizzle(As<Int4>(result), 0x88));
+ return As<SByte8>(Swizzle(As<Int4>(result), 0x0202));
}
RValue<Byte8> PackUnsigned(RValue<Short4> x, RValue<Short4> y)
@@ -2615,7 +2615,7 @@
#else
auto result = V(lowerPack(V(x.value), V(y.value), false));
#endif
- return As<Byte8>(Swizzle(As<Int4>(result), 0x88));
+ return As<Byte8>(Swizzle(As<Int4>(result), 0x0202));
}
RValue<Short4> CmpGT(RValue<Short4> x, RValue<Short4> y)
diff --git a/src/Reactor/Reactor.cpp b/src/Reactor/Reactor.cpp
index 6f6a8de..a90f967 100644
--- a/src/Reactor/Reactor.cpp
+++ b/src/Reactor/Reactor.cpp
@@ -113,18 +113,17 @@
//
// msb lsb
// v v
- // [.aaa|.bbb|.ccc|.ddd] where '.' means an ignored bit
+ // [.xxx|.yyy|.zzz|.www] where '.' means an ignored bit
//
// This format makes it easy to write calls with hexadecimal select values,
- // since each hex digit is a separate swizzle index. Note that the order
- // of indices is reversed compared to createSwizzle4() below!
+ // since each hex digit is a separate swizzle index.
//
// For example:
// createBlend4( [a,b,c,d], [e,f,g,h], 0x0123 ) -> [a,b,c,d]
// createBlend4( [a,b,c,d], [e,f,g,h], 0x4567 ) -> [e,f,g,h]
// createBlend4( [a,b,c,d], [e,f,g,h], 0x4012 ) -> [e,a,b,c]
//
- static Value *createBlend4(Value *lhs, Value *rhs, unsigned short select)
+ static Value *createBlend4(Value *lhs, Value *rhs, uint16_t select)
{
int swizzle[4] =
{
@@ -137,27 +136,41 @@
return Nucleus::createShuffleVector(lhs, rhs, swizzle);
}
- static Value *createSwizzle4(Value *val, unsigned char select)
+ // NOTE: Only 8 bits out of 16 of the |select| value are used.
+ // More specifically, the value should look like:
+ //
+ // msb lsb
+ // v v
+ // [..xx|..yy|..zz|..ww] where '.' means an ignored bit
+ //
+ // This format makes it easy to write calls with hexadecimal select values,
+ // since each hex digit is a separate swizzle index.
+ //
+ // For example:
+ // createSwizzle4( [a,b,c,d], 0x0123 ) -> [a,b,c,d]
+ // createSwizzle4( [a,b,c,d], 0x0033 ) -> [a,a,d,d]
+ //
+ static Value *createSwizzle4(Value *val, uint16_t select)
{
int swizzle[4] =
{
- (select >> 0) & 0x03,
- (select >> 2) & 0x03,
- (select >> 4) & 0x03,
- (select >> 6) & 0x03,
+ (select >> 12) & 0x03,
+ (select >> 8) & 0x03,
+ (select >> 4) & 0x03,
+ (select >> 0) & 0x03,
};
return Nucleus::createShuffleVector(val, val, swizzle);
}
- static Value *createMask4(Value *lhs, Value *rhs, unsigned char select)
+ static Value *createMask4(Value *lhs, Value *rhs, uint16_t select)
{
bool mask[4] = {false, false, false, false};
- mask[(select >> 0) & 0x03] = true;
- mask[(select >> 2) & 0x03] = true;
- mask[(select >> 4) & 0x03] = true;
- mask[(select >> 6) & 0x03] = true;
+ mask[(select >> 12) & 0x03] = true;
+ mask[(select >> 8) & 0x03] = true;
+ mask[(select >> 4) & 0x03] = true;
+ mask[(select >> 0) & 0x03] = true;
int swizzle[4] =
{
@@ -1428,7 +1441,7 @@
{
int shuffle[16] = {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23}; // Real type is v16i8
auto lowHigh = RValue<Byte16>(Nucleus::createShuffleVector(x.value, y.value, shuffle));
- return As<Short4>(Swizzle(As<Int4>(lowHigh), 0xEE));
+ return As<Short4>(Swizzle(As<Int4>(lowHigh), 0x2323));
}
SByte8::SByte8(uint8_t x0, uint8_t x1, uint8_t x2, uint8_t x3, uint8_t x4, uint8_t x5, uint8_t x6, uint8_t x7)
@@ -1604,7 +1617,7 @@
{
int shuffle[16] = {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23}; // Real type is v16i8
auto lowHigh = RValue<Byte16>(Nucleus::createShuffleVector(x.value, y.value, shuffle));
- return As<Short4>(Swizzle(As<Int4>(lowHigh), 0xEE));
+ return As<Short4>(Swizzle(As<Int4>(lowHigh), 0x2323));
}
Byte16::Byte16(RValue<Byte16> rhs)
@@ -1662,7 +1675,7 @@
Value *vector = loadValue();
Value *element = Nucleus::createTrunc(cast.value, Short::getType());
Value *insert = Nucleus::createInsertElement(vector, element, 0);
- Value *swizzle = Swizzle(RValue<Short4>(insert), 0x00).value;
+ Value *swizzle = Swizzle(RValue<Short4>(insert), 0x0000).value;
storeValue(swizzle);
}
@@ -1882,22 +1895,22 @@
{
int shuffle[8] = {0, 8, 1, 9, 2, 10, 3, 11}; // Real type is v8i16
auto lowHigh = RValue<Short8>(Nucleus::createShuffleVector(x.value, y.value, shuffle));
- return As<Int2>(Swizzle(As<Int4>(lowHigh), 0xEE));
+ return As<Int2>(Swizzle(As<Int4>(lowHigh), 0x2323));
}
- RValue<Short4> Swizzle(RValue<Short4> x, unsigned char select)
+ RValue<Short4> Swizzle(RValue<Short4> x, uint16_t select)
{
// Real type is v8i16
int shuffle[8] =
{
- (select >> 0) & 0x03,
- (select >> 2) & 0x03,
- (select >> 4) & 0x03,
- (select >> 6) & 0x03,
- (select >> 0) & 0x03,
- (select >> 2) & 0x03,
- (select >> 4) & 0x03,
- (select >> 6) & 0x03,
+ (select >> 12) & 0x03,
+ (select >> 8) & 0x03,
+ (select >> 4) & 0x03,
+ (select >> 0) & 0x03,
+ (select >> 12) & 0x03,
+ (select >> 8) & 0x03,
+ (select >> 4) & 0x03,
+ (select >> 0) & 0x03,
};
return As<Short4>(Nucleus::createShuffleVector(x.value, x.value, shuffle));
@@ -3094,7 +3107,7 @@
{
int shuffle[4] = {0, 4, 1, 5}; // Real type is v4i32
auto lowHigh = RValue<Int4>(Nucleus::createShuffleVector(x.value, y.value, shuffle));
- return As<Short4>(Swizzle(lowHigh, 0xEE));
+ return As<Short4>(Swizzle(lowHigh, 0x2323));
}
RValue<Int> Extract(RValue<Int2> val, int i)
@@ -3505,7 +3518,7 @@
return RValue<Int4>(Nucleus::createInsertElement(x.value, element.value, i));
}
- RValue<Int4> Swizzle(RValue<Int4> x, unsigned char select)
+ RValue<Int4> Swizzle(RValue<Int4> x, uint16_t select)
{
return RValue<Int4>(createSwizzle4(x.value, select));
}
@@ -3745,7 +3758,7 @@
return RValue<UInt4>(Nucleus::createInsertElement(x.value, element.value, i));
}
- RValue<UInt4> Swizzle(RValue<UInt4> x, unsigned char select)
+ RValue<UInt4> Swizzle(RValue<UInt4> x, uint16_t select)
{
return RValue<UInt4>(createSwizzle4(x.value, select));
}
@@ -4245,24 +4258,24 @@
return RValue<Float>(Nucleus::createExtractElement(x.value, Float::getType(), i));
}
- RValue<Float4> Swizzle(RValue<Float4> x, unsigned char select)
+ RValue<Float4> Swizzle(RValue<Float4> x, uint16_t select)
{
return RValue<Float4>(createSwizzle4(x.value, select));
}
- RValue<Float4> Blend(RValue<Float4> x, RValue<Float4> y, unsigned short select)
+ RValue<Float4> Blend(RValue<Float4> x, RValue<Float4> y, uint16_t select)
{
return RValue<Float4>(createBlend4(x.value, y.value, select));
}
- RValue<Float4> ShuffleLowHigh(RValue<Float4> x, RValue<Float4> y, unsigned char imm)
+ RValue<Float4> ShuffleLowHigh(RValue<Float4> x, RValue<Float4> y, uint16_t imm)
{
int shuffle[4] =
{
- ((imm >> 0) & 0x03) + 0,
- ((imm >> 2) & 0x03) + 0,
- ((imm >> 4) & 0x03) + 4,
- ((imm >> 6) & 0x03) + 4,
+ ((imm >> 12) & 0x03) + 0,
+ ((imm >> 8) & 0x03) + 0,
+ ((imm >> 4) & 0x03) + 4,
+ ((imm >> 0) & 0x03) + 4,
};
return RValue<Float4>(Nucleus::createShuffleVector(x.value, y.value, shuffle));
@@ -4280,7 +4293,7 @@
return RValue<Float4>(Nucleus::createShuffleVector(x.value, y.value, shuffle));
}
- RValue<Float4> Mask(Float4 &lhs, RValue<Float4> rhs, unsigned char select)
+ RValue<Float4> Mask(Float4 &lhs, RValue<Float4> rhs, uint16_t select)
{
Value *vector = lhs.loadValue();
Value *result = createMask4(vector, rhs.value, select);
diff --git a/src/Reactor/Reactor.hpp b/src/Reactor/Reactor.hpp
index 5fdc73a..8dc3a2f 100644
--- a/src/Reactor/Reactor.hpp
+++ b/src/Reactor/Reactor.hpp
@@ -883,7 +883,7 @@
RValue<Byte8> PackUnsigned(RValue<Short4> x, RValue<Short4> y);
RValue<Int2> UnpackLow(RValue<Short4> x, RValue<Short4> y);
RValue<Int2> UnpackHigh(RValue<Short4> x, RValue<Short4> y);
- RValue<Short4> Swizzle(RValue<Short4> x, unsigned char select);
+ RValue<Short4> Swizzle(RValue<Short4> x, uint16_t select);
RValue<Short4> Insert(RValue<Short4> val, RValue<Short> element, int i);
RValue<Short> Extract(RValue<Short4> val, int i);
RValue<Short4> CmpGT(RValue<Short4> x, RValue<Short4> y);
@@ -1505,346 +1505,346 @@
public:
union
{
- SwizzleMask1<Vector4, 0x00> x;
- SwizzleMask1<Vector4, 0x55> y;
- SwizzleMask1<Vector4, 0xAA> z;
- SwizzleMask1<Vector4, 0xFF> w;
- Swizzle2<Vector4, 0x00> xx;
- Swizzle2<Vector4, 0x01> yx;
- Swizzle2<Vector4, 0x02> zx;
- Swizzle2<Vector4, 0x03> wx;
- SwizzleMask2<Vector4, 0x54> xy;
- Swizzle2<Vector4, 0x55> yy;
- Swizzle2<Vector4, 0x56> zy;
- Swizzle2<Vector4, 0x57> wy;
- SwizzleMask2<Vector4, 0xA8> xz;
- SwizzleMask2<Vector4, 0xA9> yz;
- Swizzle2<Vector4, 0xAA> zz;
- Swizzle2<Vector4, 0xAB> wz;
- SwizzleMask2<Vector4, 0xFC> xw;
- SwizzleMask2<Vector4, 0xFD> yw;
- SwizzleMask2<Vector4, 0xFE> zw;
- Swizzle2<Vector4, 0xFF> ww;
- Swizzle4<Vector4, 0x00> xxx;
- Swizzle4<Vector4, 0x01> yxx;
- Swizzle4<Vector4, 0x02> zxx;
- Swizzle4<Vector4, 0x03> wxx;
- Swizzle4<Vector4, 0x04> xyx;
- Swizzle4<Vector4, 0x05> yyx;
- Swizzle4<Vector4, 0x06> zyx;
- Swizzle4<Vector4, 0x07> wyx;
- Swizzle4<Vector4, 0x08> xzx;
- Swizzle4<Vector4, 0x09> yzx;
- Swizzle4<Vector4, 0x0A> zzx;
- Swizzle4<Vector4, 0x0B> wzx;
- Swizzle4<Vector4, 0x0C> xwx;
- Swizzle4<Vector4, 0x0D> ywx;
- Swizzle4<Vector4, 0x0E> zwx;
- Swizzle4<Vector4, 0x0F> wwx;
- Swizzle4<Vector4, 0x50> xxy;
- Swizzle4<Vector4, 0x51> yxy;
- Swizzle4<Vector4, 0x52> zxy;
- Swizzle4<Vector4, 0x53> wxy;
- Swizzle4<Vector4, 0x54> xyy;
- Swizzle4<Vector4, 0x55> yyy;
- Swizzle4<Vector4, 0x56> zyy;
- Swizzle4<Vector4, 0x57> wyy;
- Swizzle4<Vector4, 0x58> xzy;
- Swizzle4<Vector4, 0x59> yzy;
- Swizzle4<Vector4, 0x5A> zzy;
- Swizzle4<Vector4, 0x5B> wzy;
- Swizzle4<Vector4, 0x5C> xwy;
- Swizzle4<Vector4, 0x5D> ywy;
- Swizzle4<Vector4, 0x5E> zwy;
- Swizzle4<Vector4, 0x5F> wwy;
- Swizzle4<Vector4, 0xA0> xxz;
- Swizzle4<Vector4, 0xA1> yxz;
- Swizzle4<Vector4, 0xA2> zxz;
- Swizzle4<Vector4, 0xA3> wxz;
- SwizzleMask4<Vector4, 0xA4> xyz;
- Swizzle4<Vector4, 0xA5> yyz;
- Swizzle4<Vector4, 0xA6> zyz;
- Swizzle4<Vector4, 0xA7> wyz;
- Swizzle4<Vector4, 0xA8> xzz;
- Swizzle4<Vector4, 0xA9> yzz;
- Swizzle4<Vector4, 0xAA> zzz;
- Swizzle4<Vector4, 0xAB> wzz;
- Swizzle4<Vector4, 0xAC> xwz;
- Swizzle4<Vector4, 0xAD> ywz;
- Swizzle4<Vector4, 0xAE> zwz;
- Swizzle4<Vector4, 0xAF> wwz;
- Swizzle4<Vector4, 0xF0> xxw;
- Swizzle4<Vector4, 0xF1> yxw;
- Swizzle4<Vector4, 0xF2> zxw;
- Swizzle4<Vector4, 0xF3> wxw;
- SwizzleMask4<Vector4, 0xF4> xyw;
- Swizzle4<Vector4, 0xF5> yyw;
- Swizzle4<Vector4, 0xF6> zyw;
- Swizzle4<Vector4, 0xF7> wyw;
- SwizzleMask4<Vector4, 0xF8> xzw;
- SwizzleMask4<Vector4, 0xF9> yzw;
- Swizzle4<Vector4, 0xFA> zzw;
- Swizzle4<Vector4, 0xFB> wzw;
- Swizzle4<Vector4, 0xFC> xww;
- Swizzle4<Vector4, 0xFD> yww;
- Swizzle4<Vector4, 0xFE> zww;
- Swizzle4<Vector4, 0xFF> www;
- Swizzle4<Vector4, 0x00> xxxx;
- Swizzle4<Vector4, 0x01> yxxx;
- Swizzle4<Vector4, 0x02> zxxx;
- Swizzle4<Vector4, 0x03> wxxx;
- Swizzle4<Vector4, 0x04> xyxx;
- Swizzle4<Vector4, 0x05> yyxx;
- Swizzle4<Vector4, 0x06> zyxx;
- Swizzle4<Vector4, 0x07> wyxx;
- Swizzle4<Vector4, 0x08> xzxx;
- Swizzle4<Vector4, 0x09> yzxx;
- Swizzle4<Vector4, 0x0A> zzxx;
- Swizzle4<Vector4, 0x0B> wzxx;
- Swizzle4<Vector4, 0x0C> xwxx;
- Swizzle4<Vector4, 0x0D> ywxx;
- Swizzle4<Vector4, 0x0E> zwxx;
- Swizzle4<Vector4, 0x0F> wwxx;
- Swizzle4<Vector4, 0x10> xxyx;
- Swizzle4<Vector4, 0x11> yxyx;
- Swizzle4<Vector4, 0x12> zxyx;
- Swizzle4<Vector4, 0x13> wxyx;
- Swizzle4<Vector4, 0x14> xyyx;
- Swizzle4<Vector4, 0x15> yyyx;
- Swizzle4<Vector4, 0x16> zyyx;
- Swizzle4<Vector4, 0x17> wyyx;
- Swizzle4<Vector4, 0x18> xzyx;
- Swizzle4<Vector4, 0x19> yzyx;
- Swizzle4<Vector4, 0x1A> zzyx;
- Swizzle4<Vector4, 0x1B> wzyx;
- Swizzle4<Vector4, 0x1C> xwyx;
- Swizzle4<Vector4, 0x1D> ywyx;
- Swizzle4<Vector4, 0x1E> zwyx;
- Swizzle4<Vector4, 0x1F> wwyx;
- Swizzle4<Vector4, 0x20> xxzx;
- Swizzle4<Vector4, 0x21> yxzx;
- Swizzle4<Vector4, 0x22> zxzx;
- Swizzle4<Vector4, 0x23> wxzx;
- Swizzle4<Vector4, 0x24> xyzx;
- Swizzle4<Vector4, 0x25> yyzx;
- Swizzle4<Vector4, 0x26> zyzx;
- Swizzle4<Vector4, 0x27> wyzx;
- Swizzle4<Vector4, 0x28> xzzx;
- Swizzle4<Vector4, 0x29> yzzx;
- Swizzle4<Vector4, 0x2A> zzzx;
- Swizzle4<Vector4, 0x2B> wzzx;
- Swizzle4<Vector4, 0x2C> xwzx;
- Swizzle4<Vector4, 0x2D> ywzx;
- Swizzle4<Vector4, 0x2E> zwzx;
- Swizzle4<Vector4, 0x2F> wwzx;
- Swizzle4<Vector4, 0x30> xxwx;
- Swizzle4<Vector4, 0x31> yxwx;
- Swizzle4<Vector4, 0x32> zxwx;
- Swizzle4<Vector4, 0x33> wxwx;
- Swizzle4<Vector4, 0x34> xywx;
- Swizzle4<Vector4, 0x35> yywx;
- Swizzle4<Vector4, 0x36> zywx;
- Swizzle4<Vector4, 0x37> wywx;
- Swizzle4<Vector4, 0x38> xzwx;
- Swizzle4<Vector4, 0x39> yzwx;
- Swizzle4<Vector4, 0x3A> zzwx;
- Swizzle4<Vector4, 0x3B> wzwx;
- Swizzle4<Vector4, 0x3C> xwwx;
- Swizzle4<Vector4, 0x3D> ywwx;
- Swizzle4<Vector4, 0x3E> zwwx;
- Swizzle4<Vector4, 0x3F> wwwx;
- Swizzle4<Vector4, 0x40> xxxy;
- Swizzle4<Vector4, 0x41> yxxy;
- Swizzle4<Vector4, 0x42> zxxy;
- Swizzle4<Vector4, 0x43> wxxy;
- Swizzle4<Vector4, 0x44> xyxy;
- Swizzle4<Vector4, 0x45> yyxy;
- Swizzle4<Vector4, 0x46> zyxy;
- Swizzle4<Vector4, 0x47> wyxy;
- Swizzle4<Vector4, 0x48> xzxy;
- Swizzle4<Vector4, 0x49> yzxy;
- Swizzle4<Vector4, 0x4A> zzxy;
- Swizzle4<Vector4, 0x4B> wzxy;
- Swizzle4<Vector4, 0x4C> xwxy;
- Swizzle4<Vector4, 0x4D> ywxy;
- Swizzle4<Vector4, 0x4E> zwxy;
- Swizzle4<Vector4, 0x4F> wwxy;
- Swizzle4<Vector4, 0x50> xxyy;
- Swizzle4<Vector4, 0x51> yxyy;
- Swizzle4<Vector4, 0x52> zxyy;
- Swizzle4<Vector4, 0x53> wxyy;
- Swizzle4<Vector4, 0x54> xyyy;
- Swizzle4<Vector4, 0x55> yyyy;
- Swizzle4<Vector4, 0x56> zyyy;
- Swizzle4<Vector4, 0x57> wyyy;
- Swizzle4<Vector4, 0x58> xzyy;
- Swizzle4<Vector4, 0x59> yzyy;
- Swizzle4<Vector4, 0x5A> zzyy;
- Swizzle4<Vector4, 0x5B> wzyy;
- Swizzle4<Vector4, 0x5C> xwyy;
- Swizzle4<Vector4, 0x5D> ywyy;
- Swizzle4<Vector4, 0x5E> zwyy;
- Swizzle4<Vector4, 0x5F> wwyy;
- Swizzle4<Vector4, 0x60> xxzy;
- Swizzle4<Vector4, 0x61> yxzy;
- Swizzle4<Vector4, 0x62> zxzy;
- Swizzle4<Vector4, 0x63> wxzy;
- Swizzle4<Vector4, 0x64> xyzy;
- Swizzle4<Vector4, 0x65> yyzy;
- Swizzle4<Vector4, 0x66> zyzy;
- Swizzle4<Vector4, 0x67> wyzy;
- Swizzle4<Vector4, 0x68> xzzy;
- Swizzle4<Vector4, 0x69> yzzy;
- Swizzle4<Vector4, 0x6A> zzzy;
- Swizzle4<Vector4, 0x6B> wzzy;
- Swizzle4<Vector4, 0x6C> xwzy;
- Swizzle4<Vector4, 0x6D> ywzy;
- Swizzle4<Vector4, 0x6E> zwzy;
- Swizzle4<Vector4, 0x6F> wwzy;
- Swizzle4<Vector4, 0x70> xxwy;
- Swizzle4<Vector4, 0x71> yxwy;
- Swizzle4<Vector4, 0x72> zxwy;
- Swizzle4<Vector4, 0x73> wxwy;
- Swizzle4<Vector4, 0x74> xywy;
- Swizzle4<Vector4, 0x75> yywy;
- Swizzle4<Vector4, 0x76> zywy;
- Swizzle4<Vector4, 0x77> wywy;
- Swizzle4<Vector4, 0x78> xzwy;
- Swizzle4<Vector4, 0x79> yzwy;
- Swizzle4<Vector4, 0x7A> zzwy;
- Swizzle4<Vector4, 0x7B> wzwy;
- Swizzle4<Vector4, 0x7C> xwwy;
- Swizzle4<Vector4, 0x7D> ywwy;
- Swizzle4<Vector4, 0x7E> zwwy;
- Swizzle4<Vector4, 0x7F> wwwy;
- Swizzle4<Vector4, 0x80> xxxz;
- Swizzle4<Vector4, 0x81> yxxz;
- Swizzle4<Vector4, 0x82> zxxz;
- Swizzle4<Vector4, 0x83> wxxz;
- Swizzle4<Vector4, 0x84> xyxz;
- Swizzle4<Vector4, 0x85> yyxz;
- Swizzle4<Vector4, 0x86> zyxz;
- Swizzle4<Vector4, 0x87> wyxz;
- Swizzle4<Vector4, 0x88> xzxz;
- Swizzle4<Vector4, 0x89> yzxz;
- Swizzle4<Vector4, 0x8A> zzxz;
- Swizzle4<Vector4, 0x8B> wzxz;
- Swizzle4<Vector4, 0x8C> xwxz;
- Swizzle4<Vector4, 0x8D> ywxz;
- Swizzle4<Vector4, 0x8E> zwxz;
- Swizzle4<Vector4, 0x8F> wwxz;
- Swizzle4<Vector4, 0x90> xxyz;
- Swizzle4<Vector4, 0x91> yxyz;
- Swizzle4<Vector4, 0x92> zxyz;
- Swizzle4<Vector4, 0x93> wxyz;
- Swizzle4<Vector4, 0x94> xyyz;
- Swizzle4<Vector4, 0x95> yyyz;
- Swizzle4<Vector4, 0x96> zyyz;
- Swizzle4<Vector4, 0x97> wyyz;
- Swizzle4<Vector4, 0x98> xzyz;
- Swizzle4<Vector4, 0x99> yzyz;
- Swizzle4<Vector4, 0x9A> zzyz;
- Swizzle4<Vector4, 0x9B> wzyz;
- Swizzle4<Vector4, 0x9C> xwyz;
- Swizzle4<Vector4, 0x9D> ywyz;
- Swizzle4<Vector4, 0x9E> zwyz;
- Swizzle4<Vector4, 0x9F> wwyz;
- Swizzle4<Vector4, 0xA0> xxzz;
- Swizzle4<Vector4, 0xA1> yxzz;
- Swizzle4<Vector4, 0xA2> zxzz;
- Swizzle4<Vector4, 0xA3> wxzz;
- Swizzle4<Vector4, 0xA4> xyzz;
- Swizzle4<Vector4, 0xA5> yyzz;
- Swizzle4<Vector4, 0xA6> zyzz;
- Swizzle4<Vector4, 0xA7> wyzz;
- Swizzle4<Vector4, 0xA8> xzzz;
- Swizzle4<Vector4, 0xA9> yzzz;
- Swizzle4<Vector4, 0xAA> zzzz;
- Swizzle4<Vector4, 0xAB> wzzz;
- Swizzle4<Vector4, 0xAC> xwzz;
- Swizzle4<Vector4, 0xAD> ywzz;
- Swizzle4<Vector4, 0xAE> zwzz;
- Swizzle4<Vector4, 0xAF> wwzz;
- Swizzle4<Vector4, 0xB0> xxwz;
- Swizzle4<Vector4, 0xB1> yxwz;
- Swizzle4<Vector4, 0xB2> zxwz;
- Swizzle4<Vector4, 0xB3> wxwz;
- Swizzle4<Vector4, 0xB4> xywz;
- Swizzle4<Vector4, 0xB5> yywz;
- Swizzle4<Vector4, 0xB6> zywz;
- Swizzle4<Vector4, 0xB7> wywz;
- Swizzle4<Vector4, 0xB8> xzwz;
- Swizzle4<Vector4, 0xB9> yzwz;
- Swizzle4<Vector4, 0xBA> zzwz;
- Swizzle4<Vector4, 0xBB> wzwz;
- Swizzle4<Vector4, 0xBC> xwwz;
- Swizzle4<Vector4, 0xBD> ywwz;
- Swizzle4<Vector4, 0xBE> zwwz;
- Swizzle4<Vector4, 0xBF> wwwz;
- Swizzle4<Vector4, 0xC0> xxxw;
- Swizzle4<Vector4, 0xC1> yxxw;
- Swizzle4<Vector4, 0xC2> zxxw;
- Swizzle4<Vector4, 0xC3> wxxw;
- Swizzle4<Vector4, 0xC4> xyxw;
- Swizzle4<Vector4, 0xC5> yyxw;
- Swizzle4<Vector4, 0xC6> zyxw;
- Swizzle4<Vector4, 0xC7> wyxw;
- Swizzle4<Vector4, 0xC8> xzxw;
- Swizzle4<Vector4, 0xC9> yzxw;
- Swizzle4<Vector4, 0xCA> zzxw;
- Swizzle4<Vector4, 0xCB> wzxw;
- Swizzle4<Vector4, 0xCC> xwxw;
- Swizzle4<Vector4, 0xCD> ywxw;
- Swizzle4<Vector4, 0xCE> zwxw;
- Swizzle4<Vector4, 0xCF> wwxw;
- Swizzle4<Vector4, 0xD0> xxyw;
- Swizzle4<Vector4, 0xD1> yxyw;
- Swizzle4<Vector4, 0xD2> zxyw;
- Swizzle4<Vector4, 0xD3> wxyw;
- Swizzle4<Vector4, 0xD4> xyyw;
- Swizzle4<Vector4, 0xD5> yyyw;
- Swizzle4<Vector4, 0xD6> zyyw;
- Swizzle4<Vector4, 0xD7> wyyw;
- Swizzle4<Vector4, 0xD8> xzyw;
- Swizzle4<Vector4, 0xD9> yzyw;
- Swizzle4<Vector4, 0xDA> zzyw;
- Swizzle4<Vector4, 0xDB> wzyw;
- Swizzle4<Vector4, 0xDC> xwyw;
- Swizzle4<Vector4, 0xDD> ywyw;
- Swizzle4<Vector4, 0xDE> zwyw;
- Swizzle4<Vector4, 0xDF> wwyw;
- Swizzle4<Vector4, 0xE0> xxzw;
- Swizzle4<Vector4, 0xE1> yxzw;
- Swizzle4<Vector4, 0xE2> zxzw;
- Swizzle4<Vector4, 0xE3> wxzw;
- SwizzleMask4<Vector4, 0xE4> xyzw;
- Swizzle4<Vector4, 0xE5> yyzw;
- Swizzle4<Vector4, 0xE6> zyzw;
- Swizzle4<Vector4, 0xE7> wyzw;
- Swizzle4<Vector4, 0xE8> xzzw;
- Swizzle4<Vector4, 0xE9> yzzw;
- Swizzle4<Vector4, 0xEA> zzzw;
- Swizzle4<Vector4, 0xEB> wzzw;
- Swizzle4<Vector4, 0xEC> xwzw;
- Swizzle4<Vector4, 0xED> ywzw;
- Swizzle4<Vector4, 0xEE> zwzw;
- Swizzle4<Vector4, 0xEF> wwzw;
- Swizzle4<Vector4, 0xF0> xxww;
- Swizzle4<Vector4, 0xF1> yxww;
- Swizzle4<Vector4, 0xF2> zxww;
- Swizzle4<Vector4, 0xF3> wxww;
- Swizzle4<Vector4, 0xF4> xyww;
- Swizzle4<Vector4, 0xF5> yyww;
- Swizzle4<Vector4, 0xF6> zyww;
- Swizzle4<Vector4, 0xF7> wyww;
- Swizzle4<Vector4, 0xF8> xzww;
- Swizzle4<Vector4, 0xF9> yzww;
- Swizzle4<Vector4, 0xFA> zzww;
- Swizzle4<Vector4, 0xFB> wzww;
- Swizzle4<Vector4, 0xFC> xwww;
- Swizzle4<Vector4, 0xFD> ywww;
- Swizzle4<Vector4, 0xFE> zwww;
- Swizzle4<Vector4, 0xFF> wwww;
+ SwizzleMask1<Vector4, 0x0000> x;
+ SwizzleMask1<Vector4, 0x1111> y;
+ SwizzleMask1<Vector4, 0x2222> z;
+ SwizzleMask1<Vector4, 0x3333> w;
+ Swizzle2<Vector4, 0x0000> xx;
+ Swizzle2<Vector4, 0x1000> yx;
+ Swizzle2<Vector4, 0x2000> zx;
+ Swizzle2<Vector4, 0x3000> wx;
+ SwizzleMask2<Vector4, 0x0111> xy;
+ Swizzle2<Vector4, 0x1111> yy;
+ Swizzle2<Vector4, 0x2111> zy;
+ Swizzle2<Vector4, 0x3111> wy;
+ SwizzleMask2<Vector4, 0x0222> xz;
+ SwizzleMask2<Vector4, 0x1222> yz;
+ Swizzle2<Vector4, 0x2222> zz;
+ Swizzle2<Vector4, 0x3222> wz;
+ SwizzleMask2<Vector4, 0x0333> xw;
+ SwizzleMask2<Vector4, 0x1333> yw;
+ SwizzleMask2<Vector4, 0x2333> zw;
+ Swizzle2<Vector4, 0x3333> ww;
+ Swizzle4<Vector4, 0x0000> xxx;
+ Swizzle4<Vector4, 0x1000> yxx;
+ Swizzle4<Vector4, 0x2000> zxx;
+ Swizzle4<Vector4, 0x3000> wxx;
+ Swizzle4<Vector4, 0x0100> xyx;
+ Swizzle4<Vector4, 0x1100> yyx;
+ Swizzle4<Vector4, 0x2100> zyx;
+ Swizzle4<Vector4, 0x3100> wyx;
+ Swizzle4<Vector4, 0x0200> xzx;
+ Swizzle4<Vector4, 0x1200> yzx;
+ Swizzle4<Vector4, 0x2200> zzx;
+ Swizzle4<Vector4, 0x3200> wzx;
+ Swizzle4<Vector4, 0x0300> xwx;
+ Swizzle4<Vector4, 0x1300> ywx;
+ Swizzle4<Vector4, 0x2300> zwx;
+ Swizzle4<Vector4, 0x3300> wwx;
+ Swizzle4<Vector4, 0x0011> xxy;
+ Swizzle4<Vector4, 0x1011> yxy;
+ Swizzle4<Vector4, 0x2011> zxy;
+ Swizzle4<Vector4, 0x3011> wxy;
+ Swizzle4<Vector4, 0x0111> xyy;
+ Swizzle4<Vector4, 0x1111> yyy;
+ Swizzle4<Vector4, 0x2111> zyy;
+ Swizzle4<Vector4, 0x3111> wyy;
+ Swizzle4<Vector4, 0x0211> xzy;
+ Swizzle4<Vector4, 0x1211> yzy;
+ Swizzle4<Vector4, 0x2211> zzy;
+ Swizzle4<Vector4, 0x3211> wzy;
+ Swizzle4<Vector4, 0x0311> xwy;
+ Swizzle4<Vector4, 0x1311> ywy;
+ Swizzle4<Vector4, 0x2311> zwy;
+ Swizzle4<Vector4, 0x3311> wwy;
+ Swizzle4<Vector4, 0x0022> xxz;
+ Swizzle4<Vector4, 0x1022> yxz;
+ Swizzle4<Vector4, 0x2022> zxz;
+ Swizzle4<Vector4, 0x3022> wxz;
+ SwizzleMask4<Vector4, 0x0122> xyz;
+ Swizzle4<Vector4, 0x1122> yyz;
+ Swizzle4<Vector4, 0x2122> zyz;
+ Swizzle4<Vector4, 0x3122> wyz;
+ Swizzle4<Vector4, 0x0222> xzz;
+ Swizzle4<Vector4, 0x1222> yzz;
+ Swizzle4<Vector4, 0x2222> zzz;
+ Swizzle4<Vector4, 0x3222> wzz;
+ Swizzle4<Vector4, 0x0322> xwz;
+ Swizzle4<Vector4, 0x1322> ywz;
+ Swizzle4<Vector4, 0x2322> zwz;
+ Swizzle4<Vector4, 0x3322> wwz;
+ Swizzle4<Vector4, 0x0033> xxw;
+ Swizzle4<Vector4, 0x1033> yxw;
+ Swizzle4<Vector4, 0x2033> zxw;
+ Swizzle4<Vector4, 0x3033> wxw;
+ SwizzleMask4<Vector4, 0x0133> xyw;
+ Swizzle4<Vector4, 0x1133> yyw;
+ Swizzle4<Vector4, 0x2133> zyw;
+ Swizzle4<Vector4, 0x3133> wyw;
+ SwizzleMask4<Vector4, 0x0233> xzw;
+ SwizzleMask4<Vector4, 0x1233> yzw;
+ Swizzle4<Vector4, 0x2233> zzw;
+ Swizzle4<Vector4, 0x3233> wzw;
+ Swizzle4<Vector4, 0x0333> xww;
+ Swizzle4<Vector4, 0x1333> yww;
+ Swizzle4<Vector4, 0x2333> zww;
+ Swizzle4<Vector4, 0x3333> www;
+ Swizzle4<Vector4, 0x0000> xxxx;
+ Swizzle4<Vector4, 0x1000> yxxx;
+ Swizzle4<Vector4, 0x2000> zxxx;
+ Swizzle4<Vector4, 0x3000> wxxx;
+ Swizzle4<Vector4, 0x0100> xyxx;
+ Swizzle4<Vector4, 0x1100> yyxx;
+ Swizzle4<Vector4, 0x2100> zyxx;
+ Swizzle4<Vector4, 0x3100> wyxx;
+ Swizzle4<Vector4, 0x0200> xzxx;
+ Swizzle4<Vector4, 0x1200> yzxx;
+ Swizzle4<Vector4, 0x2200> zzxx;
+ Swizzle4<Vector4, 0x3200> wzxx;
+ Swizzle4<Vector4, 0x0300> xwxx;
+ Swizzle4<Vector4, 0x1300> ywxx;
+ Swizzle4<Vector4, 0x2300> zwxx;
+ Swizzle4<Vector4, 0x3300> wwxx;
+ Swizzle4<Vector4, 0x0010> xxyx;
+ Swizzle4<Vector4, 0x1010> yxyx;
+ Swizzle4<Vector4, 0x2010> zxyx;
+ Swizzle4<Vector4, 0x3010> wxyx;
+ Swizzle4<Vector4, 0x0110> xyyx;
+ Swizzle4<Vector4, 0x1110> yyyx;
+ Swizzle4<Vector4, 0x2110> zyyx;
+ Swizzle4<Vector4, 0x3110> wyyx;
+ Swizzle4<Vector4, 0x0210> xzyx;
+ Swizzle4<Vector4, 0x1210> yzyx;
+ Swizzle4<Vector4, 0x2210> zzyx;
+ Swizzle4<Vector4, 0x3210> wzyx;
+ Swizzle4<Vector4, 0x0310> xwyx;
+ Swizzle4<Vector4, 0x1310> ywyx;
+ Swizzle4<Vector4, 0x2310> zwyx;
+ Swizzle4<Vector4, 0x3310> wwyx;
+ Swizzle4<Vector4, 0x0020> xxzx;
+ Swizzle4<Vector4, 0x1020> yxzx;
+ Swizzle4<Vector4, 0x2020> zxzx;
+ Swizzle4<Vector4, 0x3020> wxzx;
+ Swizzle4<Vector4, 0x0120> xyzx;
+ Swizzle4<Vector4, 0x1120> yyzx;
+ Swizzle4<Vector4, 0x2120> zyzx;
+ Swizzle4<Vector4, 0x3120> wyzx;
+ Swizzle4<Vector4, 0x0220> xzzx;
+ Swizzle4<Vector4, 0x1220> yzzx;
+ Swizzle4<Vector4, 0x2220> zzzx;
+ Swizzle4<Vector4, 0x3220> wzzx;
+ Swizzle4<Vector4, 0x0320> xwzx;
+ Swizzle4<Vector4, 0x1320> ywzx;
+ Swizzle4<Vector4, 0x2320> zwzx;
+ Swizzle4<Vector4, 0x3320> wwzx;
+ Swizzle4<Vector4, 0x0030> xxwx;
+ Swizzle4<Vector4, 0x1030> yxwx;
+ Swizzle4<Vector4, 0x2030> zxwx;
+ Swizzle4<Vector4, 0x3030> wxwx;
+ Swizzle4<Vector4, 0x0130> xywx;
+ Swizzle4<Vector4, 0x1130> yywx;
+ Swizzle4<Vector4, 0x2130> zywx;
+ Swizzle4<Vector4, 0x3130> wywx;
+ Swizzle4<Vector4, 0x0230> xzwx;
+ Swizzle4<Vector4, 0x1230> yzwx;
+ Swizzle4<Vector4, 0x2230> zzwx;
+ Swizzle4<Vector4, 0x3230> wzwx;
+ Swizzle4<Vector4, 0x0330> xwwx;
+ Swizzle4<Vector4, 0x1330> ywwx;
+ Swizzle4<Vector4, 0x2330> zwwx;
+ Swizzle4<Vector4, 0x3330> wwwx;
+ Swizzle4<Vector4, 0x0001> xxxy;
+ Swizzle4<Vector4, 0x1001> yxxy;
+ Swizzle4<Vector4, 0x2001> zxxy;
+ Swizzle4<Vector4, 0x3001> wxxy;
+ Swizzle4<Vector4, 0x0101> xyxy;
+ Swizzle4<Vector4, 0x1101> yyxy;
+ Swizzle4<Vector4, 0x2101> zyxy;
+ Swizzle4<Vector4, 0x3101> wyxy;
+ Swizzle4<Vector4, 0x0201> xzxy;
+ Swizzle4<Vector4, 0x1201> yzxy;
+ Swizzle4<Vector4, 0x2201> zzxy;
+ Swizzle4<Vector4, 0x3201> wzxy;
+ Swizzle4<Vector4, 0x0301> xwxy;
+ Swizzle4<Vector4, 0x1301> ywxy;
+ Swizzle4<Vector4, 0x2301> zwxy;
+ Swizzle4<Vector4, 0x3301> wwxy;
+ Swizzle4<Vector4, 0x0011> xxyy;
+ Swizzle4<Vector4, 0x1011> yxyy;
+ Swizzle4<Vector4, 0x2011> zxyy;
+ Swizzle4<Vector4, 0x3011> wxyy;
+ Swizzle4<Vector4, 0x0111> xyyy;
+ Swizzle4<Vector4, 0x1111> yyyy;
+ Swizzle4<Vector4, 0x2111> zyyy;
+ Swizzle4<Vector4, 0x3111> wyyy;
+ Swizzle4<Vector4, 0x0211> xzyy;
+ Swizzle4<Vector4, 0x1211> yzyy;
+ Swizzle4<Vector4, 0x2211> zzyy;
+ Swizzle4<Vector4, 0x3211> wzyy;
+ Swizzle4<Vector4, 0x0311> xwyy;
+ Swizzle4<Vector4, 0x1311> ywyy;
+ Swizzle4<Vector4, 0x2311> zwyy;
+ Swizzle4<Vector4, 0x3311> wwyy;
+ Swizzle4<Vector4, 0x0021> xxzy;
+ Swizzle4<Vector4, 0x1021> yxzy;
+ Swizzle4<Vector4, 0x2021> zxzy;
+ Swizzle4<Vector4, 0x3021> wxzy;
+ Swizzle4<Vector4, 0x0121> xyzy;
+ Swizzle4<Vector4, 0x1121> yyzy;
+ Swizzle4<Vector4, 0x2121> zyzy;
+ Swizzle4<Vector4, 0x3121> wyzy;
+ Swizzle4<Vector4, 0x0221> xzzy;
+ Swizzle4<Vector4, 0x1221> yzzy;
+ Swizzle4<Vector4, 0x2221> zzzy;
+ Swizzle4<Vector4, 0x3221> wzzy;
+ Swizzle4<Vector4, 0x0321> xwzy;
+ Swizzle4<Vector4, 0x1321> ywzy;
+ Swizzle4<Vector4, 0x2321> zwzy;
+ Swizzle4<Vector4, 0x3321> wwzy;
+ Swizzle4<Vector4, 0x0031> xxwy;
+ Swizzle4<Vector4, 0x1031> yxwy;
+ Swizzle4<Vector4, 0x2031> zxwy;
+ Swizzle4<Vector4, 0x3031> wxwy;
+ Swizzle4<Vector4, 0x0131> xywy;
+ Swizzle4<Vector4, 0x1131> yywy;
+ Swizzle4<Vector4, 0x2131> zywy;
+ Swizzle4<Vector4, 0x3131> wywy;
+ Swizzle4<Vector4, 0x0231> xzwy;
+ Swizzle4<Vector4, 0x1231> yzwy;
+ Swizzle4<Vector4, 0x2231> zzwy;
+ Swizzle4<Vector4, 0x3231> wzwy;
+ Swizzle4<Vector4, 0x0331> xwwy;
+ Swizzle4<Vector4, 0x1331> ywwy;
+ Swizzle4<Vector4, 0x2331> zwwy;
+ Swizzle4<Vector4, 0x3331> wwwy;
+ Swizzle4<Vector4, 0x0002> xxxz;
+ Swizzle4<Vector4, 0x1002> yxxz;
+ Swizzle4<Vector4, 0x2002> zxxz;
+ Swizzle4<Vector4, 0x3002> wxxz;
+ Swizzle4<Vector4, 0x0102> xyxz;
+ Swizzle4<Vector4, 0x1102> yyxz;
+ Swizzle4<Vector4, 0x2102> zyxz;
+ Swizzle4<Vector4, 0x3102> wyxz;
+ Swizzle4<Vector4, 0x0202> xzxz;
+ Swizzle4<Vector4, 0x1202> yzxz;
+ Swizzle4<Vector4, 0x2202> zzxz;
+ Swizzle4<Vector4, 0x3202> wzxz;
+ Swizzle4<Vector4, 0x0302> xwxz;
+ Swizzle4<Vector4, 0x1302> ywxz;
+ Swizzle4<Vector4, 0x2302> zwxz;
+ Swizzle4<Vector4, 0x3302> wwxz;
+ Swizzle4<Vector4, 0x0012> xxyz;
+ Swizzle4<Vector4, 0x1012> yxyz;
+ Swizzle4<Vector4, 0x2012> zxyz;
+ Swizzle4<Vector4, 0x3012> wxyz;
+ Swizzle4<Vector4, 0x0112> xyyz;
+ Swizzle4<Vector4, 0x1112> yyyz;
+ Swizzle4<Vector4, 0x2112> zyyz;
+ Swizzle4<Vector4, 0x3112> wyyz;
+ Swizzle4<Vector4, 0x0212> xzyz;
+ Swizzle4<Vector4, 0x1212> yzyz;
+ Swizzle4<Vector4, 0x2212> zzyz;
+ Swizzle4<Vector4, 0x3212> wzyz;
+ Swizzle4<Vector4, 0x0312> xwyz;
+ Swizzle4<Vector4, 0x1312> ywyz;
+ Swizzle4<Vector4, 0x2312> zwyz;
+ Swizzle4<Vector4, 0x3312> wwyz;
+ Swizzle4<Vector4, 0x0022> xxzz;
+ Swizzle4<Vector4, 0x1022> yxzz;
+ Swizzle4<Vector4, 0x2022> zxzz;
+ Swizzle4<Vector4, 0x3022> wxzz;
+ Swizzle4<Vector4, 0x0122> xyzz;
+ Swizzle4<Vector4, 0x1122> yyzz;
+ Swizzle4<Vector4, 0x2122> zyzz;
+ Swizzle4<Vector4, 0x3122> wyzz;
+ Swizzle4<Vector4, 0x0222> xzzz;
+ Swizzle4<Vector4, 0x1222> yzzz;
+ Swizzle4<Vector4, 0x2222> zzzz;
+ Swizzle4<Vector4, 0x3222> wzzz;
+ Swizzle4<Vector4, 0x0322> xwzz;
+ Swizzle4<Vector4, 0x1322> ywzz;
+ Swizzle4<Vector4, 0x2322> zwzz;
+ Swizzle4<Vector4, 0x3322> wwzz;
+ Swizzle4<Vector4, 0x0032> xxwz;
+ Swizzle4<Vector4, 0x1032> yxwz;
+ Swizzle4<Vector4, 0x2032> zxwz;
+ Swizzle4<Vector4, 0x3032> wxwz;
+ Swizzle4<Vector4, 0x0132> xywz;
+ Swizzle4<Vector4, 0x1132> yywz;
+ Swizzle4<Vector4, 0x2132> zywz;
+ Swizzle4<Vector4, 0x3132> wywz;
+ Swizzle4<Vector4, 0x0232> xzwz;
+ Swizzle4<Vector4, 0x1232> yzwz;
+ Swizzle4<Vector4, 0x2232> zzwz;
+ Swizzle4<Vector4, 0x3232> wzwz;
+ Swizzle4<Vector4, 0x0332> xwwz;
+ Swizzle4<Vector4, 0x1332> ywwz;
+ Swizzle4<Vector4, 0x2332> zwwz;
+ Swizzle4<Vector4, 0x3332> wwwz;
+ Swizzle4<Vector4, 0x0003> xxxw;
+ Swizzle4<Vector4, 0x1003> yxxw;
+ Swizzle4<Vector4, 0x2003> zxxw;
+ Swizzle4<Vector4, 0x3003> wxxw;
+ Swizzle4<Vector4, 0x0103> xyxw;
+ Swizzle4<Vector4, 0x1103> yyxw;
+ Swizzle4<Vector4, 0x2103> zyxw;
+ Swizzle4<Vector4, 0x3103> wyxw;
+ Swizzle4<Vector4, 0x0203> xzxw;
+ Swizzle4<Vector4, 0x1203> yzxw;
+ Swizzle4<Vector4, 0x2203> zzxw;
+ Swizzle4<Vector4, 0x3203> wzxw;
+ Swizzle4<Vector4, 0x0303> xwxw;
+ Swizzle4<Vector4, 0x1303> ywxw;
+ Swizzle4<Vector4, 0x2303> zwxw;
+ Swizzle4<Vector4, 0x3303> wwxw;
+ Swizzle4<Vector4, 0x0013> xxyw;
+ Swizzle4<Vector4, 0x1013> yxyw;
+ Swizzle4<Vector4, 0x2013> zxyw;
+ Swizzle4<Vector4, 0x3013> wxyw;
+ Swizzle4<Vector4, 0x0113> xyyw;
+ Swizzle4<Vector4, 0x1113> yyyw;
+ Swizzle4<Vector4, 0x2113> zyyw;
+ Swizzle4<Vector4, 0x3113> wyyw;
+ Swizzle4<Vector4, 0x0213> xzyw;
+ Swizzle4<Vector4, 0x1213> yzyw;
+ Swizzle4<Vector4, 0x2213> zzyw;
+ Swizzle4<Vector4, 0x3213> wzyw;
+ Swizzle4<Vector4, 0x0313> xwyw;
+ Swizzle4<Vector4, 0x1313> ywyw;
+ Swizzle4<Vector4, 0x2313> zwyw;
+ Swizzle4<Vector4, 0x3313> wwyw;
+ Swizzle4<Vector4, 0x0023> xxzw;
+ Swizzle4<Vector4, 0x1023> yxzw;
+ Swizzle4<Vector4, 0x2023> zxzw;
+ Swizzle4<Vector4, 0x3023> wxzw;
+ SwizzleMask4<Vector4, 0x0123> xyzw;
+ Swizzle4<Vector4, 0x1123> yyzw;
+ Swizzle4<Vector4, 0x2123> zyzw;
+ Swizzle4<Vector4, 0x3123> wyzw;
+ Swizzle4<Vector4, 0x0223> xzzw;
+ Swizzle4<Vector4, 0x1223> yzzw;
+ Swizzle4<Vector4, 0x2223> zzzw;
+ Swizzle4<Vector4, 0x3223> wzzw;
+ Swizzle4<Vector4, 0x0323> xwzw;
+ Swizzle4<Vector4, 0x1323> ywzw;
+ Swizzle4<Vector4, 0x2323> zwzw;
+ Swizzle4<Vector4, 0x3323> wwzw;
+ Swizzle4<Vector4, 0x0033> xxww;
+ Swizzle4<Vector4, 0x1033> yxww;
+ Swizzle4<Vector4, 0x2033> zxww;
+ Swizzle4<Vector4, 0x3033> wxww;
+ Swizzle4<Vector4, 0x0133> xyww;
+ Swizzle4<Vector4, 0x1133> yyww;
+ Swizzle4<Vector4, 0x2133> zyww;
+ Swizzle4<Vector4, 0x3133> wyww;
+ Swizzle4<Vector4, 0x0233> xzww;
+ Swizzle4<Vector4, 0x1233> yzww;
+ Swizzle4<Vector4, 0x2233> zzww;
+ Swizzle4<Vector4, 0x3233> wzww;
+ Swizzle4<Vector4, 0x0333> xwww;
+ Swizzle4<Vector4, 0x1333> ywww;
+ Swizzle4<Vector4, 0x2333> zwww;
+ Swizzle4<Vector4, 0x3333> wwww;
};
};
@@ -1945,8 +1945,8 @@
RValue<Int> Extract(RValue<Int4> val, int i);
RValue<Int4> Insert(RValue<Int4> val, RValue<Int> element, int i);
RValue<Int> SignMask(RValue<Int4> x);
- RValue<Int4> Swizzle(RValue<Int4> x, unsigned char select);
- RValue<Int4> Blend(RValue<Int4> x, RValue<Int4> y, unsigned short select);
+ RValue<Int4> Swizzle(RValue<Int4> x, uint16_t select);
+ RValue<Int4> Blend(RValue<Int4> x, RValue<Int4> y, uint16_t select);
RValue<Int4> MulHigh(RValue<Int4> x, RValue<Int4> y);
class UInt4 : public LValue<UInt4>, public XYZW<UInt4>
@@ -2030,8 +2030,8 @@
RValue<UInt> Extract(RValue<UInt4> val, int i);
RValue<UInt4> Insert(RValue<UInt4> val, RValue<UInt> element, int i);
// RValue<UInt4> RoundInt(RValue<Float4> cast);
- RValue<UInt4> Swizzle(RValue<UInt4> x, unsigned char select);
- RValue<UInt4> Blend(RValue<UInt4> x, RValue<UInt4> y, unsigned short select);
+ RValue<UInt4> Swizzle(RValue<UInt4> x, uint16_t select);
+ RValue<UInt4> Blend(RValue<UInt4> x, RValue<UInt4> y, uint16_t select);
class Half : public LValue<Half>
{
@@ -2177,8 +2177,8 @@
// RValue<Float2> Abs(RValue<Float2> x);
// RValue<Float2> Max(RValue<Float2> x, RValue<Float2> y);
// RValue<Float2> Min(RValue<Float2> x, RValue<Float2> y);
-// RValue<Float2> Swizzle(RValue<Float2> x, unsigned char select);
-// RValue<Float2> Mask(Float2 &lhs, RValue<Float2> rhs, unsigned char select);
+// RValue<Float2> Swizzle(RValue<Float2> x, uint16_t select);
+// RValue<Float2> Mask(Float2 &lhs, RValue<Float2> rhs, uint16_t select);
class Float4 : public LValue<Float4>, public XYZW<Float4>
{
@@ -2257,12 +2257,12 @@
RValue<Float4> Sqrt(RValue<Float4> x);
RValue<Float4> Insert(RValue<Float4> val, RValue<Float> element, int i);
RValue<Float> Extract(RValue<Float4> x, int i);
- RValue<Float4> Swizzle(RValue<Float4> x, unsigned char select);
- RValue<Float4> Blend(RValue<Float4> x, RValue<Float4> y, unsigned short select);
- RValue<Float4> ShuffleLowHigh(RValue<Float4> x, RValue<Float4> y, unsigned char imm);
+ RValue<Float4> Swizzle(RValue<Float4> x, uint16_t select);
+ RValue<Float4> Blend(RValue<Float4> x, RValue<Float4> y, uint16_t select);
+ RValue<Float4> ShuffleLowHigh(RValue<Float4> x, RValue<Float4> y, uint16_t imm);
RValue<Float4> UnpackLow(RValue<Float4> x, RValue<Float4> y);
RValue<Float4> UnpackHigh(RValue<Float4> x, RValue<Float4> y);
- RValue<Float4> Mask(Float4 &lhs, RValue<Float4> rhs, unsigned char select);
+ RValue<Float4> Mask(Float4 &lhs, RValue<Float4> rhs, uint16_t select);
RValue<Int> SignMask(RValue<Float4> x);
// Ordered comparison functions
@@ -2843,28 +2843,28 @@
Float4::Float4(const Swizzle2<Float4, X> &x, const Swizzle2<Float4, Y> &y) : XYZW(this)
{
RR_DEBUG_INFO_UPDATE_LOC();
- *this = ShuffleLowHigh(*x.parent, *y.parent, (X & 0xF) | (Y & 0xF) << 4);
+ *this = ShuffleLowHigh(*x.parent, *y.parent, (uint16_t(X) & 0xFF00u) | (uint16_t(Y >> 8) & 0x00FFu));
}
template<int X, int Y>
Float4::Float4(const SwizzleMask2<Float4, X> &x, const Swizzle2<Float4, Y> &y) : XYZW(this)
{
RR_DEBUG_INFO_UPDATE_LOC();
- *this = ShuffleLowHigh(*x.parent, *y.parent, (X & 0xF) | (Y & 0xF) << 4);
+ *this = ShuffleLowHigh(*x.parent, *y.parent, (uint16_t(X) & 0xFF00u) | (uint16_t(Y >> 8) & 0x00FFu));
}
template<int X, int Y>
Float4::Float4(const Swizzle2<Float4, X> &x, const SwizzleMask2<Float4, Y> &y) : XYZW(this)
{
RR_DEBUG_INFO_UPDATE_LOC();
- *this = ShuffleLowHigh(*x.parent, *y.parent, (X & 0xF) | (Y & 0xF) << 4);
+ *this = ShuffleLowHigh(*x.parent, *y.parent, (uint16_t(X) & 0xFF00u) | (uint16_t(Y >> 8) & 0x00FFu));
}
template<int X, int Y>
Float4::Float4(const SwizzleMask2<Float4, X> &x, const SwizzleMask2<Float4, Y> &y) : XYZW(this)
{
RR_DEBUG_INFO_UPDATE_LOC();
- *this = ShuffleLowHigh(*x.parent, *y.parent, (X & 0xF) | (Y & 0xF) << 4);
+ *this = ShuffleLowHigh(*x.parent, *y.parent, (uint16_t(X) & 0xFF00u) | (uint16_t(Y >> 8) & 0x00FFu));
}
template<int T>
diff --git a/src/Reactor/ReactorUnitTests.cpp b/src/Reactor/ReactorUnitTests.cpp
index fe25a01..d76622f 100644
--- a/src/Reactor/ReactorUnitTests.cpp
+++ b/src/Reactor/ReactorUnitTests.cpp
@@ -349,6 +349,15 @@
TEST(ReactorUnitTests, Swizzle)
{
+ auto swizzleCode = [](int i) -> uint16_t
+ {
+ auto x = (i >> 0) & 0x03;
+ auto y = (i >> 2) & 0x03;
+ auto z = (i >> 4) & 0x03;
+ auto w = (i >> 6) & 0x03;
+ return (x << 12) | (y << 8) | (z << 4) | (w << 0);
+ };
+
{
FunctionT<int(void*)> function;
{
@@ -356,12 +365,12 @@
for(int i = 0; i < 256; i++)
{
- *Pointer<Float4>(out + 16 * i) = Swizzle(Float4(1.0f, 2.0f, 3.0f, 4.0f), i);
+ *Pointer<Float4>(out + 16 * i) = Swizzle(Float4(1.0f, 2.0f, 3.0f, 4.0f), swizzleCode(i));
}
for(int i = 0; i < 256; i++)
- {
- *Pointer<Float4>(out + 16 * (256 + i)) = ShuffleLowHigh(Float4(1.0f, 2.0f, 3.0f, 4.0f), Float4(5.0f, 6.0f, 7.0f, 8.0f), i);
+ {
+ *Pointer<Float4>(out + 16 * (256 + i)) = ShuffleLowHigh(Float4(1.0f, 2.0f, 3.0f, 4.0f), Float4(5.0f, 6.0f, 7.0f, 8.0f), swizzleCode(i));
}
*Pointer<Float4>(out + 16 * (512 + 0)) = UnpackLow(Float4(1.0f, 2.0f, 3.0f, 4.0f), Float4(5.0f, 6.0f, 7.0f, 8.0f));
@@ -374,13 +383,13 @@
for(int i = 0; i < 256; i++)
{
*Pointer<Short4>(out + 16 * (512 + 6) + (8 * i)) =
- Swizzle(Short4(1, 2, 3, 4), i);
+ Swizzle(Short4(1, 2, 3, 4), swizzleCode(i));
}
for(int i = 0; i < 256; i++)
{
*Pointer<Int4>(out + 16 * (512 + 6 + i) + (8 * 256)) =
- Swizzle(Int4(1, 2, 3, 4), i);
+ Swizzle(Int4(1, 2, 3, 4), swizzleCode(i));
}
Return(0);
diff --git a/src/Reactor/SubzeroReactor.cpp b/src/Reactor/SubzeroReactor.cpp
index 47b4b16..81409c8 100644
--- a/src/Reactor/SubzeroReactor.cpp
+++ b/src/Reactor/SubzeroReactor.cpp
@@ -2202,7 +2202,7 @@
pack->addArg(y.value);
::basicBlock->appendInst(pack);
- return As<SByte8>(Swizzle(As<Int4>(V(result)), 0x88));
+ return As<SByte8>(Swizzle(As<Int4>(V(result)), 0x0202));
}
}
@@ -2232,7 +2232,7 @@
pack->addArg(y.value);
::basicBlock->appendInst(pack);
- return As<Byte8>(Swizzle(As<Int4>(V(result)), 0x88));
+ return As<Byte8>(Swizzle(As<Int4>(V(result)), 0x0202));
}
}
diff --git a/src/Renderer/QuadRasterizer.cpp b/src/Renderer/QuadRasterizer.cpp
index 947a88b..a16c457 100644
--- a/src/Renderer/QuadRasterizer.cpp
+++ b/src/Renderer/QuadRasterizer.cpp
@@ -272,8 +272,8 @@
xLeft[q] = *Pointer<Short4>(primitive + q * sizeof(Primitive) + OFFSET(Primitive,outline) + y * sizeof(Primitive::Span));
xRight[q] = xLeft[q];
- xLeft[q] = Swizzle(xLeft[q], 0xA0) - Short4(1, 2, 1, 2);
- xRight[q] = Swizzle(xRight[q], 0xF5) - Short4(0, 1, 0, 1);
+ xLeft[q] = Swizzle(xLeft[q], 0x0022) - Short4(1, 2, 1, 2);
+ xRight[q] = Swizzle(xRight[q], 0x1133) - Short4(0, 1, 0, 1);
}
For(Int x = x0, x < x1, x += 2)
diff --git a/src/Shader/PixelRoutine.cpp b/src/Shader/PixelRoutine.cpp
index 12040fd..31673a1 100644
--- a/src/Shader/PixelRoutine.cpp
+++ b/src/Shader/PixelRoutine.cpp
@@ -2081,8 +2081,8 @@
buffer += *Pointer<Int>(data + OFFSET(DrawData,colorPitchB[index]));
pixel.y = *Pointer<Float4>(buffer + 8 * x, 16);
pixel.z = pixel.x;
- pixel.x = ShuffleLowHigh(pixel.x, pixel.y, 0x88);
- pixel.z = ShuffleLowHigh(pixel.z, pixel.y, 0xDD);
+ pixel.x = ShuffleLowHigh(pixel.x, pixel.y, 0x0202);
+ pixel.z = ShuffleLowHigh(pixel.z, pixel.y, 0x1313);
pixel.y = pixel.z;
pixel.z = pixel.w = one;
break;