From ac46b91673adae121e48bb6beedfb5b61339c39b Mon Sep 17 00:00:00 2001 From: Pokechu22 Date: Wed, 12 Jan 2022 17:28:17 -0800 Subject: [PATCH] Make all fmt::formatter constructors constexpr --- Source/Core/Common/EnumFormatter.h | 4 +- Source/Core/VideoCommon/BPMemory.h | 74 +++++++++---------- Source/Core/VideoCommon/CPMemory.h | 17 +++-- Source/Core/VideoCommon/FramebufferManager.h | 2 +- Source/Core/VideoCommon/OpcodeDecoding.h | 2 +- Source/Core/VideoCommon/TextureDecoder.h | 6 +- Source/Core/VideoCommon/XFMemory.h | 20 ++--- Source/UnitTests/Common/BitFieldTest.cpp | 2 +- Source/UnitTests/Common/EnumFormatterTest.cpp | 4 +- 9 files changed, 66 insertions(+), 65 deletions(-) diff --git a/Source/Core/Common/EnumFormatter.h b/Source/Core/Common/EnumFormatter.h index 2b8e7d36f5..723eb5a4a2 100644 --- a/Source/Core/Common/EnumFormatter.h +++ b/Source/Core/Common/EnumFormatter.h @@ -23,7 +23,7 @@ * template <> * struct fmt::formatter : EnumFormatter * { - * formatter() : EnumFormatter({"A", "B", "C"}) {} + * constexpr formatter() : EnumFormatter({"A", "B", "C"}) {} * }; * * enum class Bar @@ -39,7 +39,7 @@ * // using std::array here fails due to nullptr not being const char*, at least in MSVC * // (but only when a field is used; directly in the constructor is OK) * static constexpr array_type names = {"D", "E", nullptr, "F"}; - * formatter() : EnumFormatter(names) {} + * constexpr formatter() : EnumFormatter(names) {} * }; */ template diff --git a/Source/Core/VideoCommon/BPMemory.h b/Source/Core/VideoCommon/BPMemory.h index 35d14835c0..f10db7b8e6 100644 --- a/Source/Core/VideoCommon/BPMemory.h +++ b/Source/Core/VideoCommon/BPMemory.h @@ -122,7 +122,7 @@ enum class TevScale : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"1", "2", "4", "0.5"}) {} + constexpr formatter() : EnumFormatter({"1", "2", "4", "0.5"}) {} }; // TEV combiner operator @@ -134,7 +134,7 @@ enum class TevOp : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Add", "Subtract"}) {} + constexpr formatter() : EnumFormatter({"Add", "Subtract"}) {} }; enum class TevCompareMode : u32 @@ -148,7 +148,7 @@ enum class TevCompareMode : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"R8", "GR16", "BGR24", "RGB8 / A8"}) {} + constexpr formatter() : EnumFormatter({"R8", "GR16", "BGR24", "RGB8 / A8"}) {} }; enum class TevComparison : u32 @@ -159,7 +159,7 @@ enum class TevComparison : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Greater than", "Equal to"}) {} + constexpr formatter() : EnumFormatter({"Greater than", "Equal to"}) {} }; // TEV color combiner input @@ -189,7 +189,7 @@ struct fmt::formatter : EnumFormatter "prev.rgb", "prev.aaa", "c0.rgb", "c0.aaa", "c1.rgb", "c1.aaa", "c2.rgb", "c2.aaa", "tex.rgb", "tex.aaa", "ras.rgb", "ras.aaa", "ONE", "HALF", "konst.rgb", "ZERO", }; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; // TEV alpha combiner input @@ -210,7 +210,7 @@ struct fmt::formatter : EnumFormatter static constexpr array_type names = { "prev", "c0", "c1", "c2", "tex", "ras", "konst", "ZERO", }; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; // TEV output registers @@ -224,7 +224,7 @@ enum class TevOutput : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"prev", "c0", "c1", "c2"}) {} + constexpr formatter() : EnumFormatter({"prev", "c0", "c1", "c2"}) {} }; // Z-texture formats @@ -237,7 +237,7 @@ enum class ZTexFormat : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"u8", "u16", "u24"}) {} + constexpr formatter() : EnumFormatter({"u8", "u16", "u24"}) {} }; // Z texture operator @@ -250,7 +250,7 @@ enum class ZTexOp : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Disabled", "Add", "Replace"}) {} + constexpr formatter() : EnumFormatter({"Disabled", "Add", "Replace"}) {} }; // TEV bias value @@ -264,7 +264,7 @@ enum class TevBias : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"0", "+0.5", "-0.5", "compare"}) {} + constexpr formatter() : EnumFormatter({"0", "+0.5", "-0.5", "compare"}) {} }; // Indirect texture format @@ -278,7 +278,7 @@ enum class IndTexFormat : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"ITF_8", "ITF_5", "ITF_4", "ITF_3"}) {} + constexpr formatter() : EnumFormatter({"ITF_8", "ITF_5", "ITF_4", "ITF_3"}) {} }; // Indirect texture bias @@ -296,7 +296,7 @@ enum class IndTexBias : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"None", "S", "T", "ST", "U", "SU", "TU", "STU"}) {} + constexpr formatter() : EnumFormatter({"None", "S", "T", "ST", "U", "SU", "TU", "STU"}) {} }; enum class IndMtxIndex : u32 @@ -309,7 +309,7 @@ enum class IndMtxIndex : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Off", "Matrix 0", "Matrix 1", "Matrix 2"}) {} + constexpr formatter() : EnumFormatter({"Off", "Matrix 0", "Matrix 1", "Matrix 2"}) {} }; enum class IndMtxId : u32 @@ -321,7 +321,7 @@ enum class IndMtxId : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Indirect", "S", "T"}) {} + constexpr formatter() : EnumFormatter({"Indirect", "S", "T"}) {} }; // Indirect texture bump alpha @@ -335,7 +335,7 @@ enum class IndTexBumpAlpha : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Off", "S", "T", "U"}) {} + constexpr formatter() : EnumFormatter({"Off", "S", "T", "U"}) {} }; // Indirect texture wrap value @@ -352,7 +352,7 @@ enum class IndTexWrap : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Off", "256", "128", "64", "32", "16", "0"}) {} + constexpr formatter() : EnumFormatter({"Off", "256", "128", "64", "32", "16", "0"}) {} }; union IND_MTXA @@ -771,7 +771,7 @@ struct fmt::formatter : EnumFormatter "Color chan 0", "Color chan 1", nullptr, nullptr, nullptr, "Alpha bump", "Norm alpha bump", "Zero", }; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; union TwoTevStageOrders @@ -880,7 +880,7 @@ enum class WrapMode : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Clamp", "Repeat", "Mirror"}) {} + constexpr formatter() : EnumFormatter({"Clamp", "Repeat", "Mirror"}) {} }; enum class MipMode : u32 @@ -892,7 +892,7 @@ enum class MipMode : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"None", "Mip point", "Mip linear"}) {} + constexpr formatter() : EnumFormatter({"None", "Mip point", "Mip linear"}) {} }; enum class FilterMode : u32 @@ -903,7 +903,7 @@ enum class FilterMode : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Near", "Linear"}) {} + constexpr formatter() : EnumFormatter({"Near", "Linear"}) {} }; enum class LODType : u32 @@ -914,7 +914,7 @@ enum class LODType : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Edge LOD", "Diagonal LOD"}) {} + constexpr formatter() : EnumFormatter({"Edge LOD", "Diagonal LOD"}) {} }; enum class MaxAniso @@ -926,7 +926,7 @@ enum class MaxAniso template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"1", "2", "4"}) {} + constexpr formatter() : EnumFormatter({"1", "2", "4"}) {} }; union TexMode0 @@ -1129,7 +1129,7 @@ struct fmt::formatter : EnumFormatter "Front-facing primitives only", "All primitives", }; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; union GenMode @@ -1180,7 +1180,7 @@ enum class AspectRatioAdjustment template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Don't adjust", "Adjust"}) {} + constexpr formatter() : EnumFormatter({"Don't adjust", "Adjust"}) {} }; union LPSize @@ -1247,7 +1247,7 @@ struct fmt::formatter : EnumFormatter : EnumFormatter : EnumFormatter "Nand (~(src & dst))", "Set (1)", }; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; union BlendMode @@ -1381,7 +1381,7 @@ enum class FogProjection : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Perspective", "Orthographic"}) {} + constexpr formatter() : EnumFormatter({"Perspective", "Orthographic"}) {} }; enum class FogType : u32 @@ -1406,7 +1406,7 @@ struct fmt::formatter : EnumFormatter "Backwards exponential fog", "Backwards exponenential-sequared fog", }; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; union FogParam3 @@ -1529,7 +1529,7 @@ struct fmt::formatter : EnumFormatter { static constexpr array_type names = {"Never", "Less", "Equal", "LEqual", "Greater", "NEqual", "GEqual", "Always"}; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; union ZMode @@ -1601,7 +1601,7 @@ enum class FieldMaskState : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Skipped", "Written"}) {} + constexpr formatter() : EnumFormatter({"Skipped", "Written"}) {} }; union FieldMask @@ -1639,7 +1639,7 @@ struct fmt::formatter : EnumFormatter { static constexpr array_type names = {"RGB8_Z24", "RGBA6_Z24", "RGB565_Z16", "Z24", "Y8", "U8", "V8", "YUV420"}; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; enum class DepthFormat : u32 @@ -1662,7 +1662,7 @@ struct fmt::formatter : EnumFormatter "linear", "compressed (near)", "compressed (mid)", "compressed (far)", "inv linear", "compressed (inv near)", "compressed (inv mid)", "compressed (inv far)", }; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; union PEControl @@ -1733,7 +1733,7 @@ enum class TevRegType : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Color", "Constant"}) {} + constexpr formatter() : EnumFormatter({"Color", "Constant"}) {} }; struct TevReg @@ -1860,7 +1860,7 @@ struct fmt::formatter : EnumFormatter "Konst 2 Alpha", "Konst 3 Alpha", }; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; union TevKSel @@ -1900,7 +1900,7 @@ enum class AlphaTestOp : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"And", "Or", "Xor", "Xnor"}) {} + constexpr formatter() : EnumFormatter({"And", "Or", "Xor", "Xnor"}) {} }; enum class AlphaTestResult @@ -1988,7 +1988,7 @@ struct fmt::formatter : EnumFormatter { static constexpr array_type names = {"Progressive", nullptr, "Interlaced (even lines)", "Interlaced (odd lines)"}; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; union UPE_Copy diff --git a/Source/Core/VideoCommon/CPMemory.h b/Source/Core/VideoCommon/CPMemory.h index 23a3335f64..9ef4ed352f 100644 --- a/Source/Core/VideoCommon/CPMemory.h +++ b/Source/Core/VideoCommon/CPMemory.h @@ -84,7 +84,7 @@ struct fmt::formatter : EnumFormatter "Tex Coord 0", "Tex Coord 1", "Tex Coord 2", "Tex Coord 3", "Tex Coord 4", "Tex Coord 5", "Tex Coord 6", "Tex Coord 7", "XF A", "XF B", "XF C", "XF D"}; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; // Intended for offsetting from Color0/TexCoord0 constexpr CPArray operator+(CPArray array, u8 offset) @@ -107,7 +107,7 @@ enum class VertexComponentFormat template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Not present", "Direct", "8-bit index", "16-bit index"}) {} + constexpr formatter() : EnumFormatter({"Not present", "Direct", "8-bit index", "16-bit index"}) {} }; constexpr bool IsIndexed(VertexComponentFormat format) @@ -126,7 +126,8 @@ enum class ComponentFormat template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Unsigned Byte", "Byte", "Unsigned Short", "Short", "Float"}) {} + static constexpr array_type names = {"Unsigned Byte", "Byte", "Unsigned Short", "Short", "Float"}; + constexpr formatter() : EnumFormatter(names) {} }; constexpr u32 GetElementSize(ComponentFormat format) @@ -155,7 +156,7 @@ enum class CoordComponentCount template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"2 (x, y)", "3 (x, y, z)"}) {} + constexpr formatter() : EnumFormatter({"2 (x, y)", "3 (x, y, z)"}) {} }; enum class NormalComponentCount @@ -166,7 +167,7 @@ enum class NormalComponentCount template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"1 (n)", "3 (n, b, t)"}) {} + constexpr formatter() : EnumFormatter({"1 (n)", "3 (n, b, t)"}) {} }; enum class ColorComponentCount @@ -177,7 +178,7 @@ enum class ColorComponentCount template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"3 (r, g, b)", "4 (r, g, b, a)"}) {} + constexpr formatter() : EnumFormatter({"3 (r, g, b)", "4 (r, g, b, a)"}) {} }; enum class ColorFormat @@ -196,7 +197,7 @@ struct fmt::formatter : EnumFormatter "RGB 16 bits 565", "RGB 24 bits 888", "RGB 32 bits 888x", "RGBA 16 bits 4444", "RGBA 24 bits 6666", "RGBA 32 bits 8888", }; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; enum class TexComponentCount @@ -207,7 +208,7 @@ enum class TexComponentCount template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"1 (s)", "2 (s, t)"}) {} + constexpr formatter() : EnumFormatter({"1 (s)", "2 (s, t)"}) {} }; struct TVtxDesc diff --git a/Source/Core/VideoCommon/FramebufferManager.h b/Source/Core/VideoCommon/FramebufferManager.h index dda850a1f8..b9144f83ef 100644 --- a/Source/Core/VideoCommon/FramebufferManager.h +++ b/Source/Core/VideoCommon/FramebufferManager.h @@ -35,7 +35,7 @@ struct fmt::formatter : EnumFormatter "GX_DRAW_TRIANGLE_FAN", "GX_DRAW_LINES", "GX_DRAW_LINE_STRIP", "GX_DRAW_POINTS", }; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; diff --git a/Source/Core/VideoCommon/TextureDecoder.h b/Source/Core/VideoCommon/TextureDecoder.h index fdab2dc412..a00e95d8f2 100644 --- a/Source/Core/VideoCommon/TextureDecoder.h +++ b/Source/Core/VideoCommon/TextureDecoder.h @@ -41,7 +41,7 @@ struct fmt::formatter : EnumFormatter static constexpr array_type names = {"I4", "I8", "IA4", "IA8", "RGB565", "RGB5A3", "RGBA8", nullptr, "C4", "C8", "C14X2", nullptr, nullptr, nullptr, "CMPR"}; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; static inline bool IsColorIndexed(TextureFormat format) @@ -103,7 +103,7 @@ struct fmt::formatter : EnumFormatter "R8/I8/Z8H", "G8/Z8M", "B8/Z8L", "RG8/Z16R (Note: G and R are reversed)", "GB8/Z16L", }; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; enum class TLUTFormat @@ -116,7 +116,7 @@ enum class TLUTFormat template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"IA8", "RGB565", "RGB5A3"}) {} + constexpr formatter() : EnumFormatter({"IA8", "RGB565", "RGB5A3"}) {} }; static inline bool IsValidTLUTFormat(TLUTFormat tlutfmt) diff --git a/Source/Core/VideoCommon/XFMemory.h b/Source/Core/VideoCommon/XFMemory.h index 1b0409de05..cfbe9855fc 100644 --- a/Source/Core/VideoCommon/XFMemory.h +++ b/Source/Core/VideoCommon/XFMemory.h @@ -26,7 +26,7 @@ enum class TexSize : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"ST (2x4 matrix)", "STQ (3x4 matrix)"}) {} + constexpr formatter() : EnumFormatter({"ST (2x4 matrix)", "STQ (3x4 matrix)"}) {} }; // Input form @@ -38,7 +38,7 @@ enum class TexInputForm : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"AB11", "ABC1"}) {} + constexpr formatter() : EnumFormatter({"AB11", "ABC1"}) {} }; enum class NormalCount : u32 @@ -50,7 +50,7 @@ enum class NormalCount : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"None", "Normals only", "Normals and binormals"}) {} + constexpr formatter() : EnumFormatter({"None", "Normals only", "Normals and binormals"}) {} }; // Texture generation type @@ -70,7 +70,7 @@ struct fmt::formatter : EnumFormatter "Color channel 0", "Color channel 1", }; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; // Source row @@ -108,7 +108,7 @@ struct fmt::formatter : EnumFormatter "Tex 6", "Tex 7", }; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; enum class MatSource : u32 @@ -119,7 +119,7 @@ enum class MatSource : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Material color register", "Vertex color"}) {} + constexpr formatter() : EnumFormatter({"Material color register", "Vertex color"}) {} }; enum class AmbSource : u32 @@ -130,7 +130,7 @@ enum class AmbSource : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Ambient color register", "Vertex color"}) {} + constexpr formatter() : EnumFormatter({"Ambient color register", "Vertex color"}) {} }; // Light diffuse attenuation function @@ -143,7 +143,7 @@ enum class DiffuseFunc : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"None", "Sign", "Clamp"}) {} + constexpr formatter() : EnumFormatter({"None", "Sign", "Clamp"}) {} }; // Light attenuation function @@ -163,7 +163,7 @@ struct fmt::formatter : EnumFormatter "Directional light attenuation", "Spot light attenuation", }; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; // Projection type @@ -175,7 +175,7 @@ enum class ProjectionType : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"Perspective", "Orthographic"}) {} + constexpr formatter() : EnumFormatter({"Perspective", "Orthographic"}) {} }; // Registers and register ranges diff --git a/Source/UnitTests/Common/BitFieldTest.cpp b/Source/UnitTests/Common/BitFieldTest.cpp index 91258d393c..bb0de4b4ab 100644 --- a/Source/UnitTests/Common/BitFieldTest.cpp +++ b/Source/UnitTests/Common/BitFieldTest.cpp @@ -201,7 +201,7 @@ TEST(BitField, Alignment) template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"A", "B", "C", "D"}) {} + constexpr formatter() : EnumFormatter({"A", "B", "C", "D"}) {} }; // Test behavior of using BitFields with fmt diff --git a/Source/UnitTests/Common/EnumFormatterTest.cpp b/Source/UnitTests/Common/EnumFormatterTest.cpp index 793328b0dd..7846e04e33 100644 --- a/Source/UnitTests/Common/EnumFormatterTest.cpp +++ b/Source/UnitTests/Common/EnumFormatterTest.cpp @@ -16,7 +16,7 @@ enum class Enum1 : u32 template <> struct fmt::formatter : EnumFormatter { - formatter() : EnumFormatter({"A", "B", "C"}) {} + constexpr formatter() : EnumFormatter({"A", "B", "C"}) {} }; enum class Enum2 : s32 @@ -30,7 +30,7 @@ template <> struct fmt::formatter : EnumFormatter { static constexpr array_type names = {"D", "E", nullptr, "F"}; - formatter() : EnumFormatter(names) {} + constexpr formatter() : EnumFormatter(names) {} }; TEST(EnumUtil, Enum1)