From 234c9fb3bd5375f9bd6af660cc53005aae8c36cb Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 22 Mar 2025 21:07:24 +0000 Subject: [PATCH] Codechange: Use EnumBitSet for SpriteFlags. --- src/blitter/32bpp_anim_sse4.cpp | 18 +++++++++--------- src/blitter/32bpp_sse2.cpp | 8 ++++---- src/blitter/32bpp_sse2.hpp | 13 ++++++------- src/blitter/32bpp_sse_func.hpp | 4 ++-- 4 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/blitter/32bpp_anim_sse4.cpp b/src/blitter/32bpp_anim_sse4.cpp index e4a961e0c2..37da12f71c 100644 --- a/src/blitter/32bpp_anim_sse4.cpp +++ b/src/blitter/32bpp_anim_sse4.cpp @@ -397,35 +397,35 @@ bm_normal: if (bp->skip_left != 0 || bp->width <= MARGIN_NORMAL_THRESHOLD) { const BlockType bt_last = (BlockType) (bp->width & 1); if (bt_last == BT_EVEN) { - if (sprite_flags & SF_NO_ANIM) Draw(bp, zoom); + if (sprite_flags.Test(SpriteFlag::NoAnim)) Draw(bp, zoom); else Draw(bp, zoom); } else { - if (sprite_flags & SF_NO_ANIM) Draw(bp, zoom); + if (sprite_flags.Test(SpriteFlag::NoAnim)) Draw(bp, zoom); else Draw(bp, zoom); } } else { #ifdef POINTER_IS_64BIT - if (sprite_flags & SF_TRANSLUCENT) { - if (sprite_flags & SF_NO_ANIM) Draw(bp, zoom); + if (sprite_flags.Test(SpriteFlag::Translucent)) { + if (sprite_flags.Test(SpriteFlag::NoAnim)) Draw(bp, zoom); else Draw(bp, zoom); } else { - if (sprite_flags & SF_NO_ANIM) Draw(bp, zoom); + if (sprite_flags.Test(SpriteFlag::NoAnim)) Draw(bp, zoom); else Draw(bp, zoom); } #else - if (sprite_flags & SF_NO_ANIM) Draw(bp, zoom); + if (sprite_flags.Test(SpriteFlag::NoAnim)) Draw(bp, zoom); else Draw(bp, zoom); #endif } break; } case BlitterMode::ColourRemap: - if (sprite_flags & SF_NO_REMAP) goto bm_normal; + if (sprite_flags.Test(SpriteFlag::NoRemap)) goto bm_normal; if (bp->skip_left != 0 || bp->width <= MARGIN_REMAP_THRESHOLD) { - if (sprite_flags & SF_NO_ANIM) Draw(bp, zoom); + if (sprite_flags.Test(SpriteFlag::NoAnim)) Draw(bp, zoom); else Draw(bp, zoom); } else { - if (sprite_flags & SF_NO_ANIM) Draw(bp, zoom); + if (sprite_flags.Test(SpriteFlag::NoAnim)) Draw(bp, zoom); else Draw(bp, zoom); } break; diff --git a/src/blitter/32bpp_sse2.cpp b/src/blitter/32bpp_sse2.cpp index 919e119f37..c0ccb269c3 100644 --- a/src/blitter/32bpp_sse2.cpp +++ b/src/blitter/32bpp_sse2.cpp @@ -128,10 +128,10 @@ Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::SpriteCollection &spri } /* Store sprite flags. */ - sd.flags = SF_NONE; - if (has_translucency) sd.flags |= SF_TRANSLUCENT; - if (!has_remap) sd.flags |= SF_NO_REMAP; - if (!has_anim) sd.flags |= SF_NO_ANIM; + sd.flags = {}; + if (has_translucency) sd.flags.Set(SpriteFlag::Translucent); + if (!has_remap) sd.flags.Set(SpriteFlag::NoRemap); + if (!has_anim) sd.flags.Set(SpriteFlag::NoAnim); memcpy(dst_sprite->data, &sd, sizeof(SpriteData)); return dst_sprite; diff --git a/src/blitter/32bpp_sse2.hpp b/src/blitter/32bpp_sse2.hpp index 7928513fb2..df42d7dd38 100644 --- a/src/blitter/32bpp_sse2.hpp +++ b/src/blitter/32bpp_sse2.hpp @@ -56,13 +56,14 @@ public: * - calculations (alpha blending), * - heavy branching (remap lookups and animation buffer handling). */ - enum SpriteFlags : uint8_t { - SF_NONE = 0, - SF_TRANSLUCENT = 1 << 1, ///< The sprite has at least 1 translucent pixel. - SF_NO_REMAP = 1 << 2, ///< The sprite has no remappable colour pixel. - SF_NO_ANIM = 1 << 3, ///< The sprite has no palette animated pixel. + enum class SpriteFlag : uint8_t { + Translucent, ///< The sprite has at least 1 translucent pixel. + NoRemap, ///< The sprite has no remappable colour pixel. + NoAnim, ///< The sprite has no palette animated pixel. }; + using SpriteFlags = EnumBitSet; + /** Data stored about a (single) sprite. */ struct SpriteInfo { uint32_t sprite_offset = 0; ///< The offset to the sprite data. @@ -79,8 +80,6 @@ public: Sprite *Encode(const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator); }; -DECLARE_ENUM_AS_BIT_SET(Blitter_32bppSSE_Base::SpriteFlags); - /** The SSE2 32 bpp blitter (without palette animation). */ class Blitter_32bppSSE2 : public Blitter_32bppSimple, public Blitter_32bppSSE_Base { public: diff --git a/src/blitter/32bpp_sse_func.hpp b/src/blitter/32bpp_sse_func.hpp index f10d6677eb..f931ba3077 100644 --- a/src/blitter/32bpp_sse_func.hpp +++ b/src/blitter/32bpp_sse_func.hpp @@ -473,7 +473,7 @@ bm_normal: case BT_ODD: Draw(bp, zoom); return; } } else { - if (((const Blitter_32bppSSE_Base::SpriteData *) bp->sprite)->flags & SF_TRANSLUCENT) { + if (((const Blitter_32bppSSE_Base::SpriteData *) bp->sprite)->flags.Test(SpriteFlag::Translucent)) { Draw(bp, zoom); } else { Draw(bp, zoom); @@ -483,7 +483,7 @@ bm_normal: break; } case BlitterMode::ColourRemap: - if (((const Blitter_32bppSSE_Base::SpriteData *) bp->sprite)->flags & SF_NO_REMAP) goto bm_normal; + if (((const Blitter_32bppSSE_Base::SpriteData *) bp->sprite)->flags.Test(SpriteFlag::NoRemap)) goto bm_normal; if (bp->skip_left != 0 || bp->width <= MARGIN_REMAP_THRESHOLD) { Draw(bp, zoom); return; } else {