mirror of https://github.com/PCSX2/pcsx2.git
GS: Add srav and blend backwards compat to GSVector4i
This commit is contained in:
parent
24850823a2
commit
b0f9662811
|
@ -234,13 +234,9 @@ public:
|
|||
return sat_i32(a);
|
||||
}
|
||||
|
||||
template <int mode>
|
||||
__forceinline GSVector4i ralign(const GSVector2i& a) const
|
||||
template <Align_Mode mode>
|
||||
GSVector4i _ralign_helper(const GSVector4i& mask) const
|
||||
{
|
||||
// a must be 1 << n
|
||||
|
||||
GSVector4i mask = GSVector4i(a) - GSVector4i(1, 1);
|
||||
|
||||
GSVector4i v;
|
||||
|
||||
switch (mode)
|
||||
|
@ -248,13 +244,28 @@ public:
|
|||
case Align_Inside: v = *this + mask; break;
|
||||
case Align_Outside: v = *this + mask.zwxy(); break;
|
||||
case Align_NegInf: v = *this; break;
|
||||
case Align_PosInf: v = *this + mask.zwzw(); break;
|
||||
case Align_PosInf: v = *this + mask.xyxy(); break;
|
||||
default: pxAssert(0); break;
|
||||
}
|
||||
|
||||
return v.andnot(mask.xyxy());
|
||||
}
|
||||
|
||||
/// Align the rect using mask values that already have one subtracted (1 << n - 1 aligns to 1 << n)
|
||||
template <Align_Mode mode>
|
||||
GSVector4i ralign_presub(const GSVector2i& a) const
|
||||
{
|
||||
return _ralign_helper<mode>(GSVector4i(a));
|
||||
}
|
||||
|
||||
template <Align_Mode mode>
|
||||
GSVector4i ralign(const GSVector2i& a) const
|
||||
{
|
||||
// a must be 1 << n
|
||||
|
||||
return _ralign_helper<mode>(GSVector4i(a) - GSVector4i(1, 1));
|
||||
}
|
||||
|
||||
GSVector4i fit(int arx, int ary) const;
|
||||
|
||||
GSVector4i fit(int preset) const;
|
||||
|
@ -426,15 +437,19 @@ public:
|
|||
return GSVector4i(_mm_blend_epi16(m, a, mask));
|
||||
}
|
||||
|
||||
#if _M_SSE >= 0x501
|
||||
|
||||
template <int mask>
|
||||
__forceinline GSVector4i blend32(const GSVector4i& v) const
|
||||
{
|
||||
#if _M_SSE >= 0x501
|
||||
return GSVector4i(_mm_blend_epi32(m, v.m, mask));
|
||||
}
|
||||
|
||||
#else
|
||||
constexpr int bit3 = ((mask & 8) * 3) << 3;
|
||||
constexpr int bit2 = ((mask & 4) * 3) << 2;
|
||||
constexpr int bit1 = ((mask & 2) * 3) << 1;
|
||||
constexpr int bit0 = (mask & 1) * 3;
|
||||
return blend16<bit3 | bit2 | bit1 | bit0>(v);
|
||||
#endif
|
||||
}
|
||||
|
||||
__forceinline GSVector4i blend(const GSVector4i& a, const GSVector4i& mask) const
|
||||
{
|
||||
|
@ -698,6 +713,13 @@ public:
|
|||
return GSVector4i(_mm_sra_epi32(m, i));
|
||||
}
|
||||
|
||||
#if _M_SSE >= 0x501
|
||||
__forceinline GSVector4i srav32(const GSVector4i& v) const
|
||||
{
|
||||
return GSVector4i(_mm_srav_epi32(m, v.m));
|
||||
}
|
||||
#endif
|
||||
|
||||
__forceinline GSVector4i sll16(int i) const
|
||||
{
|
||||
return GSVector4i(_mm_slli_epi16(m, i));
|
||||
|
@ -719,9 +741,9 @@ public:
|
|||
}
|
||||
|
||||
#if _M_SSE >= 0x501
|
||||
__forceinline GSVector4i sllv32(__m128i i) const
|
||||
__forceinline GSVector4i sllv32(const GSVector4i& v) const
|
||||
{
|
||||
return GSVector4i(_mm_sllv_epi32(m, i));
|
||||
return GSVector4i(_mm_sllv_epi32(m, v.m));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -756,9 +778,9 @@ public:
|
|||
}
|
||||
|
||||
#if _M_SSE >= 0x501
|
||||
__forceinline GSVector4i srlv32(__m128i i) const
|
||||
__forceinline GSVector4i srlv32(const GSVector4i& v) const
|
||||
{
|
||||
return GSVector4i(_mm_srlv_epi32(m, i));
|
||||
return GSVector4i(_mm_srlv_epi32(m, v.m));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue