mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-25 01:57:47 +01:00
add AVX memset
This commit is contained in:
parent
fee61f7b4a
commit
6372dc6884
@ -74,6 +74,7 @@ void blt_colorkey_mirror_stretch(
|
|||||||
|
|
||||||
void blt_clear(
|
void blt_clear(
|
||||||
unsigned char* dst,
|
unsigned char* dst,
|
||||||
|
char color,
|
||||||
size_t size);
|
size_t size);
|
||||||
|
|
||||||
void blt_colorfill(
|
void blt_colorfill(
|
||||||
|
44
src/blt.c
44
src/blt.c
@ -461,16 +461,39 @@ void blt_colorkey_mirror_stretch(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void blt_clear(
|
void blt_clear(
|
||||||
unsigned char* dst,
|
unsigned char* dst,
|
||||||
|
char color,
|
||||||
size_t size)
|
size_t size)
|
||||||
{
|
{
|
||||||
if (size >= 1024 * 200)
|
#ifdef _MSC_VER
|
||||||
|
if (size < 1024 * 100 && g_blt_use_avx && !((DWORD)dst % 32))
|
||||||
{
|
{
|
||||||
__stosb(dst, 0, size);
|
while (size >= 128)
|
||||||
|
{
|
||||||
|
__m256i c0 = _mm256_set1_epi8(color);
|
||||||
|
|
||||||
|
_mm256_store_si256((((__m256i*)dst) + 0), c0);
|
||||||
|
_mm256_store_si256((((__m256i*)dst) + 1), c0);
|
||||||
|
_mm256_store_si256((((__m256i*)dst) + 2), c0);
|
||||||
|
_mm256_store_si256((((__m256i*)dst) + 3), c0);
|
||||||
|
|
||||||
|
dst += 128;
|
||||||
|
size -= 128;
|
||||||
|
}
|
||||||
|
|
||||||
|
_mm256_zeroupper();
|
||||||
|
|
||||||
|
/* memset below handles the remainder */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (size >= 1024 * 100)
|
||||||
|
{
|
||||||
|
__stosb(dst, color, size);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memset(dst, 0, size);
|
memset(dst, color, size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -500,22 +523,13 @@ void blt_colorfill(
|
|||||||
{
|
{
|
||||||
if (size == dst_p)
|
if (size == dst_p)
|
||||||
{
|
{
|
||||||
size_t s = dst_p * dst_h;
|
blt_clear(dst, color, dst_p * dst_h);
|
||||||
|
|
||||||
if (s >= 1024 * 200)
|
|
||||||
{
|
|
||||||
__stosb(dst, color, s);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memset(dst, color, s);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int i = 0; i < dst_h; i++)
|
for (int i = 0; i < dst_h; i++)
|
||||||
{
|
{
|
||||||
memset(dst, color, size);
|
blt_clear(dst, color, size);
|
||||||
dst += dst_p;
|
dst += dst_p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -551,7 +551,7 @@ HRESULT dds_Flip(IDirectDrawSurfaceImpl* This, IDirectDrawSurfaceImpl* lpDDSurfa
|
|||||||
|
|
||||||
if (g_ddraw->flipclear)
|
if (g_ddraw->flipclear)
|
||||||
{
|
{
|
||||||
blt_clear(buf, backbuffer->size);
|
blt_clear(buf, 0, backbuffer->size);
|
||||||
}
|
}
|
||||||
|
|
||||||
LeaveCriticalSection(&g_ddraw->cs);
|
LeaveCriticalSection(&g_ddraw->cs);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user