diff options
author | Aaron Giles <aaronsgiles@users.noreply.github.com> | 2021-07-08 18:35:00 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-09 11:35:00 +1000 |
commit | 6ffc98289c9466cb01941c05a5b3088ac022a0b6 (patch) | |
tree | 62bc23850838f7f48d47f555292ea409f15f51ae /src/lib | |
parent | e9a86fc9fe55d45265b39fa7368e1645629aa314 (diff) |
video/voodoo.cpp: Major rewrite: (#8267)
* Changed to use modern poly.h instead of polylgcy.h.
* Moved helper classes into separate voodoo namespace.
* Derived device classes from video_device_interface.
* Split classes so that later versions derive from earlier versions.
* Created device maps to be directly included.
* Redesigned register mapping to use helper classes and delegates.
* Rewrote rasterizers to use C++ templates instead of macros.
* Added logic to compute equations for color/texture combine units.
* Added special generic identity-texel rasterizer cases.
* Removed pipeline stalls on texture and palette changes.
* Removed pipeline stalls on most all parameter changes.
* Generally re-thought and cleaned up logic throughout.
* Parameterized cycle stealing on status reads; updated all existing voodoo consumers to configure it as it was before.
-vidoe/poly.h: Various improvements:
* Exposed poly_array class for broader use.
* Changed poly_array to intelligently determine maximum size.
* Added logic to track multiple "last" instances in poly_array.
* Extended logic to support up to 16m work items.
* Removed MaxPolys parameter from poly_manager template.
* Added Flags parameter to poly_manager template.
* Added POLY_FLAG_NO_CLIPPING flag to remove clipping code when not needed.
* poly_manager now supports a MaxParams value of 0.
* Made paramcount a template parameter for render_* functions.
* Added reset_after_wait() method to be overridden by derived classes.
* Switched to using std:: helpers instead of internal methods.
* Removed useless dependency on screen_device.
* TRACK_POLY_WAITS now produces more complete statistics.
-video/polylgcy.cpp: Removed legacy implementation of polygon renderer.
-machine/gt64xxx.cpp: Prevent lockups by disallowing 0-duration timers.
-machine/pci.cpp: Added support for adding subdevice maps directly.
-emu/video/rgbsse.h: Improved min/max for SSE4.1+ and scale+clamp operations for all.
-emu/vidoe/rgbutil.h: Made palette expansion constexpr and added argbexpand function.
-osd/osdcore.cpp: Changed osd_ticks to use QueryPerformanceCounter on Windows since the mingw std::chrono::high_resolution_clock is anything but.
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/util/palette.h | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/src/lib/util/palette.h b/src/lib/util/palette.h index ed9d4eb9311..d21c8ca8125 100644 --- a/src/lib/util/palette.h +++ b/src/lib/util/palette.h @@ -229,7 +229,7 @@ private: //------------------------------------------------- template<int _NumBits> -inline uint8_t palexpand(uint8_t bits) +constexpr uint8_t palexpand(uint8_t bits) { if (_NumBits == 1) { return (bits & 1) ? 0xff : 0x00; } if (_NumBits == 2) { bits &= 3; return (bits << 6) | (bits << 4) | (bits << 2) | bits; } @@ -246,13 +246,13 @@ inline uint8_t palexpand(uint8_t bits) // palxbit - convert an x-bit value to 8 bits //------------------------------------------------- -inline uint8_t pal1bit(uint8_t bits) { return palexpand<1>(bits); } -inline uint8_t pal2bit(uint8_t bits) { return palexpand<2>(bits); } -inline uint8_t pal3bit(uint8_t bits) { return palexpand<3>(bits); } -inline uint8_t pal4bit(uint8_t bits) { return palexpand<4>(bits); } -inline uint8_t pal5bit(uint8_t bits) { return palexpand<5>(bits); } -inline uint8_t pal6bit(uint8_t bits) { return palexpand<6>(bits); } -inline uint8_t pal7bit(uint8_t bits) { return palexpand<7>(bits); } +constexpr uint8_t pal1bit(uint8_t bits) { return palexpand<1>(bits); } +constexpr uint8_t pal2bit(uint8_t bits) { return palexpand<2>(bits); } +constexpr uint8_t pal3bit(uint8_t bits) { return palexpand<3>(bits); } +constexpr uint8_t pal4bit(uint8_t bits) { return palexpand<4>(bits); } +constexpr uint8_t pal5bit(uint8_t bits) { return palexpand<5>(bits); } +constexpr uint8_t pal6bit(uint8_t bits) { return palexpand<6>(bits); } +constexpr uint8_t pal7bit(uint8_t bits) { return palexpand<7>(bits); } //------------------------------------------------- @@ -261,21 +261,27 @@ inline uint8_t pal7bit(uint8_t bits) { return palexpand<7>(bits); } //------------------------------------------------- template<int _RBits, int _GBits, int _BBits> -inline rgb_t rgbexpand(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshift) +constexpr rgb_t rgbexpand(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshift) { return rgb_t(palexpand<_RBits>(data >> rshift), palexpand<_GBits>(data >> gshift), palexpand<_BBits>(data >> bshift)); } +template<int _ABits, int _RBits, int _GBits, int _BBits> +constexpr rgb_t argbexpand(uint32_t data, uint8_t ashift, uint8_t rshift, uint8_t gshift, uint8_t bshift) +{ + return rgb_t(palexpand<_ABits>(data >> ashift), palexpand<_RBits>(data >> rshift), palexpand<_GBits>(data >> gshift), palexpand<_BBits>(data >> bshift)); +} + //------------------------------------------------- // palxxx - create an x-x-x color by extracting // bits from a uint32_t //------------------------------------------------- -inline rgb_t pal332(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshift) { return rgbexpand<3,3,2>(data, rshift, gshift, bshift); } -inline rgb_t pal444(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshift) { return rgbexpand<4,4,4>(data, rshift, gshift, bshift); } -inline rgb_t pal555(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshift) { return rgbexpand<5,5,5>(data, rshift, gshift, bshift); } -inline rgb_t pal565(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshift) { return rgbexpand<5,6,5>(data, rshift, gshift, bshift); } -inline rgb_t pal888(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshift) { return rgbexpand<8,8,8>(data, rshift, gshift, bshift); } +constexpr rgb_t pal332(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshift) { return rgbexpand<3,3,2>(data, rshift, gshift, bshift); } +constexpr rgb_t pal444(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshift) { return rgbexpand<4,4,4>(data, rshift, gshift, bshift); } +constexpr rgb_t pal555(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshift) { return rgbexpand<5,5,5>(data, rshift, gshift, bshift); } +constexpr rgb_t pal565(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshift) { return rgbexpand<5,6,5>(data, rshift, gshift, bshift); } +constexpr rgb_t pal888(uint32_t data, uint8_t rshift, uint8_t gshift, uint8_t bshift) { return rgbexpand<8,8,8>(data, rshift, gshift, bshift); } #endif // MAME_UTIL_PALETTE_H |