mirror of
https://github.com/GerbilSoft/rom-properties.git
synced 2025-06-19 03:55:43 -04:00
Rework CONSTEXPR_IF_MSVC2022 into CONSTEXPR_MULTILINE and CONSTEXPR_MULTILINE_NO_MSVC.
gcc-4.9 on Debian 8 doesn't support multi-line constexpr functions. CONSTEXPR_MULTILINE enables constexpr for MSVC 2022 and gcc-5, and later versions. CONSTEXPR_MULTILINE_NO_MSVC enables constexpr for gcc-5 and later, but not MSVC. Needed for functions that use intrinsics, which (still) aren't marked as constexpr on MSVC.
This commit is contained in:
parent
44eba93a3e
commit
46c83d92c1
@ -84,8 +84,19 @@ typedef int64_t off64_t;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// MSVC prior to MSVC 2022 does not support constexpr on multi-line functions.
|
// MSVC prior to MSVC 2022 does not support constexpr on multi-line functions.
|
||||||
#if !defined(__cplusplus) || (defined(_MSC_VER) && _MSC_VER < 1930)
|
// gcc doesn't support constexpr on multi-line functions before gcc-5. (requires C++14)
|
||||||
# define CONSTEXPR_IF_MSVC2022
|
#if !defined(__cplusplus)
|
||||||
|
# define CONSTEXPR_MULTILINE
|
||||||
|
#elif defined(_MSC_VER) && _MSC_VER < 1930
|
||||||
|
# define CONSTEXPR_MULTILINE
|
||||||
|
#elif defined(__GNUC__) && !defined(__clang__) && (__GNUC__ < 5 || __cplusplus < 201402L)
|
||||||
|
# define CONSTEXPR_MULTILINE
|
||||||
#else
|
#else
|
||||||
# define CONSTEXPR_IF_MSVC2022 constexpr
|
# define CONSTEXPR_MULTILINE constexpr
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# define CONSTEXPR_MULTILINE_NO_MSVC
|
||||||
|
#else /* !_MSC_VER */
|
||||||
|
# define CONSTEXPR_MULTILINE_NO_MSVC CONSTEXPR_MULTILINE
|
||||||
#endif
|
#endif
|
||||||
|
@ -72,7 +72,7 @@ public:
|
|||||||
* @return PDP-swapped DWORD
|
* @return PDP-swapped DWORD
|
||||||
*/
|
*/
|
||||||
// FIXME: be32_to_cpu() and __swab16() are not constexpr on MSVC 2022.
|
// FIXME: be32_to_cpu() and __swab16() are not constexpr on MSVC 2022.
|
||||||
static inline CONSTEXPR_NO_MSVC uint32_t PDP_SWAP(uint32_t x)
|
static inline CONSTEXPR_MULTILINE_NO_MSVC uint32_t PDP_SWAP(uint32_t x)
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
uint32_t d;
|
uint32_t d;
|
||||||
|
@ -42,6 +42,20 @@
|
|||||||
# endif /* !__cplusplus */
|
# endif /* !__cplusplus */
|
||||||
#endif /* !CONSTEXPR */
|
#endif /* !CONSTEXPR */
|
||||||
|
|
||||||
|
// MSVC prior to MSVC 2022 does not support constexpr on multi-line functions.
|
||||||
|
// gcc doesn't support constexpr on multi-line functions before gcc-5. (requires C++14)
|
||||||
|
#ifndef CONSTEXPR_MULTILINE
|
||||||
|
# if !defined(__cplusplus)
|
||||||
|
# define CONSTEXPR_MULTILINE
|
||||||
|
# elif defined(_MSC_VER) && _MSC_VER < 1930
|
||||||
|
# define CONSTEXPR_MULTILINE
|
||||||
|
# elif defined(__GNUC__) && !defined(__clang__) && (__GNUC__ < 5 || __cplusplus < 201402L)
|
||||||
|
# define CONSTEXPR_MULTILINE
|
||||||
|
# else
|
||||||
|
# define CONSTEXPR_MULTILINE constexpr
|
||||||
|
# endif
|
||||||
|
#endif /* !CONSTEXPR_MULTILINE */
|
||||||
|
|
||||||
#if defined(RP_CPU_I386) || defined(RP_CPU_AMD64)
|
#if defined(RP_CPU_I386) || defined(RP_CPU_AMD64)
|
||||||
# include "librpcpuid/cpuflags_x86.h"
|
# include "librpcpuid/cpuflags_x86.h"
|
||||||
/* MSVC does not support MMX intrinsics in 64-bit builds. */
|
/* MSVC does not support MMX intrinsics in 64-bit builds. */
|
||||||
@ -124,12 +138,8 @@
|
|||||||
* @param f Float to byteswap
|
* @param f Float to byteswap
|
||||||
* @return Byteswapped float
|
* @return Byteswapped float
|
||||||
*/
|
*/
|
||||||
ATTR_CONST
|
ATTR_CONST CONSTEXPR_MULTILINE
|
||||||
#ifndef _MSC_VER
|
|
||||||
static inline CONSTEXPR float __swabf(float f)
|
|
||||||
#else /* _MSC_VER */
|
|
||||||
static inline float __swabf(float f)
|
static inline float __swabf(float f)
|
||||||
#endif /* !_MSC_VER */
|
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
uint32_t u32;
|
uint32_t u32;
|
||||||
|
@ -50,7 +50,7 @@ static char lc_decimal[8];
|
|||||||
/** File size formatting **/
|
/** File size formatting **/
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static inline CONSTEXPR_IF_MSVC2022 int calc_frac_part_binary(T val, T mask)
|
static inline CONSTEXPR_MULTILINE int calc_frac_part_binary(T val, T mask)
|
||||||
{
|
{
|
||||||
const float f = static_cast<float>(val & (mask - 1)) / static_cast<float>(mask);
|
const float f = static_cast<float>(val & (mask - 1)) / static_cast<float>(mask);
|
||||||
int frac_part = static_cast<int>(f * 1000.0f);
|
int frac_part = static_cast<int>(f * 1000.0f);
|
||||||
@ -70,7 +70,7 @@ static inline CONSTEXPR_IF_MSVC2022 int calc_frac_part_binary(T val, T mask)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static inline CONSTEXPR_IF_MSVC2022 int calc_frac_part_decimal(T val, T divisor)
|
static inline CONSTEXPR_MULTILINE int calc_frac_part_decimal(T val, T divisor)
|
||||||
{
|
{
|
||||||
const float f = static_cast<float>(val % divisor) / static_cast<float>(divisor);
|
const float f = static_cast<float>(val % divisor) / static_cast<float>(divisor);
|
||||||
int frac_part = static_cast<int>(f * 1000.0f);
|
int frac_part = static_cast<int>(f * 1000.0f);
|
||||||
|
@ -51,7 +51,7 @@ rp_image_ptr fromDreamcastVQ16(PixelFormat px_format,
|
|||||||
* @param width Texture width.
|
* @param width Texture width.
|
||||||
* @return Number of palette entries.
|
* @return Number of palette entries.
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 int calcDreamcastSmallVQPaletteEntries_NoMipmaps(int width)
|
static inline CONSTEXPR_MULTILINE int calcDreamcastSmallVQPaletteEntries_NoMipmaps(int width)
|
||||||
{
|
{
|
||||||
if (width <= 16) {
|
if (width <= 16) {
|
||||||
return 8*4;
|
return 8*4;
|
||||||
@ -70,7 +70,7 @@ static inline CONSTEXPR_IF_MSVC2022 int calcDreamcastSmallVQPaletteEntries_NoMip
|
|||||||
* @param width Texture width.
|
* @param width Texture width.
|
||||||
* @return Number of palette entries.
|
* @return Number of palette entries.
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 int calcDreamcastSmallVQPaletteEntries_WithMipmaps(int width)
|
static inline CONSTEXPR_MULTILINE int calcDreamcastSmallVQPaletteEntries_WithMipmaps(int width)
|
||||||
{
|
{
|
||||||
if (width <= 16) {
|
if (width <= 16) {
|
||||||
return 16*4;
|
return 16*4;
|
||||||
|
@ -285,7 +285,7 @@ struct ColorRGB {
|
|||||||
* @param color ColorRGB struct.
|
* @param color ColorRGB struct.
|
||||||
* @return xRGB32 value. (Alpha channel set to 0xFF)
|
* @return xRGB32 value. (Alpha channel set to 0xFF)
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t clamp_ColorRGB(ColorRGB color)
|
static inline CONSTEXPR_MULTILINE uint32_t clamp_ColorRGB(ColorRGB color)
|
||||||
{
|
{
|
||||||
uint32_t xrgb32 = 0;
|
uint32_t xrgb32 = 0;
|
||||||
if (color.B > 255) {
|
if (color.B > 255) {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
* ROM Properties Page shell extension. (librptexture) *
|
* ROM Properties Page shell extension. (librptexture) *
|
||||||
* PixelConversion.hpp: Pixel conversion inline functions. *
|
* PixelConversion.hpp: Pixel conversion inline functions. *
|
||||||
* *
|
* *
|
||||||
* Copyright (c) 2016-2024 by David Korth. *
|
* Copyright (c) 2016-2025 by David Korth. *
|
||||||
* SPDX-License-Identifier: GPL-2.0-or-later *
|
* SPDX-License-Identifier: GPL-2.0-or-later *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ static constexpr std::array<uint8_t, 8> c3_lookup = {{
|
|||||||
* @param px16 RGB565 pixel
|
* @param px16 RGB565 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t RGB565_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t RGB565_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// RGB565: RRRRRGGG GGGBBBBB
|
// RGB565: RRRRRGGG GGGBBBBB
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -80,7 +80,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t RGB565_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 BGR565 pixel
|
* @param px16 BGR565 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t BGR565_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t BGR565_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// RGB565: BBBBBGGG GGGRRRRR
|
// RGB565: BBBBBGGG GGGRRRRR
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -98,7 +98,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t BGR565_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 ARGB1555 pixel
|
* @param px16 ARGB1555 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t ARGB1555_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t ARGB1555_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// ARGB1555: ARRRRRGG GGGBBBBB
|
// ARGB1555: ARRRRRGG GGGBBBBB
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -118,7 +118,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t ARGB1555_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 ABGR1555 pixel
|
* @param px16 ABGR1555 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t ABGR1555_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t ABGR1555_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// ABGR1555: ABBBBBGG GGGRRRRR
|
// ABGR1555: ABBBBBGG GGGRRRRR
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -138,7 +138,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t ABGR1555_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 RGBA5551 pixel
|
* @param px16 RGBA5551 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t RGBA5551_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t RGBA5551_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// RGBA5551: RRRRRGGG GGBBBBBA
|
// RGBA5551: RRRRRGGG GGBBBBBA
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -158,7 +158,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t RGBA5551_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 BGRA5551 pixel
|
* @param px16 BGRA5551 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t BGRA5551_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t BGRA5551_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// BGRA5551: BBBBBGGG GGRRRRRA
|
// BGRA5551: BBBBBGGG GGRRRRRA
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -178,7 +178,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t BGRA5551_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 ARGB4444 pixel
|
* @param px16 ARGB4444 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t ARGB4444_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t ARGB4444_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// ARGB4444: AAAARRRR GGGGBBBB
|
// ARGB4444: AAAARRRR GGGGBBBB
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -195,7 +195,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t ARGB4444_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 ABGR4444 pixel
|
* @param px16 ABGR4444 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t ABGR4444_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t ABGR4444_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// ARGB4444: AAAABBBB GGGGRRRR
|
// ARGB4444: AAAABBBB GGGGRRRR
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -212,7 +212,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t ABGR4444_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 RGBA4444 pixel
|
* @param px16 RGBA4444 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t RGBA4444_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t RGBA4444_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// RGBA4444: RRRRGGGG BBBBAAAA
|
// RGBA4444: RRRRGGGG BBBBAAAA
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -229,7 +229,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t RGBA4444_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 BGRA4444 pixel
|
* @param px16 BGRA4444 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t BGRA4444_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t BGRA4444_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// RGBA4444: BBBBGGGG RRRRAAAA
|
// RGBA4444: BBBBGGGG RRRRAAAA
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -246,7 +246,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t BGRA4444_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 xRGB4444 pixel
|
* @param px16 xRGB4444 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t xRGB4444_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t xRGB4444_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// xRGB4444: xxxxRRRR GGGGBBBB
|
// xRGB4444: xxxxRRRR GGGGBBBB
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -263,7 +263,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t xRGB4444_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 xBGR4444 pixel
|
* @param px16 xBGR4444 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t xBGR4444_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t xBGR4444_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// xRGB4444: xxxxBBBB GGGGRRRR
|
// xRGB4444: xxxxBBBB GGGGRRRR
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -280,7 +280,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t xBGR4444_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 RGBx4444 pixel
|
* @param px16 RGBx4444 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t RGBx4444_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t RGBx4444_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// RGBx4444: RRRRGGGG BBBBxxxx
|
// RGBx4444: RRRRGGGG BBBBxxxx
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -297,7 +297,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t RGBx4444_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 BGRx4444 pixel
|
* @param px16 BGRx4444 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t BGRx4444_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t BGRx4444_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// RGBx4444: BBBBGGGG RRRRxxxx
|
// RGBx4444: BBBBGGGG RRRRxxxx
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -356,7 +356,7 @@ static inline CONSTEXPR_NO_MSVC uint32_t GR88_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 RGB5A3 pixel (Must be host-endian.)
|
* @param px16 RGB5A3 pixel (Must be host-endian.)
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t RGB5A3_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t RGB5A3_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// px16 high bit: if set, no alpha channel
|
// px16 high bit: if set, no alpha channel
|
||||||
uint32_t px32 = (px16 & 0x8000U)
|
uint32_t px32 = (px16 & 0x8000U)
|
||||||
@ -391,7 +391,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t RGB5A3_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 IA8 pixel
|
* @param px16 IA8 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t IA8_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t IA8_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// FIXME: What's the component order of IA8?
|
// FIXME: What's the component order of IA8?
|
||||||
// Assuming I=MSB, A=LSB...
|
// Assuming I=MSB, A=LSB...
|
||||||
@ -413,7 +413,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t IA8_to_ARGB32(uint16_t px16)
|
|||||||
* @param a4 A4 value
|
* @param a4 A4 value
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t RGB565_A4_to_ARGB32(uint16_t px16, uint8_t a4)
|
static inline CONSTEXPR_MULTILINE uint32_t RGB565_A4_to_ARGB32(uint16_t px16, uint8_t a4)
|
||||||
{
|
{
|
||||||
// RGB565: RRRRRGGG GGGBBBBB
|
// RGB565: RRRRRGGG GGGBBBBB
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -435,7 +435,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t RGB565_A4_to_ARGB32(uint16_t px16,
|
|||||||
* @param px16 BGR5A3 pixel (Must be host-endian.)
|
* @param px16 BGR5A3 pixel (Must be host-endian.)
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t BGR5A3_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t BGR5A3_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// px16 high bit: if set, no alpha channel
|
// px16 high bit: if set, no alpha channel
|
||||||
uint32_t px32 = (px16 & 0x8000U)
|
uint32_t px32 = (px16 & 0x8000U)
|
||||||
@ -472,7 +472,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t BGR5A3_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 RGB555 pixel
|
* @param px16 RGB555 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t RGB555_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t RGB555_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// RGB555: xRRRRRGG GGGBBBBB
|
// RGB555: xRRRRRGG GGGBBBBB
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -489,7 +489,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t RGB555_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 BGR555 pixel
|
* @param px16 BGR555 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t BGR555_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t BGR555_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// BGR555: xBBBBBGG GGGRRRRR
|
// BGR555: xBBBBBGG GGGRRRRR
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -603,7 +603,7 @@ static inline uint32_t RGB9_E5_to_ARGB32(uint32_t px32)
|
|||||||
* @param px16 BGR888_ABGR7888 pixel (Must be host-endian.)
|
* @param px16 BGR888_ABGR7888 pixel (Must be host-endian.)
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t BGR888_ABGR7888_to_ARGB32(uint32_t px32)
|
static inline CONSTEXPR_MULTILINE uint32_t BGR888_ABGR7888_to_ARGB32(uint32_t px32)
|
||||||
{
|
{
|
||||||
// px32 high bit: if set, no alpha channel
|
// px32 high bit: if set, no alpha channel
|
||||||
uint32_t argb = (px32 & 0x80000000U)
|
uint32_t argb = (px32 & 0x80000000U)
|
||||||
@ -651,7 +651,7 @@ static inline constexpr uint32_t L8_to_ARGB32(uint8_t px8)
|
|||||||
* @param px8 A4L4 pixel
|
* @param px8 A4L4 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t A4L4_to_ARGB32(uint8_t px8)
|
static inline CONSTEXPR_MULTILINE uint32_t A4L4_to_ARGB32(uint8_t px8)
|
||||||
{
|
{
|
||||||
// A4L4: AAAALLLL
|
// A4L4: AAAALLLL
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -681,7 +681,7 @@ static inline constexpr uint32_t L16_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 A8L8 pixel
|
* @param px16 A8L8 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t A8L8_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t A8L8_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// A8L8: AAAAAAAA LLLLLLLL
|
// A8L8: AAAAAAAA LLLLLLLL
|
||||||
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
// ARGB32: AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
|
||||||
@ -697,7 +697,7 @@ static inline CONSTEXPR_IF_MSVC2022 uint32_t A8L8_to_ARGB32(uint16_t px16)
|
|||||||
* @param px16 L8A8 pixel
|
* @param px16 L8A8 pixel
|
||||||
* @return ARGB32 pixel
|
* @return ARGB32 pixel
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 uint32_t L8A8_to_ARGB32(uint16_t px16)
|
static inline CONSTEXPR_MULTILINE uint32_t L8A8_to_ARGB32(uint16_t px16)
|
||||||
{
|
{
|
||||||
// FIXME: What's the component order of IA8?
|
// FIXME: What's the component order of IA8?
|
||||||
// Assuming I=MSB, A=LSB...
|
// Assuming I=MSB, A=LSB...
|
||||||
|
@ -53,24 +53,6 @@ public:
|
|||||||
* @return Image, or nullptr on error.
|
* @return Image, or nullptr on error.
|
||||||
*/
|
*/
|
||||||
rp_image_const_ptr loadImage(void);
|
rp_image_const_ptr loadImage(void);
|
||||||
|
|
||||||
#if SYS_BYTEORDER == SYS_BIG_ENDIAN
|
|
||||||
/**
|
|
||||||
* Byteswap a float. (TODO: Move to byteswap_rp.h?)
|
|
||||||
* @param f Float to byteswap.
|
|
||||||
* @return Byteswapped flaot.
|
|
||||||
*/
|
|
||||||
static inline constexpr float __swabf(float f)
|
|
||||||
{
|
|
||||||
union {
|
|
||||||
uint32_t u32;
|
|
||||||
float f;
|
|
||||||
} u32_f;
|
|
||||||
u32_f.f = f;
|
|
||||||
u32_f.u32 = __swab32(u32_f.u32);
|
|
||||||
return u32_f.f;
|
|
||||||
}
|
|
||||||
#endif /* SYS_BYTEORDER == SYS_BIG_ENDIAN */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
FILEFORMAT_IMPL(ValveVTF3)
|
FILEFORMAT_IMPL(ValveVTF3)
|
||||||
|
@ -99,7 +99,7 @@ class XboxXPRPrivate final : public FileFormatPrivate
|
|||||||
* @param value
|
* @param value
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
static CONSTEXPR_IF_MSVC2022 uint32_t fill_pattern(uint32_t pattern, uint32_t value)
|
static CONSTEXPR_MULTILINE uint32_t fill_pattern(uint32_t pattern, uint32_t value)
|
||||||
{
|
{
|
||||||
uint32_t result = 0;
|
uint32_t result = 0;
|
||||||
uint32_t bit = 1;
|
uint32_t bit = 1;
|
||||||
@ -130,7 +130,7 @@ class XboxXPRPrivate final : public FileFormatPrivate
|
|||||||
* @param bytes_per_pixel
|
* @param bytes_per_pixel
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
static inline CONSTEXPR_IF_MSVC2022 unsigned int get_swizzled_offset(
|
static inline CONSTEXPR_MULTILINE unsigned int get_swizzled_offset(
|
||||||
unsigned int x, unsigned int y,
|
unsigned int x, unsigned int y,
|
||||||
uint32_t mask_x, uint32_t mask_y,
|
uint32_t mask_x, uint32_t mask_y,
|
||||||
unsigned int bytes_per_pixel)
|
unsigned int bytes_per_pixel)
|
||||||
|
Loading…
Reference in New Issue
Block a user