Improved linear filtering performance by adding a lookup table

This commit is contained in:
Magnus Norddahl 2016-06-26 12:53:10 +02:00
commit 928e8e0d43
2 changed files with 99 additions and 20 deletions

View file

@ -98,12 +98,37 @@ CVAR(Bool, r_mipmap, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG);
/////////////////////////////////////////////////////////////////////////////
__m128i SampleBgra::samplertable[256 * 2];
DrawerCommandQueue *DrawerCommandQueue::Instance()
{
static DrawerCommandQueue queue;
return &queue;
}
DrawerCommandQueue::DrawerCommandQueue()
{
for (int inv_b = 0; inv_b < 16; inv_b++)
{
for (int inv_a = 0; inv_a < 16; inv_a++)
{
int a = 16 - inv_a;
int b = 16 - inv_b;
int ab = a * b;
int invab = inv_a * b;
int ainvb = a * inv_b;
int invainvb = inv_a * inv_b;
__m128i ab_invab = _mm_set_epi16(invab, invab, invab, invab, ab, ab, ab, ab);
__m128i ainvb_invainvb = _mm_set_epi16(invainvb, invainvb, invainvb, invainvb, ainvb, ainvb, ainvb, ainvb);
_mm_store_si128(SampleBgra::samplertable + inv_b * 32 + inv_a * 2, ab_invab);
_mm_store_si128(SampleBgra::samplertable + inv_b * 32 + inv_a * 2 + 1, ainvb_invainvb);
}
}
}
DrawerCommandQueue::~DrawerCommandQueue()
{
StopThreads();