From f1cc17ea02abdb2a2a44801c922695c7ff9400f5 Mon Sep 17 00:00:00 2001 From: Jaime Passos Date: Tue, 10 Sep 2019 17:25:21 -0300 Subject: [PATCH] Enable usage of R_DrawSpan_8_MMX if drawing a flat with powers-of-two dimensions --- src/r_plane.c | 12 +++++++++++- src/screen.c | 5 +++-- src/screen.h | 1 + 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/r_plane.c b/src/r_plane.c index de5bf9f00..51a69336e 100644 --- a/src/r_plane.c +++ b/src/r_plane.c @@ -652,7 +652,13 @@ static void R_DrawSkyPlane(visplane_t *pl) boolean R_CheckPowersOfTwo(void) { - return (ds_powersoftwo = ((!((ds_flatwidth & (ds_flatwidth - 1)) || (ds_flatheight & (ds_flatheight - 1)))) && (ds_flatwidth == ds_flatheight))); + if (ds_flatwidth & (ds_flatwidth - 1)) + ds_powersoftwo = false; + else if (ds_flatheight & (ds_flatheight - 1)) + ds_powersoftwo = false; + else if (ds_flatwidth == ds_flatheight) + ds_powersoftwo = true; + return ds_powersoftwo; } void R_CheckFlatLength(size_t size) @@ -974,7 +980,11 @@ void R_DrawSinglePlane(visplane_t *pl) // Check if the flat has dimensions that are powers-of-two numbers. if (R_CheckPowersOfTwo()) + { R_CheckFlatLength(ds_flatwidth * ds_flatheight); + if (spanfunc == basespanfunc) + spanfunc = mmxspanfunc; + } if (light >= LIGHTLEVELS) light = LIGHTLEVELS-1; diff --git a/src/screen.c b/src/screen.c index 4bace5239..547036a60 100644 --- a/src/screen.c +++ b/src/screen.c @@ -49,6 +49,7 @@ void (*fuzzcolfunc)(void); // standard fuzzy effect column drawer void (*transcolfunc)(void); // translation column drawer void (*shadecolfunc)(void); // smokie test.. void (*spanfunc)(void); // span drawer, use a 64x64 tile +void (*mmxspanfunc)(void); // span drawer in MMX assembly void (*splatfunc)(void); // span drawer w/ transparency void (*basespanfunc)(void); // default span func for color mode void (*transtransfunc)(void); // translucent translated column drawer @@ -112,7 +113,7 @@ void SCR_SetMode(void) // if (true)//vid.bpp == 1) //Always run in 8bpp. todo: remove all 16bpp code? { - spanfunc = basespanfunc = R_DrawSpan_8; + spanfunc = basespanfunc = mmxspanfunc = R_DrawSpan_8; splatfunc = R_DrawSplat_8; transcolfunc = R_DrawTranslatedColumn_8; transtransfunc = R_DrawTranslatedTranslucentColumn_8; @@ -133,7 +134,7 @@ void SCR_SetMode(void) //fuzzcolfunc = R_DrawTranslucentColumn_8_ASM; walldrawerfunc = R_DrawWallColumn_8_MMX; twosmultipatchfunc = R_Draw2sMultiPatchColumn_8_MMX; - //spanfunc = basespanfunc = R_DrawSpan_8_MMX; + mmxspanfunc = R_DrawSpan_8_MMX; } else { diff --git a/src/screen.h b/src/screen.h index 7aa6fdb63..3554b5520 100644 --- a/src/screen.h +++ b/src/screen.h @@ -123,6 +123,7 @@ extern void (*transcolfunc)(void); extern void (*shadecolfunc)(void); extern void (*spanfunc)(void); extern void (*basespanfunc)(void); +extern void (*mmxspanfunc)(void); extern void (*splatfunc)(void); extern void (*transtransfunc)(void); extern void (*twosmultipatchfunc)(void);