From 05b66ceb07a959aa98deac21e5df2f24f67fe5e9 Mon Sep 17 00:00:00 2001 From: Ben Avison Date: Tue, 30 Aug 2016 15:17:22 +0100 Subject: [PATCH 04/11] SDL_blit: use a named enum for required hardware features bits in dispatch tables --- src/video/SDL_blit_N.c | 47 ++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/src/video/SDL_blit_N.c b/src/video/SDL_blit_N.c index cfd3e8008..8ce61f06e 100644 --- a/src/video/SDL_blit_N.c +++ b/src/video/SDL_blit_N.c @@ -28,6 +28,12 @@ /* Functions to blit from N-bit surfaces to other surfaces */ +enum blit_features { + BLIT_FEATURE_HAS_MMX = 1, + BLIT_FEATURE_HAS_ALTIVEC = 2, + BLIT_FEATURE_ALTIVEC_DONT_USE_PREFETCH = 4 +}; + #if SDL_ALTIVEC_BLITTERS #if __MWERKS__ #pragma altivec_model on @@ -858,24 +864,25 @@ static void ConvertAltivec32to32_prefetch(SDL_BlitInfo *info) vec_dss(DST_CHAN_DEST); } -static Uint32 GetBlitFeatures( void ) +static enum blit_features GetBlitFeatures( void ) { - static Uint32 features = 0xffffffff; - if (features == 0xffffffff) { + static enum blit_features features = -1; + if (features == (enum blit_features) -1) { /* Provide an override for testing .. */ char *override = SDL_getenv("SDL_ALTIVEC_BLIT_FEATURES"); if (override) { - features = 0; - SDL_sscanf(override, "%u", &features); + unsigned int features_as_uint = 0; + SDL_sscanf(override, "%u", &features_as_uint); + features = (enum blit_features) features_as_uint; } else { features = ( 0 /* Feature 1 is has-MMX */ - | ((SDL_HasMMX()) ? 1 : 0) + | ((SDL_HasMMX()) ? BLIT_FEATURE_HAS_MMX : 0) /* Feature 2 is has-AltiVec */ - | ((SDL_HasAltiVec()) ? 2 : 0) + | ((SDL_HasAltiVec()) ? BLIT_FEATURE_HAS_ALTIVEC : 0) /* Feature 4 is dont-use-prefetch */ /* !!!! FIXME: Check for G5 or later, not the cache size! Always prefetch on a G4. */ - | ((GetL3CacheSize() == 0) ? 4 : 0) + | ((GetL3CacheSize() == 0) ? BLIT_FEATURE_ALTIVEC_DONT_USE_PREFETCH : 0) ); } } @@ -886,7 +893,7 @@ static Uint32 GetBlitFeatures( void ) #endif #else /* Feature 1 is has-MMX */ -#define GetBlitFeatures() ((Uint32)(SDL_HasMMX() ? 1 : 0)) +#define GetBlitFeatures() (SDL_HasMMX() ? BLIT_FEATURE_HAS_MMX : 0) #endif /* This is now endian dependent */ @@ -2346,7 +2353,7 @@ struct blit_table { Uint32 srcR, srcG, srcB; int dstbpp; Uint32 dstR, dstG, dstB; - Uint32 blit_features; + enum blit_features blit_features; void *aux_data; SDL_loblit blitfunc; enum { NO_ALPHA=1, SET_ALPHA=2, COPY_ALPHA=4 } alpha; @@ -2366,9 +2373,9 @@ static const struct blit_table normal_blit_2[] = { #elif SDL_ALTIVEC_BLITTERS /* has-altivec */ { 0x0000F800,0x000007E0,0x0000001F, 4, 0x00000000,0x00000000,0x00000000, - 2, NULL, Blit_RGB565_32Altivec, NO_ALPHA | COPY_ALPHA | SET_ALPHA }, + BLIT_FEATURE_HAS_ALTIVEC, NULL, Blit_RGB565_32Altivec, NO_ALPHA | COPY_ALPHA | SET_ALPHA }, { 0x00007C00,0x000003E0,0x0000001F, 4, 0x00000000,0x00000000,0x00000000, - 2, NULL, Blit_RGB555_32Altivec, NO_ALPHA | COPY_ALPHA | SET_ALPHA }, + BLIT_FEATURE_HAS_ALTIVEC, NULL, Blit_RGB555_32Altivec, NO_ALPHA | COPY_ALPHA | SET_ALPHA }, #endif { 0x0000F800,0x000007E0,0x0000001F, 4, 0x00FF0000,0x0000FF00,0x000000FF, 0, NULL, Blit_RGB565_ARGB8888, NO_ALPHA | COPY_ALPHA | SET_ALPHA }, @@ -2389,23 +2396,23 @@ static const struct blit_table normal_blit_3[] = { static const struct blit_table normal_blit_4[] = { #if SDL_HERMES_BLITTERS { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x0000F800,0x000007E0,0x0000001F, - 1, ConvertMMXpII32_16RGB565, ConvertMMX, NO_ALPHA }, + BLIT_FEATURE_HAS_MMX, ConvertMMXpII32_16RGB565, ConvertMMX, NO_ALPHA }, { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x0000F800,0x000007E0,0x0000001F, 0, ConvertX86p32_16RGB565, ConvertX86, NO_ALPHA }, { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x0000001F,0x000007E0,0x0000F800, - 1, ConvertMMXpII32_16BGR565, ConvertMMX, NO_ALPHA }, + BLIT_FEATURE_HAS_MMX, ConvertMMXpII32_16BGR565, ConvertMMX, NO_ALPHA }, { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x0000001F,0x000007E0,0x0000F800, 0, ConvertX86p32_16BGR565, ConvertX86, NO_ALPHA }, { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x00007C00,0x000003E0,0x0000001F, - 1, ConvertMMXpII32_16RGB555, ConvertMMX, NO_ALPHA }, + BLIT_FEATURE_HAS_MMX, ConvertMMXpII32_16RGB555, ConvertMMX, NO_ALPHA }, { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x00007C00,0x000003E0,0x0000001F, 0, ConvertX86p32_16RGB555, ConvertX86, NO_ALPHA }, { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x0000001F,0x000003E0,0x00007C00, - 1, ConvertMMXpII32_16BGR555, ConvertMMX, NO_ALPHA }, + BLIT_FEATURE_HAS_MMX, ConvertMMXpII32_16BGR555, ConvertMMX, NO_ALPHA }, { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x0000001F,0x000003E0,0x00007C00, 0, ConvertX86p32_16BGR555, ConvertX86, NO_ALPHA }, { 0x00FF0000,0x0000FF00,0x000000FF, 3, 0x00FF0000,0x0000FF00,0x000000FF, - 1, ConvertMMXpII32_24RGB888, ConvertMMX, NO_ALPHA }, + BLIT_FEATURE_HAS_MMX, ConvertMMXpII32_24RGB888, ConvertMMX, NO_ALPHA }, { 0x00FF0000,0x0000FF00,0x000000FF, 3, 0x00FF0000,0x0000FF00,0x000000FF, 0, ConvertX86p32_24RGB888, ConvertX86, NO_ALPHA }, { 0x00FF0000,0x0000FF00,0x000000FF, 3, 0x000000FF,0x0000FF00,0x00FF0000, @@ -2420,13 +2427,13 @@ static const struct blit_table normal_blit_4[] = { #if SDL_ALTIVEC_BLITTERS /* has-altivec | dont-use-prefetch */ { 0x00000000,0x00000000,0x00000000, 4, 0x00000000,0x00000000,0x00000000, - 6, NULL, ConvertAltivec32to32_noprefetch, NO_ALPHA | COPY_ALPHA | SET_ALPHA }, + BLIT_FEATURE_HAS_ALTIVEC | BLIT_FEATURE_ALTIVEC_DONT_USE_PREFETCH, NULL, ConvertAltivec32to32_noprefetch, NO_ALPHA | COPY_ALPHA | SET_ALPHA }, /* has-altivec */ { 0x00000000,0x00000000,0x00000000, 4, 0x00000000,0x00000000,0x00000000, - 2, NULL, ConvertAltivec32to32_prefetch, NO_ALPHA | COPY_ALPHA | SET_ALPHA }, + BLIT_FEATURE_HAS_ALTIVEC, NULL, ConvertAltivec32to32_prefetch, NO_ALPHA | COPY_ALPHA | SET_ALPHA }, /* has-altivec */ { 0x00000000,0x00000000,0x00000000, 2, 0x0000F800,0x000007E0,0x0000001F, - 2, NULL, Blit_RGB888_RGB565Altivec, NO_ALPHA }, + BLIT_FEATURE_HAS_ALTIVEC, NULL, Blit_RGB888_RGB565Altivec, NO_ALPHA }, #endif { 0x00FF0000,0x0000FF00,0x000000FF, 2, 0x0000F800,0x000007E0,0x0000001F, 0, NULL, Blit_RGB888_RGB565, NO_ALPHA }, -- 2.17.1