From ccac4d10007fe7f1ddeb1c071db71f01c4c60a58 Mon Sep 17 00:00:00 2001 From: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri, 11 Mar 2022 19:36:56 -0800 Subject: [PATCH] Squashed commit of the following: commit 15611308c2c6ed5e4f46bd840ade8700e3768527 Author: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri Mar 11 19:29:57 2022 -0800 derp commit 3c0546cdd8f08004c1ad82bdb72910498dddac91 Author: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri Mar 11 19:28:06 2022 -0800 bob commit 8e24ef7adc9ccee5405f8618bb8ddb165ff9cf8f Author: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri Mar 11 19:10:45 2022 -0800 removing perf core here now commit 66225df3b175544d28d91c6ede53861c74e71239 Author: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri Mar 11 18:51:14 2022 -0800 delete perf core, cleanups, get submodule pushed commit 06b627bd949f15aac4749a33762ec5cb47e5aea9 Author: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri Mar 11 17:46:36 2022 -0800 oh fucking please don't tell me this was it commit 0bd0625d172a74a82e30b89e2f10702394e74491 Author: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri Mar 11 17:21:22 2022 -0800 bleh commit 20c1497fd1fb25eb6ac6c44fe2490b71009fc9e0 Author: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri Mar 11 16:36:02 2022 -0800 bleh commit 4ccd7982d97f8c4c85c5b18801bb9784df9772e8 Author: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri Mar 11 15:55:43 2022 -0800 testing commit ab9e14bc7bb3e533f903a003b80f8e6a006cd819 Author: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri Mar 11 15:44:24 2022 -0800 bleh commit 6d2de266825ac23df25466fdd6154e60ec6132de Author: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri Mar 11 00:08:45 2022 -0800 bleh commit f55c3e3277b979a8535667312fdb988a1f70bc01 Author: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Thu Mar 10 23:54:49 2022 -0800 oh derp commit 16e3c87d7ab06947da208feb88b3f3fd96874621 Author: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Thu Mar 10 23:43:27 2022 -0800 bleh commit 1630845d46af7dc048b8c5dcfc7b0359d7f3133a Author: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Thu Mar 10 23:36:14 2022 -0800 gross hack commit ff1ef0ac6da559e0ce0e7cad10583b70a63c3551 Author: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Thu Mar 10 23:10:54 2022 -0800 angrylion integration into ares. --- .gitmodules | 3 + Assets/dll/ares64.wbx.gz | Bin 775929 -> 589826 bytes src/BizHawk.Client.Common/config/Config.cs | 4 +- .../Ares64/Ares64.Accuracy.ISettable.cs | 59 - ...mance.ISettable.cs => Ares64.ISettable.cs} | 47 +- .../Nintendo/Ares64/Ares64.Performance.cs | 469 -- .../Ares64/{Ares64.Accuracy.cs => Ares64.cs} | 31 +- .../Consoles/Nintendo/Ares64/LibAres64.cs | 42 +- src/BizHawk.Emulation.Cores/CoreNames.cs | 3 +- .../vpads_schemata/N64Schema.cs | 14 +- waterbox/ares64/BizInterface.cpp | 83 +- waterbox/ares64/{Accuracy.mak => Makefile} | 26 +- waterbox/ares64/Performance.mak | 160 - waterbox/ares64/ares/ares/ares/ares.hpp | 8 - .../ares/ares/ares/node/video/screen.cpp | 7 - waterbox/ares64/ares/ares/n64/accuracy.hpp | 4 - waterbox/ares64/ares/ares/n64/n64.hpp | 4 - waterbox/ares64/ares/ares/n64/rdp/rdp.cpp | 25 +- waterbox/ares64/ares/ares/n64/rdp/rdp.hpp | 4 - waterbox/ares64/ares/ares/n64/rdp/render.cpp | 15 +- waterbox/ares64/ares/ares/n64/vi/vi.cpp | 32 + waterbox/ares64/ares/thirdparty/angrylion-rdp | 1 + .../ares/thirdparty/mame/devices/video/poly.h | 1472 ------ .../ares64/ares/thirdparty/mame/emu/emu.h | 115 - .../ares/thirdparty/mame/emu/emucore.cpp | 43 - .../ares64/ares/thirdparty/mame/emu/emucore.h | 424 -- .../ares64/ares/thirdparty/mame/emu/emufwd.h | 255 - .../ares/thirdparty/mame/emu/video/rgbgen.h | 445 -- .../ares/thirdparty/mame/emu/video/rgbsse.h | 502 -- .../ares/thirdparty/mame/emu/video/rgbutil.h | 32 - .../ares/thirdparty/mame/emu/video/rgbvmx.h | 728 --- .../ares/thirdparty/mame/lib/util/abi.h | 117 - .../ares/thirdparty/mame/lib/util/bitmap.h | 415 -- .../ares/thirdparty/mame/lib/util/corealloc.h | 66 - .../ares/thirdparty/mame/lib/util/coretmpl.h | 689 --- .../thirdparty/mame/lib/util/delegate.cpp | 287 -- .../ares/thirdparty/mame/lib/util/delegate.h | 972 ---- .../thirdparty/mame/lib/util/endianness.h | 76 - .../ares/thirdparty/mame/lib/util/hash.h | 122 - .../ares/thirdparty/mame/lib/util/hashing.h | 314 -- .../ares/thirdparty/mame/lib/util/md5.h | 43 - .../ares/thirdparty/mame/lib/util/palette.h | 287 -- .../thirdparty/mame/lib/util/strformat.cpp | 661 --- .../ares/thirdparty/mame/lib/util/strformat.h | 2432 --------- .../ares/thirdparty/mame/lib/util/vecstream.h | 408 -- .../ares/thirdparty/mame/mame/includes/n64.h | 470 -- .../ares/thirdparty/mame/mame/video/n64.cpp | 4415 ----------------- .../ares/thirdparty/mame/mame/video/n64.h | 426 -- .../thirdparty/mame/mame/video/n64types.h | 340 -- .../ares/thirdparty/mame/mame/video/pin64.cpp | 511 -- .../ares/thirdparty/mame/mame/video/pin64.h | 180 - .../thirdparty/mame/mame/video/rdpblend.cpp | 461 -- .../thirdparty/mame/mame/video/rdpblend.h | 72 - .../thirdparty/mame/mame/video/rdpfiltr.hxx | 617 --- .../thirdparty/mame/mame/video/rdptpipe.cpp | 1023 ---- .../thirdparty/mame/mame/video/rdptpipe.h | 165 - .../ares64/ares/thirdparty/mame/osd/eigcc.h | 148 - .../ares/thirdparty/mame/osd/eigccarm.h | 332 -- .../ares/thirdparty/mame/osd/eigccppc.h | 328 -- .../ares/thirdparty/mame/osd/eigccx86.h | 526 -- .../ares64/ares/thirdparty/mame/osd/eivc.h | 94 - .../ares64/ares/thirdparty/mame/osd/eivcarm.h | 75 - .../ares64/ares/thirdparty/mame/osd/eivcx86.h | 468 -- .../ares/thirdparty/mame/osd/eminline.h | 495 -- .../ares64/ares/thirdparty/mame/osd/osdcomm.h | 119 - .../ares/thirdparty/mame/osd/osdcore.cpp | 223 - .../ares64/ares/thirdparty/mame/osd/osdcore.h | 676 --- .../ares64/ares/thirdparty/mame/osd/osdfile.h | 287 -- .../ares/thirdparty/mame/osd/osdsync.cpp | 823 --- .../ares64/ares/thirdparty/mame/osd/osdsync.h | 167 - waterbox/melon/melonDS | 2 +- 71 files changed, 112 insertions(+), 25277 deletions(-) delete mode 100644 src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.Accuracy.ISettable.cs rename src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/{Ares64.Performance.ISettable.cs => Ares64.ISettable.cs} (59%) delete mode 100644 src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.Performance.cs rename src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/{Ares64.Accuracy.cs => Ares64.cs} (86%) rename waterbox/ares64/{Accuracy.mak => Makefile} (57%) delete mode 100644 waterbox/ares64/Performance.mak create mode 160000 waterbox/ares64/ares/thirdparty/angrylion-rdp delete mode 100644 waterbox/ares64/ares/thirdparty/mame/devices/video/poly.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/emu/emu.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/emu/emucore.cpp delete mode 100644 waterbox/ares64/ares/thirdparty/mame/emu/emucore.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/emu/emufwd.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/emu/video/rgbgen.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/emu/video/rgbsse.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/emu/video/rgbutil.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/emu/video/rgbvmx.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/lib/util/abi.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/lib/util/bitmap.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/lib/util/corealloc.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/lib/util/coretmpl.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/lib/util/delegate.cpp delete mode 100644 waterbox/ares64/ares/thirdparty/mame/lib/util/delegate.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/lib/util/endianness.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/lib/util/hash.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/lib/util/hashing.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/lib/util/md5.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/lib/util/palette.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/lib/util/strformat.cpp delete mode 100644 waterbox/ares64/ares/thirdparty/mame/lib/util/strformat.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/lib/util/vecstream.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/mame/includes/n64.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/mame/video/n64.cpp delete mode 100644 waterbox/ares64/ares/thirdparty/mame/mame/video/n64.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/mame/video/n64types.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/mame/video/pin64.cpp delete mode 100644 waterbox/ares64/ares/thirdparty/mame/mame/video/pin64.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/mame/video/rdpblend.cpp delete mode 100644 waterbox/ares64/ares/thirdparty/mame/mame/video/rdpblend.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/mame/video/rdpfiltr.hxx delete mode 100644 waterbox/ares64/ares/thirdparty/mame/mame/video/rdptpipe.cpp delete mode 100644 waterbox/ares64/ares/thirdparty/mame/mame/video/rdptpipe.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/osd/eigcc.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/osd/eigccarm.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/osd/eigccppc.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/osd/eigccx86.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/osd/eivc.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/osd/eivcarm.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/osd/eivcx86.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/osd/eminline.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/osd/osdcomm.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/osd/osdcore.cpp delete mode 100644 waterbox/ares64/ares/thirdparty/mame/osd/osdcore.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/osd/osdfile.h delete mode 100644 waterbox/ares64/ares/thirdparty/mame/osd/osdsync.cpp delete mode 100644 waterbox/ares64/ares/thirdparty/mame/osd/osdsync.h diff --git a/.gitmodules b/.gitmodules index 200d51d928..6a4289d928 100644 --- a/.gitmodules +++ b/.gitmodules @@ -46,3 +46,6 @@ [submodule "submodules/sameboy/libsameboy"] path = submodules/sameboy/libsameboy url = https://github.com/LIJI32/SameBoy.git +[submodule "waterbox/ares64/ares/thirdparty/angrylion-rdp"] + path = waterbox/ares64/ares/thirdparty/angrylion-rdp + url = https://github.com/TASEmulators/angrylion-rdp diff --git a/Assets/dll/ares64.wbx.gz b/Assets/dll/ares64.wbx.gz index 5d384ed8e56005e68c1e52b27b4e82a62dae6bb1..4dc43f90752ea1a276b00974253bfe3ebfa8521c 100644 GIT binary patch literal 589826 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
    Rw2+&=h>W)T1PIrq3?X) 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

    4|yY0<#1iQQG#E{g5( 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�A3cyWO`6>7$xc2fgvO5{qS_!av*?b?S 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 y0!Mra2js+Qu9d@ucW{DVlFw8g!2mhE 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 z

    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�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
    ACUS?*vNatLK)JdtXB<*kouRpirVA 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™{`n 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≧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

    UU6BY>!KX-O!wHW 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

    ccxf{PR?3?IeQN(xA5CO#v|1| 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%0DvI81^u{?>L1& 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 NAKuw^rXv*xRR6&wCFEJ!M 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

    +MAV* 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�)^J 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 z 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 diff --git a/src/BizHawk.Client.Common/config/Config.cs b/src/BizHawk.Client.Common/config/Config.cs index c84857fc3e..412303fb61 100644 --- a/src/BizHawk.Client.Common/config/Config.cs +++ b/src/BizHawk.Client.Common/config/Config.cs @@ -27,7 +27,7 @@ namespace BizHawk.Client.Common (new[] { VSystemID.Raw.SNES }, new[] { CoreNames.Faust, CoreNames.Snes9X, CoreNames.Bsnes, CoreNames.Bsnes115 }), (new[] { VSystemID.Raw.N64 }, - new[] { CoreNames.Mupen64Plus, CoreNames.Ares64Performance, CoreNames.Ares64Accuracy }), + new[] { CoreNames.Mupen64Plus, CoreNames.Ares64 }), (new[] { VSystemID.Raw.SGB }, new[] { CoreNames.Gambatte, CoreNames.Bsnes, CoreNames.Bsnes115}), (new[] { VSystemID.Raw.GB, VSystemID.Raw.GBC }, @@ -37,7 +37,7 @@ namespace BizHawk.Client.Common (new[] { VSystemID.Raw.PCE, VSystemID.Raw.PCECD, VSystemID.Raw.SGX }, new[] { CoreNames.TurboNyma, CoreNames.HyperNyma, CoreNames.PceHawk }), (new[] { VSystemID.Raw.PSX }, - new[] { CoreNames.Octoshock, CoreNames.Nymashock}), + new[] { CoreNames.Octoshock, CoreNames.Nymashock }), (new[] { VSystemID.Raw.TI83 }, new[] { CoreNames.TI83Hawk, CoreNames.Emu83 }), }; diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.Accuracy.ISettable.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.Accuracy.ISettable.cs deleted file mode 100644 index 5dc596fcfb..0000000000 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.Accuracy.ISettable.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System.ComponentModel; - -using BizHawk.Common; -using BizHawk.Emulation.Common; - -namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64.Accuracy -{ - public partial class Ares64 : ISettable - { - private Ares64SyncSettings _syncSettings; - - public object GetSettings() => null; - - public Ares64SyncSettings GetSyncSettings() => _syncSettings.Clone(); - - public PutSettingsDirtyBits PutSettings(object o) => PutSettingsDirtyBits.None; - - public PutSettingsDirtyBits PutSyncSettings(Ares64SyncSettings o) - { - var ret = Ares64SyncSettings.NeedsReboot(_syncSettings, o); - _syncSettings = o; - return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None; - } - - public class Ares64SyncSettings - { - [DisplayName("Player 1 Controller")] - [Description("")] - [DefaultValue(LibAres64.ControllerType.Mempak)] - public LibAres64.ControllerType P1Controller { get; set; } - - [DisplayName("Player 2 Controller")] - [Description("")] - [DefaultValue(LibAres64.ControllerType.Unplugged)] - public LibAres64.ControllerType P2Controller { get; set; } - - [DisplayName("Player 3 Controller")] - [Description("")] - [DefaultValue(LibAres64.ControllerType.Unplugged)] - public LibAres64.ControllerType P3Controller { get; set; } - - [DisplayName("Player 4 Controller")] - [Description("")] - [DefaultValue(LibAres64.ControllerType.Unplugged)] - public LibAres64.ControllerType P4Controller { get; set; } - - [DisplayName("Restrict Analog Range")] - [Description("Restricts analog range to account for physical limitations.")] - [DefaultValue(false)] - public bool RestrictAnalogRange { get; set; } - - public Ares64SyncSettings() => SettingsUtil.SetDefaultValues(this); - - public Ares64SyncSettings Clone() => MemberwiseClone() as Ares64SyncSettings; - - public static bool NeedsReboot(Ares64SyncSettings x, Ares64SyncSettings y) => !DeepEquality.DeepEquals(x, y); - } - } -} diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.Performance.ISettable.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.ISettable.cs similarity index 59% rename from src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.Performance.ISettable.cs rename to src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.ISettable.cs index 721ffc1053..0ce1d0d492 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.Performance.ISettable.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.ISettable.cs @@ -1,22 +1,25 @@ -using System; using System.ComponentModel; -using Newtonsoft.Json; - using BizHawk.Common; using BizHawk.Emulation.Common; -namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64.Performance +namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64 { - public partial class Ares64 : ISettable + public partial class Ares64 : ISettable { + private Ares64Settings _settings; private Ares64SyncSettings _syncSettings; - public object GetSettings() => null; + public Ares64Settings GetSettings() => _settings.Clone(); public Ares64SyncSettings GetSyncSettings() => _syncSettings.Clone(); - public PutSettingsDirtyBits PutSettings(object o) => PutSettingsDirtyBits.None; + public PutSettingsDirtyBits PutSettings(Ares64Settings o) + { + var ret = Ares64Settings.NeedsReboot(_settings, o); + _settings = o; + return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None; + } public PutSettingsDirtyBits PutSyncSettings(Ares64SyncSettings o) { @@ -25,6 +28,21 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64.Performance return ret ? PutSettingsDirtyBits.RebootCore : PutSettingsDirtyBits.None; } + public class Ares64Settings + { + [DisplayName("Deinterlacer")] + [Description("Weave looks good for still images, but creates artifacts for moving images.\n" + + "Bob looks good for moving images, but makes the image bob up and down.")] + [DefaultValue(LibAres64.DeinterlacerType.Weave)] + public LibAres64.DeinterlacerType Deinterlacer { get; set; } + + public Ares64Settings() => SettingsUtil.SetDefaultValues(this); + + public Ares64Settings Clone() => MemberwiseClone() as Ares64Settings; + + public static bool NeedsReboot(Ares64Settings x, Ares64Settings y) => !DeepEquality.DeepEquals(x, y); + } + public class Ares64SyncSettings { [DisplayName("Player 1 Controller")] @@ -52,21 +70,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64.Performance [DefaultValue(false)] public bool RestrictAnalogRange { get; set; } - [DisplayName("Enable Vulkan")] - [Description("Enables Vulkan RDP. May fallback to software RDP if your GPU does not support Vulkan.")] - [DefaultValue(true)] - public bool EnableVulkan { get; set; } - - [DisplayName("Supersampling")] - [Description("Scales HD and UHD resolutions back down to SD")] - [DefaultValue(false)] - public bool SuperSample { get; set; } - - [DisplayName("Vulkan Upscale")] - [Description("")] - [DefaultValue(LibAres64.VulkanUpscaleOpts.SD)] - public LibAres64.VulkanUpscaleOpts VulkanUpscale { get; set; } - public Ares64SyncSettings() => SettingsUtil.SetDefaultValues(this); public Ares64SyncSettings Clone() => MemberwiseClone() as Ares64SyncSettings; diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.Performance.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.Performance.cs deleted file mode 100644 index 7e9ee6880b..0000000000 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.Performance.cs +++ /dev/null @@ -1,469 +0,0 @@ -using System; -using System.IO; -using System.Linq; - -using BizHawk.BizInvoke; -using BizHawk.Common; -using BizHawk.Emulation.Common; -using BizHawk.Emulation.Cores.Properties; -using BizHawk.Emulation.Cores.Waterbox; - -namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64.Performance -{ - [PortedCore(CoreNames.Ares64Performance, "ares team, Near", "v126", "https://ares-emulator.github.io/", singleInstance: true, isReleased: false)] - [ServiceNotApplicable(new[] { typeof(IDriveLight), })] - public partial class Ares64 : IEmulator, IVideoProvider, ISoundProvider, IStatable, IInputPollable, ISaveRam, IRegionable - { - private static readonly LibAres64Performance _core; - - static Ares64() - { - var resolver = new DynamicLibraryImportResolver( - OSTailoredCode.IsUnixHost ? "libares64.so" : "libares64.dll", hasLimitedLifetime: false); - _core = BizInvoker.GetInvoker(resolver, CallingConventionAdapters.Native); - } - - private readonly BasicServiceProvider _serviceProvider; - - public IEmulatorServiceProvider ServiceProvider => _serviceProvider; - - public int Frame { get; private set; } - - public int LagCount { get; set; } - - public bool IsLagFrame { get; set; } - - [FeatureNotImplemented] - public IInputCallbackSystem InputCallbacks => throw new NotImplementedException(); - - public string SystemId => VSystemID.Raw.N64; - - public bool DeterministicEmulation => false; - - public void ResetCounters() - { - Frame = 0; - LagCount = 0; - IsLagFrame = false; - } - - public void Dispose() => _core.Deinit(); - - [CoreConstructor(VSystemID.Raw.N64)] - public Ares64(CoreLoadParameters lp) - { - if (lp.DeterministicEmulationRequested) - { - lp.Comm.ShowMessage("This core is not deterministic, switch over to the Ares (Accuracy) core for deterministic movie recordings. You have been warned!"); - } - - _serviceProvider = new(this); - - _syncSettings = lp.SyncSettings ?? new(); - - int upscale = _syncSettings.EnableVulkan ? (int)_syncSettings.VulkanUpscale : 1; - _videoBuffer = new int[640 * upscale * 576 * upscale]; - - ControllerSettings = new[] - { - _syncSettings.P1Controller, - _syncSettings.P2Controller, - _syncSettings.P3Controller, - _syncSettings.P4Controller, - }; - - N64Controller = CreateControllerDefinition(ControllerSettings); - - var rom = lp.Roms[0].RomData; - - Region = rom[0x3E] switch - { - 0x44 or 0x46 or 0x49 or 0x50 or 0x53 or 0x55 or 0x58 or 0x59 => DisplayType.PAL, - _ => DisplayType.NTSC, - }; - - var pal = Region == DisplayType.PAL; - - VsyncNumerator = pal ? 50 : 60000; - VsyncDenominator = pal ? 1 : 1001; - - LibAres64.LoadFlags loadFlags = 0; - if (_syncSettings.RestrictAnalogRange) - loadFlags |= LibAres64.LoadFlags.RestrictAnalogRange; - if (pal) - loadFlags |= LibAres64.LoadFlags.Pal; - if (_syncSettings.EnableVulkan) - loadFlags |= LibAres64.LoadFlags.UseVulkan; - if (_syncSettings.SuperSample) - loadFlags |= LibAres64.LoadFlags.SuperSample; - - var pif = Util.DecompressGzipFile(new MemoryStream(pal ? Resources.PIF_PAL_ROM.Value : Resources.PIF_NTSC_ROM.Value)); - - unsafe - { - fixed (byte* pifPtr = pif, romPtr = rom) - { - var loadData = new LibAres64.LoadData() - { - PifData = (IntPtr)pifPtr, - PifLen = pif.Length, - RomData = (IntPtr)romPtr, - RomLen = rom.Length, - VulkanUpscale = upscale, - }; - if (!_core.Init(loadData, ControllerSettings, loadFlags)) - { - throw new InvalidOperationException("Init returned false!"); - } - } - } - - ResetCounters(); - - var areas = new LibWaterboxCore.MemoryArea[256]; - _core.GetMemoryAreas(areas); - _memoryAreas = areas.Where(a => a.Data != IntPtr.Zero && a.Size != 0 && !a.Flags.HasFlag(LibWaterboxCore.MemoryDomainFlags.FunctionHook)) - .ToArray(); - - var memoryDomains = _memoryAreas.Select(a => new WaterboxMemoryDomainPointer(a, _monitor)).ToList(); - var primaryDomain = memoryDomains - .Where(md => md.Definition.Flags.HasFlag(LibWaterboxCore.MemoryDomainFlags.Primary)) - .Single(); - - var mdl = new MemoryDomainList( - memoryDomains.Cast().ToList() - ) - { - MainMemory = primaryDomain - }; - _serviceProvider.Register(mdl); - - _saveramAreas = memoryDomains - .Where(md => md.Definition.Flags.HasFlag(LibWaterboxCore.MemoryDomainFlags.Saverammable)) - .ToArray(); - _saveramSize = (int)_saveramAreas.Sum(a => a.Size); - } - - public DisplayType Region { get; } - - public ControllerDefinition ControllerDefinition => N64Controller; - - private ControllerDefinition N64Controller { get; } - - public LibAres64.ControllerType[] ControllerSettings { get; } - - private static ControllerDefinition CreateControllerDefinition(LibAres64.ControllerType[] controllerSettings) - { - var ret = new ControllerDefinition("Nintendo 64 Controller"); - for (int i = 0; i < 4; i++) - { - if (controllerSettings[i] != LibAres64.ControllerType.Unplugged) - { - ret.BoolButtons.Add($"P{i + 1} DPad U"); - ret.BoolButtons.Add($"P{i + 1} DPad D"); - ret.BoolButtons.Add($"P{i + 1} DPad L"); - ret.BoolButtons.Add($"P{i + 1} DPad R"); - ret.BoolButtons.Add($"P{i + 1} Start"); - ret.BoolButtons.Add($"P{i + 1} Z"); - ret.BoolButtons.Add($"P{i + 1} B"); - ret.BoolButtons.Add($"P{i + 1} A"); - ret.BoolButtons.Add($"P{i + 1} C Up"); - ret.BoolButtons.Add($"P{i + 1} C Down"); - ret.BoolButtons.Add($"P{i + 1} C Left"); - ret.BoolButtons.Add($"P{i + 1} C Right"); - ret.BoolButtons.Add($"P{i + 1} L"); - ret.BoolButtons.Add($"P{i + 1} R"); - ret.AddXYPair($"P{i + 1} {{0}} Axis", AxisPairOrientation.RightAndUp, (-128).RangeTo(127), 0); - if (controllerSettings[i] == LibAres64.ControllerType.Rumblepak) - { - ret.HapticsChannels.Add($"P{i + 1} Rumble Pak"); - } - } - } - ret.BoolButtons.Add("Reset"); - ret.BoolButtons.Add("Power"); - return ret.MakeImmutable(); - } - - private static LibAres64.Buttons GetButtons(IController controller, int num) - { - LibAres64.Buttons ret = 0; - - if (controller.IsPressed($"P{num} DPad U")) - ret |= LibAres64.Buttons.UP; - if (controller.IsPressed($"P{num} DPad D")) - ret |= LibAres64.Buttons.DOWN; - if (controller.IsPressed($"P{num} DPad L")) - ret |= LibAres64.Buttons.LEFT; - if (controller.IsPressed($"P{num} DPad R")) - ret |= LibAres64.Buttons.RIGHT; - if (controller.IsPressed($"P{num} B")) - ret |= LibAres64.Buttons.B; - if (controller.IsPressed($"P{num} A")) - ret |= LibAres64.Buttons.A; - if (controller.IsPressed($"P{num} C Up")) - ret |= LibAres64.Buttons.C_UP; - if (controller.IsPressed($"P{num} C Down")) - ret |= LibAres64.Buttons.C_DOWN; - if (controller.IsPressed($"P{num} C Left")) - ret |= LibAres64.Buttons.C_LEFT; - if (controller.IsPressed($"P{num} C Right")) - ret |= LibAres64.Buttons.C_RIGHT; - if (controller.IsPressed($"P{num} L")) - ret |= LibAres64.Buttons.L; - if (controller.IsPressed($"P{num} R")) - ret |= LibAres64.Buttons.R; - if (controller.IsPressed($"P{num} Z")) - ret |= LibAres64.Buttons.Z; - if (controller.IsPressed($"P{num} Start")) - ret |= LibAres64.Buttons.START; - - return ret; - } - - private LibWaterboxCore.FrameInfo FrameAdvancePrep(IController controller, bool render, bool rendersound) - { - for (int i = 0; i < 4; i++) - { - if (ControllerSettings[i] == LibAres64.ControllerType.Rumblepak) - { - controller.SetHapticChannelStrength($"P{i + 1} Rumble Pak", _core.GetRumbleStatus(i) ? int.MaxValue : 0); - } - } - - return new LibAres64.FrameInfo - { - P1Buttons = GetButtons(controller, 1), - P1XAxis = (short)controller.AxisValue("P1 X Axis"), - P1YAxis = (short)controller.AxisValue("P1 Y Axis"), - - P2Buttons = GetButtons(controller, 2), - P2XAxis = (short)controller.AxisValue("P2 X Axis"), - P2YAxis = (short)controller.AxisValue("P2 Y Axis"), - - P3Buttons = GetButtons(controller, 3), - P3XAxis = (short)controller.AxisValue("P3 X Axis"), - P3YAxis = (short)controller.AxisValue("P3 Y Axis"), - - P4Buttons = GetButtons(controller, 4), - P4XAxis = (short)controller.AxisValue("P4 X Axis"), - P4YAxis = (short)controller.AxisValue("P4 Y Axis"), - - Reset = controller.IsPressed("Reset"), - Power = controller.IsPressed("Power"), - }; - } - - public unsafe bool FrameAdvance(IController controller, bool render, bool rendersound = true) - { - _core.SetInputCallback(null); - - fixed (int* vp = _videoBuffer) - fixed (short* sp = _soundBuffer) - { - var frame = FrameAdvancePrep(controller, render, rendersound); - frame.VideoBuffer = (IntPtr)vp; - frame.SoundBuffer = (IntPtr)sp; - - _core.FrameAdvance(frame); - - Frame++; - if (IsLagFrame = frame.Lagged != 0) - LagCount++; - - if (render) - { - BufferWidth = frame.Width; - BufferHeight = frame.Height; - } - if (rendersound) - { - _numSamples = frame.Samples; - } - else - { - _numSamples = 0; - } - - FrameAdvancePost(); - } - - return true; - } - - private void FrameAdvancePost() - { - if (BufferWidth == 1 && BufferHeight == 1) - { - BufferWidth = 640; - BufferHeight = 480; - _blankFrame = true; - } - else - { - _blankFrame = false; - } - } - - public int[] GetVideoBuffer() => _blankFrame ? _blankBuffer : _videoBuffer; - - private bool _blankFrame; - - private readonly int[] _blankBuffer = new int[640 * 480]; - - private readonly int[] _videoBuffer; - - public int VirtualWidth => 640; - - public int VirtualHeight => 480; - - public int BufferWidth { get; private set; } - - public int BufferHeight { get; private set; } - - public int VsyncNumerator { get; } - - public int VsyncDenominator { get; } - - public int BackgroundColor => unchecked((int)0xff000000); - - public void SetSyncMode(SyncSoundMode mode) - { - if (mode == SyncSoundMode.Async) - { - throw new NotSupportedException("Async mode is not supported."); - } - } - - public void GetSamplesSync(out short[] samples, out int nsamp) - { - samples = _soundBuffer; - nsamp = _numSamples; - } - - public void GetSamplesAsync(short[] samples) => throw new InvalidOperationException("Async mode is not supported."); - - public void DiscardSamples() {} - - private readonly short[] _soundBuffer = new short[2048 * 2]; - - private int _numSamples; - - public bool CanProvideAsync => false; - - public SyncSoundMode SyncMode => SyncSoundMode.Sync; - - private byte[] _stateBuffer = new byte[0]; - - public void SaveStateBinary(BinaryWriter writer) - { - var len = _core.SerializeSize(); - if (len != _stateBuffer.Length) - { - _stateBuffer = new byte[len]; - } - _core.Serialize(_stateBuffer); - writer.Write(_stateBuffer.Length); - writer.Write(_stateBuffer); - - // other variables - writer.Write(Frame); - writer.Write(LagCount); - writer.Write(IsLagFrame); - } - - public void LoadStateBinary(BinaryReader reader) - { - var len = reader.ReadInt32(); - if (len != _core.SerializeSize()) - { - throw new InvalidOperationException("Savestate size mismatch!"); - } - if (len != _stateBuffer.Length) - { - _stateBuffer = new byte[len]; - } - reader.Read(_stateBuffer, 0, len); - if (!_core.Unserialize(_stateBuffer, len)) - { - throw new Exception($"{nameof(_core.Unserialize)}() returned false!"); - } - - // other variables - Frame = reader.ReadInt32(); - LagCount = reader.ReadInt32(); - IsLagFrame = reader.ReadBoolean(); - } - - private readonly LibWaterboxCore.MemoryArea[] _memoryAreas; - - private readonly WaterboxMemoryDomain[] _saveramAreas; - private readonly int _saveramSize; - - public unsafe bool SaveRamModified - { - get - { - if (_saveramSize == 0) - return false; - var buff = new byte[4096]; - fixed (byte* bp = buff) - { - foreach (var area in _saveramAreas) - { - var stream = new MemoryDomainStream(area); - int cmp = (area.Definition.Flags & LibWaterboxCore.MemoryDomainFlags.OneFilled) != 0 ? -1 : 0; - while (true) - { - int nread = stream.Read(buff, 0, 4096); - if (nread == 0) - break; - - int* p = (int*)bp; - int* pend = p + nread / sizeof(int); - while (p < pend) - { - if (*p++ != cmp) - return true; - } - } - } - } - return false; - } - } - - public byte[] CloneSaveRam() - { - if (_saveramSize == 0) - return null; - var ret = new byte[_saveramSize]; - var dest = new MemoryStream(ret, true); - foreach (var area in _saveramAreas) - { - new MemoryDomainStream(area).CopyTo(dest); - } - return ret; - } - - public void StoreSaveRam(byte[] data) - { - if (data.Length != _saveramSize) - throw new InvalidOperationException("Saveram size mismatch"); - var source = new MemoryStream(data, false); - foreach (var area in _saveramAreas) - { - WaterboxUtils.CopySome(source, new MemoryDomainStream(area), area.Size); - } - } - - private readonly DummyMonitor _monitor = new(); - - private class DummyMonitor : IMonitor - { - public void Enter() { } - - public void Exit() { } - } - } -} diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.Accuracy.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.cs similarity index 86% rename from src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.Accuracy.cs rename to src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.cs index 0b8902ef99..594217ff93 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.Accuracy.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/Ares64.cs @@ -6,16 +6,16 @@ using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Properties; using BizHawk.Emulation.Cores.Waterbox; -namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64.Accuracy +namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64 { - [PortedCore(CoreNames.Ares64Accuracy, "ares team, Near", "v126", "https://ares-emulator.github.io/", isReleased: false)] + [PortedCore(CoreNames.Ares64, "ares team, Near", "v127", "https://ares-emulator.github.io/", isReleased: false)] [ServiceNotApplicable(new[] { typeof(IDriveLight), })] public partial class Ares64 : WaterboxCore, IRegionable { - private readonly LibAres64Accuracy _core; + private readonly LibAres64 _core; [CoreConstructor(VSystemID.Raw.N64)] - public Ares64(CoreLoadParameters lp) + public Ares64(CoreLoadParameters lp) : base(lp.Comm, new Configuration { DefaultWidth = 640, @@ -23,11 +23,12 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64.Accuracy MaxWidth = 640, MaxHeight = 576, MaxSamples = 2048, - DefaultFpsNumerator = 60000, - DefaultFpsDenominator = 1001, + DefaultFpsNumerator = 60, + DefaultFpsDenominator = 1, SystemId = VSystemID.Raw.N64, }) { + _settings = lp.Settings ?? new(); _syncSettings = lp.SyncSettings ?? new(); ControllerSettings = new[] @@ -40,7 +41,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64.Accuracy N64Controller = CreateControllerDefinition(ControllerSettings); - _core = PreInit(new WaterboxOptions + _core = PreInit(new WaterboxOptions { Filename = "ares64.wbx", SbrkHeapSizeKB = 2 * 1024, @@ -73,6 +74,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64.Accuracy loadFlags |= LibAres64.LoadFlags.RestrictAnalogRange; if (pal) loadFlags |= LibAres64.LoadFlags.Pal; + if (_settings.Deinterlacer == LibAres64.DeinterlacerType.Bob) + loadFlags |= LibAres64.LoadFlags.BobDeinterlace; var pif = Util.DecompressGzipFile(new MemoryStream(pal ? Resources.PIF_PAL_ROM.Value : Resources.PIF_NTSC_ROM.Value)); @@ -87,7 +90,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64.Accuracy RomData = (IntPtr)romPtr, RomLen = rom.Length, }; - if (!_core.Init(loadData, ControllerSettings, loadFlags)) + if (!_core.Init(ref loadData, ControllerSettings, loadFlags)) { throw new InvalidOperationException("Init returned false!"); } @@ -207,17 +210,5 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64.Accuracy Power = controller.IsPressed("Power"), }; } - - protected override void FrameAdvancePost() - { - if (BufferWidth == 0) - { - BufferWidth = BufferHeight == 239 ? 320 : 640; - } - } - - public override int VirtualWidth => 640; - - public override int VirtualHeight => 480; } } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/LibAres64.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/LibAres64.cs index 5ffed5c253..a7029adff0 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/LibAres64.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Ares64/LibAres64.cs @@ -35,6 +35,12 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64 Rumblepak, } + public enum DeinterlacerType : uint + { + Weave, + Bob, + } + [StructLayout(LayoutKind.Sequential)] public new class FrameInfo : LibWaterboxCore.FrameInfo { @@ -64,52 +70,22 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Ares64 { RestrictAnalogRange = 1 << 0, Pal = 1 << 1, - // performance only flags - UseVulkan = 1 << 2, - SuperSample = 1 << 3, - } - - public enum VulkanUpscaleOpts : uint - { - SD = 1, - HD = 2, - UHD = 4, + BobDeinterlace = 1 << 2, // weave otherwise } [StructLayout(LayoutKind.Sequential)] - public class LoadData + public struct LoadData { public IntPtr PifData; public int PifLen; public IntPtr RomData; public int RomLen; - // performance only data - public int VulkanUpscale; } [BizImport(CC)] - public abstract bool Init(LoadData loadData, ControllerType[] controllerSettings, LoadFlags loadFlags); + public abstract bool Init(ref LoadData loadData, ControllerType[] controllerSettings, LoadFlags loadFlags); [BizImport(CC)] public abstract bool GetRumbleStatus(int num); } - - public abstract class LibAres64Accuracy : LibAres64 - { - } - - public abstract class LibAres64Performance : LibAres64 - { - [BizImport(CC)] - public abstract void Deinit(); - - [BizImport(CC)] - public abstract int SerializeSize(); - - [BizImport(CC)] - public abstract void Serialize(byte[] buf); - - [BizImport(CC)] - public abstract bool Unserialize(byte[] buf, int sz); - } } diff --git a/src/BizHawk.Emulation.Cores/CoreNames.cs b/src/BizHawk.Emulation.Cores/CoreNames.cs index 60de16a832..747822d36f 100644 --- a/src/BizHawk.Emulation.Cores/CoreNames.cs +++ b/src/BizHawk.Emulation.Cores/CoreNames.cs @@ -10,8 +10,7 @@ namespace BizHawk.Emulation.Cores public static class CoreNames { public const string A7800Hawk = "A7800Hawk"; - public const string Ares64Accuracy = "Ares64 (Accuracy)"; - public const string Ares64Performance = "Ares64 (Performance)"; + public const string Ares64 = "Ares64"; public const string Atari2600Hawk = "Atari2600Hawk"; public const string Bsnes = "BSNES"; public const string Bsnes115 = "BSNESv115+"; diff --git a/src/BizHawk.Emulation.Cores/vpads_schemata/N64Schema.cs b/src/BizHawk.Emulation.Cores/vpads_schemata/N64Schema.cs index c070a7fd5c..647b3ff835 100644 --- a/src/BizHawk.Emulation.Cores/vpads_schemata/N64Schema.cs +++ b/src/BizHawk.Emulation.Cores/vpads_schemata/N64Schema.cs @@ -26,21 +26,11 @@ namespace BizHawk.Emulation.Cores } } } - else if (core is Consoles.Nintendo.Ares64.Accuracy.Ares64 ares64Acc) + else if (core is Ares64 ares64) { for (var i = 0; i < 4; i++) { - if (ares64Acc.ControllerSettings[i] != LibAres64.ControllerType.Unplugged) - { - yield return StandardController(i + 1); - } - } - } - else if (core is Consoles.Nintendo.Ares64.Performance.Ares64 ares64Perf) - { - for (var i = 0; i < 4; i++) - { - if (ares64Perf.ControllerSettings[i] != LibAres64.ControllerType.Unplugged) + if (ares64.ControllerSettings[i] != LibAres64.ControllerType.Unplugged) { yield return StandardController(i + 1); } diff --git a/waterbox/ares64/BizInterface.cpp b/waterbox/ares64/BizInterface.cpp index 1bd1519343..599c8e0896 100644 --- a/waterbox/ares64/BizInterface.cpp +++ b/waterbox/ares64/BizInterface.cpp @@ -1,17 +1,10 @@ #include -#if WATERBOXED #include #include -#endif #include -#ifndef WATERBOXED -#define ECL_EXPORT __attribute__((visibility("default"))) -#include "../emulibc/waterboxcore.h" -#endif - #define EXPORT extern "C" ECL_EXPORT typedef enum @@ -321,9 +314,7 @@ static inline SaveType DetectSaveType(u8* rom) return ret; } -namespace ares::Nintendo64 { extern bool RestrictAnalogRange; } - -bool Inited = false; +namespace ares::Nintendo64 { extern bool RestrictAnalogRange; extern bool BobDeinterlace; } typedef struct { @@ -331,27 +322,17 @@ typedef struct u32 PifLen; u8* RomData; u32 RomLen; -#ifndef WATERBOXED - u32 VulkanUpscale; -#endif } LoadData; typedef enum { RESTRICT_ANALOG_RANGE = 1 << 0, IS_PAL = 1 << 1, -#ifndef WATERBOXED - USE_VULKAN = 1 << 2, - SUPER_SAMPLE = 1 << 3, -#endif + BOB_DEINTERLACE = 1 << 2, // weave otherwise (todo: implement this) } LoadFlags; -EXPORT void Deinit(); - EXPORT bool Init(LoadData* loadData, ControllerType* controllers, LoadFlags loadFlags) { - if (Inited) Deinit(); - platform = new BizPlatform; platform->bizpak = new vfs::directory; @@ -397,7 +378,7 @@ EXPORT bool Init(LoadData* loadData, ControllerType* controllers, LoadFlags load case SRAM32KB: len = 32 * 1024; name = "save.ram"; break; case SRAM96KB: len = 96 * 1024; name = "save.ram"; break; case FLASH128KB: len = 128 * 1024; name = "save.flash"; break; - default: Deinit(); return false; + default: return false; } data = new u8[len]; memset(data, 0xFF, len); @@ -407,15 +388,8 @@ EXPORT bool Init(LoadData* loadData, ControllerType* controllers, LoadFlags load ares::platform = platform; -#ifndef WATERBOXED - ares::Nintendo64::option("Enable Vulkan", !!(loadFlags & USE_VULKAN)); - ares::Nintendo64::option("Quality", loadData->VulkanUpscale == 1 ? "SD" : (loadData->VulkanUpscale == 2 ? "HD" : "UHD")); - ares::Nintendo64::option("Supersampling", !!(loadFlags & SUPER_SAMPLE)); -#endif - if (!ares::Nintendo64::load(root, {"[Nintendo] Nintendo 64 (", region, ")"})) { - Deinit(); return false; } @@ -426,7 +400,6 @@ EXPORT bool Init(LoadData* loadData, ControllerType* controllers, LoadFlags load } else { - Deinit(); return false; } @@ -453,51 +426,23 @@ EXPORT bool Init(LoadData* loadData, ControllerType* controllers, LoadFlags load } else { - Deinit(); return false; } } else { - Deinit(); return false; } } ares::Nintendo64::RestrictAnalogRange = loadFlags & RESTRICT_ANALOG_RANGE; + ares::Nintendo64::BobDeinterlace = loadFlags & BOB_DEINTERLACE; root->power(false); HackeryDoo(); - Inited = true; return true; } -EXPORT void Deinit() -{ - if (root) root->unload(); - if (platform) - { - if (platform->bizpak) platform->bizpak.reset(); - delete platform; - } - if (pifData) - { - delete[] (u8*)pifData->data(); - delete pifData; - } - if (romData) - { - delete[] (u8*)romData->data(); - delete romData; - } - if (saveData) - { - delete[] (u8*)saveData->data(); - delete saveData; - } - Inited = false; -} - EXPORT bool GetRumbleStatus(u32 num) { ares::Nintendo64::Gamepad* c = nullptr; @@ -511,23 +456,6 @@ EXPORT bool GetRumbleStatus(u32 num) return c ? c->motor->enable() : false; } -EXPORT u32 SerializeSize() -{ - return root->serialize(false).size(); -} - -EXPORT void Serialize(u8* buf) -{ - auto s = root->serialize(false); - memcpy(buf, s.data(), s.size()); -} - -EXPORT bool Unserialize(u8* buf, u32 sz) -{ - serializer s(buf, sz); - return root->unserialize(s); -} - #define ADD_MEMORY_DOMAIN(mem, name, flags) do { \ m[i].Data = ares::Nintendo64::mem.data; \ m[i].Name = name; \ @@ -565,7 +493,6 @@ EXPORT void GetMemoryAreas(MemoryArea *m) ADD_MEMPAK_DOMAIN(4); } -// fixme: this mismatches the c# side due to some re-ordering c# is doing for some reason struct MyFrameInfo : public FrameInfo { Buttons_t P1Buttons; @@ -664,4 +591,4 @@ EXPORT void FrameAdvance(MyFrameInfo* f) EXPORT void SetInputCallback(void (*callback)()) { platform->inputcb = callback; - } +} diff --git a/waterbox/ares64/Accuracy.mak b/waterbox/ares64/Makefile similarity index 57% rename from waterbox/ares64/Accuracy.mak rename to waterbox/ares64/Makefile index 4e3014e2bc..fb70480bec 100644 --- a/waterbox/ares64/Accuracy.mak +++ b/waterbox/ares64/Makefile @@ -1,18 +1,15 @@ NEED_LIBCO := 1 ARES_PATH = $(ROOT_DIR)/ares/ares -MAME_PATH = $(ROOT_DIR)/ares/thirdparty/mame +ANGRYLION_PATH = $(ROOT_DIR)/ares/thirdparty/angrylion-rdp/mylittle-nocomment CXXFLAGS := -std=c++17 -msse4.2 \ -I../libco -I.$(ROOT_DIR)/ares/ -I.$(ROOT_DIR)/ares/thirdparty/ -I.$(ARES_PATH) \ - -Werror=int-to-pointer-cast -Wno-unused-but-set-variable -Wno-delete-non-virtual-dtor \ - -Wno-parentheses -Wno-reorder -Wno-unused-variable \ + -Werror=int-to-pointer-cast -Wno-unused-but-set-variable -Wno-format-security \ + -Wno-parentheses -Wno-reorder -Wno-unused-variable -Wno-delete-non-virtual-dtor \ -Wno-sign-compare -Wno-switch -Wno-unused-local-typedefs \ -fno-strict-aliasing -fwrapv -fno-operator-names \ - -I.$(MAME_PATH)/devices -I.$(MAME_PATH)/emu \ - -I.$(MAME_PATH)/lib/util -I.$(MAME_PATH)/mame \ - -I.$(MAME_PATH)/osd -DMAME_RDP -DLSB_FIRST -DPTR64 -DSDLMAME_EMSCRIPTEN \ - -DWATERBOXED + -I.$(ANGRYLION_PATH) -DANGRYLION_RDP TARGET = ares64.wbx @@ -42,17 +39,10 @@ SRCS_N64 = \ $(ARES_PATH)/n64/rdp/rdp.cpp \ $(ARES_PATH)/n64/rsp/rsp.cpp -SRCS_MAME = \ - $(MAME_PATH)/emu/emucore.cpp \ - $(MAME_PATH)/lib/util/delegate.cpp \ - $(MAME_PATH)/lib/util/strformat.cpp \ - $(MAME_PATH)/mame/video/n64.cpp \ - $(MAME_PATH)/mame/video/pin64.cpp \ - $(MAME_PATH)/mame/video/rdpblend.cpp \ - $(MAME_PATH)/mame/video/rdptpipe.cpp \ - $(MAME_PATH)/osd/osdcore.cpp \ - $(MAME_PATH)/osd/osdsync.cpp +SRCS_ANGRYLION = \ + $(ANGRYLION_PATH)/main.cpp \ + $(ANGRYLION_PATH)/n64video.cpp -SRCS = $(SRCS_PROCESSORS) $(SRCS_ARES) $(SRCS_N64) $(SRCS_MAME) BizInterface.cpp +SRCS = $(SRCS_PROCESSORS) $(SRCS_ARES) $(SRCS_N64) $(SRCS_ANGRYLION) BizInterface.cpp include ../common.mak diff --git a/waterbox/ares64/Performance.mak b/waterbox/ares64/Performance.mak deleted file mode 100644 index 55a868b6d4..0000000000 --- a/waterbox/ares64/Performance.mak +++ /dev/null @@ -1,160 +0,0 @@ -ARES_PATH = $(ROOT_DIR)/ares/ares -MAME_PATH = $(ROOT_DIR)/ares/thirdparty/mame -SLJIT_PATH = $(ROOT_DIR)/ares/thirdparty/sljit - -CCFLAGS := -std=c99 -Wall -Wno-format -Wno-parentheses - -CXXFLAGS := -std=c++17 -msse4.2 -O3 -flto -fvisibility=internal \ - -I../libco -I.$(ROOT_DIR)/ares/ -I.$(ROOT_DIR)/ares/thirdparty/ -I.$(ARES_PATH) \ - -Werror=int-to-pointer-cast -Wno-unused-but-set-variable \ - -Wno-parentheses -Wno-reorder -Wno-unused-variable \ - -Wno-sign-compare -Wno-switch -Wno-unused-local-typedefs \ - -fno-strict-aliasing -fwrapv -fno-operator-names \ - -I.$(MAME_PATH)/devices -I.$(MAME_PATH)/emu \ - -I.$(MAME_PATH)/lib/util -I.$(MAME_PATH)/mame \ - -I.$(MAME_PATH)/osd -DMAME_RDP -DLSB_FIRST -DPTR64 -DSLJIT_HAVE_CONFIG_PRE=1 -DSLJIT_HAVE_CONFIG_POST=1 -fPIC - -LDFLAGS := -shared - -ifeq ($(OS),Windows_NT) - CCFLAGS += -DVK_USE_PLATFORM_WIN32_KHR - CXXFLAGS += -DVK_USE_PLATFORM_WIN32_KHR -DOSD_WINDOWS=1 - TARGET = libares64.dll -else - CXXFLAGS += -DSDLMAME_LINUX - TARGET = libares64.so -endif - -SRCS_LIBCO = \ - $(ROOT_DIR)/ares/libco/libco.c - -SRCS_PROCESSORS = \ - $(ARES_PATH)/component/processor/sm5k/sm5k.cpp - -SRCS_ARES = \ - $(ARES_PATH)/ares/ares.cpp \ - $(ARES_PATH)/ares/memory/fixed-allocator.cpp - -SRCS_N64 = \ - $(ARES_PATH)/n64/memory/memory.cpp \ - $(ARES_PATH)/n64/system/system.cpp \ - $(ARES_PATH)/n64/cartridge/cartridge.cpp \ - $(ARES_PATH)/n64/controller/controller.cpp \ - $(ARES_PATH)/n64/dd/dd.cpp \ - $(ARES_PATH)/n64/sp/sp.cpp \ - $(ARES_PATH)/n64/dp/dp.cpp \ - $(ARES_PATH)/n64/mi/mi.cpp \ - $(ARES_PATH)/n64/vi/vi.cpp \ - $(ARES_PATH)/n64/ai/ai.cpp \ - $(ARES_PATH)/n64/pi/pi.cpp \ - $(ARES_PATH)/n64/ri/ri.cpp \ - $(ARES_PATH)/n64/si/si.cpp \ - $(ARES_PATH)/n64/rdram/rdram.cpp \ - $(ARES_PATH)/n64/cpu/cpu.cpp \ - $(ARES_PATH)/n64/rdp/rdp.cpp \ - $(ARES_PATH)/n64/rsp/rsp.cpp \ - $(ARES_PATH)/n64/vulkan/vulkan.cpp - -PARALLEL_RDP_IMPLEMENTATION = $(ARES_PATH)/n64/vulkan/parallel-rdp - -SRCS_PARALLEL_RDP = \ - $(wildcard $(PARALLEL_RDP_IMPLEMENTATION)/parallel-rdp/*.cpp) \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/buffer.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/buffer_pool.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/command_buffer.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/command_pool.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/context.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/cookie.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/descriptor_set.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/device.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/event_manager.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/fence.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/fence_manager.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/image.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/memory_allocator.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/pipeline_event.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/query_pool.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/render_pass.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/sampler.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/semaphore.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/semaphore_manager.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/shader.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/texture_format.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/util/logging.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/util/thread_id.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/util/aligned_alloc.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/util/timer.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/util/timeline_trace_file.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/util/thread_name.cpp \ - $(PARALLEL_RDP_IMPLEMENTATION)/volk/volk.c - -PARALLEL_RDP_INCLUDE_DIRS = \ - -I.$(PARALLEL_RDP_IMPLEMENTATION)/parallel-rdp \ - -I.$(PARALLEL_RDP_IMPLEMENTATION)/volk \ - -I.$(PARALLEL_RDP_IMPLEMENTATION)/vulkan \ - -I.$(PARALLEL_RDP_IMPLEMENTATION)/vulkan-headers/include \ - -I.$(PARALLEL_RDP_IMPLEMENTATION)/util - -CXXFLAGS += $(PARALLEL_RDP_INCLUDE_DIRS) -DVULKAN -DGRANITE_VULKAN_MT -CCFLAGS += $(PARALLEL_RDP_INCLUDE_DIRS) - -SRCS_MAME = \ - $(MAME_PATH)/emu/emucore.cpp \ - $(MAME_PATH)/lib/util/delegate.cpp \ - $(MAME_PATH)/lib/util/strformat.cpp \ - $(MAME_PATH)/mame/video/n64.cpp \ - $(MAME_PATH)/mame/video/pin64.cpp \ - $(MAME_PATH)/mame/video/rdpblend.cpp \ - $(MAME_PATH)/mame/video/rdptpipe.cpp \ - $(MAME_PATH)/osd/osdcore.cpp \ - $(MAME_PATH)/osd/osdsync.cpp - -SRCS_SLJIT = \ - $(SLJIT_PATH)/../sljitAllocator.cpp \ - $(SLJIT_PATH)/sljit_src/sljitLir.c - -SRCS = $(SRCS_LIBCO) $(SRCS_PROCESSORS) $(SRCS_ARES) $(SRCS_N64) $(SRCS_PARALLEL_RDP) $(SRCS_MAME) $(SRCS_SLJIT) BizInterface.cpp - -ROOT_DIR := $(shell dirname $(realpath Performance.mak)) -OUTPUTDLL_DIR := $(realpath $(ROOT_DIR)/../../Assets/dll) -OUTPUTDLLCOPY_DIR := $(realpath $(ROOT_DIR)/../../output/dll) -OUT_DIR := $(ROOT_DIR)/obj -OBJ_DIR := $(OUT_DIR)/release_performance - -CC := gcc -CXX := g++ - -_OBJS := $(addsuffix .o,$(realpath $(SRCS))) -OBJS := $(patsubst $(ROOT_DIR)%,$(OBJ_DIR)%,$(_OBJS)) - -$(OBJ_DIR)/%.c.o: %.c - @echo cc $< - @mkdir -p $(@D) - @$(CC) -c -o $@ $< $(CCFLAGS) $(PER_FILE_FLAGS_$<) -$(OBJ_DIR)/%.cpp.o: %.cpp - @echo cxx $< - @mkdir -p $(@D) - @$(CXX) -c -o $@ $< $(CXXFLAGS) $(PER_FILE_FLAGS_$<) - -.DEFAULT_GOAL := install - -.PHONY: release install - -TARGET_RELEASE := $(OBJ_DIR)/$(TARGET) - -release: $(TARGET_RELEASE) - -$(TARGET_RELEASE): $(OBJS) - @echo ld $@ - @$(CXX) -o $@ $(LDFLAGS) $(CCFLAGS) $(CXXFLAGS) $(OBJS) - -install: $(TARGET_RELEASE) - @cp -f $(TARGET_RELEASE) $(OUTPUTDLL_DIR)/$(TARGET) - @cp -f $(TARGET_RELEASE) $(OUTPUTDLLCOPY_DIR)/$(TARGET) - @echo Release build of $(TARGET) installed. - -.PHONY: clean -clean: - rm -rf $(OUT_DIR) - --include $(OBJS:%o=%d) diff --git a/waterbox/ares64/ares/ares/ares/ares.hpp b/waterbox/ares64/ares/ares/ares/ares.hpp index ff9f200e9b..9a219dfe7f 100644 --- a/waterbox/ares64/ares/ares/ares/ares.hpp +++ b/waterbox/ares64/ares/ares/ares/ares.hpp @@ -1,11 +1,7 @@ #pragma once -#ifdef WATERBOXED #include #include -#else -#include -#endif #include @@ -61,11 +57,7 @@ namespace ares { } namespace Video { -#ifdef WATERBOXED static constexpr bool Threaded = false; -#else - static constexpr bool Threaded = true; -#endif } namespace Constants { diff --git a/waterbox/ares64/ares/ares/ares/node/video/screen.cpp b/waterbox/ares64/ares/ares/ares/node/video/screen.cpp index 6446bbc2ed..19fe96a044 100644 --- a/waterbox/ares64/ares/ares/ares/node/video/screen.cpp +++ b/waterbox/ares64/ares/ares/ares/node/video/screen.cpp @@ -3,17 +3,10 @@ Screen::Screen(string name, u32 width, u32 height) : Video(name) { _canvasHeight = height; if(width && height) { -#ifdef WATERBOXED _inputA = alloc_invisible(width * height); _inputB = alloc_invisible(width * height); _output = alloc_invisible(width * height); _rotate = alloc_invisible(width * height); -#else - _inputA = new u32[width * height](); - _inputB = new u32[width * height](); - _output = new u32[width * height](); - _rotate = new u32[width * height](); -#endif if constexpr(ares::Video::Threaded) { _thread = nall::thread::create({&Screen::main, this}); diff --git a/waterbox/ares64/ares/ares/n64/accuracy.hpp b/waterbox/ares64/ares/ares/n64/accuracy.hpp index 77d01fcb58..85eda162f7 100644 --- a/waterbox/ares64/ares/ares/n64/accuracy.hpp +++ b/waterbox/ares64/ares/ares/n64/accuracy.hpp @@ -1,10 +1,6 @@ struct Accuracy { //enable all accuracy flags -#ifdef WATERBOXED static constexpr bool Reference = 1; -#else - static constexpr bool Reference = 0; -#endif struct CPU { static constexpr bool Interpreter = 0 | Reference; diff --git a/waterbox/ares64/ares/ares/n64/n64.hpp b/waterbox/ares64/ares/ares/n64/n64.hpp index c02de37595..98c3c0ac35 100644 --- a/waterbox/ares64/ares/ares/n64/n64.hpp +++ b/waterbox/ares64/ares/ares/n64/n64.hpp @@ -15,10 +15,6 @@ using v128 = __m128i; #include #endif -#if defined(MAME_RDP) -class n64_state; -#endif - namespace ares::Nintendo64 { auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; diff --git a/waterbox/ares64/ares/ares/n64/rdp/rdp.cpp b/waterbox/ares64/ares/ares/n64/rdp/rdp.cpp index e9dd892507..b5bed6aa45 100644 --- a/waterbox/ares64/ares/ares/n64/rdp/rdp.cpp +++ b/waterbox/ares64/ares/ares/n64/rdp/rdp.cpp @@ -1,19 +1,7 @@ #include -#if defined(MAME_RDP) -#include "emu.h" -#include "includes/n64.h" - -struct n64_periphs_impl : public n64_periphs { - auto dp_full_sync() -> void override { - ares::Nintendo64::rdp.syncFull(); - } - - static auto instance() -> n64_periphs_impl* { - static n64_periphs_impl* inst = new n64_periphs_impl(); - return inst; - } -}; +#if defined(ANGRYLION_RDP) +#include "Gfx #1.3.h" #endif namespace ares::Nintendo64 { @@ -28,10 +16,9 @@ auto RDP::load(Node::Object parent) -> void { node = parent->append("RDP"); debugger.load(node); - #if defined(MAME_RDP) - state = new n64_state((u32*)rdram.ram.data, (u32*)rsp.dmem.data, n64_periphs_impl::instance()); + #if defined(ANGRYLION_RDP) puts("starting RDP video"); - state->video_start(); + angrylion::RomOpen(); #endif } @@ -39,8 +26,8 @@ auto RDP::unload() -> void { debugger = {}; node.reset(); - #if defined(MAME_RDP) - state.reset(); + #if defined(ANGRYLION_RDP) + angrylion::RomClosed(); #endif } diff --git a/waterbox/ares64/ares/ares/n64/rdp/rdp.hpp b/waterbox/ares64/ares/ares/n64/rdp/rdp.hpp index bebf4216ff..cba1869201 100644 --- a/waterbox/ares64/ares/ares/n64/rdp/rdp.hpp +++ b/waterbox/ares64/ares/ares/n64/rdp/rdp.hpp @@ -347,10 +347,6 @@ struct RDP : Thread, Memory::IO { n32 data; } test; } io{*this}; - - #if defined(MAME_RDP) - unique_pointer state; - #endif }; extern RDP rdp; diff --git a/waterbox/ares64/ares/ares/n64/rdp/render.cpp b/waterbox/ares64/ares/ares/n64/rdp/render.cpp index 94a961b7f7..ca4d92f469 100644 --- a/waterbox/ares64/ares/ares/n64/rdp/render.cpp +++ b/waterbox/ares64/ares/ares/n64/rdp/render.cpp @@ -49,15 +49,13 @@ auto RDP::render() -> void { if(vulkan.enable && vulkan.render()) return; #endif - #if defined(MAME_RDP) - auto rdp = state->rdp(); - rdp->set_current(command.current); - rdp->set_end(command.end); - rdp->set_status(command.source ? DP_STATUS_XBUS_DMA : 0); - rdp->process_command_list(); - command.current = rdp->get_current(); + #if defined(ANGRYLION_RDP) + if (angrylion::ProcessRDPList()) { + command.start = command.current = command.end; + } return; - #else + #endif + auto& memory = !command.source ? rdram.ram : rsp.dmem; auto fetch = [&]() -> u64 { @@ -553,7 +551,6 @@ auto RDP::render() -> void { } } -#endif } //0x00 diff --git a/waterbox/ares64/ares/ares/n64/vi/vi.cpp b/waterbox/ares64/ares/ares/n64/vi/vi.cpp index 32471b2363..d110974a81 100644 --- a/waterbox/ares64/ares/ares/n64/vi/vi.cpp +++ b/waterbox/ares64/ares/ares/n64/vi/vi.cpp @@ -1,5 +1,9 @@ #include +#if defined(ANGRYLION_RDP) +#include "Gfx #1.3.h" +#endif + namespace ares::Nintendo64 { VI vi; @@ -78,6 +82,16 @@ auto VI::main() -> void { } #endif + #if defined(ANGRYLION_RDP) + #if defined(VULKAN) + if (!vulkan.enable) { + #endif + angrylion::UpdateScreen(); + #if defined(VULKAN) + } + #endif + #endif + refreshed = true; screen->frame(); } @@ -91,6 +105,8 @@ auto VI::step(u32 clocks) -> void { Thread::clock += clocks; } +bool BobDeinterlace = 0; + auto VI::refresh() -> void { #if defined(VULKAN) if(vulkan.enable && gpuOutputValid) { @@ -116,6 +132,22 @@ auto VI::refresh() -> void { } #endif + #if defined(ANGRYLION_RDP) + #if defined(VULKAN) + if(!vulkan.enable) { + #else + { + #endif + u32 width = 640; + u32 height = Region::PAL() ? 576 : 480; + screen->setViewport(0, 0, width, height); + u32* src = angrylion::FinalizeFrame(BobDeinterlace); + u32* dst = screen->pixels(1).data(); + memcpy(dst, src, width * height * sizeof(u32)); + return; + } + #endif + u32 pitch = vi.io.width; u32 width = vi.io.width; //vi.io.xscale <= 0x300 ? 320 : 640; u32 height = vi.io.yscale <= 0x400 ? 239 : 478; diff --git a/waterbox/ares64/ares/thirdparty/angrylion-rdp b/waterbox/ares64/ares/thirdparty/angrylion-rdp new file mode 160000 index 0000000000..53dfbd3e6c --- /dev/null +++ b/waterbox/ares64/ares/thirdparty/angrylion-rdp @@ -0,0 +1 @@ +Subproject commit 53dfbd3e6c385bf1898de53d7ff176de6c4cffa1 diff --git a/waterbox/ares64/ares/thirdparty/mame/devices/video/poly.h b/waterbox/ares64/ares/thirdparty/mame/devices/video/poly.h deleted file mode 100644 index 92cdefee2f..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/devices/video/poly.h +++ /dev/null @@ -1,1472 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ville Linde, Aaron Giles -/*************************************************************************** - - poly.h - - Polygon helper routines. - -**************************************************************************** - - Pixel model: - - (0.0,0.0) (1.0,0.0) (2.0,0.0) (3.0,0.0) - +---------------+---------------+---------------+ - | | | | - | | | | - | (0.5,0.5) | (1.5,0.5) | (2.5,0.5) | - | * | * | * | - | | | | - | | | | - (0.0,1.0) (1.0,1.0) (2.0,1.0) (3.0,1.0) - +---------------+---------------+---------------+ - | | | | - | | | | - | (0.5,1.5) | (1.5,1.5) | (2.5,1.5) | - | * | * | * | - | | | | - | | | | - | | | | - +---------------+---------------+---------------+ - (0.0,2.0) (1.0,2.0) (2.0,2.0) (3.0,2.0) - -***************************************************************************/ - -#ifndef MAME_VIDEO_POLY_H -#define MAME_VIDEO_POLY_H - -#pragma once - -#include -#include - - -#define KEEP_POLY_STATISTICS 0 -#define TRACK_POLY_WAITS 0 - - - -//************************************************************************** -// CONSTANTS -//************************************************************************** - -static constexpr u8 POLY_FLAG_NO_WORK_QUEUE = 0x01; -static constexpr u8 POLY_FLAG_NO_CLIPPING = 0x02; - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// base class for poly_array -class poly_array_base -{ -public: - // construction - poly_array_base() { } - - // destruction - virtual ~poly_array_base() { } - - // reset - virtual void reset() = 0; -}; - - -// class for managing an array of items -template -class poly_array : public poly_array_base -{ -public: - // this is really architecture-specific, but 64 is a reasonable - // value for most modern x64/ARM architectures - static constexpr size_t CACHE_LINE_SHIFT = 6; - static constexpr size_t CACHE_LINE_SIZE = 1 << CACHE_LINE_SHIFT; - static constexpr uintptr_t CACHE_LINE_MASK = ~uintptr_t(0) << CACHE_LINE_SHIFT; - - // size of an item, rounded up to the cache line size - static constexpr size_t ITEM_SIZE = ((sizeof(ArrayType) + CACHE_LINE_SIZE - 1) / CACHE_LINE_SIZE) * CACHE_LINE_SIZE; - - // items are allocated in a 64k chunks - static constexpr size_t CHUNK_GRANULARITY = 65536; - - // number of items in a chunk - static constexpr u32 ITEMS_PER_CHUNK = CHUNK_GRANULARITY / ITEM_SIZE; - - // construction - poly_array() : - m_base(nullptr), - m_next(0), - m_max(0), - m_allocated(0) - { - for (int index = 0; index < TrackingCount; index++) - m_last[index] = nullptr; - - // allocate one chunk to start with - realloc(ITEMS_PER_CHUNK); - } - - // destruction - virtual ~poly_array() { m_base = nullptr; } - - // getters - u32 count() const { return m_next; } - u32 max() const { return m_max; } - size_t itemsize() const { return ITEM_SIZE; } - u32 allocated() const { return m_allocated; } - - // return an item by index - ArrayType &byindex(u32 index) - { - assert(index < m_next); - if (index < m_allocated) - return *item_ptr(index); - assert(m_chain); - return m_chain->byindex(index - m_allocated); - } - - // return a contiguous chunk of items - ArrayType *contiguous(u32 index, u32 count, u32 &chunk) - { - assert(index < m_next); - assert(index + count <= m_next); - if (index < m_allocated) - { - chunk = std::min(count, m_allocated - index); - return item_ptr(index); - } - assert(m_chain); - return m_chain->contiguous(index - m_allocated, count, chunk); - } - - // compute the index - int indexof(ArrayType &item) const - { - u32 result = (reinterpret_cast(&item) - m_base) / ITEM_SIZE; - if (result < m_allocated) - return result; - assert(m_chain); - return m_allocated + m_chain->indexof(item); - } - - // operations - virtual void reset() override - { - m_next = 0; - - // if we didn't have a chain, just repopulate - if (!m_chain) - repopulate(); - else - { - // otherwise, reallocate and get rid of the chain - realloc(m_max); - m_chain.reset(); - } - } - - // allocate a return a new item - ArrayType &next(int tracking_index = 0) - { - // track the maximum - if (m_next > m_max) - m_max = m_next; - - // fast case: fits within our array - ArrayType *item; - if (m_next < m_allocated) - item = new(item_ptr(m_next)) ArrayType; - - // otherwise, allocate from the chain - else - { - if (!m_chain) - m_chain = std::make_unique>(); - item = &m_chain->next(); - } - - // set the last item - m_next++; - if (TrackingCount > 0) - { - assert(tracking_index < TrackingCount); - m_last[tracking_index] = item; - } - return *item; - } - - // return the last - ArrayType &last(int tracking_index = 0) const - { - assert(tracking_index < TrackingCount); - assert(m_last[tracking_index] != nullptr); - return *m_last[tracking_index]; - } - -private: - // internal helper to make size pointers - ArrayType *item_ptr(u32 index) - { - assert(index < m_allocated); - return reinterpret_cast(m_base + index * ITEM_SIZE); - } - - // reallocate to the given size - void realloc(u32 count) - { - // round the count up to a chunk size - count = ((count + ITEMS_PER_CHUNK - 1) / ITEMS_PER_CHUNK) * ITEMS_PER_CHUNK; - - // allocate a fresh new array - std::unique_ptr new_alloc = std::make_unique(ITEM_SIZE * count + CACHE_LINE_SIZE); - std::fill_n(&new_alloc[0], ITEM_SIZE * count + CACHE_LINE_SIZE, 0); - - // align the base to a cache line - m_base = reinterpret_cast((uintptr_t(new_alloc.get()) + CACHE_LINE_SIZE - 1) & CACHE_LINE_MASK); - - // repopulate last items into the base of the new array - repopulate(); - - // replace the old allocation with the new one - m_alloc = std::move(new_alloc); - m_allocated = count; - } - - // repopulate items - void repopulate() - { - for (int tracking_index = 0; tracking_index < TrackingCount; tracking_index++) - if (m_last[tracking_index] != nullptr) - { - if (m_last[tracking_index] == item_ptr(m_next)) - m_next++; - else - next(tracking_index) = *m_last[tracking_index]; - } - } - - // internal state - u8 *m_base; - u32 m_next; - u32 m_max; - u32 m_allocated; - std::unique_ptr m_alloc; - std::unique_ptr> m_chain; - std::array m_last; -}; - - -// poly_manager is a template class -template -class poly_manager -{ -public: - // each vertex has an X/Y coordinate and a set of parameters - struct vertex_t - { - vertex_t() { } - vertex_t(BaseType _x, BaseType _y) { x = _x; y = _y; } - - BaseType x, y; // X, Y coordinates - std::array p; // iterated parameters - }; - - // a single extent describes a span and a list of parameter extents - struct extent_t - { - struct param_t - { - BaseType start; // parameter value at start - BaseType dpdx; // dp/dx relative to start - }; - int16_t startx, stopx; // starting (inclusive)/ending (exclusive) endpoints - std::array param; // array of parameter start/delays - void *userdata; // custom per-span data - }; - - // delegate type for scanline callbacks - using render_delegate = delegate; - - // poly_array of object data - using objectdata_array = poly_array; - - // construction/destruction - poly_manager(running_machine &machine); - virtual ~poly_manager(); - - // synchronization - void wait(char const *debug_reason = "general"); - - // return a reference to our ObjectType poly_array - objectdata_array &object_data() { return m_object; } - - // register a poly_array to be reset after a wait - void register_poly_array(poly_array_base &array) { m_arrays.push_back(&array); } - - // tiles - template - uint32_t render_tile(rectangle const &cliprect, render_delegate callback, vertex_t const &v1, vertex_t const &v2); - - // triangles - template - uint32_t render_triangle(rectangle const &cliprect, render_delegate callback, vertex_t const &v1, vertex_t const &v2, vertex_t const &v3); - template - uint32_t render_triangle_fan(rectangle const &cliprect, render_delegate callback, int numverts, vertex_t const *v); - template - uint32_t render_triangle_strip(rectangle const &cliprect, render_delegate callback, int numverts, vertex_t const *v); - - // polygons - template - uint32_t render_polygon(rectangle const &cliprect, render_delegate callback, vertex_t const *v); - - // direct custom extents - template - uint32_t render_extents(rectangle const &cliprect, render_delegate callback, int startscanline, int numscanlines, extent_t const *extents); - - // public helpers - template - int zclip_if_less(int numverts, vertex_t const *v, vertex_t *outv, BaseType clipval); - -private: - // number of profiling ticks before we consider a wait "long" - static constexpr osd_ticks_t POLY_LOG_WAIT_THRESHOLD = 1000; - - static constexpr int SCANLINES_PER_BUCKET = 32; - static constexpr int TOTAL_BUCKETS = (512 / SCANLINES_PER_BUCKET); - - // primitive_info describes a single primitive - struct primitive_info - { - poly_manager * m_owner; // pointer back to the poly manager - ObjectType * m_object; // object data pointer - render_delegate m_callback; // callback to handle a scanline's worth of work - }; - - // internal unit of work - struct work_unit - { - work_unit &operator=(work_unit const &rhs) - { - // this is just to satisfy the compiler; we don't actually copy - fatalerror("Attempt to copy work_unit"); - } - - std::atomic count_next; // number of scanlines and index of next item to process - primitive_info * primitive; // pointer to primitive - int32_t scanline; // starting scanline - uint32_t previtem; // index of previous item in the same bucket - extent_t extent[SCANLINES_PER_BUCKET]; // array of scanline extents - }; - - // internal array types - using primitive_array = poly_array; - using unit_array = poly_array; - - // round in a cross-platform consistent manner - inline int32_t round_coordinate(BaseType value) - { - int32_t result = int32_t(std::floor(value)); - if (value > 0 && result < 0) - return INT_MAX - 1; - return result + (value - BaseType(result) > BaseType(0.5)); - } - - // internal helpers - primitive_info &primitive_alloc(int minx, int maxx, int miny, int maxy, render_delegate callback) - { - // return and initialize the next one - primitive_info &primitive = m_primitive.next(); - primitive.m_owner = this; - primitive.m_object = &m_object.last(); - primitive.m_callback = callback; - return primitive; - } - - // enqueue work items in contiguous chunks - void queue_items(u32 start) - { - // do nothing if no queue; items will be processed on the next wait - if (m_queue == nullptr) - return; - - // enqueue the items in contiguous chunks - while (start < m_unit.count()) - { - u32 chunk; - work_unit *base = m_unit.contiguous(start, m_unit.count() - start, chunk); - osd_work_item_queue_multiple(m_queue, work_item_callback, chunk, base, m_unit.itemsize(), WORK_ITEM_FLAG_AUTO_RELEASE); - start += chunk; - } - } - - static void *work_item_callback(void *param, int threadid); - void presave() { wait("pre-save"); } - - // queue management - osd_work_queue *m_queue; // work queue - - // arrays - primitive_array m_primitive; // array of primitives - objectdata_array m_object; // array of object data - unit_array m_unit; // array of work units - std::vector m_arrays; // list of arrays we are managing - - // buckets - uint32_t m_unit_bucket[TOTAL_BUCKETS]; // buckets for tracking unit usage - - // statistics - uint32_t m_tiles; // number of tiles queued - uint32_t m_triangles; // number of triangles queued - uint32_t m_polygons; // number of polygons queued - uint64_t m_pixels; // number of pixels rendered -#if KEEP_POLY_STATISTICS - uint32_t m_conflicts[WORK_MAX_THREADS] = { 0 }; // number of conflicts found, per thread - uint32_t m_resolved[WORK_MAX_THREADS] = { 0 }; // number of conflicts resolved, per thread -#endif -#if TRACK_POLY_WAITS - static std::string friendly_number(u64 number); - struct wait_tracker - { - void update(int items, osd_ticks_t time) - { - total_waits++; - if (items > 0) - { - total_actual_waits++; - total_cycles += time; - if (time < 100) - bucket_waits[0]++; - else if (time < 1000) - bucket_waits[1]++; - else if (time < 10000) - bucket_waits[2]++; - else - bucket_waits[3]++; - } - } - - u32 total_waits = 0; - u32 total_actual_waits = 0; - u32 bucket_waits[4] = { 0 }; - u64 total_cycles = 0; - }; - using waitmap_t = std::unordered_map; - waitmap_t m_waitmap; -#endif -}; - - -//------------------------------------------------- -// poly_manager - constructor -//------------------------------------------------- - -template -poly_manager::poly_manager(running_machine &machine) : - m_queue(nullptr), - m_tiles(0), - m_triangles(0), - m_polygons(0), - m_pixels(0) -{ - // create the work queue - if (!(Flags & POLY_FLAG_NO_WORK_QUEUE)) - m_queue = osd_work_queue_alloc(WORK_QUEUE_FLAG_MULTI | WORK_QUEUE_FLAG_HIGH_FREQ); - - // initialize the buckets to empty - std::fill_n(&m_unit_bucket[0], std::size(m_unit_bucket), 0xffffffff); - - // register our arrays for reset - register_poly_array(m_primitive); - register_poly_array(m_object); - register_poly_array(m_unit); - -#if !defined(MAME_RDP) - // request a pre-save callback for synchronization - machine.save().register_presave(save_prepost_delegate(FUNC(poly_manager::presave), this)); -#endif -} - - -//------------------------------------------------- -// ~poly_manager - destructor -//------------------------------------------------- - -#if TRACK_POLY_WAITS -template -inline std::string poly_manager::friendly_number(u64 number) -{ - static char const s_suffixes[] = " kmbtqisp"; - double value = double(number); - int suffixnum = 0; - - if (number < 1000000) - return string_format("%6d ", int(number)); - while (value >= 1000) - { - value /= 1000.0; - suffixnum++; - } - if (value >= 100) - return string_format("%6.1f%c", value, s_suffixes[suffixnum]); - if (value >= 10) - return string_format("%6.2f%c", value, s_suffixes[suffixnum]); - return string_format("%6.3f%c", value, s_suffixes[suffixnum]); -} -#endif - -template -poly_manager::~poly_manager() -{ -#if KEEP_POLY_STATISTICS -{ - // accumulate stats over the entire collection - int conflicts = 0, resolved = 0; - for (int i = 0; i < std::size(m_conflicts); i++) - { - conflicts += m_conflicts[i]; - resolved += m_resolved[i]; - } - - // output global stats - osd_printf_info("Total triangles = %d\n", m_triangles); - osd_printf_info("Total polygons = %d\n", m_polygons); - if (m_pixels > 1000000000) - osd_printf_info("Total pixels = %d%09d\n", uint32_t(m_pixels / 1000000000), uint32_t(m_pixels % 1000000000)); - else - osd_printf_info("Total pixels = %d\n", uint32_t(m_pixels)); - - osd_printf_info("Conflicts: %d resolved, %d total\n", resolved, conflicts); - osd_printf_info("Units: %5d used, %5d allocated, %4d bytes each, %7d total\n", m_unit.max(), m_unit.allocated(), int(m_unit.itemsize()), int(m_unit.allocated() * m_unit.itemsize())); - osd_printf_info("Primitives: %5d used, %5d allocated, %4d bytes each, %7d total\n", m_primitive.max(), m_primitive.allocated(), int(m_primitive.itemsize()), int(m_primitive.allocated() * m_primitive.itemsize())); - osd_printf_info("Object data: %5d used, %5d allocated, %4d bytes each, %7d total\n", m_object.max(), m_object.allocated(), int(m_object.itemsize()), int(m_object.allocated() * m_object.itemsize())); -} -#endif -#if TRACK_POLY_WAITS -{ - osd_printf_info("Wait summary:\n"); - osd_printf_info("Cause Cycles Waits Actuals Average <100 100-1k 1k-10k 10k+\n"); - osd_printf_info("-------------------------- ------- ------- ------- ------- ------- ------- ------- -------\n"); - while (1) - { - typename waitmap_t::value_type *biggest = nullptr; - for (auto &item : m_waitmap) - if (item.second.total_cycles > 0) - if (biggest == nullptr || item.second.total_cycles > biggest->second.total_cycles) - biggest = &item; - - if (biggest == nullptr) - break; - - osd_printf_info("%-28s%-7s %-7s %-7s %-7s %-7s %-7s %-7s %-7s\n", - biggest->first.c_str(), - friendly_number(biggest->second.total_cycles).c_str(), - friendly_number(biggest->second.total_waits).c_str(), - friendly_number(biggest->second.total_actual_waits).c_str(), - (biggest->second.total_actual_waits == 0) ? "n/a" : friendly_number(biggest->second.total_cycles / biggest->second.total_actual_waits).c_str(), - friendly_number(biggest->second.bucket_waits[0]).c_str(), - friendly_number(biggest->second.bucket_waits[1]).c_str(), - friendly_number(biggest->second.bucket_waits[2]).c_str(), - friendly_number(biggest->second.bucket_waits[3]).c_str()); - - biggest->second.total_cycles = 0; - } -} -#endif - - // free the work queue - if (m_queue != nullptr) - osd_work_queue_free(m_queue); -} - - -//------------------------------------------------- -// work_item_callback - process a work item -//------------------------------------------------- - -template -void *poly_manager::work_item_callback(void *param, int threadid) -{ - while (1) - { - work_unit &unit = *(work_unit *)param; - primitive_info &primitive = *unit.primitive; - int count = unit.count_next & 0xff; - uint32_t orig_count_next; - - // if our previous item isn't done yet, enqueue this item to the end and proceed - if (unit.previtem != 0xffffffff) - { - work_unit &prevunit = primitive.m_owner->m_unit.byindex(unit.previtem); - if (prevunit.count_next != 0) - { - uint32_t unitnum = primitive.m_owner->m_unit.indexof(unit); - uint32_t new_count_next; - - // attempt to atomically swap in this new value - do - { - orig_count_next = prevunit.count_next; - new_count_next = orig_count_next | (unitnum << 8); - } while (!prevunit.count_next.compare_exchange_weak(orig_count_next, new_count_next, std::memory_order_release, std::memory_order_relaxed)); - -#if KEEP_POLY_STATISTICS - // track resolved conflicts - primitive.m_owner->m_conflicts[threadid]++; - if (orig_count_next != 0) - primitive.m_owner->m_resolved[threadid]++; -#endif - // if we succeeded, skip out early so we can do other work - if (orig_count_next != 0) - break; - } - } - - // iterate over extents - for (int curscan = 0; curscan < count; curscan++) - primitive.m_callback(unit.scanline + curscan, unit.extent[curscan], *primitive.m_object, threadid); - - // set our count to 0 and re-fetch the original count value - do - { - orig_count_next = unit.count_next; - } while (!unit.count_next.compare_exchange_weak(orig_count_next, 0, std::memory_order_release, std::memory_order_relaxed)); - - // if we have no more work to do, do nothing - orig_count_next >>= 8; - if (orig_count_next == 0) - break; - param = &primitive.m_owner->m_unit.byindex(orig_count_next); - } - return nullptr; -} - - -//------------------------------------------------- -// wait - stall until all work is complete -//------------------------------------------------- - -template -void poly_manager::wait(char const *debug_reason) -{ - // early out if no units outstanding - if (m_unit.count() == 0) - return; - -#if TRACK_POLY_WAITS - int items = osd_work_queue_items(m_queue); - osd_ticks_t time = get_profile_ticks(); -#endif - - // wait for all pending work items to complete - if (m_queue != nullptr) - osd_work_queue_wait(m_queue, osd_ticks_per_second() * 100); - - // if we don't have a queue, just run the whole list now - else - for (int unitnum = 0; unitnum < m_unit.count(); unitnum++) - work_item_callback(&m_unit.byindex(unitnum), 0); - -#if TRACK_POLY_WAITS - m_waitmap[debug_reason].update(items, get_profile_ticks() - time); -#endif - - // clear the buckets - std::fill_n(&m_unit_bucket[0], std::size(m_unit_bucket), 0xffffffff); - - // reset all the poly arrays - for (auto array : m_arrays) - array->reset(); -} - - -//------------------------------------------------- -// render_tile - render a tile -//------------------------------------------------- - -template -template -uint32_t poly_manager::render_tile(rectangle const &cliprect, render_delegate callback, vertex_t const &_v1, vertex_t const &_v2) -{ - vertex_t const *v1 = &_v1; - vertex_t const *v2 = &_v2; - - // first sort by Y - if (v2->y < v1->y) - std::swap(v1, v2); - - // compute some integral X/Y vertex values - int32_t v1y = round_coordinate(v1->y); - int32_t v2y = round_coordinate(v2->y); - - // clip coordinates - int32_t v1yclip = v1y; - int32_t v2yclip = v2y; - if (!(Flags & POLY_FLAG_NO_CLIPPING)) - { - v1yclip = std::max(v1yclip, cliprect.top()); - v2yclip = std::min(v2yclip, cliprect.bottom() + 1); - if (v2yclip - v1yclip <= 0) - return 0; - } - - // determine total X extents - BaseType minx = v1->x; - BaseType maxx = v2->x; - if (minx > maxx) - return 0; - - // allocate and populate a new primitive - primitive_info &primitive = primitive_alloc(round_coordinate(minx), round_coordinate(maxx), v1yclip, v2yclip, callback); - - // compute parameter deltas - std::array param_dpdx; - std::array param_dpdy; - if (ParamCount > 0) - { - BaseType oox = BaseType(1.0) / (v2->x - v1->x); - BaseType ooy = BaseType(1.0) / (v2->y - v1->y); - for (int paramnum = 0; paramnum < ParamCount; paramnum++) - { - param_dpdx[paramnum] = oox * (v2->p[paramnum] - v1->p[paramnum]); - param_dpdy[paramnum] = ooy * (v2->p[paramnum] - v1->p[paramnum]); - } - } - - // clamp to full pixels - int32_t istartx = round_coordinate(v1->x); - int32_t istopx = round_coordinate(v2->x); - - // force start < stop - if (istartx > istopx) - std::swap(istartx, istopx); - - // apply left/right clipping - if (!(Flags & POLY_FLAG_NO_CLIPPING)) - { - istartx = std::max(istartx, cliprect.left()); - istopx = std::min(istopx, cliprect.right() + 1); - if (istartx >= istopx) - return 0; - } - - // compute the X extents for each scanline - int32_t pixels = 0; - uint32_t startunit = m_unit.count(); - int32_t scaninc = 1; - for (int32_t curscan = v1yclip; curscan < v2yclip; curscan += scaninc) - { - uint32_t bucketnum = (uint32_t(curscan) / SCANLINES_PER_BUCKET) % TOTAL_BUCKETS; - uint32_t unit_index = m_unit.count(); - work_unit &unit = m_unit.next(); - - // determine how much to advance to hit the next bucket - scaninc = SCANLINES_PER_BUCKET - uint32_t(curscan) % SCANLINES_PER_BUCKET; - - // fill in the work unit basics - unit.primitive = &primitive; - unit.count_next = std::min(v2yclip - curscan, scaninc); - unit.scanline = curscan; - unit.previtem = m_unit_bucket[bucketnum]; - m_unit_bucket[bucketnum] = unit_index; - - // iterate over extents - for (int extnum = 0; extnum < unit.count_next; extnum++) - { - // set the extent and update the total pixel count - extent_t &extent = unit.extent[extnum]; - extent.startx = istartx; - extent.stopx = istopx; - pixels += istopx - istartx; - - // fill in the parameters for the extent - if (ParamCount > 0) - { - BaseType fullstartx = BaseType(istartx) + BaseType(0.5); - BaseType fully = BaseType(curscan + extnum) + BaseType(0.5); - for (int paramnum = 0; paramnum < ParamCount; paramnum++) - { - extent.param[paramnum].start = v1->p[paramnum] + fullstartx * param_dpdx[paramnum] + fully * param_dpdy[paramnum]; - extent.param[paramnum].dpdx = param_dpdx[paramnum]; - } - } - } - } - - // enqueue the work items - queue_items(startunit); - - // return the total number of pixels in the triangle - m_tiles++; - m_pixels += pixels; - return pixels; -} - - -//------------------------------------------------- -// render_triangle - render a single triangle -// given 3 vertexes -//------------------------------------------------- - -template -template -uint32_t poly_manager::render_triangle(const rectangle &cliprect, render_delegate callback, const vertex_t &_v1, const vertex_t &_v2, const vertex_t &_v3) -{ - vertex_t const *v1 = &_v1; - vertex_t const *v2 = &_v2; - vertex_t const *v3 = &_v3; - - // first sort by Y - if (v2->y < v1->y) - std::swap(v1, v2); - if (v3->y < v2->y) - { - std::swap(v2, v3); - if (v2->y < v1->y) - std::swap(v1, v2); - } - - // compute some integral X/Y vertex values - int32_t v1y = round_coordinate(v1->y); - int32_t v3y = round_coordinate(v3->y); - - // clip coordinates - int32_t v1yclip = v1y; - int32_t v3yclip = v3y; - if (!(Flags & POLY_FLAG_NO_CLIPPING)) - { - v1yclip = std::max(v1yclip, cliprect.top()); - v3yclip = std::min(v3yclip, cliprect.bottom() + 1); - if (v3yclip - v1yclip <= 0) - return 0; - } - - // determine total X extents - BaseType minx = std::min(std::min(v1->x, v2->x), v3->x); - BaseType maxx = std::max(std::max(v1->x, v2->x), v3->x); - - // allocate and populate a new primitive - primitive_info &primitive = primitive_alloc(round_coordinate(minx), round_coordinate(maxx), v1yclip, v3yclip, callback); - - // compute the slopes for each portion of the triangle - BaseType dxdy_v1v2 = (v2->y == v1->y) ? BaseType(0.0) : (v2->x - v1->x) / (v2->y - v1->y); - BaseType dxdy_v1v3 = (v3->y == v1->y) ? BaseType(0.0) : (v3->x - v1->x) / (v3->y - v1->y); - BaseType dxdy_v2v3 = (v3->y == v2->y) ? BaseType(0.0) : (v3->x - v2->x) / (v3->y - v2->y); - - // compute parameter starting points and deltas - std::array param_start; - std::array param_dpdx; - std::array param_dpdy; - if (ParamCount > 0) - { - BaseType a00 = v2->y - v3->y; - BaseType a01 = v3->x - v2->x; - BaseType a02 = v2->x*v3->y - v3->x*v2->y; - BaseType a10 = v3->y - v1->y; - BaseType a11 = v1->x - v3->x; - BaseType a12 = v3->x*v1->y - v1->x*v3->y; - BaseType a20 = v1->y - v2->y; - BaseType a21 = v2->x - v1->x; - BaseType a22 = v1->x*v2->y - v2->x*v1->y; - BaseType det = a02 + a12 + a22; - - if (std::abs(det) < BaseType(0.00001)) - { - for (int paramnum = 0; paramnum < ParamCount; paramnum++) - { - param_dpdx[paramnum] = BaseType(0.0); - param_dpdy[paramnum] = BaseType(0.0); - param_start[paramnum] = v1->p[paramnum]; - } - } - else - { - BaseType idet = BaseType(1.0) / det; - for (int paramnum = 0; paramnum < ParamCount; paramnum++) - { - param_dpdx[paramnum] = idet * (v1->p[paramnum]*a00 + v2->p[paramnum]*a10 + v3->p[paramnum]*a20); - param_dpdy[paramnum] = idet * (v1->p[paramnum]*a01 + v2->p[paramnum]*a11 + v3->p[paramnum]*a21); - param_start[paramnum] = idet * (v1->p[paramnum]*a02 + v2->p[paramnum]*a12 + v3->p[paramnum]*a22); - } - } - } - - // compute the X extents for each scanline - int32_t pixels = 0; - uint32_t startunit = m_unit.count(); - int32_t scaninc = 1; - for (int32_t curscan = v1yclip; curscan < v3yclip; curscan += scaninc) - { - uint32_t bucketnum = (uint32_t(curscan) / SCANLINES_PER_BUCKET) % TOTAL_BUCKETS; - uint32_t unit_index = m_unit.count(); - work_unit &unit = m_unit.next(); - - // determine how much to advance to hit the next bucket - scaninc = SCANLINES_PER_BUCKET - uint32_t(curscan) % SCANLINES_PER_BUCKET; - - // fill in the work unit basics - unit.primitive = &primitive; - unit.count_next = std::min(v3yclip - curscan, scaninc); - unit.scanline = curscan; - unit.previtem = m_unit_bucket[bucketnum]; - m_unit_bucket[bucketnum] = unit_index; - - // iterate over extents - for (int extnum = 0; extnum < unit.count_next; extnum++) - { - // compute the ending X based on which part of the triangle we're in - BaseType fully = BaseType(curscan + extnum) + BaseType(0.5); - BaseType startx = v1->x + (fully - v1->y) * dxdy_v1v3; - BaseType stopx; - if (fully < v2->y) - stopx = v1->x + (fully - v1->y) * dxdy_v1v2; - else - stopx = v2->x + (fully - v2->y) * dxdy_v2v3; - - // clamp to full pixels - int32_t istartx = round_coordinate(startx); - int32_t istopx = round_coordinate(stopx); - - // force start < stop - if (istartx > istopx) - std::swap(istartx, istopx); - - // apply left/right clipping - if (!(Flags & POLY_FLAG_NO_CLIPPING)) - { - istartx = std::max(istartx, cliprect.left()); - istopx = std::min(istopx, cliprect.right() + 1); - } - - // set the extent and update the total pixel count - if (istartx >= istopx) - istartx = istopx = 0; - extent_t &extent = unit.extent[extnum]; - extent.startx = istartx; - extent.stopx = istopx; - pixels += istopx - istartx; - - // fill in the parameters for the extent - BaseType fullstartx = BaseType(istartx) + BaseType(0.5); - for (int paramnum = 0; paramnum < ParamCount; paramnum++) - { - extent.param[paramnum].start = param_start[paramnum] + fullstartx * param_dpdx[paramnum] + fully * param_dpdy[paramnum]; - extent.param[paramnum].dpdx = param_dpdx[paramnum]; - } - } - } - - // enqueue the work items - queue_items(startunit); - - // return the total number of pixels in the triangle - m_triangles++; - m_pixels += pixels; - return pixels; -} - - -//------------------------------------------------- -// render_triangle_fan - render a set of -// triangles in a fan -//------------------------------------------------- - -template -template -uint32_t poly_manager::render_triangle_fan(rectangle const &cliprect, render_delegate callback, int numverts, vertex_t const *v) -{ - // iterate over vertices - uint32_t pixels = 0; - for (int vertnum = 2; vertnum < numverts; vertnum++) - pixels += render_triangle(cliprect, callback, v[0], v[vertnum - 1], v[vertnum]); - return pixels; -} - - -//------------------------------------------------- -// render_triangle_strip - render a set of -// triangles in a strip -//------------------------------------------------- - -template -template -uint32_t poly_manager::render_triangle_strip(rectangle const &cliprect, render_delegate callback, int numverts, vertex_t const *v) -{ - // iterate over vertices - uint32_t pixels = 0; - for (int vertnum = 2; vertnum < numverts; vertnum++) - pixels += render_triangle(cliprect, callback, v[vertnum - 2], v[vertnum - 1], v[vertnum]); - return pixels; -} - - -//------------------------------------------------- -// render_extents - perform a custom render of -// an object, given specific extents -//------------------------------------------------- - -template -template -uint32_t poly_manager::render_extents(rectangle const &cliprect, render_delegate callback, int startscanline, int numscanlines, extent_t const *extents) -{ - // clip coordinates - int32_t v1yclip = startscanline; - int32_t v3yclip = startscanline + numscanlines; - if (!(Flags & POLY_FLAG_NO_CLIPPING)) - { - v1yclip = std::max(v1yclip, cliprect.top()); - v3yclip = std::min(v3yclip, cliprect.bottom() + 1); - if (v3yclip - v1yclip <= 0) - return 0; - } - - // allocate and populate a new primitive - primitive_info &primitive = primitive_alloc(0, 0, v1yclip, v3yclip, callback); - - // compute the X extents for each scanline - int32_t pixels = 0; - uint32_t startunit = m_unit.count(); - int32_t scaninc = 1; - for (int32_t curscan = v1yclip; curscan < v3yclip; curscan += scaninc) - { - uint32_t bucketnum = (uint32_t(curscan) / SCANLINES_PER_BUCKET) % TOTAL_BUCKETS; - uint32_t unit_index = m_unit.count(); - work_unit &unit = m_unit.next(); - - // determine how much to advance to hit the next bucket - scaninc = SCANLINES_PER_BUCKET - uint32_t(curscan) % SCANLINES_PER_BUCKET; - - // fill in the work unit basics - unit.primitive = &primitive; - unit.count_next = std::min(v3yclip - curscan, scaninc); - unit.scanline = curscan; - unit.previtem = m_unit_bucket[bucketnum]; - m_unit_bucket[bucketnum] = unit_index; - - // iterate over extents - for (int extnum = 0; extnum < unit.count_next; extnum++) - { - extent_t const &srcextent = extents[(curscan + extnum) - startscanline]; - int32_t istartx = srcextent.startx, istopx = srcextent.stopx; - - // apply left/right clipping - if (!(Flags & POLY_FLAG_NO_CLIPPING)) - { - istartx = std::max(istartx, cliprect.left()); - istartx = std::min(istartx, cliprect.right() + 1); - istopx = std::max(istopx, cliprect.left()); - istopx = std::min(istopx, cliprect.right() + 1); - } - - // set the extent and update the total pixel count - extent_t &extent = unit.extent[extnum]; - extent.startx = istartx; - extent.stopx = istopx; - - // fill in the parameters for the extent - for (int paramnum = 0; paramnum < ParamCount; paramnum++) - { - extent.param[paramnum].start = srcextent.param[paramnum].start; - extent.param[paramnum].dpdx = srcextent.param[paramnum].dpdx; - } - extent.userdata = srcextent.userdata; - - if (istartx < istopx) - pixels += istopx - istartx; - else if (istopx < istartx) - pixels += istartx - istopx; - } - } - - // enqueue the work items - queue_items(startunit); - - // return the total number of pixels in the object - m_triangles++; - m_pixels += pixels; - return pixels; -} - - -//------------------------------------------------- -// render_polygon - render a single polygon up -// to 32 vertices -//------------------------------------------------- - -template -template -uint32_t poly_manager::render_polygon(rectangle const &cliprect, render_delegate callback, vertex_t const *v) -{ - // determine min/max Y vertices - BaseType minx = v[0].x; - BaseType maxx = v[0].x; - int minv = 0; - int maxv = 0; - for (int vertnum = 1; vertnum < NumVerts; vertnum++) - { - if (v[vertnum].y < v[minv].y) - minv = vertnum; - else if (v[vertnum].y > v[maxv].y) - maxv = vertnum; - minx = std::min(minx, v[vertnum].x); - maxx = std::max(maxx, v[vertnum].x); - } - - // determine start/end scanlines - int32_t miny = round_coordinate(v[minv].y); - int32_t maxy = round_coordinate(v[maxv].y); - - // clip coordinates - int32_t minyclip = miny; - int32_t maxyclip = maxy; - if (!(Flags & POLY_FLAG_NO_CLIPPING)) - { - minyclip = std::max(minyclip, cliprect.top()); - maxyclip = std::min(maxyclip, cliprect.bottom() + 1); - if (maxyclip - minyclip <= 0) - return 0; - } - - // allocate a new primitive - primitive_info &primitive = primitive_alloc(round_coordinate(minx), round_coordinate(maxx), minyclip, maxyclip, callback); - - // walk forward to build up the forward edge list - struct poly_edge - { - poly_edge *next; // next edge in sequence - int index; // index of this edge - vertex_t const *v1; // pointer to first vertex - vertex_t const *v2; // pointer to second vertex - BaseType dxdy; // dx/dy along the edge - std::array dpdy; // per-parameter dp/dy values - }; - poly_edge fedgelist[NumVerts - 1]; - poly_edge *edgeptr = &fedgelist[0]; - for (int curv = minv; curv != maxv; curv = (curv == NumVerts - 1) ? 0 : (curv + 1)) - { - // set the two vertices - edgeptr->v1 = &v[curv]; - edgeptr->v2 = &v[(curv == NumVerts - 1) ? 0 : (curv + 1)]; - - // if horizontal, skip altogether - if (edgeptr->v1->y == edgeptr->v2->y) - continue; - - // need dx/dy always, and parameter deltas as necessary - BaseType ooy = BaseType(1.0) / (edgeptr->v2->y - edgeptr->v1->y); - edgeptr->dxdy = (edgeptr->v2->x - edgeptr->v1->x) * ooy; - for (int paramnum = 0; paramnum < ParamCount; paramnum++) - edgeptr->dpdy[paramnum] = (edgeptr->v2->p[paramnum] - edgeptr->v1->p[paramnum]) * ooy; - ++edgeptr; - } - - // walk backward to build up the backward edge list - poly_edge bedgelist[NumVerts - 1]; - edgeptr = &bedgelist[0]; - for (int curv = minv; curv != maxv; curv = (curv == 0) ? (NumVerts - 1) : (curv - 1)) - { - // set the two vertices - edgeptr->v1 = &v[curv]; - edgeptr->v2 = &v[(curv == 0) ? (NumVerts - 1) : (curv - 1)]; - - // if horizontal, skip altogether - if (edgeptr->v1->y == edgeptr->v2->y) - continue; - - // need dx/dy always, and parameter deltas as necessary - BaseType ooy = BaseType(1.0) / (edgeptr->v2->y - edgeptr->v1->y); - edgeptr->dxdy = (edgeptr->v2->x - edgeptr->v1->x) * ooy; - for (int paramnum = 0; paramnum < ParamCount; paramnum++) - edgeptr->dpdy[paramnum] = (edgeptr->v2->p[paramnum] - edgeptr->v1->p[paramnum]) * ooy; - ++edgeptr; - } - - // determine which list is left/right: - // if the first vertex is shared, compare the slopes - // if the first vertex is not shared, compare the X coordinates - poly_edge const *ledge, *redge; - if ((fedgelist[0].v1 == bedgelist[0].v1 && fedgelist[0].dxdy < bedgelist[0].dxdy) || - (fedgelist[0].v1 != bedgelist[0].v1 && fedgelist[0].v1->x < bedgelist[0].v1->x)) - { - ledge = fedgelist; - redge = bedgelist; - } - else - { - ledge = bedgelist; - redge = fedgelist; - } - - // compute the X extents for each scanline - int32_t pixels = 0; - uint32_t startunit = m_unit.count(); - int32_t scaninc = 1; - for (int32_t curscan = minyclip; curscan < maxyclip; curscan += scaninc) - { - uint32_t bucketnum = (uint32_t(curscan) / SCANLINES_PER_BUCKET) % TOTAL_BUCKETS; - uint32_t unit_index = m_unit.count(); - work_unit &unit = m_unit.next(); - - // determine how much to advance to hit the next bucket - scaninc = SCANLINES_PER_BUCKET - uint32_t(curscan) % SCANLINES_PER_BUCKET; - - // fill in the work unit basics - unit.primitive = &primitive; - unit.count_next = std::min(maxyclip - curscan, scaninc); - unit.scanline = curscan; - unit.previtem = m_unit_bucket[bucketnum]; - m_unit_bucket[bucketnum] = unit_index; - - // iterate over extents - for (int extnum = 0; extnum < unit.count_next; extnum++) - { - // compute the ending X based on which part of the triangle we're in - BaseType fully = BaseType(curscan + extnum) + BaseType(0.5); - while (fully > ledge->v2->y && fully < v[maxv].y) - ++ledge; - while (fully > redge->v2->y && fully < v[maxv].y) - ++redge; - BaseType startx = ledge->v1->x + (fully - ledge->v1->y) * ledge->dxdy; - BaseType stopx = redge->v1->x + (fully - redge->v1->y) * redge->dxdy; - - // clamp to full pixels - int32_t istartx = round_coordinate(startx); - int32_t istopx = round_coordinate(stopx); - - // compute parameter starting points and deltas - extent_t &extent = unit.extent[extnum]; - if (ParamCount > 0) - { - BaseType ldy = fully - ledge->v1->y; - BaseType rdy = fully - redge->v1->y; - BaseType oox = BaseType(1.0) / (stopx - startx); - - // iterate over parameters - for (int paramnum = 0; paramnum < ParamCount; paramnum++) - { - BaseType lparam = ledge->v1->p[paramnum] + ldy * ledge->dpdy[paramnum]; - BaseType rparam = redge->v1->p[paramnum] + rdy * redge->dpdy[paramnum]; - BaseType dpdx = (rparam - lparam) * oox; - - extent.param[paramnum].start = lparam;// - (BaseType(istartx) + 0.5f) * dpdx; - extent.param[paramnum].dpdx = dpdx; - } - } - - // apply left/right clipping - if (!(Flags & POLY_FLAG_NO_CLIPPING)) - { - if (istartx < cliprect.left()) - { - for (int paramnum = 0; paramnum < ParamCount; paramnum++) - extent.param[paramnum].start += (cliprect.left() - istartx) * extent.param[paramnum].dpdx; - istartx = cliprect.left(); - } - if (istopx > cliprect.right()) - istopx = cliprect.right() + 1; - } - - // set the extent and update the total pixel count - if (istartx >= istopx) - istartx = istopx = 0; - extent.startx = istartx; - extent.stopx = istopx; - pixels += istopx - istartx; - } - } - - // enqueue the work items - queue_items(startunit); - - // return the total number of pixels in the polygon - m_polygons++; - m_pixels += pixels; - return pixels; -} - - -//------------------------------------------------- -// zclip_if_less - clip a polygon using p[0] as -// a z coordinate -//------------------------------------------------- - -template -template -int poly_manager::zclip_if_less(int numverts, vertex_t const *v, vertex_t *outv, BaseType clipval) -{ - bool prevclipped = (v[numverts - 1].p[0] < clipval); - vertex_t *nextout = outv; - - // iterate over vertices - for (int vertnum = 0; vertnum < numverts; vertnum++) - { - bool thisclipped = (v[vertnum].p[0] < clipval); - - // if we switched from clipped to non-clipped, interpolate a vertex - if (thisclipped != prevclipped) - { - vertex_t const &v1 = v[(vertnum == 0) ? (numverts - 1) : (vertnum - 1)]; - vertex_t const &v2 = v[vertnum]; - BaseType frac = (clipval - v1.p[0]) / (v2.p[0] - v1.p[0]); - nextout->x = v1.x + frac * (v2.x - v1.x); - nextout->y = v1.y + frac * (v2.y - v1.y); - for (int paramnum = 0; paramnum < ParamCount; paramnum++) - nextout->p[paramnum] = v1.p[paramnum] + frac * (v2.p[paramnum] - v1.p[paramnum]); - ++nextout; - } - - // if this vertex is not clipped, copy it in - if (!thisclipped) - *nextout++ = v[vertnum]; - - // remember the last state - prevclipped = thisclipped; - } - return nextout - outv; -} - - -template -struct frustum_clip_vertex -{ - BaseType x, y, z, w; // A 3d coordinate already transformed by a projection matrix - std::array p; // Additional parameters to clip -}; - - -template -int frustum_clip_w(frustum_clip_vertex const *v, int num_vertices, frustum_clip_vertex *out) -{ - if (num_vertices <= 0) - return 0; - - const BaseType W_PLANE = 0.000001f; - - frustum_clip_vertex clipv[10]; - int clip_verts = 0; - - int previ = num_vertices - 1; - - for (int i=0; i < num_vertices; i++) - { - int v1_side = (v[i].w < W_PLANE) ? -1 : 1; - int v2_side = (v[previ].w < W_PLANE) ? -1 : 1; - - if ((v1_side * v2_side) < 0) // edge goes through W plane - { - // insert vertex at intersection point - BaseType wdiv = v[previ].w - v[i].w; - if (wdiv == 0.0f) // 0 edge means degenerate polygon - return 0; - - BaseType t = fabs((W_PLANE - v[previ].w) / wdiv); - - clipv[clip_verts].x = v[previ].x + ((v[i].x - v[previ].x) * t); - clipv[clip_verts].y = v[previ].y + ((v[i].y - v[previ].y) * t); - clipv[clip_verts].z = v[previ].z + ((v[i].z - v[previ].z) * t); - clipv[clip_verts].w = v[previ].w + ((v[i].w - v[previ].w) * t); - - // Interpolate the rest of the parameters - for (int pi = 0; pi < MaxParams; pi++) - clipv[clip_verts].p[pi] = v[previ].p[pi] + ((v[i].p[pi] - v[previ].p[pi]) * t); - - ++clip_verts; - } - if (v1_side > 0) // current point is inside - { - clipv[clip_verts] = v[i]; - ++clip_verts; - } - - previ = i; - } - - memcpy(&out[0], &clipv[0], sizeof(out[0]) * clip_verts); - return clip_verts; -} - - -template -int frustum_clip(frustum_clip_vertex const *v, int num_vertices, frustum_clip_vertex *out, int axis, int sign) -{ - if (num_vertices <= 0) - return 0; - - frustum_clip_vertex clipv[10]; - int clip_verts = 0; - - int previ = num_vertices - 1; - - for (int i=0; i < num_vertices; i++) - { - int v1_side, v2_side; - BaseType* v1a = (BaseType*)&v[i]; - BaseType* v2a = (BaseType*)&v[previ]; - - BaseType v1_axis, v2_axis; - - if (sign) // +axis - { - v1_axis = v1a[axis]; - v2_axis = v2a[axis]; - } - else // -axis - { - v1_axis = -v1a[axis]; - v2_axis = -v2a[axis]; - } - - v1_side = (v1_axis <= v[i].w) ? 1 : -1; - v2_side = (v2_axis <= v[previ].w) ? 1 : -1; - - if ((v1_side * v2_side) < 0) // edge goes through W plane - { - // insert vertex at intersection point - BaseType wdiv = ((v[previ].w - v2_axis) - (v[i].w - v1_axis)); - - if (wdiv == 0.0f) // 0 edge means degenerate polygon - return 0; - - BaseType t = fabs((v[previ].w - v2_axis) / wdiv); - - clipv[clip_verts].x = v[previ].x + ((v[i].x - v[previ].x) * t); - clipv[clip_verts].y = v[previ].y + ((v[i].y - v[previ].y) * t); - clipv[clip_verts].z = v[previ].z + ((v[i].z - v[previ].z) * t); - clipv[clip_verts].w = v[previ].w + ((v[i].w - v[previ].w) * t); - - // Interpolate the rest of the parameters - for (int pi = 0; pi < MaxParams; pi++) - clipv[clip_verts].p[pi] = v[previ].p[pi] + ((v[i].p[pi] - v[previ].p[pi]) * t); - - ++clip_verts; - } - if (v1_side > 0) // current point is inside - { - clipv[clip_verts] = v[i]; - ++clip_verts; - } - - previ = i; - } - - memcpy(&out[0], &clipv[0], sizeof(out[0]) * clip_verts); - return clip_verts; -} - - -template -int frustum_clip_all(frustum_clip_vertex *clip_vert, int num_vertices, frustum_clip_vertex *out) -{ - num_vertices = frustum_clip_w(clip_vert, num_vertices, clip_vert); - num_vertices = frustum_clip(clip_vert, num_vertices, clip_vert, 0, 0); // W <= -X - num_vertices = frustum_clip(clip_vert, num_vertices, clip_vert, 0, 1); // W <= +X - num_vertices = frustum_clip(clip_vert, num_vertices, clip_vert, 1, 0); // W <= -Y - num_vertices = frustum_clip(clip_vert, num_vertices, clip_vert, 1, 1); // W <= +X - num_vertices = frustum_clip(clip_vert, num_vertices, clip_vert, 2, 0); // W <= -Z - num_vertices = frustum_clip(clip_vert, num_vertices, clip_vert, 2, 1); // W <= +Z - out = clip_vert; - return num_vertices; -} - - -#endif // MAME_DEVICES_VIDEO_POLY_H diff --git a/waterbox/ares64/ares/thirdparty/mame/emu/emu.h b/waterbox/ares64/ares/thirdparty/mame/emu/emu.h deleted file mode 100644 index b68cf64681..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/emu/emu.h +++ /dev/null @@ -1,115 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/*************************************************************************** - - emu.h - - Core header file to be included by most files. - - NOTE: The contents of this file are designed to meet the needs of - drivers and devices. In addition to this file, you will also need - to include the headers of any CPUs or other devices that are required. - - If you find yourself needing something outside of this file in a - driver or device, think carefully about what you are doing. - -***************************************************************************/ - -#ifndef __EMU_H__ -#define __EMU_H__ - -#include -#include -#include -#include -#include -#include -#include - -// core emulator headers -- must be first (profiler needs attotime, attotime needs xtal) -#include "emucore.h" -#include "osdcore.h" -#include "eminline.h" -#if !defined(MAME_RDP) -#include "xtal.h" -#include "attotime.h" -#include "profiler.h" - -// http interface helpers -#include "http.h" -#endif - -// commonly-referenced utilities imported from lib/util -#include "corealloc.h" -#if !defined(MAME_RDP) -#include "palette.h" -#endif - -// emulator-specific utilities -#include "hash.h" -#if !defined(MAME_RDP) -#include "fileio.h" -#endif -#include "delegate.h" -#if !defined(MAME_RDP) -#include "devdelegate.h" - -// memory and address spaces -#include "emumem.h" - -// machine-wide utilities -#include "romentry.h" -#include "save.h" - -// I/O -#include "input.h" -#include "ioport.h" -#include "output.h" - -// devices and callbacks -#include "device.h" -#include "devfind.h" -#include "addrmap.h" // Needs optional_device<> and required_device<> -#include "distate.h" -#include "dimemory.h" -#include "dipalette.h" -#include "digfx.h" -#include "diimage.h" -#include "dislot.h" -#include "disound.h" -#include "divideo.h" -#include "dinvram.h" -#include "schedule.h" -#include "dinetwork.h" - -// machine and driver configuration -#include "mconfig.h" -#include "gamedrv.h" -#include "parameters.h" - -// the running machine -#include "main.h" -#include "machine.h" -#include "driver.h" - -// common device interfaces -#include "diexec.h" -#include "devcpu.h" - -// video-related -#include "drawgfx.h" -#include "video.h" - -// sound-related -#include "sound.h" - -// generic helpers -#include "devcb.h" -#include "bookkeeping.h" -#include "video/generic.h" - -// member templates that don't like incomplete types -#include "device.ipp" -#endif - -#endif // __EMU_H__ diff --git a/waterbox/ares64/ares/thirdparty/mame/emu/emucore.cpp b/waterbox/ares64/ares/thirdparty/mame/emu/emucore.cpp deleted file mode 100644 index 3228709db9..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/emu/emucore.cpp +++ /dev/null @@ -1,43 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Nicola Salmoria, Aaron Giles -/*************************************************************************** - - emucore.cpp - - Simple core functions that are defined in emucore.h and which may - need to be accessed by other MAME-related tools. - -****************************************************************************/ - -#include "emu.h" -#include "emucore.h" -#include "osdcore.h" - -emu_fatalerror::emu_fatalerror(util::format_argument_pack const &args) - : emu_fatalerror(0, args) -{ -#if !defined(MAME_RDP) - osd_break_into_debugger(m_text.c_str()); -#endif -} - -emu_fatalerror::emu_fatalerror(int _exitcode, util::format_argument_pack const &args) - : m_text(util::string_format(args)) - , m_code(_exitcode) -{ -} - - -#if !defined(MAME_RDP) -void report_bad_cast(const std::type_info &src_type, const std::type_info &dst_type) -{ - throw emu_fatalerror("Error: bad downcast<> or device<>. Tried to convert a %s to a %s, which are incompatible.\n", - src_type.name(), dst_type.name()); -} - -void report_bad_device_cast(const device_t *dev, const std::type_info &src_type, const std::type_info &dst_type) -{ - throw emu_fatalerror("Error: bad downcast<> or device<>. Tried to convert the device %s (%s) of type %s to a %s, which are incompatible.\n", - dev->tag(), dev->name(), src_type.name(), dst_type.name()); -} -#endif diff --git a/waterbox/ares64/ares/thirdparty/mame/emu/emucore.h b/waterbox/ares64/ares/thirdparty/mame/emu/emucore.h deleted file mode 100644 index 768fa8c728..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/emu/emucore.h +++ /dev/null @@ -1,424 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Nicola Salmoria, Aaron Giles -/*************************************************************************** - - emucore.h - - General core utilities and macros used throughout the emulator. - -***************************************************************************/ - -#ifndef MAME_EMU_EMUCORE_H -#define MAME_EMU_EMUCORE_H - -#pragma once - -// standard C includes -#include -#include -#include -#include -#include -#include - -// some cleanups for Solaris for things defined in stdlib.h -#if defined(__sun__) && defined(__svr4__) -#undef si_status -#undef WWORD -#endif - -// standard C++ includes -#include -#include -#include -#include - -// core system includes -#include "osdcomm.h" -#include "coretmpl.h" -#include "bitmap.h" -#include "endianness.h" -#include "strformat.h" -#include "vecstream.h" - -#include "emufwd.h" - - -//************************************************************************** -// COMPILER-SPECIFIC NASTINESS -//************************************************************************** - -// Suppress warnings about redefining the macro 'PPC' on LinuxPPC. -#undef PPC - -// Suppress warnings about redefining the macro 'ARM' on ARM. -#undef ARM - - - -//************************************************************************** -// FUNDAMENTAL TYPES -//************************************************************************** - -// explicitly sized integers -using osd::u8; -using osd::u16; -using osd::u32; -using osd::u64; -using osd::s8; -using osd::s16; -using osd::s32; -using osd::s64; - -// useful utility functions -using util::underlying_value; -using util::enum_value; -using util::make_bitmask; -using util::BIT; -using util::bitswap; -using util::iabs; -using util::string_format; - -using endianness_t = util::endianness; - -using util::BYTE_XOR_BE; -using util::BYTE_XOR_LE; -using util::BYTE4_XOR_BE; -using util::BYTE4_XOR_LE; -using util::WORD_XOR_BE; -using util::WORD_XOR_LE; -using util::BYTE8_XOR_BE; -using util::BYTE8_XOR_LE; -using util::WORD2_XOR_BE; -using util::WORD2_XOR_LE; -using util::DWORD_XOR_BE; -using util::DWORD_XOR_LE; - - -// pen_t is used to represent pixel values in bitmaps -typedef u32 pen_t; - - - -//************************************************************************** -// USEFUL COMPOSITE TYPES -//************************************************************************** - -// PAIR is an endian-safe union useful for representing 32-bit CPU registers -union PAIR -{ -#ifdef LSB_FIRST - struct { u8 l,h,h2,h3; } b; - struct { u16 l,h; } w; - struct { s8 l,h,h2,h3; } sb; - struct { s16 l,h; } sw; -#else - struct { u8 h3,h2,h,l; } b; - struct { s8 h3,h2,h,l; } sb; - struct { u16 h,l; } w; - struct { s16 h,l; } sw; -#endif - u32 d; - s32 sd; -}; - - -// PAIR16 is a 16-bit extension of a PAIR -union PAIR16 -{ -#ifdef LSB_FIRST - struct { u8 l,h; } b; - struct { s8 l,h; } sb; -#else - struct { u8 h,l; } b; - struct { s8 h,l; } sb; -#endif - u16 w; - s16 sw; -}; - - -// PAIR64 is a 64-bit extension of a PAIR -union PAIR64 -{ -#ifdef LSB_FIRST - struct { u8 l,h,h2,h3,h4,h5,h6,h7; } b; - struct { u16 l,h,h2,h3; } w; - struct { u32 l,h; } d; - struct { s8 l,h,h2,h3,h4,h5,h6,h7; } sb; - struct { s16 l,h,h2,h3; } sw; - struct { s32 l,h; } sd; -#else - struct { u8 h7,h6,h5,h4,h3,h2,h,l; } b; - struct { u16 h3,h2,h,l; } w; - struct { u32 h,l; } d; - struct { s8 h7,h6,h5,h4,h3,h2,h,l; } sb; - struct { s16 h3,h2,h,l; } sw; - struct { s32 h,l; } sd; -#endif - u64 q; - s64 sq; -}; - - - -//************************************************************************** -// COMMON CONSTANTS -//************************************************************************** - -constexpr endianness_t ENDIANNESS_LITTLE = util::endianness::little; -constexpr endianness_t ENDIANNESS_BIG = util::endianness::big; -constexpr endianness_t ENDIANNESS_NATIVE = util::endianness::native; - - -// M_PI is not part of the C/C++ standards and is not present on -// strict ANSI compilers or when compiling under GCC with -ansi -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - - -/// \name Image orientation flags -/// \{ - -constexpr int ORIENTATION_FLIP_X = 0x0001; ///< Mirror horizontally (in the X direction) -constexpr int ORIENTATION_FLIP_Y = 0x0002; ///< Mirror vertically (in the Y direction) -constexpr int ORIENTATION_SWAP_XY = 0x0004; ///< Mirror along the top-left/bottom-right diagonal - -constexpr int ROT0 = 0; -constexpr int ROT90 = ORIENTATION_SWAP_XY | ORIENTATION_FLIP_X; ///< Rotate 90 degrees clockwise -constexpr int ROT180 = ORIENTATION_FLIP_X | ORIENTATION_FLIP_Y; ///< Rotate 180 degrees -constexpr int ROT270 = ORIENTATION_SWAP_XY | ORIENTATION_FLIP_Y; ///< Rotate 90 degrees anti-clockwise (270 degrees clockwise) - -/// \} - - -// these are UTF-8 encoded strings for common characters -#define UTF8_NBSP "\xc2\xa0" /* non-breaking space */ - -#define UTF8_MULTIPLY "\xc3\x97" /* multiplication sign */ -#define UTF8_DIVIDE "\xc3\xb7" /* division sign */ -#define UTF8_SQUAREROOT "\xe2\x88\x9a" /* square root symbol */ -#define UTF8_PLUSMINUS "\xc2\xb1" /* plusminus symbol */ - -#define UTF8_POW_2 "\xc2\xb2" /* superscript 2 */ -#define UTF8_POW_X "\xcb\xa3" /* superscript x */ -#define UTF8_POW_Y "\xca\xb8" /* superscript y */ -#define UTF8_PRIME "\xca\xb9" /* prime symbol */ -#define UTF8_DEGREES "\xc2\xb0" /* degrees symbol */ - -#define UTF8_SMALL_PI "\xcf\x80" /* Greek small letter pi */ -#define UTF8_CAPITAL_SIGMA "\xce\xa3" /* Greek capital letter sigma */ -#define UTF8_CAPITAL_DELTA "\xce\x94" /* Greek capital letter delta */ - -#define UTF8_MACRON "\xc2\xaf" /* macron symbol */ -#define UTF8_NONSPACE_MACRON "\xcc\x84" /* nonspace macron, use after another char */ - -#define a_RING "\xc3\xa5" /* small a with a ring */ -#define a_UMLAUT "\xc3\xa4" /* small a with an umlaut */ -#define o_UMLAUT "\xc3\xb6" /* small o with an umlaut */ -#define u_UMLAUT "\xc3\xbc" /* small u with an umlaut */ -#define e_ACUTE "\xc3\xa9" /* small e with an acute */ -#define n_TILDE "\xc3\xb1" /* small n with a tilde */ - -#define A_RING "\xc3\x85" /* capital A with a ring */ -#define A_UMLAUT "\xc3\x84" /* capital A with an umlaut */ -#define O_UMLAUT "\xc3\x96" /* capital O with an umlaut */ -#define U_UMLAUT "\xc3\x9c" /* capital U with an umlaut */ -#define E_ACUTE "\xc3\x89" /* capital E with an acute */ -#define N_TILDE "\xc3\x91" /* capital N with a tilde */ - -#define UTF8_LEFT "\xe2\x86\x90" /* cursor left */ -#define UTF8_RIGHT "\xe2\x86\x92" /* cursor right */ -#define UTF8_UP "\xe2\x86\x91" /* cursor up */ -#define UTF8_DOWN "\xe2\x86\x93" /* cursor down */ - - - -//************************************************************************** -// COMMON MACROS -//************************************************************************** - -// macro for defining a copy constructor and assignment operator to prevent copying -#define DISABLE_COPYING(TYPE) \ - TYPE(const TYPE &) = delete; \ - TYPE &operator=(const TYPE &) = delete - -// macro for declaring enumeration operators that increment/decrement like plain old C -#define DECLARE_ENUM_INCDEC_OPERATORS(TYPE) \ -inline TYPE &operator++(TYPE &value) { return value = TYPE(std::underlying_type_t(value) + 1); } \ -inline TYPE &operator--(TYPE &value) { return value = TYPE(std::underlying_type_t(value) - 1); } \ -inline TYPE operator++(TYPE &value, int) { TYPE const old(value); ++value; return old; } \ -inline TYPE operator--(TYPE &value, int) { TYPE const old(value); --value; return old; } - -// macro for declaring bitwise operators for an enumerated type -#define DECLARE_ENUM_BITWISE_OPERATORS(TYPE) \ -constexpr TYPE operator~(TYPE value) { return TYPE(~std::underlying_type_t(value)); } \ -constexpr TYPE operator&(TYPE a, TYPE b) { return TYPE(std::underlying_type_t(a) & std::underlying_type_t(b)); } \ -constexpr TYPE operator|(TYPE a, TYPE b) { return TYPE(std::underlying_type_t(a) | std::underlying_type_t(b)); } \ -inline TYPE &operator&=(TYPE &a, TYPE b) { return a = a & b; } \ -inline TYPE &operator|=(TYPE &a, TYPE b) { return a = a | b; } - - -// this macro passes an item followed by a string version of itself as two consecutive parameters -#define NAME(x) x, #x - -// this macro wraps a function 'x' and can be used to pass a function followed by its name -#define FUNC(x) &x, #x - - -// macros to convert radians to degrees and degrees to radians -template constexpr auto RADIAN_TO_DEGREE(T const &x) { return (180.0 / M_PI) * x; } -template constexpr auto DEGREE_TO_RADIAN(T const &x) { return (M_PI / 180.0) * x; } - - -//************************************************************************** -// EXCEPTION CLASSES -//************************************************************************** - -// emu_exception is the base class for all emu-related exceptions -class emu_exception : public std::exception { }; - - -// emu_fatalerror is a generic fatal exception that provides an error string -class emu_fatalerror : public emu_exception -{ -public: - emu_fatalerror(util::format_argument_pack const &args); - emu_fatalerror(int _exitcode, util::format_argument_pack const &args); - - template - emu_fatalerror(Format const &fmt, Params &&... args) - : emu_fatalerror(static_cast const &>(util::make_format_argument_pack(fmt, std::forward(args)...))) - { - } - template - emu_fatalerror(int _exitcode, Format const &fmt, Params &&... args) - : emu_fatalerror(_exitcode, static_cast const &>(util::make_format_argument_pack(fmt, std::forward(args)...))) - { - } - - virtual char const *what() const noexcept override { return m_text.c_str(); } - int exitcode() const noexcept { return m_code; } - -private: - std::string m_text; - int m_code; -}; - -class tag_add_exception -{ -public: - tag_add_exception(const char *tag) : m_tag(tag) { } - const char *tag() const { return m_tag.c_str(); } -private: - std::string m_tag; -}; - - -//************************************************************************** -// CASTING TEMPLATES -//************************************************************************** - -[[noreturn]] void report_bad_cast(const std::type_info &src_type, const std::type_info &dst_type); -[[noreturn]] void report_bad_device_cast(const device_t *dev, const std::type_info &src_type, const std::type_info &dst_type); - -template -inline void report_bad_cast(Source *src) -{ - if constexpr (std::is_base_of_v) - { - if (src) report_bad_device_cast(src, typeid(Source), typeid(Dest)); - else report_bad_cast(typeid(Source), typeid(Dest)); - } - else - { - device_t const *dev(dynamic_cast(src)); - if (dev) report_bad_device_cast(dev, typeid(Source), typeid(Dest)); - else report_bad_cast(typeid(Source), typeid(Dest)); - } -} - -// template function for casting from a base class to a derived class that is checked -// in debug builds and fast in release builds -template -inline Dest downcast(Source *src) -{ -#if defined(MAME_DEBUG) - Dest const chk(dynamic_cast(src)); - if (chk != src) report_bad_cast, Source>(src); -#endif - return static_cast(src); -} - -template -inline Dest downcast(Source &src) -{ -#if defined(MAME_DEBUG) - std::remove_reference_t *const chk(dynamic_cast *>(&src)); - if (chk != &src) report_bad_cast, Source>(&src); -#endif - return static_cast(src); -} - - - -//************************************************************************** -// INLINE FUNCTIONS -//************************************************************************** - -template -[[noreturn]] inline void fatalerror(T &&... args) -{ - throw emu_fatalerror(std::forward(args)...); -} - - -// convert a series of 32 bits into a float -inline float u2f(u32 v) -{ - union { - float ff; - u32 vv; - } u; - u.vv = v; - return u.ff; -} - - -// convert a float into a series of 32 bits -inline u32 f2u(float f) -{ - union { - float ff; - u32 vv; - } u; - u.ff = f; - return u.vv; -} - - -// convert a series of 64 bits into a double -inline double u2d(u64 v) -{ - union { - double dd; - u64 vv; - } u; - u.vv = v; - return u.dd; -} - - -// convert a double into a series of 64 bits -inline u64 d2u(double d) -{ - union { - double dd; - u64 vv; - } u; - u.dd = d; - return u.vv; -} - -#endif // MAME_EMU_EMUCORE_H diff --git a/waterbox/ares64/ares/thirdparty/mame/emu/emufwd.h b/waterbox/ares64/ares/thirdparty/mame/emu/emufwd.h deleted file mode 100644 index 8b8e59b925..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/emu/emufwd.h +++ /dev/null @@ -1,255 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Vas Crabb -/********************************************************************** - * emufwd.h - * - * Forward declarations for MAME famework. - * - * Please place forward declarations here rather than littering them - * throughout headers in src/emu. It makes it much easier to update - * them and remove obsolete ones. - **********************************************************************/ -#ifndef MAME_EMU_EMUFWD_H -#define MAME_EMU_EMUFWD_H - -#pragma once - -#include - - -//---------------------------------- -// 3rdparty -//---------------------------------- - -// declared in expat.h -struct XML_ParserStruct; - - - -//---------------------------------- -// osd -//---------------------------------- - -// declared in modules/output/output_module.h -class output_module; - -// declared in osdepend.h -class osd_font; -class osd_interface; - - - -//---------------------------------- -// lib/util -//---------------------------------- - -// declared in aviio.h -class avi_file; - -// declared in chd.h -class chd_file; - -// declared in unzip.h -namespace util { class archive_file; } - -// declared in xmlfile.h -namespace util::xml { class data_node; class file; } - - - -//---------------------------------- -// emu -//---------------------------------- - -// declared in addrmap.h -class address_map; -class address_map_entry; - -// declared in bookkeeping.h -class bookkeeping_manager; - -// declared in config.h -enum class config_type : int; -enum class config_level : int; -class configuration_manager; - -// declared in crsshair.h -class crosshair_manager; - -// declared in debug/debugcmd.h -class debugger_commands; - -// declared in debug/debugcon.h -class debugger_console; - -// declared in debug/debugcpu.h -class debugger_cpu; -class device_debug; - -// declared in debug/debugvw.h -class debug_view; -class debug_view_manager; - -// declared in debug/express.h -class parsed_expression; -class symbol_table; - -// declared in debug/points.h -class debug_breakpoint; -class debug_watchpoint; -class debug_registerpoint; - -// declared in debugger.h -class debugger_manager; - -// declared in devcb.h -class devcb_base; -template DefaultMask> class devcb_write; - -// declared in devfind.h -class finder_base; -template class device_finder; - -// declared in device.h -class device_interface; -class device_t; - -// declared in didisasm.h -class device_disasm_interface; - -// declared in diexec.h -class device_execute_interface; - -// declared in digfx.h -struct gfx_decode_entry; - -// declared in diimage.h -class device_image_interface; - -// declared in dimemory.h -class device_memory_interface; - -// declared in dipalette.h -class device_palette_interface; - -// declared in distate.h -class device_state_interface; - -// declared in drawgfx.h -class gfx_element; - -// declared in driver.h -class driver_device; - -// declared in emumem.h -class address_space; -class memory_bank; -class memory_manager; -class memory_region; -class memory_share; -class memory_view; - -// declared in emuopts.h -class emu_options; - -// declared in gamedrv.h -class game_driver; - -// declared in input.h -class input_manager; - -// declared in inputdev.h -class input_class; -class input_device; -class input_device_item; - -// declared in image.h -class image_manager; - -// declared in ioport.h -class analog_field; -struct input_device_default; -class ioport_field; -struct ioport_field_live; -class ioport_list; -class ioport_manager; -class ioport_port; -struct ioport_port_live; - -// declared in machine.h -class running_machine; - -// declared in mconfig.h -namespace emu::detail { class machine_config_replace; } -class machine_config; - -// declared in natkeyboard.h -class natural_keyboard; - -// declared in network.h -class network_manager; - -// declared in output.h -class output_manager; - -// declared in render.h -class render_container; -class render_manager; -class render_target; -class render_texture; - -// declared in rendfont.h -class render_font; - -// declared in rendlay.h -class layout_element; -class layout_view_item; -class layout_view; -class layout_file; - -// declared in romentry.h -class rom_entry; - -// declared in romload.h -class rom_load_manager; - -// declared in schedule.h -class device_scheduler; -class emu_timer; - -// declared in screen.h -class screen_device; - -// declared in softlist.h -class software_info; -class software_part; - -// declared in softlist_dev.h -class software_list_device; -class software_list_loader; - -// declared in sound.h -class sound_manager; -class sound_stream; - -// declared in speaker.h -class speaker_device; - -// declared in tilemap.h -class tilemap_device; -class tilemap_manager; -class tilemap_t; - -// declared in ui/uimain.h -class ui_manager; - -// declared in uiinput.h -class ui_input_manager; - -// declared in validity.h -class validity_checker; - -// declared in video.h -class video_manager; - -#endif // MAME_EMU_EMUFWD_H diff --git a/waterbox/ares64/ares/thirdparty/mame/emu/video/rgbgen.h b/waterbox/ares64/ares/thirdparty/mame/emu/video/rgbgen.h deleted file mode 100644 index e460208d9f..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/emu/video/rgbgen.h +++ /dev/null @@ -1,445 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Vas Crabb, Ryan Holtz -/*************************************************************************** - - rgbgen.h - - General RGB utilities. - -***************************************************************************/ - -#ifndef MAME_EMU_VIDEO_RGBGEN_H -#define MAME_EMU_VIDEO_RGBGEN_H - - -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -class rgbaint_t -{ -public: - rgbaint_t(): m_a(0), m_r(0), m_g(0), m_b(0) { } - explicit rgbaint_t(u32 rgba) { set(rgba); } - rgbaint_t(s32 a, s32 r, s32 g, s32 b) { set(a, r, g, b); } - explicit rgbaint_t(const rgb_t& rgba) { set(rgba); } - - rgbaint_t(const rgbaint_t& other) = default; - rgbaint_t &operator=(const rgbaint_t& other) = default; - - void set(const rgbaint_t& other) { set(other.m_a, other.m_r, other.m_g, other.m_b); } - void set(u32 rgba) { set((rgba >> 24) & 0xff, (rgba >> 16) & 0xff, (rgba >> 8) & 0xff, rgba & 0xff); } - void set(s32 a, s32 r, s32 g, s32 b) - { - m_a = a; - m_r = r; - m_g = g; - m_b = b; - } - void set(const rgb_t& rgba) { set(rgba.a(), rgba.r(), rgba.g(), rgba.b()); } - // This function sets all elements to the same val - void set_all(const s32& val) { set(val, val, val, val); } - // This function zeros all elements - void zero() { set_all(0); } - // This function zeros only the alpha element - void zero_alpha() { m_a = 0; } - - rgb_t to_rgba() const { return rgb_t(get_a(), get_r(), get_g(), get_b()); } - - rgb_t to_rgba_clamp() const - { - const u8 a = (m_a < 0) ? 0 : (m_a > 255) ? 255 : m_a; - const u8 r = (m_r < 0) ? 0 : (m_r > 255) ? 255 : m_r; - const u8 g = (m_g < 0) ? 0 : (m_g > 255) ? 255 : m_g; - const u8 b = (m_b < 0) ? 0 : (m_b > 255) ? 255 : m_b; - return rgb_t(a, r, g, b); - } - - void set_a16(const s32 value) { m_a = value; } - void set_a(const s32 value) { m_a = value; } - void set_r(const s32 value) { m_r = value; } - void set_g(const s32 value) { m_g = value; } - void set_b(const s32 value) { m_b = value; } - - u8 get_a() const { return u8(u32(m_a)); } - u8 get_r() const { return u8(u32(m_r)); } - u8 get_g() const { return u8(u32(m_g)); } - u8 get_b() const { return u8(u32(m_b)); } - - s32 get_a32() const { return m_a; } - s32 get_r32() const { return m_r; } - s32 get_g32() const { return m_g; } - s32 get_b32() const { return m_b; } - - // These selects return an rgbaint_t with all fields set to the element choosen (a, r, g, or b) - rgbaint_t select_alpha32() const { return rgbaint_t(get_a32(), get_a32(), get_a32(), get_a32()); } - rgbaint_t select_red32() const { return rgbaint_t(get_r32(), get_r32(), get_r32(), get_r32()); } - rgbaint_t select_green32() const { return rgbaint_t(get_g32(), get_g32(), get_g32(), get_g32()); } - rgbaint_t select_blue32() const { return rgbaint_t(get_b32(), get_b32(), get_b32(), get_b32()); } - - inline void add(const rgbaint_t& color) - { - add_imm_rgba(color.m_a, color.m_r, color.m_g, color.m_b); - } - - inline void add_imm(const s32 imm) - { - add_imm_rgba(imm, imm, imm, imm); - } - - inline void add_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { - m_a += a; - m_r += r; - m_g += g; - m_b += b; - } - - inline void sub(const rgbaint_t& color) - { - sub_imm_rgba(color.m_a, color.m_r, color.m_g, color.m_b); - } - - inline void sub_imm(const s32 imm) - { - sub_imm_rgba(imm, imm, imm, imm); - } - - inline void sub_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { - m_a -= a; - m_r -= r; - m_g -= g; - m_b -= b; - } - - inline void subr(const rgbaint_t& color) - { - subr_imm_rgba(color.m_a, color.m_r, color.m_g, color.m_b); - } - - inline void subr_imm(const s32 imm) - { - subr_imm_rgba(imm, imm, imm, imm); - } - - inline void subr_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { - m_a = a - m_a; - m_r = r - m_r; - m_g = g - m_g; - m_b = b - m_b; - } - - inline void mul(const rgbaint_t& color) - { - mul_imm_rgba(color.m_a, color.m_r, color.m_g, color.m_b); - } - - inline void mul_imm(const s32 imm) - { - mul_imm_rgba(imm, imm, imm, imm); - } - - inline void mul_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { - m_a *= a; - m_r *= r; - m_g *= g; - m_b *= b; - } - - inline void shl(const rgbaint_t& shift) - { - m_a <<= shift.m_a; - m_r <<= shift.m_r; - m_g <<= shift.m_g; - m_b <<= shift.m_b; - } - - inline void shl_imm(const u8 shift) - { - if (shift == 0) - return; - - m_a <<= shift; - m_r <<= shift; - m_g <<= shift; - m_b <<= shift; - } - - inline void shr(const rgbaint_t& shift) - { - m_a = s32(u32(m_a) >> shift.m_a); - m_r = s32(u32(m_r) >> shift.m_r); - m_g = s32(u32(m_g) >> shift.m_g); - m_b = s32(u32(m_b) >> shift.m_b); - } - - inline void shr_imm(const u8 shift) - { - if (shift == 0) - return; - - m_a = s32(u32(m_a) >> shift); - m_r = s32(u32(m_r) >> shift); - m_g = s32(u32(m_g) >> shift); - m_b = s32(u32(m_b) >> shift); - } - - inline void sra(const rgbaint_t& shift) - { - m_a >>= shift.m_a; - if (m_a & (1 << (31 - shift.m_a))) - m_a |= ~0 << (32 - shift.m_a); - - m_r >>= shift.m_r; - if (m_r & (1 << (31 - shift.m_r))) - m_r |= ~0 << (32 - shift.m_r); - - m_g >>= shift.m_g; - if (m_g & (1 << (31 - shift.m_g))) - m_g |= ~0 << (32 - shift.m_g); - - m_b >>= shift.m_b; - if (m_b & (1 << (31 - shift.m_b))) - m_b |= ~0 << (32 - shift.m_b); - } - - inline void sra_imm(const u8 shift) - { - const u32 high_bit = 1 << (31 - shift); - const u32 high_mask = ~0 << (32 - shift); - - m_a >>= shift; - if (m_a & high_bit) - m_a |= high_mask; - - m_r >>= shift; - if (m_r & high_bit) - m_r |= high_mask; - - m_g >>= shift; - if (m_g & high_bit) - m_g |= high_mask; - - m_b >>= shift; - if (m_b & high_bit) - m_b |= high_mask; - } - - void or_reg(const rgbaint_t& color) { or_imm_rgba(color.m_a, color.m_r, color.m_g, color.m_b); } - void and_reg(const rgbaint_t& color) { and_imm_rgba(color.m_a, color.m_r, color.m_g, color.m_b); } - void xor_reg(const rgbaint_t& color) { xor_imm_rgba(color.m_a, color.m_r, color.m_g, color.m_b); } - - void andnot_reg(const rgbaint_t& color) { and_imm_rgba(~color.m_a, ~color.m_r, ~color.m_g, ~color.m_b); } - - void or_imm(s32 imm) { or_imm_rgba(imm, imm, imm, imm); } - void and_imm(s32 imm) { and_imm_rgba(imm, imm, imm, imm); } - void xor_imm(s32 imm) { xor_imm_rgba(imm, imm, imm, imm); } - - inline void or_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { - m_a |= a; - m_r |= r; - m_g |= g; - m_b |= b; - } - - inline void and_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { - m_a &= a; - m_r &= r; - m_g &= g; - m_b &= b; - } - - inline void xor_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { - m_a ^= a; - m_r ^= r; - m_g ^= g; - m_b ^= b; - } - - inline void clamp_and_clear(const u32 sign) - { - if (m_a & sign) m_a = 0; - if (m_r & sign) m_r = 0; - if (m_g & sign) m_g = 0; - if (m_b & sign) m_b = 0; - - clamp_to_uint8(); - } - - inline void clamp_to_uint8() - { - m_a = (m_a < 0) ? 0 : (m_a > 255) ? 255 : m_a; - m_r = (m_r < 0) ? 0 : (m_r > 255) ? 255 : m_r; - m_g = (m_g < 0) ? 0 : (m_g > 255) ? 255 : m_g; - m_b = (m_b < 0) ? 0 : (m_b > 255) ? 255 : m_b; - } - - inline void sign_extend(const u32 compare, const u32 sign) - { - if ((m_a & compare) == compare) - m_a |= sign; - - if ((m_r & compare) == compare) - m_r |= sign; - - if ((m_g & compare) == compare) - m_g |= sign; - - if ((m_b & compare) == compare) - m_b |= sign; - } - - inline void min(const s32 value) - { - m_a = (m_a > value) ? value : m_a; - m_r = (m_r > value) ? value : m_r; - m_g = (m_g > value) ? value : m_g; - m_b = (m_b > value) ? value : m_b; - } - - inline void max(const s32 value) - { - m_a = (m_a < value) ? value : m_a; - m_r = (m_r < value) ? value : m_r; - m_g = (m_g < value) ? value : m_g; - m_b = (m_b < value) ? value : m_b; - } - - void blend(const rgbaint_t& other, u8 factor); - - void scale_and_clamp(const rgbaint_t& scale); - void scale_imm_and_clamp(const s32 scale); - void scale2_add_and_clamp(const rgbaint_t& scale, const rgbaint_t& other, const rgbaint_t& scale2); - void scale_add_and_clamp(const rgbaint_t& scale, const rgbaint_t& other); - - void cmpeq(const rgbaint_t& value) { cmpeq_imm_rgba(value.m_a, value.m_r, value.m_g, value.m_b); } - void cmpgt(const rgbaint_t& value) { cmpgt_imm_rgba(value.m_a, value.m_r, value.m_g, value.m_b); } - void cmplt(const rgbaint_t& value) { cmplt_imm_rgba(value.m_a, value.m_r, value.m_g, value.m_b); } - - void cmpeq_imm(s32 value) { cmpeq_imm_rgba(value, value, value, value); } - void cmpgt_imm(s32 value) { cmpgt_imm_rgba(value, value, value, value); } - void cmplt_imm(s32 value) { cmplt_imm_rgba(value, value, value, value); } - - void cmpeq_imm_rgba(s32 a, s32 r, s32 g, s32 b) - { - m_a = (m_a == a) ? 0xffffffff : 0; - m_r = (m_r == r) ? 0xffffffff : 0; - m_g = (m_g == g) ? 0xffffffff : 0; - m_b = (m_b == b) ? 0xffffffff : 0; - } - - void cmpgt_imm_rgba(s32 a, s32 r, s32 g, s32 b) - { - m_a = (m_a > a) ? 0xffffffff : 0; - m_r = (m_r > r) ? 0xffffffff : 0; - m_g = (m_g > g) ? 0xffffffff : 0; - m_b = (m_b > b) ? 0xffffffff : 0; - } - - void cmplt_imm_rgba(s32 a, s32 r, s32 g, s32 b) - { - m_a = (m_a < a) ? 0xffffffff : 0; - m_r = (m_r < r) ? 0xffffffff : 0; - m_g = (m_g < g) ? 0xffffffff : 0; - m_b = (m_b < b) ? 0xffffffff : 0; - } - - void merge_alpha16(const rgbaint_t& alpha) - { - m_a = alpha.m_a; - } - - void merge_alpha(const rgbaint_t& alpha) - { - m_a = alpha.m_a; - } - - rgbaint_t& operator+=(const rgbaint_t& other) - { - add_imm_rgba(other.m_a, other.m_r, other.m_g, other.m_b); - return *this; - } - - rgbaint_t& operator+=(const s32 other) - { - add_imm_rgba(other, other, other, other); - return *this; - } - - rgbaint_t &operator-=(const rgbaint_t& other) - { - sub_imm_rgba(other.m_a, other.m_r, other.m_g, other.m_b); - return *this; - } - - rgbaint_t& operator*=(const rgbaint_t& other) - { - mul_imm_rgba(other.m_a, other.m_r, other.m_g, other.m_b); - return *this; - } - - rgbaint_t& operator*=(const s32 other) - { - mul_imm_rgba(other, other, other, other); - return *this; - } - - rgbaint_t& operator>>=(const s32 shift) - { - sra_imm(shift); - return *this; - } - - static u32 bilinear_filter(u32 rgb00, u32 rgb01, u32 rgb10, u32 rgb11, u8 u, u8 v) - { - u32 rb0 = (rgb00 & 0x00ff00ff) + ((((rgb01 & 0x00ff00ff) - (rgb00 & 0x00ff00ff)) * u) >> 8); - u32 rb1 = (rgb10 & 0x00ff00ff) + ((((rgb11 & 0x00ff00ff) - (rgb10 & 0x00ff00ff)) * u) >> 8); - - rgb00 >>= 8; - rgb01 >>= 8; - rgb10 >>= 8; - rgb11 >>= 8; - - u32 ag0 = (rgb00 & 0x00ff00ff) + ((((rgb01 & 0x00ff00ff) - (rgb00 & 0x00ff00ff)) * u) >> 8); - u32 ag1 = (rgb10 & 0x00ff00ff) + ((((rgb11 & 0x00ff00ff) - (rgb10 & 0x00ff00ff)) * u) >> 8); - - rb0 = (rb0 & 0x00ff00ff) + ((((rb1 & 0x00ff00ff) - (rb0 & 0x00ff00ff)) * v) >> 8); - ag0 = (ag0 & 0x00ff00ff) + ((((ag1 & 0x00ff00ff) - (ag0 & 0x00ff00ff)) * v) >> 8); - - return ((ag0 << 8) & 0xff00ff00) | (rb0 & 0x00ff00ff); - } - - void bilinear_filter_rgbaint(u32 rgb00, u32 rgb01, u32 rgb10, u32 rgb11, u8 u, u8 v) - { - u32 rb0 = (rgb00 & 0x00ff00ff) + ((((rgb01 & 0x00ff00ff) - (rgb00 & 0x00ff00ff)) * u) >> 8); - u32 rb1 = (rgb10 & 0x00ff00ff) + ((((rgb11 & 0x00ff00ff) - (rgb10 & 0x00ff00ff)) * u) >> 8); - - rgb00 >>= 8; - rgb01 >>= 8; - rgb10 >>= 8; - rgb11 >>= 8; - - u32 ag0 = (rgb00 & 0x00ff00ff) + ((((rgb01 & 0x00ff00ff) - (rgb00 & 0x00ff00ff)) * u) >> 8); - u32 ag1 = (rgb10 & 0x00ff00ff) + ((((rgb11 & 0x00ff00ff) - (rgb10 & 0x00ff00ff)) * u) >> 8); - - rb0 = (rb0 & 0x00ff00ff) + ((((rb1 & 0x00ff00ff) - (rb0 & 0x00ff00ff)) * v) >> 8); - ag0 = (ag0 & 0x00ff00ff) + ((((ag1 & 0x00ff00ff) - (ag0 & 0x00ff00ff)) * v) >> 8); - - u32 result = ((ag0 << 8) & 0xff00ff00) | (rb0 & 0x00ff00ff); - this->set(result); - } - -protected: - s32 m_a; - s32 m_r; - s32 m_g; - s32 m_b; -}; - -#endif // MAME_EMU_VIDEO_RGBGEN_H diff --git a/waterbox/ares64/ares/thirdparty/mame/emu/video/rgbsse.h b/waterbox/ares64/ares/thirdparty/mame/emu/video/rgbsse.h deleted file mode 100644 index ea3bc1e208..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/emu/video/rgbsse.h +++ /dev/null @@ -1,502 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Vas Crabb, Ryan Holtz -/*************************************************************************** - - rgbsse.h - - SSE optimized RGB utilities. - - WARNING: This code assumes SSE2 or greater capability. - -***************************************************************************/ - -#ifndef MAME_EMU_VIDEO_RGBSSE_H -#define MAME_EMU_VIDEO_RGBSSE_H - -#pragma once - -#include -#ifdef __SSE4_1__ -#include -#endif - - -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -class rgbaint_t -{ -public: - rgbaint_t() { } - explicit rgbaint_t(u32 rgba) { set(rgba); } - rgbaint_t(s32 a, s32 r, s32 g, s32 b) { set(a, r, g, b); } - explicit rgbaint_t(const rgb_t& rgb) { set(rgb); } - explicit rgbaint_t(__m128i rgba) { m_value = rgba; } - - rgbaint_t(const rgbaint_t& other) = default; - rgbaint_t &operator=(const rgbaint_t& other) = default; - - void set(const rgbaint_t& other) { m_value = other.m_value; } - void set(const u32& rgba) { m_value = _mm_unpacklo_epi16(_mm_unpacklo_epi8(_mm_cvtsi32_si128(rgba), _mm_setzero_si128()), _mm_setzero_si128()); } - void set(s32 a, s32 r, s32 g, s32 b) { m_value = _mm_set_epi32(a, r, g, b); } - void set(const rgb_t& rgb) { set((const u32&) rgb); } - // This function sets all elements to the same val - void set_all(const s32& val) { m_value = _mm_set1_epi32(val); } - // This function zeros all elements - void zero() { m_value = _mm_xor_si128(m_value, m_value); } - // This function zeros only the alpha element - void zero_alpha() { m_value = _mm_and_si128(m_value, alpha_mask()); } - - inline rgb_t to_rgba() const - { - return _mm_cvtsi128_si32(_mm_packus_epi16(_mm_packs_epi32(m_value, _mm_setzero_si128()), _mm_setzero_si128())); - } - - inline rgb_t to_rgba_clamp() const - { - return _mm_cvtsi128_si32(_mm_packus_epi16(_mm_packs_epi32(m_value, _mm_setzero_si128()), _mm_setzero_si128())); - } - - void set_a16(const s32 value) { m_value = _mm_insert_epi16(m_value, value, 6); } -#ifdef __SSE4_1__ - void set_a(const s32 value) { m_value = _mm_insert_epi32(m_value, value, 3); } - void set_r(const s32 value) { m_value = _mm_insert_epi32(m_value, value, 2); } - void set_g(const s32 value) { m_value = _mm_insert_epi32(m_value, value, 1); } - void set_b(const s32 value) { m_value = _mm_insert_epi32(m_value, value, 0); } -#else - void set_a(const s32 value) { m_value = _mm_or_si128(_mm_and_si128(m_value, alpha_mask()), _mm_set_epi32(value, 0, 0, 0)); } - void set_r(const s32 value) { m_value = _mm_or_si128(_mm_and_si128(m_value, red_mask()), _mm_set_epi32(0, value, 0, 0)); } - void set_g(const s32 value) { m_value = _mm_or_si128(_mm_and_si128(m_value, green_mask()), _mm_set_epi32(0, 0, value, 0)); } - void set_b(const s32 value) { m_value = _mm_or_si128(_mm_and_si128(m_value, blue_mask()), _mm_set_epi32(0, 0, 0, value)); } -#endif - - u8 get_a() const { return u8(unsigned(_mm_extract_epi16(m_value, 6))); } - u8 get_r() const { return u8(unsigned(_mm_extract_epi16(m_value, 4))); } - u8 get_g() const { return u8(unsigned(_mm_extract_epi16(m_value, 2))); } - u8 get_b() const { return u8(unsigned(_mm_cvtsi128_si32(m_value))); } - -#ifdef __SSE4_1__ - s32 get_a32() const { return _mm_extract_epi32(m_value, 3); } - s32 get_r32() const { return _mm_extract_epi32(m_value, 2); } - s32 get_g32() const { return _mm_extract_epi32(m_value, 1); } - s32 get_b32() const { return _mm_extract_epi32(m_value, 0); } -#else - s32 get_a32() const { return (_mm_cvtsi128_si32(_mm_shuffle_epi32(m_value, _MM_SHUFFLE(0, 0, 0, 3)))); } - s32 get_r32() const { return (_mm_cvtsi128_si32(_mm_shuffle_epi32(m_value, _MM_SHUFFLE(0, 0, 0, 2)))); } - s32 get_g32() const { return (_mm_cvtsi128_si32(_mm_shuffle_epi32(m_value, _MM_SHUFFLE(0, 0, 0, 1)))); } - s32 get_b32() const { return (_mm_cvtsi128_si32(m_value)); } -#endif - - // These selects return an rgbaint_t with all fields set to the element choosen (a, r, g, or b) - rgbaint_t select_alpha32() const { return (rgbaint_t)_mm_shuffle_epi32(m_value, _MM_SHUFFLE(3, 3, 3, 3)); } - rgbaint_t select_red32() const { return (rgbaint_t)_mm_shuffle_epi32(m_value, _MM_SHUFFLE(2, 2, 2, 2)); } - rgbaint_t select_green32() const { return (rgbaint_t)_mm_shuffle_epi32(m_value, _MM_SHUFFLE(1, 1, 1, 1)); } - rgbaint_t select_blue32() const { return (rgbaint_t)_mm_shuffle_epi32(m_value, _MM_SHUFFLE(0, 0, 0, 0)); } - - inline void add(const rgbaint_t& color2) - { - m_value = _mm_add_epi32(m_value, color2.m_value); - } - - inline void add_imm(const s32 imm) - { - m_value = _mm_add_epi32(m_value, _mm_set1_epi32(imm)); - } - - inline void add_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { - m_value = _mm_add_epi32(m_value, _mm_set_epi32(a, r, g, b)); - } - - inline void sub(const rgbaint_t& color2) - { - m_value = _mm_sub_epi32(m_value, color2.m_value); - } - - inline void sub_imm(const s32 imm) - { - m_value = _mm_sub_epi32(m_value, _mm_set1_epi32(imm)); - } - - inline void sub_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { - m_value = _mm_sub_epi32(m_value, _mm_set_epi32(a, r, g, b)); - } - - inline void subr(const rgbaint_t& color2) - { - m_value = _mm_sub_epi32(color2.m_value, m_value); - } - - inline void subr_imm(const s32 imm) - { - m_value = _mm_sub_epi32(_mm_set1_epi32(imm), m_value); - } - - inline void subr_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { - m_value = _mm_sub_epi32(_mm_set_epi32(a, r, g, b), m_value); - } - - inline void mul(const rgbaint_t& color) - { - __m128i tmp1 = _mm_mul_epu32(m_value, color.m_value); - __m128i tmp2 = _mm_mul_epu32(_mm_srli_si128(m_value, 4), _mm_srli_si128(color.m_value, 4)); - m_value = _mm_unpacklo_epi32(_mm_shuffle_epi32(tmp1, _MM_SHUFFLE(0, 0, 2, 0)), _mm_shuffle_epi32(tmp2, _MM_SHUFFLE(0, 0, 2, 0))); - } - - inline void mul_imm(const s32 imm) - { - __m128i immv = _mm_set1_epi32(imm); - __m128i tmp1 = _mm_mul_epu32(m_value, immv); - __m128i tmp2 = _mm_mul_epu32(_mm_srli_si128(m_value, 4), _mm_srli_si128(immv, 4)); - m_value = _mm_unpacklo_epi32(_mm_shuffle_epi32(tmp1, _MM_SHUFFLE(0, 0, 2, 0)), _mm_shuffle_epi32(tmp2, _MM_SHUFFLE(0, 0, 2, 0))); - } - - inline void mul_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { - __m128i immv = _mm_set_epi32(a, r, g, b); - __m128i tmp1 = _mm_mul_epu32(m_value, immv); - __m128i tmp2 = _mm_mul_epu32(_mm_srli_si128(m_value, 4), _mm_srli_si128(immv, 4)); - m_value = _mm_unpacklo_epi32(_mm_shuffle_epi32(tmp1, _MM_SHUFFLE(0, 0, 2, 0)), _mm_shuffle_epi32(tmp2, _MM_SHUFFLE(0, 0, 2, 0))); - } - - inline void shl(const rgbaint_t& shift) - { - rgbaint_t areg(*this); - rgbaint_t rreg(*this); - rgbaint_t greg(*this); - rgbaint_t breg(*this); - rgbaint_t ashift(0, 0, 0, shift.get_a32()); - rgbaint_t rshift(0, 0, 0, shift.get_r32()); - rgbaint_t gshift(0, 0, 0, shift.get_g32()); - rgbaint_t bshift(0, 0, 0, shift.get_b32()); - areg.m_value = _mm_sll_epi32(areg.m_value, ashift.m_value); - rreg.m_value = _mm_sll_epi32(rreg.m_value, rshift.m_value); - greg.m_value = _mm_sll_epi32(greg.m_value, gshift.m_value); - breg.m_value = _mm_sll_epi32(breg.m_value, bshift.m_value); - set(areg.get_a32(), rreg.get_r32(), greg.get_g32(), breg.get_b32()); - } - - inline void shl_imm(const u8 shift) - { - m_value = _mm_slli_epi32(m_value, shift); - } - - inline void shr(const rgbaint_t& shift) - { - rgbaint_t areg(*this); - rgbaint_t rreg(*this); - rgbaint_t greg(*this); - rgbaint_t breg(*this); - rgbaint_t ashift(0, 0, 0, shift.get_a32()); - rgbaint_t rshift(0, 0, 0, shift.get_r32()); - rgbaint_t gshift(0, 0, 0, shift.get_g32()); - rgbaint_t bshift(0, 0, 0, shift.get_b32()); - areg.m_value = _mm_srl_epi32(areg.m_value, ashift.m_value); - rreg.m_value = _mm_srl_epi32(rreg.m_value, rshift.m_value); - greg.m_value = _mm_srl_epi32(greg.m_value, gshift.m_value); - breg.m_value = _mm_srl_epi32(breg.m_value, bshift.m_value); - set(areg.get_a32(), rreg.get_r32(), greg.get_g32(), breg.get_b32()); - } - - inline void shr_imm(const u8 shift) - { - m_value = _mm_srli_epi32(m_value, shift); - } - - inline void sra(const rgbaint_t& shift) - { - rgbaint_t areg(*this); - rgbaint_t rreg(*this); - rgbaint_t greg(*this); - rgbaint_t breg(*this); - rgbaint_t ashift(0, 0, 0, shift.get_a32()); - rgbaint_t rshift(0, 0, 0, shift.get_r32()); - rgbaint_t gshift(0, 0, 0, shift.get_g32()); - rgbaint_t bshift(0, 0, 0, shift.get_b32()); - areg.m_value = _mm_sra_epi32(areg.m_value, ashift.m_value); - rreg.m_value = _mm_sra_epi32(rreg.m_value, rshift.m_value); - greg.m_value = _mm_sra_epi32(greg.m_value, gshift.m_value); - breg.m_value = _mm_sra_epi32(breg.m_value, bshift.m_value); - set(areg.get_a32(), rreg.get_r32(), greg.get_g32(), breg.get_b32()); - } - - inline void sra_imm(const u8 shift) - { - m_value = _mm_srai_epi32(m_value, shift); - } - - void or_reg(const rgbaint_t& color2) { m_value = _mm_or_si128(m_value, color2.m_value); } - void and_reg(const rgbaint_t& color2) { m_value = _mm_and_si128(m_value, color2.m_value); } - void xor_reg(const rgbaint_t& color2) { m_value = _mm_xor_si128(m_value, color2.m_value); } - - void andnot_reg(const rgbaint_t& color2) { m_value = _mm_andnot_si128(color2.m_value, m_value); } - - void or_imm(s32 value) { m_value = _mm_or_si128(m_value, _mm_set1_epi32(value)); } - void and_imm(s32 value) { m_value = _mm_and_si128(m_value, _mm_set1_epi32(value)); } - void xor_imm(s32 value) { m_value = _mm_xor_si128(m_value, _mm_set1_epi32(value)); } - - void or_imm_rgba(s32 a, s32 r, s32 g, s32 b) { m_value = _mm_or_si128(m_value, _mm_set_epi32(a, r, g, b)); } - void and_imm_rgba(s32 a, s32 r, s32 g, s32 b) { m_value = _mm_and_si128(m_value, _mm_set_epi32(a, r, g, b)); } - void xor_imm_rgba(s32 a, s32 r, s32 g, s32 b) { m_value = _mm_xor_si128(m_value, _mm_set_epi32(a, r, g, b)); } - - inline void clamp_and_clear(const u32 sign) - { - __m128i vsign = _mm_set1_epi32(sign); - m_value = _mm_and_si128(m_value, _mm_cmpeq_epi32(_mm_and_si128(m_value, vsign), _mm_setzero_si128())); - vsign = _mm_srai_epi32(vsign, 1); - vsign = _mm_xor_si128(vsign, _mm_set1_epi32(0xffffffff)); - __m128i mask = _mm_cmpgt_epi32(m_value, vsign); - m_value = _mm_or_si128(_mm_and_si128(vsign, mask), _mm_and_si128(m_value, _mm_xor_si128(mask, _mm_set1_epi32(0xffffffff)))); - } - - inline void clamp_to_uint8() - { - m_value = _mm_packs_epi32(m_value, _mm_setzero_si128()); - m_value = _mm_packus_epi16(m_value, _mm_setzero_si128()); - m_value = _mm_unpacklo_epi8(m_value, _mm_setzero_si128()); - m_value = _mm_unpacklo_epi16(m_value, _mm_setzero_si128()); - } - - inline void sign_extend(const u32 compare, const u32 sign) - { - __m128i compare_vec = _mm_set1_epi32(compare); - __m128i compare_mask = _mm_cmpeq_epi32(_mm_and_si128(m_value, compare_vec), compare_vec); - __m128i compared = _mm_and_si128(_mm_set1_epi32(sign), compare_mask); - m_value = _mm_or_si128(m_value, compared); - } - - inline void min(const s32 value) - { - __m128i val = _mm_set1_epi32(value); -#ifdef __SSE4_1__ - m_value = _mm_min_epi32(m_value, val); -#else - __m128i is_greater_than = _mm_cmpgt_epi32(m_value, val); - - __m128i val_to_set = _mm_and_si128(val, is_greater_than); - __m128i keep_mask = _mm_xor_si128(is_greater_than, _mm_set1_epi32(0xffffffff)); - - m_value = _mm_and_si128(m_value, keep_mask); - m_value = _mm_or_si128(val_to_set, m_value); -#endif - } - - inline void max(const s32 value) - { - __m128i val = _mm_set1_epi32(value); -#ifdef __SSE4_1__ - m_value = _mm_max_epi32(m_value, val); -#else - __m128i is_less_than = _mm_cmplt_epi32(m_value, val); - - __m128i val_to_set = _mm_and_si128(val, is_less_than); - __m128i keep_mask = _mm_xor_si128(is_less_than, _mm_set1_epi32(0xffffffff)); - - m_value = _mm_and_si128(m_value, keep_mask); - m_value = _mm_or_si128(val_to_set, m_value); -#endif - } - - void blend(const rgbaint_t& other, u8 factor); - - void scale_and_clamp(const rgbaint_t& scale); - - // Leave this here in case Model3 blows up... - //inline void scale_imm_and_clamp(const s32 scale) - //{ - // mul_imm(scale); - // sra_imm(8); - // clamp_to_uint8(); - //} - - // This version needs absolute value of value and scale to be 11 bits or less - inline void scale_imm_and_clamp(const s16 scale) - { - // Set mult a 16 bit inputs to scale - __m128i immv = _mm_set1_epi16(scale); - // Shift up by 4 - immv = _mm_slli_epi16(immv, 4); - // Pack color into mult b 16 bit inputs - m_value = _mm_packs_epi32(m_value, _mm_setzero_si128()); - // Shift up by 4 - m_value = _mm_slli_epi16(m_value, 4); - // Do the 16 bit multiply, bottom 64 bits will contain 16 bit truncated results - m_value = _mm_mulhi_epi16(m_value, immv); - // Clamp to u8 - m_value = _mm_packus_epi16(m_value, _mm_setzero_si128()); - // Unpack up to s32 - m_value = _mm_unpacklo_epi8(m_value, _mm_setzero_si128()); - m_value = _mm_unpacklo_epi16(m_value, _mm_setzero_si128()); - } - - // This function needs absolute value of color and scale to be 15 bits or less - inline void scale_add_and_clamp(const rgbaint_t& scale, const rgbaint_t& other) - { -#ifdef __SSE4_1__ - m_value = _mm_mullo_epi32(m_value, scale.m_value); -#else - // Mask off the top 16 bits of each 32-bit value - m_value = _mm_and_si128(m_value, _mm_set1_epi32(0x0000ffff)); - // Do 16x16 multiplies and sum into 32-bit pairs; the AND above ensures upper pair is always 0 - m_value = _mm_madd_epi16(m_value, scale.m_value); -#endif - // Arithmetic shift down the result by 8 bits - sra_imm(8); - add(other); - clamp_to_uint8(); - } - - // This function needs absolute value of color and scale to be 15 bits or less - inline void scale2_add_and_clamp(const rgbaint_t& scale, const rgbaint_t& other, const rgbaint_t& scale2) - { - // Pack 32-bit values to 16-bit values in low half, and scales in top half - __m128i tmp1 = _mm_packs_epi32(m_value, scale.m_value); - // Same for other and scale2 - __m128i tmp2 = _mm_packs_epi32(other.m_value, scale2.m_value); - // Interleave the low halves (m_value, other) - __m128i tmp3 = _mm_unpacklo_epi16(tmp1, tmp2); - // Interleave the top halves (scale, scale2) - __m128i tmp4 = _mm_unpackhi_epi16(tmp1, tmp2); - // Multiply values by scales and add adjacent pairs - m_value = _mm_madd_epi16(tmp3, tmp4); - // Final shift by 8 - sra_imm(8); - clamp_to_uint8(); - } - - void cmpeq(const rgbaint_t& value) { m_value = _mm_cmpeq_epi32(m_value, value.m_value); } - void cmpgt(const rgbaint_t& value) { m_value = _mm_cmpgt_epi32(m_value, value.m_value); } - void cmplt(const rgbaint_t& value) { m_value = _mm_cmplt_epi32(m_value, value.m_value); } - - void cmpeq_imm(s32 value) { m_value = _mm_cmpeq_epi32(m_value, _mm_set1_epi32(value)); } - void cmpgt_imm(s32 value) { m_value = _mm_cmpgt_epi32(m_value, _mm_set1_epi32(value)); } - void cmplt_imm(s32 value) { m_value = _mm_cmplt_epi32(m_value, _mm_set1_epi32(value)); } - - void cmpeq_imm_rgba(s32 a, s32 r, s32 g, s32 b) { m_value = _mm_cmpeq_epi32(m_value, _mm_set_epi32(a, r, g, b)); } - void cmpgt_imm_rgba(s32 a, s32 r, s32 g, s32 b) { m_value = _mm_cmpgt_epi32(m_value, _mm_set_epi32(a, r, g, b)); } - void cmplt_imm_rgba(s32 a, s32 r, s32 g, s32 b) { m_value = _mm_cmplt_epi32(m_value, _mm_set_epi32(a, r, g, b)); } - - inline rgbaint_t& operator+=(const rgbaint_t& other) - { - m_value = _mm_add_epi32(m_value, other.m_value); - return *this; - } - - inline rgbaint_t& operator+=(const s32 other) - { - m_value = _mm_add_epi32(m_value, _mm_set1_epi32(other)); - return *this; - } - - inline rgbaint_t& operator-=(const rgbaint_t& other) - { - m_value = _mm_sub_epi32(m_value, other.m_value); - return *this; - } - - inline rgbaint_t& operator*=(const rgbaint_t& other) - { - m_value = _mm_unpacklo_epi32(_mm_shuffle_epi32(_mm_mul_epu32(m_value, other.m_value), _MM_SHUFFLE(0, 0, 2, 0)), _mm_shuffle_epi32(_mm_mul_epu32(_mm_srli_si128(m_value, 4), _mm_srli_si128(other.m_value, 4)), _MM_SHUFFLE(0, 0, 2, 0))); - return *this; - } - - inline rgbaint_t& operator*=(const s32 other) - { - const __m128i immv = _mm_set1_epi32(other); - m_value = _mm_unpacklo_epi32(_mm_shuffle_epi32(_mm_mul_epu32(m_value, immv), _MM_SHUFFLE(0, 0, 2, 0)), _mm_shuffle_epi32(_mm_mul_epu32(_mm_srli_si128(m_value, 4), _mm_srli_si128(immv, 4)), _MM_SHUFFLE(0, 0, 2, 0))); - return *this; - } - - inline rgbaint_t& operator>>=(const s32 shift) - { - m_value = _mm_srai_epi32(m_value, shift); - return *this; - } - - inline void merge_alpha16(const rgbaint_t& alpha) - { - m_value = _mm_insert_epi16(m_value, _mm_extract_epi16(alpha.m_value, 6), 6); - } - - inline void merge_alpha(const rgbaint_t& alpha) - { -#ifdef __SSE4_1__ - m_value = _mm_insert_epi32(m_value, _mm_extract_epi32(alpha.m_value, 3), 3); -#else - m_value = _mm_insert_epi16(m_value, _mm_extract_epi16(alpha.m_value, 7), 7); - m_value = _mm_insert_epi16(m_value, _mm_extract_epi16(alpha.m_value, 6), 6); -#endif - } - - static u32 bilinear_filter(u32 rgb00, u32 rgb01, u32 rgb10, u32 rgb11, u8 u, u8 v) - { - __m128i color00 = _mm_cvtsi32_si128(rgb00); - __m128i color01 = _mm_cvtsi32_si128(rgb01); - __m128i color10 = _mm_cvtsi32_si128(rgb10); - __m128i color11 = _mm_cvtsi32_si128(rgb11); - - /* interleave color01 and color00 at the byte level */ - color01 = _mm_unpacklo_epi8(color01, color00); - color11 = _mm_unpacklo_epi8(color11, color10); - color01 = _mm_unpacklo_epi8(color01, _mm_setzero_si128()); - color11 = _mm_unpacklo_epi8(color11, _mm_setzero_si128()); - color01 = _mm_madd_epi16(color01, scale_factor(u)); - color11 = _mm_madd_epi16(color11, scale_factor(u)); - color01 = _mm_slli_epi32(color01, 15); - color11 = _mm_srli_epi32(color11, 1); - color01 = _mm_max_epi16(color01, color11); - color01 = _mm_madd_epi16(color01, scale_factor(v)); - color01 = _mm_srli_epi32(color01, 15); - color01 = _mm_packs_epi32(color01, _mm_setzero_si128()); - color01 = _mm_packus_epi16(color01, _mm_setzero_si128()); - return _mm_cvtsi128_si32(color01); - } - - void bilinear_filter_rgbaint(u32 rgb00, u32 rgb01, u32 rgb10, u32 rgb11, u8 u, u8 v) - { - __m128i color00 = _mm_cvtsi32_si128(rgb00); - __m128i color01 = _mm_cvtsi32_si128(rgb01); - __m128i color10 = _mm_cvtsi32_si128(rgb10); - __m128i color11 = _mm_cvtsi32_si128(rgb11); - - /* interleave color01 and color00 at the byte level */ - color01 = _mm_unpacklo_epi8(color01, color00); - color11 = _mm_unpacklo_epi8(color11, color10); - color01 = _mm_unpacklo_epi8(color01, _mm_setzero_si128()); - color11 = _mm_unpacklo_epi8(color11, _mm_setzero_si128()); - color01 = _mm_madd_epi16(color01, scale_factor(u)); - color11 = _mm_madd_epi16(color11, scale_factor(u)); - color01 = _mm_slli_epi32(color01, 15); - color11 = _mm_srli_epi32(color11, 1); - color01 = _mm_max_epi16(color01, color11); - color01 = _mm_madd_epi16(color01, scale_factor(v)); - m_value = _mm_srli_epi32(color01, 15); - } - -protected: - struct _statics - { - __m128 dummy_for_alignment; - u16 alpha_mask[8]; - u16 red_mask[8]; - u16 green_mask[8]; - u16 blue_mask[8]; - s16 scale_table[256][8]; - }; - - static __m128i alpha_mask() { return *(__m128i *)&statics.alpha_mask[0]; } - static __m128i red_mask() { return *(__m128i *)&statics.red_mask[0]; } - static __m128i green_mask() { return *(__m128i *)&statics.green_mask[0]; } - static __m128i blue_mask() { return *(__m128i *)&statics.blue_mask[0]; } - static __m128i scale_factor(u8 index) { return *(__m128i *)&statics.scale_table[index][0]; } - - __m128i m_value; - - static const _statics statics; - -}; - -#endif /* MAME_EMU_VIDEO_RGBSSE_H */ diff --git a/waterbox/ares64/ares/thirdparty/mame/emu/video/rgbutil.h b/waterbox/ares64/ares/thirdparty/mame/emu/video/rgbutil.h deleted file mode 100644 index c6ee325c75..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/emu/video/rgbutil.h +++ /dev/null @@ -1,32 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/*************************************************************************** - - rgbutil.h - - Utility definitions for RGB manipulation. Allows RGB handling to be - performed in an abstracted fashion and optimized with SIMD. - -***************************************************************************/ - -#ifndef MAME_EMU_VIDEO_RGBUTIL_H -#define MAME_EMU_VIDEO_RGBUTIL_H - -// use SSE on 64-bit implementations, where it can be assumed -#if (!defined(MAME_DEBUG) || defined(__OPTIMIZE__)) && (defined(__SSE2__) || defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 2))) - -#define MAME_RGB_HIGH_PRECISION -#include "rgbsse.h" - -#elif defined(__ALTIVEC__) - -#define MAME_RGB_HIGH_PRECISION -#include "rgbvmx.h" - -#else - -#include "rgbgen.h" - -#endif - -#endif // MAME_EMU_VIDEO_RGBUTIL_H diff --git a/waterbox/ares64/ares/thirdparty/mame/emu/video/rgbvmx.h b/waterbox/ares64/ares/thirdparty/mame/emu/video/rgbvmx.h deleted file mode 100644 index 05d26cd9e2..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/emu/video/rgbvmx.h +++ /dev/null @@ -1,728 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Vas Crabb, Ryan Holtz -/*************************************************************************** - - rgbvmx.h - - VMX/Altivec optimised RGB utilities. - -***************************************************************************/ - -#ifndef MAME_EMU_VIDEO_RGBVMX_H -#define MAME_EMU_VIDEO_RGBVMX_H - -#pragma once - -#include - -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -class rgbaint_t -{ -protected: - typedef __vector signed char VECS8; - typedef __vector unsigned char VECU8; - typedef __vector signed short VECS16; - typedef __vector unsigned short VECU16; - typedef __vector signed int VECS32; - typedef __vector unsigned int VECU32; - -public: - rgbaint_t() { set(0, 0, 0, 0); } - explicit rgbaint_t(u32 rgba) { set(rgba); } - rgbaint_t(s32 a, s32 r, s32 g, s32 b) { set(a, r, g, b); } - explicit rgbaint_t(const rgb_t& rgb) { set(rgb); } - explicit rgbaint_t(VECS32 rgba) : m_value(rgba) { } - - rgbaint_t(const rgbaint_t& other) = default; - rgbaint_t &operator=(const rgbaint_t& other) = default; - - void set(const rgbaint_t& other) { m_value = other.m_value; } - - void set(u32 rgba) - { - const VECU32 zero = { 0, 0, 0, 0 }; -#ifdef __LITTLE_ENDIAN__ - const VECS8 temp = *reinterpret_cast(&rgba); - m_value = VECS32(vec_mergeh(VECS16(vec_mergeh(temp, VECS8(zero))), VECS16(zero))); -#else - const VECS8 temp = VECS8(vec_perm(vec_lde(0, &rgba), zero, vec_lvsl(0, &rgba))); - m_value = VECS32(vec_mergeh(VECS16(zero), VECS16(vec_mergeh(VECS8(zero), temp)))); -#endif - } - - void set(s32 a, s32 r, s32 g, s32 b) - { -#ifdef __LITTLE_ENDIAN__ - const VECS32 result = { b, g, r, a }; -#else - const VECS32 result = { a, r, g, b }; -#endif - m_value = result; - } - - void set(const rgb_t& rgb) - { - const VECU32 zero = { 0, 0, 0, 0 }; -#ifdef __LITTLE_ENDIAN__ - const VECS8 temp = *reinterpret_cast(rgb.ptr()); - m_value = VECS32(vec_mergeh(VECS16(vec_mergeh(temp, VECS8(zero))), VECS16(zero))); -#else - const VECS8 temp = VECS8(vec_perm(vec_lde(0, rgb.ptr()), zero, vec_lvsl(0, rgb.ptr()))); - m_value = VECS32(vec_mergeh(VECS16(zero), VECS16(vec_mergeh(VECS8(zero), temp)))); -#endif - } - - // This function sets all elements to the same val - void set_all(const s32& val) { set(val, val, val, val); } - // This function zeros all elements - void zero() { set_all(0); } - // This function zeros only the alpha element - void zero_alpha() { set_a(0); } - - inline rgb_t to_rgba() const - { - VECU32 temp = VECU32(vec_packs(m_value, m_value)); - temp = VECU32(vec_packsu(VECS16(temp), VECS16(temp))); - u32 result; - vec_ste(temp, 0, &result); - return result; - } - - inline rgb_t to_rgba_clamp() const - { - VECU32 temp = VECU32(vec_packs(m_value, m_value)); - temp = VECU32(vec_packsu(VECS16(temp), VECS16(temp))); - u32 result; - vec_ste(temp, 0, &result); - return result; - } - - void set_a16(const s32 value) - { - const VECS32 temp = { value, value, value, value }; - m_value = vec_perm(m_value, temp, alpha_perm); - } - - void set_a(const s32 value) - { - const VECS32 temp = { value, value, value, value }; - m_value = vec_perm(m_value, temp, alpha_perm); - } - - void set_r(const s32 value) - { - const VECS32 temp = { value, value, value, value }; - m_value = vec_perm(m_value, temp, red_perm); - } - - void set_g(const s32 value) - { - const VECS32 temp = { value, value, value, value }; - m_value = vec_perm(m_value, temp, green_perm); - } - - void set_b(const s32 value) - { - const VECS32 temp = { value, value, value, value }; - m_value = vec_perm(m_value, temp, blue_perm); - } - - u8 get_a() const - { - u8 result; -#ifdef __LITTLE_ENDIAN__ - vec_ste(vec_splat(VECU8(m_value), 12), 0, &result); -#else - vec_ste(vec_splat(VECU8(m_value), 3), 0, &result); -#endif - return result; - } - - u8 get_r() const - { - u8 result; -#ifdef __LITTLE_ENDIAN__ - vec_ste(vec_splat(VECU8(m_value), 8), 0, &result); -#else - vec_ste(vec_splat(VECU8(m_value), 7), 0, &result); -#endif - return result; - } - - u8 get_g() const - { - u8 result; -#ifdef __LITTLE_ENDIAN__ - vec_ste(vec_splat(VECU8(m_value), 4), 0, &result); -#else - vec_ste(vec_splat(VECU8(m_value), 11), 0, &result); -#endif - return result; - } - - u8 get_b() const - { - u8 result; -#ifdef __LITTLE_ENDIAN__ - vec_ste(vec_splat(VECU8(m_value), 0), 0, &result); -#else - vec_ste(vec_splat(VECU8(m_value), 15), 0, &result); -#endif - return result; - } - - s32 get_a32() const - { - s32 result; -#ifdef __LITTLE_ENDIAN__ - vec_ste(vec_splat(m_value, 3), 0, &result); -#else - vec_ste(vec_splat(m_value, 0), 0, &result); -#endif - return result; - } - - s32 get_r32() const - { - s32 result; -#ifdef __LITTLE_ENDIAN__ - vec_ste(vec_splat(m_value, 2), 0, &result); -#else - vec_ste(vec_splat(m_value, 1), 0, &result); -#endif - return result; - } - - s32 get_g32() const - { - s32 result; -#ifdef __LITTLE_ENDIAN__ - vec_ste(vec_splat(m_value, 1), 0, &result); -#else - vec_ste(vec_splat(m_value, 2), 0, &result); -#endif - return result; - } - - s32 get_b32() const - { - s32 result; -#ifdef __LITTLE_ENDIAN__ - vec_ste(vec_splat(m_value, 0), 0, &result); -#else - vec_ste(vec_splat(m_value, 3), 0, &result); -#endif - return result; - } - - // These selects return an rgbaint_t with all fields set to the element choosen (a, r, g, or b) - rgbaint_t select_alpha32() const { return rgbaint_t(get_a32(), get_a32(), get_a32(), get_a32()); } - rgbaint_t select_red32() const { return rgbaint_t(get_r32(), get_r32(), get_r32(), get_r32()); } - rgbaint_t select_green32() const { return rgbaint_t(get_g32(), get_g32(), get_g32(), get_g32()); } - rgbaint_t select_blue32() const { return rgbaint_t(get_b32(), get_b32(), get_b32(), get_b32()); } - - inline void add(const rgbaint_t& color2) - { - m_value = vec_add(m_value, color2.m_value); - } - - inline void add_imm(const s32 imm) - { - const VECS32 temp = { imm, imm, imm, imm }; - m_value = vec_add(m_value, temp); - } - - inline void add_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { -#ifdef __LITTLE_ENDIAN__ - const VECS32 temp = { b, g, r, a }; -#else - const VECS32 temp = { a, r, g, b }; -#endif - m_value = vec_add(m_value, temp); - } - - inline void sub(const rgbaint_t& color2) - { - m_value = vec_sub(m_value, color2.m_value); - } - - inline void sub_imm(const s32 imm) - { - const VECS32 temp = { imm, imm, imm, imm }; - m_value = vec_sub(m_value, temp); - } - - inline void sub_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { -#ifdef __LITTLE_ENDIAN__ - const VECS32 temp = { b, g, r, a }; -#else - const VECS32 temp = { a, r, g, b }; -#endif - m_value = vec_sub(m_value, temp); - } - - inline void subr(const rgbaint_t& color2) - { - m_value = vec_sub(color2.m_value, m_value); - } - - inline void subr_imm(const s32 imm) - { - const VECS32 temp = { imm, imm, imm, imm }; - m_value = vec_sub(temp, m_value); - } - - inline void subr_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { -#ifdef __LITTLE_ENDIAN__ - const VECS32 temp = { b, g, r, a }; -#else - const VECS32 temp = { a, r, g, b }; -#endif - m_value = vec_sub(temp, m_value); - } - - inline void mul(const rgbaint_t& color) - { - const VECU32 shift = vec_splat_u32(-16); - const VECU32 temp = vec_msum(VECU16(m_value), VECU16(vec_rl(color.m_value, shift)), vec_splat_u32(0)); -#ifdef __LITTLE_ENDIAN__ - m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mule(VECU16(m_value), VECU16(color.m_value)))); -#else - m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mulo(VECU16(m_value), VECU16(color.m_value)))); -#endif - } - - inline void mul_imm(const s32 imm) - { - const VECU32 value = { u32(imm), u32(imm), u32(imm), u32(imm) }; - const VECU32 shift = vec_splat_u32(-16); - const VECU32 temp = vec_msum(VECU16(m_value), VECU16(vec_rl(value, shift)), vec_splat_u32(0)); -#ifdef __LITTLE_ENDIAN__ - m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mule(VECU16(m_value), VECU16(value)))); -#else - m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mulo(VECU16(m_value), VECU16(value)))); -#endif - } - - inline void mul_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { -#ifdef __LITTLE_ENDIAN__ - const VECU32 value = { u32(b), u32(g), u32(r), u32(a) }; -#else - const VECU32 value = { u32(a), u32(r), u32(g), u32(b) }; -#endif - const VECU32 shift = vec_splat_u32(-16); - const VECU32 temp = vec_msum(VECU16(m_value), VECU16(vec_rl(value, shift)), vec_splat_u32(0)); -#ifdef __LITTLE_ENDIAN__ - m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mule(VECU16(m_value), VECU16(value)))); -#else - m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mulo(VECU16(m_value), VECU16(value)))); -#endif - } - - inline void shl(const rgbaint_t& shift) - { - const VECU32 limit = { 32, 32, 32, 32 }; - m_value = vec_and(vec_sl(m_value, VECU32(shift.m_value)), vec_cmpgt(limit, VECU32(shift.m_value))); - } - - inline void shl_imm(const u8 shift) - { - const VECU32 temp = { shift, shift, shift, shift }; - m_value = vec_sl(m_value, temp); - } - - inline void shr(const rgbaint_t& shift) - { - const VECU32 limit = { 32, 32, 32, 32 }; - m_value = vec_and(vec_sr(m_value, VECU32(shift.m_value)), vec_cmpgt(limit, VECU32(shift.m_value))); - } - - inline void shr_imm(const u8 shift) - { - const VECU32 temp = { shift, shift, shift, shift }; - m_value = vec_sr(m_value, temp); - } - - inline void sra(const rgbaint_t& shift) - { - const VECU32 limit = { 31, 31, 31, 31 }; - m_value = vec_sra(m_value, vec_min(VECU32(shift.m_value), limit)); - } - - inline void sra_imm(const u8 shift) - { - const VECU32 temp = { shift, shift, shift, shift }; - m_value = vec_sra(m_value, temp); - } - - inline void or_reg(const rgbaint_t& color2) - { - m_value = vec_or(m_value, color2.m_value); - } - - inline void or_imm(const s32 value) - { - const VECS32 temp = { value, value, value, value }; - m_value = vec_or(m_value, temp); - } - - inline void or_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { -#ifdef __LITTLE_ENDIAN__ - const VECS32 temp = { b, g, r, a }; -#else - const VECS32 temp = { a, r, g, b }; -#endif - m_value = vec_or(m_value, temp); - } - - inline void and_reg(const rgbaint_t& color) - { - m_value = vec_and(m_value, color.m_value); - } - - inline void andnot_reg(const rgbaint_t& color) - { - m_value = vec_andc(m_value, color.m_value); - } - - inline void and_imm(const s32 value) - { - const VECS32 temp = { value, value, value, value }; - m_value = vec_and(m_value, temp); - } - - inline void and_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { -#ifdef __LITTLE_ENDIAN__ - const VECS32 temp = { b, g, r, a }; -#else - const VECS32 temp = { a, r, g, b }; -#endif - m_value = vec_and(m_value, temp); - } - - inline void xor_reg(const rgbaint_t& color2) - { - m_value = vec_xor(m_value, color2.m_value); - } - - inline void xor_imm(const s32 value) - { - const VECS32 temp = { value, value, value, value }; - m_value = vec_xor(m_value, temp); - } - - inline void xor_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { -#ifdef __LITTLE_ENDIAN__ - const VECS32 temp = { b, g, r, a }; -#else - const VECS32 temp = { a, r, g, b }; -#endif - m_value = vec_xor(m_value, temp); - } - - inline void clamp_and_clear(const u32 sign) - { - const VECS32 vzero = { 0, 0, 0, 0 }; - VECS32 vsign = { s32(sign), s32(sign), s32(sign), s32(sign) }; - m_value = vec_and(m_value, vec_cmpeq(vec_and(m_value, vsign), vzero)); - vsign = vec_nor(vec_sra(vsign, vec_splat_u32(1)), vzero); - const VECS32 mask = VECS32(vec_cmpgt(m_value, vsign)); - m_value = vec_or(vec_and(vsign, mask), vec_and(m_value, vec_nor(mask, vzero))); - } - - inline void clamp_to_uint8() - { - const VECU32 zero = { 0, 0, 0, 0 }; - m_value = VECS32(vec_packs(m_value, m_value)); - m_value = VECS32(vec_packsu(VECS16(m_value), VECS16(m_value))); -#ifdef __LITTLE_ENDIAN__ - m_value = VECS32(vec_mergeh(VECU8(m_value), VECU8(zero))); - m_value = VECS32(vec_mergeh(VECS16(m_value), VECS16(zero))); -#else - m_value = VECS32(vec_mergeh(VECU8(zero), VECU8(m_value))); - m_value = VECS32(vec_mergeh(VECS16(zero), VECS16(m_value))); -#endif - } - - inline void sign_extend(const u32 compare, const u32 sign) - { - const VECS32 compare_vec = { s32(compare), s32(compare), s32(compare), s32(compare) }; - const VECS32 compare_mask = VECS32(vec_cmpeq(vec_and(m_value, compare_vec), compare_vec)); - const VECS32 sign_vec = { s32(sign), s32(sign), s32(sign), s32(sign) }; - m_value = vec_or(m_value, vec_and(sign_vec, compare_mask)); - } - - inline void min(const s32 value) - { - const VECS32 temp = { value, value, value, value }; - m_value = vec_min(m_value, temp); - } - - inline void max(const s32 value) - { - const VECS32 temp = { value, value, value, value }; - m_value = vec_max(m_value, temp); - } - - void blend(const rgbaint_t& other, u8 factor); - - void scale_and_clamp(const rgbaint_t& scale); - void scale_imm_and_clamp(const s32 scale); - - void scale_add_and_clamp(const rgbaint_t& scale, const rgbaint_t& other) - { - mul(scale); - sra_imm(8); - add(other); - clamp_to_uint8(); - } - - void scale2_add_and_clamp(const rgbaint_t& scale, const rgbaint_t& other, const rgbaint_t& scale2) - { - rgbaint_t color2(other); - color2.mul(scale2); - - mul(scale); - add(color2); - sra_imm(8); - clamp_to_uint8(); - } - - inline void cmpeq(const rgbaint_t& value) - { - m_value = VECS32(vec_cmpeq(m_value, value.m_value)); - } - - inline void cmpeq_imm(const s32 value) - { - const VECS32 temp = { value, value, value, value }; - m_value = VECS32(vec_cmpeq(m_value, temp)); - } - - inline void cmpeq_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { -#ifdef __LITTLE_ENDIAN__ - const VECS32 temp = { b, g, r, a }; -#else - const VECS32 temp = { a, r, g, b }; -#endif - m_value = VECS32(vec_cmpeq(m_value, temp)); - } - - inline void cmpgt(const rgbaint_t& value) - { - m_value = VECS32(vec_cmpgt(m_value, value.m_value)); - } - - inline void cmpgt_imm(const s32 value) - { - const VECS32 temp = { value, value, value, value }; - m_value = VECS32(vec_cmpgt(m_value, temp)); - } - - inline void cmpgt_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { -#ifdef __LITTLE_ENDIAN__ - const VECS32 temp = { b, g, r, a }; -#else - const VECS32 temp = { a, r, g, b }; -#endif - m_value = VECS32(vec_cmpgt(m_value, temp)); - } - - inline void cmplt(const rgbaint_t& value) - { - m_value = VECS32(vec_cmplt(m_value, value.m_value)); - } - - inline void cmplt_imm(const s32 value) - { - const VECS32 temp = { value, value, value, value }; - m_value = VECS32(vec_cmplt(m_value, temp)); - } - - inline void cmplt_imm_rgba(const s32 a, const s32 r, const s32 g, const s32 b) - { -#ifdef __LITTLE_ENDIAN__ - const VECS32 temp = { b, g, r, a }; -#else - const VECS32 temp = { a, r, g, b }; -#endif - m_value = VECS32(vec_cmplt(m_value, temp)); - } - - inline rgbaint_t& operator+=(const rgbaint_t& other) - { - m_value = vec_add(m_value, other.m_value); - return *this; - } - - inline rgbaint_t& operator+=(const s32 other) - { - const VECS32 temp = { other, other, other, other }; - m_value = vec_add(m_value, temp); - return *this; - } - - inline rgbaint_t& operator-=(const rgbaint_t& other) - { - m_value = vec_sub(m_value, other.m_value); - return *this; - } - - inline rgbaint_t& operator*=(const rgbaint_t& other) - { - const VECU32 shift = vec_splat_u32(-16); - const VECU32 temp = vec_msum(VECU16(m_value), VECU16(vec_rl(other.m_value, shift)), vec_splat_u32(0)); -#ifdef __LITTLE_ENDIAN__ - m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mule(VECU16(m_value), VECU16(other.m_value)))); -#else - m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mulo(VECU16(m_value), VECU16(other.m_value)))); -#endif - return *this; - } - - inline rgbaint_t& operator*=(const s32 other) - { - const VECS32 value = { other, other, other, other }; - const VECU32 shift = vec_splat_u32(-16); - const VECU32 temp = vec_msum(VECU16(m_value), VECU16(vec_rl(value, shift)), vec_splat_u32(0)); -#ifdef __LITTLE_ENDIAN__ - m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mule(VECU16(m_value), VECU16(value)))); -#else - m_value = VECS32(vec_add(vec_sl(temp, shift), vec_mulo(VECU16(m_value), VECU16(value)))); -#endif - return *this; - } - - inline rgbaint_t& operator>>=(const s32 shift) - { - const VECU32 temp = { u32(shift), u32(shift), u32(shift), u32(shift) }; - m_value = vec_sra(m_value, temp); - return *this; - } - - inline void merge_alpha16(const rgbaint_t& alpha) - { - m_value = vec_perm(m_value, alpha.m_value, alpha_perm); - } - - inline void merge_alpha(const rgbaint_t& alpha) - { - m_value = vec_perm(m_value, alpha.m_value, alpha_perm); - } - - static u32 bilinear_filter(const u32 &rgb00, const u32 &rgb01, const u32 &rgb10, const u32 &rgb11, u8 u, u8 v) - { - const VECS32 zero = vec_splat_s32(0); - - // put each packed value into first element of a vector register -#ifdef __LITTLE_ENDIAN__ - VECS32 color00 = *reinterpret_cast(&rgb00); - VECS32 color01 = *reinterpret_cast(&rgb01); - VECS32 color10 = *reinterpret_cast(&rgb10); - VECS32 color11 = *reinterpret_cast(&rgb11); -#else - VECS32 color00 = vec_perm(VECS32(vec_lde(0, &rgb00)), zero, vec_lvsl(0, &rgb00)); - VECS32 color01 = vec_perm(VECS32(vec_lde(0, &rgb01)), zero, vec_lvsl(0, &rgb01)); - VECS32 color10 = vec_perm(VECS32(vec_lde(0, &rgb10)), zero, vec_lvsl(0, &rgb10)); - VECS32 color11 = vec_perm(VECS32(vec_lde(0, &rgb11)), zero, vec_lvsl(0, &rgb11)); -#endif - - // interleave color01/color00 and color10/color11 at the byte level then zero-extend - color01 = VECS32(vec_mergeh(VECU8(color01), VECU8(color00))); - color11 = VECS32(vec_mergeh(VECU8(color11), VECU8(color10))); -#ifdef __LITTLE_ENDIAN__ - color01 = VECS32(vec_mergeh(VECU8(color01), VECU8(zero))); - color11 = VECS32(vec_mergeh(VECU8(color11), VECU8(zero))); -#else - color01 = VECS32(vec_mergeh(VECU8(zero), VECU8(color01))); - color11 = VECS32(vec_mergeh(VECU8(zero), VECU8(color11))); -#endif - - color01 = vec_msum(VECS16(color01), scale_table[u], zero); - color11 = vec_msum(VECS16(color11), scale_table[u], zero); - color01 = vec_sl(color01, vec_splat_u32(15)); - color11 = vec_sr(color11, vec_splat_u32(1)); - color01 = VECS32(vec_max(VECS16(color01), VECS16(color11))); - color01 = vec_msum(VECS16(color01), scale_table[v], zero); - color01 = vec_sr(color01, vec_splat_u32(15)); - color01 = VECS32(vec_packs(color01, color01)); - color01 = VECS32(vec_packsu(VECS16(color01), VECS16(color01))); - - u32 result; - vec_ste(VECU32(color01), 0, &result); - return result; - } - - void bilinear_filter_rgbaint(const u32 &rgb00, const u32 &rgb01, const u32 &rgb10, const u32 &rgb11, u8 u, u8 v) - { - const VECS32 zero = vec_splat_s32(0); - - // put each packed value into first element of a vector register -#ifdef __LITTLE_ENDIAN__ - VECS32 color00 = *reinterpret_cast(&rgb00); - VECS32 color01 = *reinterpret_cast(&rgb01); - VECS32 color10 = *reinterpret_cast(&rgb10); - VECS32 color11 = *reinterpret_cast(&rgb11); -#else - VECS32 color00 = vec_perm(VECS32(vec_lde(0, &rgb00)), zero, vec_lvsl(0, &rgb00)); - VECS32 color01 = vec_perm(VECS32(vec_lde(0, &rgb01)), zero, vec_lvsl(0, &rgb01)); - VECS32 color10 = vec_perm(VECS32(vec_lde(0, &rgb10)), zero, vec_lvsl(0, &rgb10)); - VECS32 color11 = vec_perm(VECS32(vec_lde(0, &rgb11)), zero, vec_lvsl(0, &rgb11)); -#endif - - // interleave color01/color00 and color10/color11 at the byte level then zero-extend - color01 = VECS32(vec_mergeh(VECU8(color01), VECU8(color00))); - color11 = VECS32(vec_mergeh(VECU8(color11), VECU8(color10))); -#ifdef __LITTLE_ENDIAN__ - color01 = VECS32(vec_mergeh(VECU8(color01), VECU8(zero))); - color11 = VECS32(vec_mergeh(VECU8(color11), VECU8(zero))); -#else - color01 = VECS32(vec_mergeh(VECU8(zero), VECU8(color01))); - color11 = VECS32(vec_mergeh(VECU8(zero), VECU8(color11))); -#endif - - color01 = vec_msum(VECS16(color01), scale_table[u], zero); - color11 = vec_msum(VECS16(color11), scale_table[u], zero); - color01 = vec_sl(color01, vec_splat_u32(15)); - color11 = vec_sr(color11, vec_splat_u32(1)); - color01 = VECS32(vec_max(VECS16(color01), VECS16(color11))); - color01 = vec_msum(VECS16(color01), scale_table[v], zero); - m_value = vec_sr(color01, vec_splat_u32(15)); - } - -protected: - VECS32 m_value; - - static const VECU8 alpha_perm; - static const VECU8 red_perm; - static const VECU8 green_perm; - static const VECU8 blue_perm; - static const VECS16 scale_table[256]; -}; - - - -// altivec.h somehow redefines "bool" in a bad way. really. -#ifdef vector -#undef vector -#endif -#ifdef bool -#undef bool -#endif -#ifdef pixel -#undef pixel -#endif - -#endif // MAME_EMU_VIDEO_RGBVMX_H diff --git a/waterbox/ares64/ares/thirdparty/mame/lib/util/abi.h b/waterbox/ares64/ares/thirdparty/mame/lib/util/abi.h deleted file mode 100644 index b9e18f1635..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/lib/util/abi.h +++ /dev/null @@ -1,117 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Vas Crabb -/// \file -/// \brief ABI feature macros -/// -/// Macros that are useful for writing ABI-dependent code. -#ifndef MAME_LIB_UTIL_ABI_H -#define MAME_LIB_UTIL_ABI_H - -#pragma once - - -/// \brief Itanium C++ ABI -/// -/// Value of #MAME_ABI_CXX_TYPE when compiled with a variant of the -/// Itanium C++ ABI. -/// \sa MAME_ABI_CXX_TYPE MAME_ABI_CXX_MSVC -#define MAME_ABI_CXX_ITANIUM 0 - -/// \brief Microsoft Visual C++ ABI -/// -/// Value of #MAME_ABI_CXX_TYPE when compiled with a variant of the -/// Microsoft Visual C++ ABI. -/// \sa MAME_ABI_CXX_TYPE MAME_ABI_CXX_ITANIUM -#define MAME_ABI_CXX_MSVC 1 - - -/// \brief Standard Itanium C++ ABI member function pointers -/// -/// Value of #MAME_ABI_CXX_ITANIUM_MFP_TYPE when compiled with a variant -/// of the Itanium C++ ABI using the standard representation of -/// pointers to non-static member functions. -/// \sa MAME_ABI_CXX_ITANIUM_MFP_TYPE MAME_ABI_CXX_ITANIUM_MFP_ARM -#define MAME_ABI_CXX_ITANIUM_MFP_STANDARD 0 - -/// \brief ARM Itanium C++ ABI member function pointers -/// -/// Value of #MAME_ABI_CXX_ITANIUM_MFP_TYPE when compiled with a variant -/// of the Itanium C++ ABI using the 32-bit ARM representation of -/// pointers to non-static member functions. -/// \sa MAME_ABI_CXX_ITANIUM_MFP_TYPE MAME_ABI_CXX_ITANIUM_MFP_STANDARD -#define MAME_ABI_CXX_ITANIUM_MFP_ARM 1 - - -/// \def MAME_ABI_FNDESC_SIZE -/// \brief Size of function descriptors -/// -/// Size of function descriptors as a multiple of the size of a pointer, -/// or zero if function pointers point to the function entry point -/// directly. -#if (defined(__ppc64__) || defined(__PPC64__)) && !defined(__APPLE__) && !defined(__LITTLE_ENDIAN__) - #define MAME_ABI_FNDESC_SIZE 3 // entry point (PC), TOC (R2), environment (R11) -#elif defined(__ia64__) - #define MAME_ABI_FNDESC_SIZE 2 // GP, entry point -#else - #define MAME_ABI_FNDESC_SIZE 0 // function pointers point to entry point directly -#endif - - -/// \def MAME_ABI_CXX_TYPE -/// \brief C++ ABI type -/// -/// A constant representing the C++ ABI. -/// \sa MAME_ABI_CXX_ITANIUM MAME_ABI_CXX_MSVC -#if defined(_MSC_VER) - #define MAME_ABI_CXX_TYPE MAME_ABI_CXX_MSVC -#else - #define MAME_ABI_CXX_TYPE MAME_ABI_CXX_ITANIUM -#endif - - -/// \def MAME_ABI_CXX_MEMBER_CALL -/// \brief Member function calling convention qualifier -/// -/// A qualifier for functions and function pointers that may be used to -/// specify that the calling convention for non-static member functions -/// should be used. -#if defined(__GNUC__) && defined(__MINGW32__) && !defined(__x86_64__) && defined(__i386__) - #define MAME_ABI_CXX_MEMBER_CALL __thiscall -#else - #define MAME_ABI_CXX_MEMBER_CALL -#endif - - -/// \def MAME_ABI_CXX_VTABLE_FNDESC -/// \brief Whether function descriptors are stored in virtual tables -/// -/// Non-zero if function descriptors are stored in virtual tables -/// directly, or zero if function entries in virtual tables are -/// conventional function pointers. -/// \sa MAME_ABI_FNDESC_SIZE -#if defined(__ia64__) - #define MAME_ABI_CXX_VTABLE_FNDESC 1 // function descriptors stored directly in vtable -#else - #define MAME_ABI_CXX_VTABLE_FNDESC 0 // conventional function pointers in vtable -#endif - - -/// \def MAME_ABI_CXX_ITANIUM_MFP_TYPE -/// Itanium C++ member function representation -/// -/// A constant representing the representation of pointers to non-static -/// member functions in use with the Itanium C++ ABI. Only valid if -/// compiled with a variant of the Itanium C++ ABI. -/// \sa MAME_ABI_CXX_ITANIUM_MFP_STANDARD MAME_ABI_CXX_ITANIUM_MFP_ARM -/// MAME_ABI_CXX_TYPE -#if defined(__arm__) || defined(__ARMEL__) || defined(__aarch64__) - #define MAME_ABI_CXX_ITANIUM_MFP_TYPE MAME_ABI_CXX_ITANIUM_MFP_ARM -#elif defined(__MIPSEL__) || defined(__mips_isa_rev) || defined(__mips64) - #define MAME_ABI_CXX_ITANIUM_MFP_TYPE MAME_ABI_CXX_ITANIUM_MFP_ARM -#elif defined(__EMSCRIPTEN__) - #define MAME_ABI_CXX_ITANIUM_MFP_TYPE MAME_ABI_CXX_ITANIUM_MFP_ARM -#else - #define MAME_ABI_CXX_ITANIUM_MFP_TYPE MAME_ABI_CXX_ITANIUM_MFP_STANDARD -#endif - -#endif // MAME_LIB_UTIL_ABI_H diff --git a/waterbox/ares64/ares/thirdparty/mame/lib/util/bitmap.h b/waterbox/ares64/ares/thirdparty/mame/lib/util/bitmap.h deleted file mode 100644 index 1b8dee3b5b..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/lib/util/bitmap.h +++ /dev/null @@ -1,415 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/*************************************************************************** - - bitmap.h - - Core bitmap routines. - -***************************************************************************/ - -#ifndef MAME_UTIL_BITMAP_H -#define MAME_UTIL_BITMAP_H - -#pragma once - -#include "palette.h" - -#include -#include - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// bitmap_format describes the various bitmap formats we use -enum bitmap_format -{ - BITMAP_FORMAT_INVALID = 0, // invalid forma - BITMAP_FORMAT_IND8, // 8bpp indexed - BITMAP_FORMAT_IND16, // 16bpp indexed - BITMAP_FORMAT_IND32, // 32bpp indexed - BITMAP_FORMAT_IND64, // 64bpp indexed - BITMAP_FORMAT_RGB32, // 32bpp 8-8-8 RGB - BITMAP_FORMAT_ARGB32, // 32bpp 8-8-8-8 ARGB - BITMAP_FORMAT_YUY16 // 16bpp 8-8 Y/Cb, Y/Cr in sequence -}; - - -// ======================> rectangle - -// rectangles describe a bitmap portion -class rectangle -{ -public: - // construction/destruction - constexpr rectangle() { } - constexpr rectangle(int32_t minx, int32_t maxx, int32_t miny, int32_t maxy) - : min_x(minx), max_x(maxx), min_y(miny), max_y(maxy) - { } - - // getters - constexpr int32_t left() const { return min_x; } - constexpr int32_t right() const { return max_x; } - constexpr int32_t top() const { return min_y; } - constexpr int32_t bottom() const { return max_y; } - - // compute intersection with another rect - rectangle &operator&=(const rectangle &src) - { - if (src.min_x > min_x) min_x = src.min_x; - if (src.max_x < max_x) max_x = src.max_x; - if (src.min_y > min_y) min_y = src.min_y; - if (src.max_y < max_y) max_y = src.max_y; - return *this; - } - - // compute union with another rect - rectangle &operator|=(const rectangle &src) - { - if (src.min_x < min_x) min_x = src.min_x; - if (src.max_x > max_x) max_x = src.max_x; - if (src.min_y < min_y) min_y = src.min_y; - if (src.max_y > max_y) max_y = src.max_y; - return *this; - } - - rectangle operator&(const rectangle &b) - { - rectangle a(*this); - a &= b; - return a; - } - - rectangle operator|(const rectangle &b) - { - rectangle a(*this); - a |= b; - return a; - } - - // comparisons - constexpr bool operator==(const rectangle &rhs) const { return min_x == rhs.min_x && max_x == rhs.max_x && min_y == rhs.min_y && max_y == rhs.max_y; } - constexpr bool operator!=(const rectangle &rhs) const { return min_x != rhs.min_x || max_x != rhs.max_x || min_y != rhs.min_y || max_y != rhs.max_y; } - constexpr bool operator>(const rectangle &rhs) const { return min_x < rhs.min_x && min_y < rhs.min_y && max_x > rhs.max_x && max_y > rhs.max_y; } - constexpr bool operator>=(const rectangle &rhs) const { return min_x <= rhs.min_x && min_y <= rhs.min_y && max_x >= rhs.max_x && max_y >= rhs.max_y; } - constexpr bool operator<(const rectangle &rhs) const { return min_x >= rhs.min_x || min_y >= rhs.min_y || max_x <= rhs.max_x || max_y <= rhs.max_y; } - constexpr bool operator<=(const rectangle &rhs) const { return min_x > rhs.min_x || min_y > rhs.min_y || max_x < rhs.max_x || max_y < rhs.max_y; } - - // other helpers - constexpr bool empty() const { return (min_x > max_x) || (min_y > max_y); } - constexpr bool contains(int32_t x, int32_t y) const { return (x >= min_x) && (x <= max_x) && (y >= min_y) && (y <= max_y); } - constexpr bool contains(const rectangle &rect) const { return (min_x <= rect.min_x) && (max_x >= rect.max_x) && (min_y <= rect.min_y) && (max_y >= rect.max_y); } - constexpr int32_t width() const { return max_x + 1 - min_x; } - constexpr int32_t height() const { return max_y + 1 - min_y; } - constexpr int32_t xcenter() const { return (min_x + max_x + 1) / 2; } - constexpr int32_t ycenter() const { return (min_y + max_y + 1) / 2; } - - // setters - void set(int32_t minx, int32_t maxx, int32_t miny, int32_t maxy) { min_x = minx; max_x = maxx; min_y = miny; max_y = maxy; } - void setx(int32_t minx, int32_t maxx) { min_x = minx; max_x = maxx; } - void sety(int32_t miny, int32_t maxy) { min_y = miny; max_y = maxy; } - void set_width(int32_t width) { max_x = min_x + width - 1; } - void set_height(int32_t height) { max_y = min_y + height - 1; } - void set_origin(int32_t x, int32_t y) { max_x += x - min_x; max_y += y - min_y; min_x = x; min_y = y; } - void set_size(int32_t width, int32_t height) { set_width(width); set_height(height); } - - // offset helpers - void offset(int32_t xdelta, int32_t ydelta) { min_x += xdelta; max_x += xdelta; min_y += ydelta; max_y += ydelta; } - void offsetx(int32_t delta) { min_x += delta; max_x += delta; } - void offsety(int32_t delta) { min_y += delta; max_y += delta; } - - // internal state - int32_t min_x = 0; // minimum X, or left coordinate - int32_t max_x = 0; // maximum X, or right coordinate (inclusive) - int32_t min_y = 0; // minimum Y, or top coordinate - int32_t max_y = 0; // maximum Y, or bottom coordinate (inclusive) -}; - - -// ======================> bitmap_t - -// bitmaps describe a rectangular array of pixels -class bitmap_t -{ -protected: - // construction/destruction -- subclasses only to ensure type correctness - bitmap_t(const bitmap_t &) = delete; - bitmap_t(bitmap_t &&that); - bitmap_t(bitmap_format format, uint8_t bpp, int width = 0, int height = 0, int xslop = 0, int yslop = 0); - bitmap_t(bitmap_format format, uint8_t bpp, void *base, int width, int height, int rowpixels); - bitmap_t(bitmap_format format, uint8_t bpp, bitmap_t &source, const rectangle &subrect); - virtual ~bitmap_t(); - - // prevent implicit copying - bitmap_t &operator=(const bitmap_t &) = delete; - bitmap_t &operator=(bitmap_t &&that); - -public: - // allocation/deallocation - void reset(); - - // getters - int32_t width() const { return m_width; } - int32_t height() const { return m_height; } - int32_t rowpixels() const { return m_rowpixels; } - int32_t rowbytes() const { return m_rowpixels * m_bpp / 8; } - uint8_t bpp() const { return m_bpp; } - bitmap_format format() const { return m_format; } - bool valid() const { return (m_base != nullptr); } - palette_t *palette() const { return m_palette; } - const rectangle &cliprect() const { return m_cliprect; } - - // allocation/sizing - void allocate(int width, int height, int xslop = 0, int yslop = 0); - void resize(int width, int height, int xslop = 0, int yslop = 0); - - // operations - void set_palette(palette_t *palette); - void fill(uint64_t color) { fill(color, m_cliprect); } - void fill(uint64_t color, const rectangle &bounds); - void plot_box(int32_t x, int32_t y, int32_t width, int32_t height, uint64_t color) - { - fill(color, rectangle(x, x + width - 1, y, y + height - 1)); - } - - // pixel access - void *raw_pixptr(int32_t y, int32_t x = 0) { return reinterpret_cast(m_base) + (y * m_rowpixels + x) * m_bpp / 8; } - void const *raw_pixptr(int32_t y, int32_t x = 0) const { return reinterpret_cast(m_base) + (y * m_rowpixels + x) * m_bpp / 8; } - -protected: - // for use by subclasses only to ensure type correctness - template PixelType &pixt(int32_t y, int32_t x = 0) { return *(reinterpret_cast(m_base) + y * m_rowpixels + x); } - template PixelType const &pixt(int32_t y, int32_t x = 0) const { return *(reinterpret_cast(m_base) + y * m_rowpixels + x); } - void wrap(void *base, int width, int height, int rowpixels); - void wrap(bitmap_t &source, const rectangle &subrect); - -private: - // internal helpers - int32_t compute_rowpixels(int width, int xslop); - void compute_base(int xslop, int yslop); - bool valid_format() const; - - // internal state - std::unique_ptr m_alloc; // pointer to allocated pixel memory - uint32_t m_allocbytes; // size of our allocation - void * m_base; // pointer to pixel (0,0) (adjusted for padding) - int32_t m_rowpixels; // pixels per row (including padding) - int32_t m_width; // width of the bitmap - int32_t m_height; // height of the bitmap - bitmap_format m_format; // format of the bitmap - uint8_t m_bpp; // bits per pixel - palette_t * m_palette; // optional palette - rectangle m_cliprect; // a clipping rectangle covering the full bitmap -}; - - -// ======================> bitmap_specific, bitmap8_t, bitmap16_t, bitmap32_t, bitmap64_t - -template -class bitmap_specific : public bitmap_t -{ - static constexpr int PIXEL_BITS = 8 * sizeof(PixelType); - -protected: - // construction/destruction -- subclasses only - bitmap_specific(bitmap_specific &&) = default; - bitmap_specific(bitmap_format format, int width = 0, int height = 0, int xslop = 0, int yslop = 0) : bitmap_t(format, PIXEL_BITS, width, height, xslop, yslop) { } - bitmap_specific(bitmap_format format, PixelType *base, int width, int height, int rowpixels) : bitmap_t(format, PIXEL_BITS, base, width, height, rowpixels) { } - bitmap_specific(bitmap_format format, bitmap_specific &source, const rectangle &subrect) : bitmap_t(format, PIXEL_BITS, source, subrect) { } - - bitmap_specific &operator=(bitmap_specific &&) = default; - -public: - using pixel_t = PixelType; - - // getters - uint8_t bpp() const { return PIXEL_BITS; } - - // pixel accessors - PixelType &pix(int32_t y, int32_t x = 0) { return pixt(y, x); } - PixelType const &pix(int32_t y, int32_t x = 0) const { return pixt(y, x); } - - // operations - void fill(PixelType color) { fill(color, cliprect()); } - void fill(PixelType color, const rectangle &bounds) - { - // if we have a cliprect, intersect with that - rectangle fill(bounds); - fill &= cliprect(); - if (!fill.empty()) - { - for (int32_t y = fill.top(); y <= fill.bottom(); y++) - std::fill_n(&pix(y, fill.left()), fill.width(), color); - } - } - void plot_box(int32_t x, int32_t y, int32_t width, int32_t height, PixelType color) - { - fill(color, rectangle(x, x + width - 1, y, y + height - 1)); - } -}; - -// 8bpp bitmaps -using bitmap8_t = bitmap_specific; -extern template class bitmap_specific; - -// 16bpp bitmaps -using bitmap16_t = bitmap_specific; -extern template class bitmap_specific; - -// 32bpp bitmaps -using bitmap32_t = bitmap_specific; -extern template class bitmap_specific; - -// 64bpp bitmaps -using bitmap64_t = bitmap_specific; -extern template class bitmap_specific; - - -// ======================> bitmap_ind8, bitmap_ind16, bitmap_ind32, bitmap_ind64 - -// BITMAP_FORMAT_IND8 bitmaps -class bitmap_ind8 : public bitmap8_t -{ - static const bitmap_format k_bitmap_format = BITMAP_FORMAT_IND8; - -public: - // construction/destruction - bitmap_ind8(bitmap_ind8 &&) = default; - bitmap_ind8(int width = 0, int height = 0, int xslop = 0, int yslop = 0) : bitmap8_t(k_bitmap_format, width, height, xslop, yslop) { } - bitmap_ind8(uint8_t *base, int width, int height, int rowpixels) : bitmap8_t(k_bitmap_format, base, width, height, rowpixels) { } - bitmap_ind8(bitmap_ind8 &source, const rectangle &subrect) : bitmap8_t(k_bitmap_format, source, subrect) { } - void wrap(uint8_t *base, int width, int height, int rowpixels) { bitmap_t::wrap(base, width, height, rowpixels); } - void wrap(bitmap_ind8 &source, const rectangle &subrect) { bitmap_t::wrap(static_cast(source), subrect); } - - // getters - bitmap_format format() const { return k_bitmap_format; } - - bitmap_ind8 &operator=(bitmap_ind8 &&) = default; -}; - -// BITMAP_FORMAT_IND16 bitmaps -class bitmap_ind16 : public bitmap16_t -{ - static const bitmap_format k_bitmap_format = BITMAP_FORMAT_IND16; - -public: - // construction/destruction - bitmap_ind16(bitmap_ind16 &&) = default; - bitmap_ind16(int width = 0, int height = 0, int xslop = 0, int yslop = 0) : bitmap16_t(k_bitmap_format, width, height, xslop, yslop) { } - bitmap_ind16(uint16_t *base, int width, int height, int rowpixels) : bitmap16_t(k_bitmap_format, base, width, height, rowpixels) { } - bitmap_ind16(bitmap_ind16 &source, const rectangle &subrect) : bitmap16_t(k_bitmap_format, source, subrect) { } - void wrap(uint16_t *base, int width, int height, int rowpixels) { bitmap_t::wrap(base, width, height, rowpixels); } - void wrap(bitmap_ind8 &source, const rectangle &subrect) { bitmap_t::wrap(static_cast(source), subrect); } - - // getters - bitmap_format format() const { return k_bitmap_format; } - - bitmap_ind16 &operator=(bitmap_ind16 &&) = default; -}; - -// BITMAP_FORMAT_IND32 bitmaps -class bitmap_ind32 : public bitmap32_t -{ - static const bitmap_format k_bitmap_format = BITMAP_FORMAT_IND32; - -public: - // construction/destruction - bitmap_ind32(bitmap_ind32 &&) = default; - bitmap_ind32(int width = 0, int height = 0, int xslop = 0, int yslop = 0) : bitmap32_t(k_bitmap_format, width, height, xslop, yslop) { } - bitmap_ind32(uint32_t *base, int width, int height, int rowpixels) : bitmap32_t(k_bitmap_format, base, width, height, rowpixels) { } - bitmap_ind32(bitmap_ind32 &source, const rectangle &subrect) : bitmap32_t(k_bitmap_format, source, subrect) { } - void wrap(uint32_t *base, int width, int height, int rowpixels) { bitmap_t::wrap(base, width, height, rowpixels); } - void wrap(bitmap_ind8 &source, const rectangle &subrect) { bitmap_t::wrap(static_cast(source), subrect); } - - // getters - bitmap_format format() const { return k_bitmap_format; } - - bitmap_ind32 &operator=(bitmap_ind32 &&) = default; -}; - -// BITMAP_FORMAT_IND64 bitmaps -class bitmap_ind64 : public bitmap64_t -{ - static const bitmap_format k_bitmap_format = BITMAP_FORMAT_IND64; - -public: - // construction/destruction - bitmap_ind64(bitmap_ind64 &&) = default; - bitmap_ind64(int width = 0, int height = 0, int xslop = 0, int yslop = 0) : bitmap64_t(k_bitmap_format, width, height, xslop, yslop) { } - bitmap_ind64(uint64_t *base, int width, int height, int rowpixels) : bitmap64_t(k_bitmap_format, base, width, height, rowpixels) { } - bitmap_ind64(bitmap_ind64 &source, const rectangle &subrect) : bitmap64_t(k_bitmap_format, source, subrect) { } - void wrap(uint64_t *base, int width, int height, int rowpixels) { bitmap_t::wrap(base, width, height, rowpixels); } - void wrap(bitmap_ind8 &source, const rectangle &subrect) { bitmap_t::wrap(static_cast(source), subrect); } - - // getters - bitmap_format format() const { return k_bitmap_format; } - - bitmap_ind64 &operator=(bitmap_ind64 &&) = default; -}; - - -// ======================> bitmap_yuy16, bitmap_rgb32, bitmap_argb32 - -// BITMAP_FORMAT_YUY16 bitmaps -class bitmap_yuy16 : public bitmap16_t -{ - static const bitmap_format k_bitmap_format = BITMAP_FORMAT_YUY16; - -public: - // construction/destruction - bitmap_yuy16(bitmap_yuy16 &&) = default; - bitmap_yuy16(int width = 0, int height = 0, int xslop = 0, int yslop = 0) : bitmap16_t(k_bitmap_format, width, height, xslop, yslop) { } - bitmap_yuy16(uint16_t *base, int width, int height, int rowpixels) : bitmap16_t(k_bitmap_format, base, width, height, rowpixels) { } - bitmap_yuy16(bitmap_yuy16 &source, const rectangle &subrect) : bitmap16_t(k_bitmap_format, source, subrect) { } - void wrap(uint16_t *base, int width, int height, int rowpixels) { bitmap_t::wrap(base, width, height, rowpixels); } - void wrap(bitmap_yuy16 &source, const rectangle &subrect) { bitmap_t::wrap(static_cast(source), subrect); } - - // getters - bitmap_format format() const { return k_bitmap_format; } - - bitmap_yuy16 &operator=(bitmap_yuy16 &&) = default; -}; - -// BITMAP_FORMAT_RGB32 bitmaps -class bitmap_rgb32 : public bitmap32_t -{ - static const bitmap_format k_bitmap_format = BITMAP_FORMAT_RGB32; - -public: - // construction/destruction - bitmap_rgb32(bitmap_rgb32 &&) = default; - bitmap_rgb32(int width = 0, int height = 0, int xslop = 0, int yslop = 0) : bitmap32_t(k_bitmap_format, width, height, xslop, yslop) { } - bitmap_rgb32(uint32_t *base, int width, int height, int rowpixels) : bitmap32_t(k_bitmap_format, base, width, height, rowpixels) { } - bitmap_rgb32(bitmap_rgb32 &source, const rectangle &subrect) : bitmap32_t(k_bitmap_format, source, subrect) { } - void wrap(uint32_t *base, int width, int height, int rowpixels) { bitmap_t::wrap(base, width, height, rowpixels); } - void wrap(bitmap_rgb32 &source, const rectangle &subrect) { bitmap_t::wrap(static_cast(source), subrect); } - - // getters - bitmap_format format() const { return k_bitmap_format; } - - bitmap_rgb32 &operator=(bitmap_rgb32 &&) = default; -}; - -// BITMAP_FORMAT_ARGB32 bitmaps -class bitmap_argb32 : public bitmap32_t -{ - static const bitmap_format k_bitmap_format = BITMAP_FORMAT_ARGB32; - -public: - // construction/destruction - bitmap_argb32(bitmap_argb32 &&) = default; - bitmap_argb32(int width = 0, int height = 0, int xslop = 0, int yslop = 0) : bitmap32_t(k_bitmap_format, width, height, xslop, yslop) { } - bitmap_argb32(uint32_t *base, int width, int height, int rowpixels) : bitmap32_t(k_bitmap_format, base, width, height, rowpixels) { } - bitmap_argb32(bitmap_argb32 &source, const rectangle &subrect) : bitmap32_t(k_bitmap_format, source, subrect) { } - void wrap(uint32_t *base, int width, int height, int rowpixels) { bitmap_t::wrap(base, width, height, rowpixels); } - void wrap(bitmap_argb32 &source, const rectangle &subrect) { bitmap_t::wrap(static_cast(source), subrect); } - - // getters - bitmap_format format() const { return k_bitmap_format; } - - bitmap_argb32 &operator=(bitmap_argb32 &&) = default; -}; - -#endif // MAME_UTIL_BITMAP_H diff --git a/waterbox/ares64/ares/thirdparty/mame/lib/util/corealloc.h b/waterbox/ares64/ares/thirdparty/mame/lib/util/corealloc.h deleted file mode 100644 index d70a0909f2..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/lib/util/corealloc.h +++ /dev/null @@ -1,66 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/*************************************************************************** - - corealloc.h - - Memory allocation helpers for the helper library. - -***************************************************************************/ - -#ifndef MAME_LIB_UTIL_COREALLOC_H -#define MAME_LIB_UTIL_COREALLOC_H - -#pragma once - -#include -#include -#include -#include -#include -#include -#include - - - -// global allocation helpers - -template struct MakeUniqClearT { typedef std::unique_ptr single_object; }; - -template struct MakeUniqClearT { typedef std::unique_ptr array; }; - -template struct MakeUniqClearT { struct invalid_type { }; }; - -/// make_unique_clear for single objects -template -inline typename MakeUniqClearT::single_object make_unique_clear(Params&&... args) -{ - void *const ptr = ::operator new(sizeof(Tp)); // allocate memory - std::memset(ptr, 0, sizeof(Tp)); - return std::unique_ptr(new(ptr) Tp(std::forward(args)...)); -} - -/// make_unique_clear for arrays of unknown bound -template -inline typename MakeUniqClearT::array make_unique_clear(size_t num) -{ - auto size = sizeof(std::remove_extent_t) * num; - unsigned char* ptr = new unsigned char[size]; // allocate memory - std::memset(ptr, 0, size); - return std::unique_ptr(new(ptr) std::remove_extent_t[num]()); -} - -template -inline typename MakeUniqClearT::array make_unique_clear(size_t num) -{ - auto size = sizeof(std::remove_extent_t) * num; - unsigned char* ptr = new unsigned char[size]; // allocate memory - std::memset(ptr, F, size); - return std::unique_ptr(new(ptr) std::remove_extent_t[num]()); -} - -/// Disable make_unique_clear for arrays of known bound -template -inline typename MakeUniqClearT::invalid_type make_unique_clear(Params&&...) = delete; - -#endif // MAME_LIB_UTIL_COREALLOC_H diff --git a/waterbox/ares64/ares/thirdparty/mame/lib/util/coretmpl.h b/waterbox/ares64/ares/thirdparty/mame/lib/util/coretmpl.h deleted file mode 100644 index 9d033f72d2..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/lib/util/coretmpl.h +++ /dev/null @@ -1,689 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles, Vas Crabb -/*************************************************************************** - - coretmpl.h - - Core templates for basic non-string types. - -***************************************************************************/ -#ifndef MAME_UTIL_CORETMPL_H -#define MAME_UTIL_CORETMPL_H - -#pragma once - -#include "osdcomm.h" -#include "vecstream.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -// ======================> simple_list - -// a simple_list is a singly-linked list whose 'next' pointer is owned -// by the object -template -class simple_list final -{ -public: - class auto_iterator - { - public: - typedef int difference_type; - typedef ElementType value_type; - typedef ElementType *pointer; - typedef ElementType &reference; - typedef std::forward_iterator_tag iterator_category; - - // construction/destruction - auto_iterator() noexcept : m_current(nullptr) { } - auto_iterator(ElementType *ptr) noexcept : m_current(ptr) { } - - // required operator overloads - bool operator==(const auto_iterator &iter) const noexcept { return m_current == iter.m_current; } - bool operator!=(const auto_iterator &iter) const noexcept { return m_current != iter.m_current; } - ElementType &operator*() const noexcept { return *m_current; } - ElementType *operator->() const noexcept { return m_current; } - // note that ElementType::next() must not return a const ptr - auto_iterator &operator++() noexcept { m_current = m_current->next(); return *this; } - auto_iterator operator++(int) noexcept { auto_iterator result(*this); m_current = m_current->next(); return result; } - - private: - // private state - ElementType *m_current; - }; - - // construction/destruction - simple_list() noexcept { } - ~simple_list() noexcept { reset(); } - - // we don't support deep copying - simple_list(const simple_list &) = delete; - simple_list &operator=(const simple_list &) = delete; - - // but we do support cheap swap/move - simple_list(simple_list &&list) noexcept { operator=(std::move(list)); } - simple_list &operator=(simple_list &&list) - { - using std::swap; - swap(m_head, list.m_head); - swap(m_tail, list.m_tail); - swap(m_count, list.m_count); - return *this; - } - - // simple getters - ElementType *first() const noexcept { return m_head; } - ElementType *last() const noexcept { return m_tail; } - int count() const noexcept { return m_count; } - bool empty() const noexcept { return m_count == 0; } - - // range iterators - auto_iterator begin() const noexcept { return auto_iterator(m_head); } - auto_iterator end() const noexcept { return auto_iterator(nullptr); } - - // remove (free) all objects in the list, leaving an empty list - void reset() noexcept - { - while (m_head != nullptr) - remove(*m_head); - } - - // add the given object to the head of the list - ElementType &prepend(ElementType &object) noexcept - { - object.m_next = m_head; - m_head = &object; - if (m_tail == nullptr) - m_tail = m_head; - m_count++; - return object; - } - - // add the given list to the head of the list - void prepend_list(simple_list &list) noexcept - { - int count = list.count(); - if (count == 0) - return; - ElementType *tail = list.last(); - ElementType *head = list.detach_all(); - tail->m_next = m_head; - m_head = head; - if (m_tail == nullptr) - m_tail = tail; - m_count += count; - } - - // add the given object to the tail of the list - ElementType &append(ElementType &object) noexcept - { - object.m_next = nullptr; - if (m_tail != nullptr) - m_tail = m_tail->m_next = &object; - else - m_tail = m_head = &object; - m_count++; - return object; - } - - // add the given list to the tail of the list - void append_list(simple_list &list) noexcept - { - int count = list.count(); - if (count == 0) - return; - ElementType *tail = list.last(); - ElementType *head = list.detach_all(); - if (m_tail != nullptr) - m_tail->m_next = head; - else - m_head = head; - m_tail = tail; - m_count += count; - } - - // insert the given object after a particular object (nullptr means prepend) - ElementType &insert_after(ElementType &object, ElementType *insert_after) noexcept - { - if (insert_after == nullptr) - return prepend(object); - object.m_next = insert_after->m_next; - insert_after->m_next = &object; - if (m_tail == insert_after) - m_tail = &object; - m_count++; - return object; - } - - // insert the given object before a particular object (nullptr means append) - ElementType &insert_before(ElementType &object, ElementType *insert_before) noexcept - { - if (insert_before == nullptr) - return append(object); - for (ElementType **curptr = &m_head; *curptr != nullptr; curptr = &(*curptr)->m_next) - if (*curptr == insert_before) - { - object.m_next = insert_before; - *curptr = &object; - if (m_head == insert_before) - m_head = &object; - m_count++; - return object; - } - return object; - } - - // replace an item in the list at the same location, and remove it - ElementType &replace_and_remove(ElementType &object, ElementType &toreplace) noexcept - { - ElementType *prev = nullptr; - for (ElementType *cur = m_head; cur != nullptr; prev = cur, cur = cur->m_next) - if (cur == &toreplace) - { - if (prev != nullptr) - prev->m_next = &object; - else - m_head = &object; - if (m_tail == &toreplace) - m_tail = &object; - object.m_next = toreplace.m_next; - delete &toreplace; - return object; - } - return append(object); - } - - // detach the head item from the list, but don't free its memory - ElementType *detach_head() noexcept - { - ElementType *result = m_head; - if (result != nullptr) - { - m_head = result->m_next; - m_count--; - if (m_head == nullptr) - m_tail = nullptr; - } - return result; - } - - // detach the given item from the list, but don't free its memory - ElementType &detach(ElementType &object) noexcept - { - ElementType *prev = nullptr; - for (ElementType *cur = m_head; cur != nullptr; prev = cur, cur = cur->m_next) - if (cur == &object) - { - if (prev != nullptr) - prev->m_next = object.m_next; - else - m_head = object.m_next; - if (m_tail == &object) - m_tail = prev; - m_count--; - return object; - } - return object; - } - - // detach the entire list, returning the head, but don't free memory - ElementType *detach_all() noexcept - { - ElementType *result = m_head; - m_head = m_tail = nullptr; - m_count = 0; - return result; - } - - // remove the given object and free its memory - void remove(ElementType &object) noexcept - { - delete &detach(object); - } - - // find an object by index in the list - ElementType *find(int index) const noexcept - { - for (ElementType *cur = m_head; cur != nullptr; cur = cur->m_next) - if (index-- == 0) - return cur; - return nullptr; - } - - // return the index of the given object in the list - int indexof(const ElementType &object) const noexcept - { - int index = 0; - for (ElementType *cur = m_head; cur != nullptr; cur = cur->m_next) - { - if (cur == &object) - return index; - index++; - } - return -1; - } - -private: - // internal state - ElementType * m_head = nullptr; // head of the singly-linked list - ElementType * m_tail = nullptr; // tail of the singly-linked list - int m_count = 0; // number of objects in the list -}; - - -// ======================> fixed_allocator - -// a fixed_allocator is a simple class that maintains a free pool of objects -template -class fixed_allocator -{ - // we don't support deep copying - fixed_allocator(const fixed_allocator &); - fixed_allocator &operator=(const fixed_allocator &); - -public: - // construction/destruction - fixed_allocator() { } - - // allocate a new item, either by recycling an old one, or by allocating a new one - ItemType *alloc() - { - ItemType *result = m_freelist.detach_head(); - if (result == nullptr) - result = new ItemType; - return result; - } - - // reclaim an item by adding it to the free list - void reclaim(ItemType *item) { if (item != nullptr) m_freelist.append(*item); } - void reclaim(ItemType &item) { m_freelist.append(item); } - - // reclaim all items from a list - void reclaim_all(simple_list &_list) { m_freelist.append_list(_list); } - -private: - // internal state - simple_list m_freelist; // list of free objects -}; - - -// ======================> contiguous_sequence_wrapper - -namespace util { - -using osd::u8; -using osd::u16; -using osd::u32; -using osd::u64; - -using osd::s8; -using osd::s16; -using osd::s32; -using osd::s64; - - -// wraps an existing sequence of values -template -class contiguous_sequence_wrapper -{ -public: - typedef std::ptrdiff_t difference_type; - typedef std::size_t size_type; - typedef T value_type; - typedef T &reference; - typedef const T &const_reference; - typedef T *pointer; - typedef T *iterator; - typedef const T *const_iterator; - typedef std::reverse_iterator reverse_iterator; - typedef std::reverse_iterator const_reverse_iterator; - - contiguous_sequence_wrapper(T *ptr, std::size_t size) - : m_begin(ptr) - , m_end(ptr + size) - { - } - - contiguous_sequence_wrapper(const contiguous_sequence_wrapper &that) = default; - - // iteration - iterator begin() { return m_begin; } - const_iterator begin() const { return m_begin; } - const_iterator cbegin() const { return m_begin; } - iterator end() { return m_end; } - const_iterator end() const { return m_end; } - const_iterator cend() const { return m_end; } - - // reverse iteration - reverse_iterator rbegin() { return std::reverse_iterator(end()); } - const_reverse_iterator rbegin() const { return std::reverse_iterator(end()); } - const_reverse_iterator crbegin() const { return std::reverse_iterator(cend()); } - reverse_iterator rend() { return std::reverse_iterator(begin()); } - const_reverse_iterator rend() const { return std::reverse_iterator(begin()); } - const_reverse_iterator crend() const { return std::reverse_iterator(begin()); } - - // capacity - size_type size() const { return m_end - m_begin; } - size_type max_size() const { return size(); } - bool empty() const { return size() == 0; } - - // element access - reference front() { return operator[](0); } - const_reference front() const { return operator[](0); } - reference back() { return operator[](size() - 1); } - const_reference back() const { return operator[](size() - 1); } - reference operator[] (size_type n) { return m_begin[n]; } - const_reference operator[] (size_type n) const { return m_begin[n]; } - reference at(size_type n) { check_in_bounds(n); return operator[](n); } - const_reference at(size_type n) const { check_in_bounds(n); return operator[](n); } - -private: - iterator m_begin; - iterator m_end; - - void check_in_bounds(size_type n) - { - if (n < 0 || n >= size()) - throw std::out_of_range("invalid contiguous_sequence_wrapper subscript"); - } -}; - - -template -class fifo : protected std::array -{ -public: - fifo() - : std::array() - , m_head(this->begin()) - , m_tail(this->begin()) - , m_empty(true) - { - static_assert(0U < N, "FIFO must have at least one element"); - } - fifo(fifo const &) = delete; - fifo(fifo &&) = delete; - fifo &operator=(fifo const &) = delete; - fifo &operator=(fifo &&) = delete; - - template - fifo(fifo const &that) - : std::array(that) - , m_head(std::advance(this->begin(), std::distance(that.begin(), that.m_head))) - , m_tail(std::advance(this->begin(), std::distance(that.begin(), that.m_tail))) - , m_empty(that.m_empty) - { - } - - template - fifo(fifo &&that) - : std::array(std::move(that)) - , m_head(std::advance(this->begin(), std::distance(that.begin(), that.m_head))) - , m_tail(std::advance(this->begin(), std::distance(that.begin(), that.m_tail))) - , m_empty(that.m_empty) - { - } - - template - fifo &operator=(fifo const &that) - { - std::array::operator=(that); - m_head = std::advance(this->begin(), std::distance(that.begin(), that.m_head)); - m_tail = std::advance(this->begin(), std::distance(that.begin(), that.m_tail)); - m_empty = that.m_empty; - return *this; - } - - template - fifo &operator=(fifo &&that) - { - std::array::operator=(std::move(that)); - m_head = std::advance(this->begin(), std::distance(that.begin(), that.m_head)); - m_tail = std::advance(this->begin(), std::distance(that.begin(), that.m_tail)); - m_empty = that.m_empty; - return *this; - } - - bool full() const { return !m_empty && (m_head == m_tail); } - bool empty() const { return m_empty; } - - // number of currently enqueued elements - std::size_t queue_length() const - { - if (m_empty) - return 0; - - auto const distance = std::distance(m_head, m_tail); - - return (distance > 0) ? distance : (N + distance); - } - - void enqueue(T const &v) - { - if (WriteWrap || m_empty || (m_head != m_tail)) - { - *m_tail = v; - if (this->end() == ++m_tail) - m_tail = this->begin(); - m_empty = false; - } - } - - void enqueue(T &&v) - { - if (WriteWrap || m_empty || (m_head != m_tail)) - { - *m_tail = std::move(v); - if (this->end() == ++m_tail) - m_tail = this->begin(); - m_empty = false; - } - } - - T const &dequeue() - { - T const &result(*m_head); - if (ReadWrap || !m_empty) - { - if (this->end() == ++m_head) - m_head = this->begin(); - m_empty = (m_head == m_tail); - } - return result; - } - - void poke(T &v) - { - *m_tail = v; - } - - void poke(T &&v) - { - *m_tail = std::move(v); - } - - T const &peek() const - { - return *m_head; - } - - void clear() - { - m_head = m_tail = this->begin(); - m_empty = true; - } - -private: - typename fifo::iterator m_head, m_tail; - bool m_empty; -}; - - -// extract a string_view from an ovectorstream buffer -template -std::basic_string_view buf_to_string_view(basic_ovectorstream &stream) -{ - // this works on the assumption that the value tellp returns is the same both before and after vec is called - return std::basic_string_view(&stream.vec()[0], stream.tellp()); -} - - -// For declaring an array of the same dimensions as another array (including multi-dimensional arrays) -template struct equivalent_array_or_type { typedef T type; }; -template struct equivalent_array_or_type { typedef typename equivalent_array_or_type::type type[N]; }; -template using equivalent_array_or_type_t = typename equivalent_array_or_type::type; -template struct equivalent_array { }; -template struct equivalent_array { typedef equivalent_array_or_type_t type[N]; }; -template using equivalent_array_t = typename equivalent_array::type; -#define EQUIVALENT_ARRAY(a, T) util::equivalent_array_t > - - -template -using enable_enum_t = typename std::enable_if_t::value, typename std::underlying_type_t >; - -// template function which takes a strongly typed enumerator and returns its value as a compile-time constant -template -constexpr enable_enum_t underlying_value(E e) noexcept -{ - return static_cast >(e); -} - -// template function which takes an integral value and returns its representation as enumerator (even strongly typed) -template -constexpr typename std::enable_if_t::value && std::is_integral::value, E> enum_value(T value) noexcept -{ - return static_cast(value); -} - - -/// \defgroup bitutils Useful functions for bit shuffling -/// \{ - -/// \brief Generate a right-aligned bit mask -/// -/// Generates a right aligned mask of the specified width. Works with -/// signed and unsigned integer types. -/// \tparam T Desired output type. -/// \tparam U Type of the input (generally resolved by the compiler). -/// \param [in] n Width of the mask to generate in bits. -/// \return Right-aligned mask of the specified width. - -template constexpr T make_bitmask(U n) -{ - return T((n < (8 * sizeof(T)) ? (std::make_unsigned_t(1) << n) : std::make_unsigned_t(0)) - 1); -} - - -/// \brief Extract a single bit from an integer -/// -/// Extracts a single bit from an integer into the least significant bit -/// position. -/// -/// \param [in] x The integer to extract the bit from. -/// \param [in] n The bit to extract, where zero is the least -/// significant bit of the input. -/// \return Zero if the specified bit is unset, or one if it is set. -/// \sa bitswap -template constexpr T BIT(T x, U n) noexcept { return (x >> n) & T(1); } - - -/// \brief Extract a bit field from an integer -/// -/// Extracts and right-aligns a bit field from an integer. -/// -/// \param [in] x The integer to extract the bit field from. -/// \param [in] n The least significant bit position of the field to -/// extract, where zero is the least significant bit of the input. -/// \param [in] w The width of the field to extract in bits. -/// \return The field [n..(n+w-1)] from the input. -/// \sa bitswap -template constexpr T BIT(T x, U n, V w) -{ - return (x >> n) & make_bitmask(w); -} - - -/// \brief Extract bits in arbitrary order -/// -/// Extracts bits from an integer. Specify the bits in the order they -/// should be arranged in the output, from most significant to least -/// significant. The extracted bits will be packed into a right-aligned -/// field in the output. -/// -/// \param [in] val The integer to extract bits from. -/// \param [in] b The first bit to extract from the input -/// extract, where zero is the least significant bit of the input. -/// This bit will appear in the most significant position of the -/// right-aligned output field. -/// \param [in] c The remaining bits to extract, where zero is the -/// least significant bit of the input. -/// \return The extracted bits packed into a right-aligned field. -template constexpr T bitswap(T val, U b, V... c) noexcept -{ - if constexpr (sizeof...(c) > 0U) - return (BIT(val, b) << sizeof...(c)) | bitswap(val, c...); - else - return BIT(val, b); -} - - -/// \brief Extract bits in arbitrary order with explicit count -/// -/// Extracts bits from an integer. Specify the bits in the order they -/// should be arranged in the output, from most significant to least -/// significant. The extracted bits will be packed into a right-aligned -/// field in the output. The number of bits to extract must be supplied -/// as a template argument. -/// -/// A compile error will be generated if the number of bit positions -/// supplied does not match the specified number of bits to extract, or -/// if the output type is too small to hold the extracted bits. This -/// guards against some simple errors. -/// -/// \tparam B The number of bits to extract. Must match the number of -/// bit positions supplied. -/// \param [in] val The integer to extract bits from. -/// \param [in] b Bits to extract, where zero is the least significant -/// bit of the input. Specify bits in the order they should appear in -/// the output field, from most significant to least significant. -/// \return The extracted bits packed into a right-aligned field. -template T bitswap(T val, U... b) noexcept -{ - static_assert(sizeof...(b) == B, "wrong number of bits"); - static_assert((sizeof(std::remove_reference_t) * 8) >= B, "return type too small for result"); - return bitswap(val, b...); -} - -/// \} - - -// constexpr absolute value of an integer -template -constexpr std::enable_if_t::value, T> iabs(T v) noexcept -{ - return (v < T(0)) ? -v : v; -} - - -// reduce a fraction -template -inline void reduce_fraction(M &num, N &den) -{ - auto const div(std::gcd(num, den)); - if (div) - { - num /= div; - den /= div; - } -} - -} // namespace util - -#endif // MAME_UTIL_CORETMPL_H diff --git a/waterbox/ares64/ares/thirdparty/mame/lib/util/delegate.cpp b/waterbox/ares64/ares/thirdparty/mame/lib/util/delegate.cpp deleted file mode 100644 index 8949f90f14..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/lib/util/delegate.cpp +++ /dev/null @@ -1,287 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles,Vas Crabb -/*************************************************************************** - - delegate.cpp - - Templates and classes to enable delegates for callbacks. - -***************************************************************************/ - -#include "delegate.h" - -#include -#include - - -//************************************************************************** -// MACROS -//************************************************************************** - -#if defined(MAME_DELEGATE_LOG_ADJ) - #define LOG(...) printf(__VA_ARGS__) -#else - #define LOG(...) do { if (false) printf(__VA_ARGS__); } while (false) -#endif - - - -//************************************************************************** -// LATE BINDING EXCEPTION -//************************************************************************** - -binding_type_exception::binding_type_exception(std::type_info const &target_type, std::type_info const &actual_type) - : m_target_type(&target_type) - , m_actual_type(&actual_type) -{ - std::ostringstream os; - os << "Error performing late bind of function expecting type " << target_type.name() << " to instance of type " << actual_type.name(); - m_what = os.str(); -} - - -char const *binding_type_exception::what() const noexcept -{ - return m_what.c_str(); -} - - - -namespace util::detail { - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -const delegate_mfp_compatible::raw_mfp_data delegate_mfp_compatible::s_null_mfp = { { 0 } }; - - - -//************************************************************************** -// INTERNAL DELEGATE HELPERS -//************************************************************************** - -//------------------------------------------------- -// delegate_mfp_itanium::convert_to_generic - -// given an object pointer and member function -// pointer, apply the displacement and get the -// actual function pointer -//------------------------------------------------- - -delegate_generic_function delegate_mfp_itanium::convert_to_generic(delegate_generic_class *&object) const -{ - // apply the "this" delta to the object first - the value is shifted to the left one bit position for the ARM-like variant - LOG("Input this=%p ptr=%p adj=%ld ", reinterpret_cast(object), reinterpret_cast(m_function), long(m_this_delta)); - object = reinterpret_cast( - reinterpret_cast(object) + (m_this_delta >> ((MAME_ABI_CXX_ITANIUM_MFP_TYPE == MAME_ABI_CXX_ITANIUM_MFP_ARM) ? 1 : 0))); - LOG("Calculated this=%p ", reinterpret_cast(object)); - - // test the virtual member function flag - it's the low bit of either the ptr or adj field, depending on the variant - if ((MAME_ABI_CXX_ITANIUM_MFP_TYPE == MAME_ABI_CXX_ITANIUM_MFP_ARM) ? !(m_this_delta & 1) : !(m_function & 1)) - { - // conventional function pointer - LOG("ptr=%p\n", reinterpret_cast(m_function)); - return reinterpret_cast(m_function); - } - else - { - // byte index into the vtable to the function - std::uint8_t const *const vtable_ptr = *reinterpret_cast(object) + m_function - ((MAME_ABI_CXX_ITANIUM_MFP_TYPE == MAME_ABI_CXX_ITANIUM_MFP_ARM) ? 0 : 1); - delegate_generic_function result; - if (MAME_ABI_CXX_VTABLE_FNDESC) - result = reinterpret_cast(uintptr_t(vtable_ptr)); - else - result = *reinterpret_cast(vtable_ptr); - LOG("ptr=%p (vtable)\n", reinterpret_cast(result)); - return result; - } -} - - -//------------------------------------------------- -// delegate_mfp_msvc::adjust_this_pointer - given -// an object pointer and member function pointer, -// apply the displacement, and walk past -// recognisable thunks -//------------------------------------------------- - -delegate_generic_function delegate_mfp_msvc::adjust_this_pointer(delegate_generic_class *&object) const -{ - LOG("Input this=%p ", reinterpret_cast(object)); - if (sizeof(single_base_equiv) < m_size) - LOG("thisdelta=%d ", m_this_delta); - if (sizeof(unknown_base_equiv) == m_size) - LOG("vptrdelta=%d vindex=%d ", m_vptr_offs, m_vt_index); - std::uint8_t *byteptr = reinterpret_cast(object); - - // test for pointer to member function cast across virtual inheritance relationship - if ((sizeof(unknown_base_equiv) == m_size) && m_vt_index) - { - // add offset from "this" pointer to location of vptr, and add offset to virtual base from vtable - byteptr += m_vptr_offs; - std::uint8_t const *const vptr = *reinterpret_cast(byteptr); - byteptr += *reinterpret_cast(vptr + m_vt_index); - } - - // add "this" pointer displacement if present in the pointer to member function - if (sizeof(single_base_equiv) < m_size) - byteptr += m_this_delta; - LOG("Calculated this=%p\n", reinterpret_cast(byteptr)); - object = reinterpret_cast(byteptr); - - // walk past recognisable thunks -#if defined(__x86_64__) || defined(_M_X64) - std::uint8_t const *func = reinterpret_cast(m_function); - while (true) - { - // Assumes Windows calling convention, and doesn't consider that - // the "this" pointer could be in RDX if RCX is a pointer to - // space for an oversize scalar result. Since the result area - // is uninitialised on entry, you won't see something that looks - // like a vtable dispatch through RCX in this case - it won't - // behave badly, it just won't bypass virtual call thunks in the - // rare situations where the return type is an oversize scalar. - if (0xe9 == func[0]) - { - // relative jump with 32-bit displacement (typically a resolved PLT entry) - LOG("Found relative jump at %p ", func); - func += std::ptrdiff_t(5) + *reinterpret_cast(func + 1); - LOG("redirecting to %p\n", func); - continue; - } - else if ((0x48 == func[0]) && (0x8b == func[1]) && (0x01 == func[2])) - { - if ((0xff == func[3]) && ((0x20 == func[4]) || (0x60 == func[4]) || (0xa0 == func[4]))) - { - // MSVC virtual function call thunk - mov rax,QWORD PTR [rcx] ; jmp QWORD PTR [rax+...] - LOG("Found virtual member function thunk at %p ", func); - std::uint8_t const *const vptr = *reinterpret_cast(object); - if (0x20 == func[4]) // no displacement - func = *reinterpret_cast(vptr); - else if (0x60 == func[4]) // 8-bit displacement - func = *reinterpret_cast(vptr + *reinterpret_cast(func + 5)); - else // 32-bit displacement - func = *reinterpret_cast(vptr + *reinterpret_cast(func + 5)); - LOG("redirecting to %p\n", func); - continue; - } - else if ((0x48 == func[3]) && (0x8b == func[4])) - { - // clang virtual function call thunk - mov rax,QWORD PTR [rcx] ; mov rax,QWORD PTR [rax+...] ; jmp rax - if ((0x00 == func[5]) && (0x48 == func[6]) && (0xff == func[7]) && (0xe0 == func[8])) - { - // no displacement - LOG("Found virtual member function thunk at %p ", func); - std::uint8_t const *const vptr = *reinterpret_cast(object); - func = *reinterpret_cast(vptr); - LOG("redirecting to %p\n", func); - continue; - } - else if ((0x40 == func[5]) && (0x48 == func[7]) && (0xff == func[8]) && (0xe0 == func[9])) - { - // 8-bit displacement - LOG("Found virtual member function thunk at %p ", func); - std::uint8_t const *const vptr = *reinterpret_cast(object); - func = *reinterpret_cast(vptr + *reinterpret_cast(func + 6)); - LOG("redirecting to %p\n", func); - continue; - } - else if ((0x80 == func[5]) && (0x48 == func[10]) && (0xff == func[11]) && (0xe0 == func[12])) - { - // 32-bit displacement - LOG("Found virtual member function thunk at %p ", func); - std::uint8_t const *const vptr = *reinterpret_cast(object); - func = *reinterpret_cast(vptr + *reinterpret_cast(func + 6)); - LOG("redirecting to %p\n", func); - continue; - } - } - } - - // clang uses unoptimised thunks if optimisation is disabled - // Without optimisation, clang produces thunks like: - // 50 push rax - // 48 89 0c 24 mov QWORD PTR [rsp],rcx - // 48 8b 0c 24 mov rcx,QWORD PTR [rsp] - // 48 8b 01 mov rax,QWORD PTR [rcx] - // 48 8b 80 xx xx xx xx mov rax,QWORD PTR [rax+...] - // 41 5a pop r10 - // 48 ff e0 jmp rax - // Trying to decode these thunks likely isn't worth the effort. - // Chasing performance in unoptimised builds isn't very useful, - // and the format of these thunks may be fragile. - - // not something we can easily bypass - break; - } - return reinterpret_cast(std::uintptr_t(func)); -#elif defined(__aarch64__) || defined(_M_ARM64) - std::uint32_t const *func = reinterpret_cast(m_function); - while (true) - { - // Assumes little Endian mode. Instructions are always stored - // in little Endian format on AArch64, so if big Endian mode is - // to be supported, the values need to be swapped. - if ((0x90000010 == (func[0] & 0x9f00001f)) && (0x91000210 == (func[1] & 0xffc003ff)) && (0xd61f0200 == func[2])) - { - // page-relative jump with +/-4GB reach - adrp xip0,... ; add xip0,xip0,#... ; br xip0 - LOG("Found page-relative jump at %p ", func); - std::int64_t const page = - (std::uint64_t(func[0] & 0x60000000) >> 17) | - (std::uint64_t(func[0] & 0x00ffffe0) << 9) | - ((func[0] & 0x00800000) ? (~std::uint64_t(0) << 33) : 0); - std::uint32_t const offset = (func[1] & 0x003ffc00) >> 10; - func = reinterpret_cast(((std::uintptr_t(func) + page) & (~std::uintptr_t(0) << 12)) + offset); - LOG("redirecting to %p\n", func); - } - else if ((0xf9400010 == func[0]) && (0xf9400210 == (func[1] & 0xffc003ff)) && (0xd61f0200 == func[2])) - { - // virtual function call thunk - ldr xip0,[x0] ; ldr xip0,[x0,#...] ; br xip0 - LOG("Found virtual member function thunk at %p ", func); - std::uint32_t const *const *const vptr = *reinterpret_cast(object); - func = vptr[(func[1] & 0x003ffc00) >> 10]; - LOG("redirecting to %p\n", func); - } - else - { - // not something we can easily bypass - break; - } - - // clang uses horribly sub-optimal thunks for AArch64 - // Without optimisation, clang produces thunks like: - // d10143ff sub sp,sp,#80 - // f90027e7 str x7,[sp,#72] - // f90023e6 str x6,[sp,#64] - // f9001fe5 str x5,[sp,#56] - // f9001be4 str x4,[sp,#48] - // f90017e3 str x3,[sp,#40] - // f90013e2 str x2,[sp,#32] - // f9000fe1 str x1,[sp,#24] - // f90007e0 str x0,[sp,#8] - // f94007e0 ldr x0,[sp,#8] - // f9400009 ldr x9,[x0] - // f9400129 ldr x9,[x9,#...] - // 910143ff add sp,sp,#80 - // d61f0120 br x9 - // With optimisation, clang produces thunks like: - // d10103ff sub sp,sp,#64 - // a9008be1 stp x1,x2,[sp,#8] - // a90193e3 stp x3,x4,[sp,#24] - // a9029be5 stp x5,x6,[sp,#40] - // f9001fe7 str x7,[sp,#56] - // f9400009 ldr x9,[x0] - // f9400129 ldr x9,[x9,#...] - // 910103ff add sp,sp,#64 - // d61f0120 br x9 - // It's more effort than it's worth to try decoding these - // thunks. - - } - return reinterpret_cast(std::uintptr_t(func)); -#else - return reinterpret_cast(m_function); -#endif -} - -} // namespace util::detail diff --git a/waterbox/ares64/ares/thirdparty/mame/lib/util/delegate.h b/waterbox/ares64/ares/thirdparty/mame/lib/util/delegate.h deleted file mode 100644 index df1d6ebcba..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/lib/util/delegate.h +++ /dev/null @@ -1,972 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles,Couriersud,Miodrag Milanovic,Vas Crabb -/*************************************************************************** - - delegate.h - - Templates and classes to enable delegates for callbacks. - -**************************************************************************** - - There are many implementations of delegate-like functionality for - C++ code, but none of them is a perfect drop-in fit for use in MAME. - In order to be useful in MAME, we need the following properties: - - * No significant overhead; we want to use these for memory - accessors, and memory accessor overhead is already the dominant - performance aspect for most drivers. - - * Existing static functions need to be bound with an additional - pointer parameter as the first argument. All existing - implementations that allow static function binding assume the - same signature as the member functions. - - * We must be able to bind the function separately from the - object. This is to allow configurations to bind functions - before the objects are created. - - Thus, the implementations below are based on existing works but are - really a new implementation that is specific to MAME. - - -------------------------------------------------------------------- - - The "compatible" version of delegates is based on an implementation - from Sergey Ryazanov, found here: - - https://www.codeproject.com/Articles/11015/The-Impossibly-Fast-C-Delegates - - These delegates essentially generate a templated static stub function - for each target function. The static function takes the first - parameter, uses it as the object pointer, and calls through the - member function. For static functions, the stub is compatible with - the signature of a static function, so we just set the stub directly. - - Pros: - * should work with any modern compiler - * static bindings are just as fast as direct calls - - Cons: - * lots of little stub functions generated - * double-hops on member function calls means more overhead - * calling through stub functions repackages parameters - - -------------------------------------------------------------------- - - The "Itanium" version of delegates makes use of the internal - structure of member function pointers in order to convert them at - binding time into simple static function pointers. This only works - on platforms where object->func(p1, p2) is equivalent in calling - convention to func(object, p1, p2). - - Pros: - * as fast as a standard function call in static and member cases - * no stub functions or double-hops needed - - Cons: - * requires internal knowledge of the member function pointer - * only works for two popular variants of the Itanium C++ ABI - - -------------------------------------------------------------------- - - The "MSVC" version of delegates makes use of the internal structure - of member function pointers in order to convert them at binding time - into simple static function pointers. This only works on platforms - where object->func(p1, p2) is equivalent in calling convention to - func(object, p1, p2). - - Pros: - * as fast as a standard function call in static and non-virtual - member cases - * no stub functions needed - - Cons: - * requires internal knowledge of the member function pointer - * only works works with MSVC ABI, and not on 32-bit x86 - * does not work for classes with virtual bases - * structure return does not work with member function pointers - * virtual member function lookup cannot be done in advance - - -------------------------------------------------------------------- - - Further reading: - - * http://itanium-cxx-abi.github.io/cxx-abi/abi.html#member-pointers - Formal specification for the most common member function pointer - implementations. - - * https://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible - Discusses many member function pointer implementations. Based - on reverse-engineering, so not entirely accurate. In particular, - various fields are incorrectly assumed to be int-sized which is - not true in the general case. - - * https://devblogs.microsoft.com/oldnewthing/20040209-00/?p=40713 - Describes the MSVC implementation of pointers to member - functions for classes with single or multiple inheritance. Does - not mention the additional variants for virtual or unknown - inheritance. Incorrectly states that the "this" pointer - displacement is a size_t when in reality it is an int (important - for 64-bit architectures). - -***************************************************************************/ -#ifndef MAME_LIB_UTIL_DELEGATE_H -#define MAME_LIB_UTIL_DELEGATE_H - -#pragma once - -#include "abi.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -//************************************************************************** -// MACROS -//************************************************************************** - -// types of delegates supported -#define MAME_DELEGATE_TYPE_COMPATIBLE 0 -#define MAME_DELEGATE_TYPE_ITANIUM 1 -#define MAME_DELEGATE_TYPE_MSVC 2 - -// select which one we will be using -#if defined(MAME_DELEGATE_FORCE_COMPATIBLE) - #define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_COMPATIBLE -#elif defined(__GNUC__) - // 32bit MINGW asks for different convention - #if defined(__MINGW32__) && !defined(__x86_64__) && defined(__i386__) - #define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_COMPATIBLE - //#define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_ITANIUM - //#define MAME_DELEGATE_DIFFERENT_MEMBER_ABI 1 - #elif defined(__clang__) && defined(__i386__) && defined(_WIN32) - #define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_COMPATIBLE - #else - #define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_ITANIUM - #define MAME_DELEGATE_DIFFERENT_MEMBER_ABI 0 - #endif -#elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_ARM64)) - #define MAME_DELEGATE_DIFFERENT_MEMBER_ABI 0 - #define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_MSVC -#else - #define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_COMPATIBLE -#endif - -#if MAME_DELEGATE_USE_TYPE == MAME_DELEGATE_TYPE_COMPATIBLE - #define MAME_DELEGATE_DIFFERENT_MEMBER_ABI 0 -#endif - - -/// \brief Base for objects used with late binding -/// -/// Default polymorphic class used as base for objects that can be bound -/// to after the target function has already been set. -class delegate_late_bind -{ -public: - virtual ~delegate_late_bind() = default; -}; - - -/// \brief Inappropriate late bind object error -/// -/// Thrown as an exception if the object supplied for late binding -/// cannot be cast to the target type for the delegate's function. -class binding_type_exception : public std::bad_cast -{ -public: - binding_type_exception(std::type_info const &target_type, std::type_info const &actual_type); - - virtual char const *what() const noexcept override; - - std::type_info const &target_type() const noexcept { return *m_target_type; } - std::type_info const &actual_type() const noexcept { return *m_actual_type; } - -private: - std::string m_what; - std::type_info const *m_target_type; - std::type_info const *m_actual_type; -}; - - - -namespace util::detail { - -//************************************************************************** -// HELPER CLASSES -//************************************************************************** - -// generic function type -using delegate_generic_function = void(*)(); - - -// ======================> generic_class - -// define a dummy generic class that is just straight single-inheritance -#ifdef _MSC_VER -class delegate_generic_class { }; -#else -class delegate_generic_class; -#endif - - -// ======================> delegate_traits - -// delegate_traits is a meta-template that is used to provide a static function pointer -// and member function pointer of the appropriate type and number of parameters - -template -struct delegate_traits -{ - using static_func_type = ReturnType (*)(ClassType *, Params...); - using static_ref_func_type = ReturnType (*)(ClassType &, Params...); - using member_func_type = ReturnType (ClassType::*)(Params...); - using const_member_func_type = ReturnType (ClassType::*)(Params...) const; -}; - - - -/// \brief Maximally compatible member function pointer wrapper -/// -/// Instantiates a static member function template on construction as -/// an adaptor thunk to call the supplied member function with the -/// supplied object. Adds one layer of indirection to calls. -/// -/// This implementation requires the representation of a null member -/// function pointer to be all zeroes. -class delegate_mfp_compatible -{ -public: - // default constructor - delegate_mfp_compatible() - : m_rawdata(s_null_mfp) - , m_realobject(nullptr) - , m_stubfunction(nullptr) - { } - - // copy constructor - delegate_mfp_compatible(const delegate_mfp_compatible &src) = default; - - // construct from any member function pointer - template - delegate_mfp_compatible(MemberFunctionType mfp, MemberFunctionClass *, ReturnType *, StaticFunctionType) - : m_rawdata(s_null_mfp) - , m_realobject(nullptr) - , m_stubfunction(make_generic(&delegate_mfp_compatible::method_stub)) - { - static_assert(sizeof(mfp) <= sizeof(m_rawdata), "Unsupported member function pointer size"); - *reinterpret_cast(&m_rawdata) = mfp; - } - - // comparison helpers - bool operator==(const delegate_mfp_compatible &rhs) const { return m_rawdata == rhs.m_rawdata; } - bool isnull() const { return m_rawdata == s_null_mfp; } - - // getters - delegate_generic_class *real_object(delegate_generic_class *original) const - { - return m_realobject; - } - - // binding helpers - template - void update_after_bind(FunctionType &funcptr, delegate_generic_class *&object); - - template - void update_after_copy(FunctionType &funcptr, delegate_generic_class *&object); - -private: - // helper stubs for calling encased member function pointers - template - static ReturnType method_stub(delegate_generic_class *object, Params ... args); - - // helper to convert a function of a given type to a generic function, forcing template - // instantiation to match the source type - template - static delegate_generic_function make_generic(SourceType funcptr) - { - return reinterpret_cast(funcptr); - } - - // FIXME: not properly aligned for storing pointers - struct raw_mfp_data - { -#if defined(__INTEL_COMPILER) && defined(_M_X64) // needed for "Intel(R) C++ Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 14.0.2.176 Build 20140130" at least - int data[((sizeof(void *) + 4 * sizeof(int)) + (sizeof(int) - 1)) / sizeof(int)]; -#else // all other cases - for MSVC maximum size is one pointer, plus 3 ints; all other implementations seem to be smaller - int data[((sizeof(void *) + 3 * sizeof(int)) + (sizeof(int) - 1)) / sizeof(int)]; -#endif - bool operator==(const raw_mfp_data &rhs) const { return !std::memcmp(data, rhs.data, sizeof(data)); } - }; - - // internal state - raw_mfp_data m_rawdata; // raw buffer to hold the copy of the function pointer - delegate_generic_class * m_realobject; // pointer to the object used for calling - delegate_generic_function m_stubfunction; // pointer to our matching stub function - - static const raw_mfp_data s_null_mfp; // nullptr mfp -}; - - -template -void delegate_mfp_compatible::update_after_bind(FunctionType &funcptr, delegate_generic_class *&object) -{ - m_realobject = object; - object = reinterpret_cast(this); - funcptr = reinterpret_cast(m_stubfunction); -} - - -template -void delegate_mfp_compatible::update_after_copy(FunctionType &funcptr, delegate_generic_class *&object) -{ - assert(reinterpret_cast(m_stubfunction) == funcptr); - object = reinterpret_cast(this); -} - - -template -ReturnType delegate_mfp_compatible::method_stub(delegate_generic_class *object, Params ... args) -{ - using mfptype = ReturnType(FunctionClass::*)(Params...); - delegate_mfp_compatible &_this = *reinterpret_cast(object); - mfptype &mfp = *reinterpret_cast(&_this.m_rawdata); - return (reinterpret_cast(_this.m_realobject)->*mfp)(std::forward(args)...); -} - - - -/// \brief Itanium C++ ABI member function pointer wrapper -/// -/// Supports the two most popular pointer to member function -/// implementations described in the Itanium C++ ABI. Both of these -/// consist of a pointer followed by a ptrdiff_t. -/// -/// The first variant is used when member the least significant bit of a -/// member function pointer need never be set and vtable entry offsets -/// are guaranteed to be even numbers of bytes. If the pointer is even, -/// it is a conventional function pointer to the member function. If -/// the pointer is odd, it is a byte offset into the vtable plus one. -/// The ptrdiff_t is a byte offset to add to the this pointer. A null -/// member function pointer is represented by setting the pointer to a -/// null pointer. -/// -/// The second variant is used when the least significant bit of a -/// pointer to a member function may need to be set or it may not be -/// possible to distinguish between a vtable offset and a null pointer. -/// (This is the case for ARM where the least significant bit of a -/// pointer to a function is set if the function starts in Thumb mode.) -/// If the least significant bit of the ptrdiff_t is clear, the pointer -/// is a conventional function pointer to the member function. If the -/// least significant bit of the ptrdiff_t is set, the pointer is a byte -/// offset into the vtable. The ptrdiff_t must be shifted right one bit -/// position to make a byte offset to add to the this pointer. A null -/// member function pointer is represented by setting the pointer to a -/// null pointer and clearing the least significant bit of the -/// ptrdiff_t. -class delegate_mfp_itanium -{ -public: - // default constructor - delegate_mfp_itanium() = default; - - // copy constructor - delegate_mfp_itanium(const delegate_mfp_itanium &src) = default; - - // construct from any member function pointer - template - delegate_mfp_itanium(MemberFunctionType mfp, MemberFunctionClass *, ReturnType *, StaticFunctionType) - { - static_assert(sizeof(mfp) == sizeof(*this), "Unsupported member function pointer size"); - *reinterpret_cast(this) = mfp; - } - - // comparison helpers - bool operator==(const delegate_mfp_itanium &rhs) const - { - return (isnull() && rhs.isnull()) || ((m_function == rhs.m_function) && (m_this_delta == rhs.m_this_delta)); - } - - bool isnull() const - { - if (MAME_ABI_CXX_ITANIUM_MFP_TYPE == MAME_ABI_CXX_ITANIUM_MFP_ARM) - return !reinterpret_cast(m_function) && !(m_this_delta & 1); - else - return !reinterpret_cast(m_function); - } - - // getters - static delegate_generic_class *real_object(delegate_generic_class *original) - { - return original; - } - - // binding helpers - template - void update_after_bind(FunctionType &funcptr, delegate_generic_class *&object) - { - funcptr = reinterpret_cast(convert_to_generic(object)); - } - - template - void update_after_copy(FunctionType &funcptr, delegate_generic_class *&object) - { - } - -private: - // extract the generic function and adjust the object pointer - delegate_generic_function convert_to_generic(delegate_generic_class *&object) const; - - // actual state - uintptr_t m_function = reinterpret_cast(static_cast(nullptr)); // function pointer or vtable offset - ptrdiff_t m_this_delta = 0; // delta to apply to the 'this' pointer -}; - - - -/// \brief MSVC member function pointer wrapper -/// -/// MSVC uses space optimisation. A member function pointer is a -/// conventional function pointer followed by zero to three int values, -/// depending on whether the class has single, multiple, virtual or -/// unknown inheritance of base classes. The function pointer is always -/// a conventional function pointer (a thunk is used to call virtual -/// member functions through the vtable). -/// -/// If present, the first int value is a byte offset to add to the this -/// pointer before calling the function. -/// -/// For the virtual inheritance case, the offset to the vtable pointer -/// from the location the this pointer points to must be known by the -/// compiler when the member function pointer is called. The second int -/// value is a byte offset into the vtable to an int value containing an -/// additional byte offset to add to the this pointer. -/// -/// For the unknown inheritance case, the second int value is a byte -/// offset add to the this pointer to obtain a pointer to the vtable -/// pointer, or undefined if not required. If the third int value is -/// not zero, it is a byte offset into the vtable to an int value -/// containing an additional byte offset to add to the this pointer. -/// -/// It is not possible to support the virtual inheritance case without -/// some way of obtaining the offset to the vtable pointer. -class delegate_mfp_msvc -{ - struct single_base_equiv { delegate_generic_function fptr; }; - struct multi_base_equiv { delegate_generic_function fptr; int thisdisp; }; - struct unknown_base_equiv { delegate_generic_function fptr; int thisdisp, vptrdisp, vtdisp; }; - -public: - // default constructor - delegate_mfp_msvc() = default; - - // copy constructor - delegate_mfp_msvc(const delegate_mfp_msvc &src) = default; - - // construct from any member function pointer - template - delegate_mfp_msvc(MemberFunctionType mfp, MemberFunctionClass *, ReturnType *, StaticFunctionType) - { - // FIXME: this doesn't actually catch the unsupported virtual inheritance case on 64-bit targets - // alignment of the pointer means sizeof gives the same value for multiple inheritance and virtual inheritance cases - static_assert( - (sizeof(mfp) == sizeof(single_base_equiv)) || (sizeof(mfp) == sizeof(multi_base_equiv)) || (sizeof(mfp) == sizeof(unknown_base_equiv)), - "Unsupported member function pointer size"); - static_assert(sizeof(mfp) <= sizeof(*this), "Member function pointer is too large to support"); - *reinterpret_cast(this) = mfp; - m_size = sizeof(mfp); - } - - // comparison helpers - bool operator==(const delegate_mfp_msvc &rhs) const - { - if (m_function != rhs.m_function) - { - return false; - } - else if (sizeof(single_base_equiv) == m_size) - { - return (sizeof(single_base_equiv) == rhs.m_size) || (!rhs.m_this_delta && ((sizeof(multi_base_equiv) == rhs.m_size) || !rhs.m_vt_index)); - } - else if (sizeof(multi_base_equiv) == m_size) - { - if (sizeof(unknown_base_equiv) == rhs.m_size) - return (m_this_delta == rhs.m_this_delta) && !rhs.m_vt_index; - else - return (sizeof(single_base_equiv) == rhs.m_size) ? !m_this_delta : (m_this_delta == rhs.m_this_delta); - } - else if (sizeof(unknown_base_equiv) == rhs.m_size) - { - return (m_this_delta == rhs.m_this_delta) && (m_vt_index == rhs.m_vt_index) && (!m_vt_index || (m_vptr_offs == rhs.m_vptr_offs)); - } - else - { - return !m_vt_index && ((sizeof(multi_base_equiv) == rhs.m_size) ? (m_this_delta == rhs.m_this_delta) : !m_this_delta); - } - } - - bool isnull() const - { - return !reinterpret_cast(m_function); - } - - // getters - static delegate_generic_class *real_object(delegate_generic_class *original) { return original; } - - // binding helpers - template - void update_after_bind(FunctionType &funcptr, delegate_generic_class *&object) - { - funcptr = reinterpret_cast(adjust_this_pointer(object)); - } - - template - void update_after_copy(FunctionType &funcptr, delegate_generic_class *&object) - { - } - -private: - // adjust the object pointer and bypass thunks - delegate_generic_function adjust_this_pointer(delegate_generic_class *&object) const; - - // actual state - uintptr_t m_function = 0; // pointer to function or non-virtual thunk for virtual function call - int m_this_delta = 0; // delta to apply to the 'this' pointer for multiple inheritance - int m_vptr_offs = 0; // offset to apply to this pointer to obtain pointer to vptr - int m_vt_index = 0; // offset into vtable to additional delta to apply to the 'this' pointer - - unsigned m_size = 0; // overall size of the pointer to member function representation -}; - - - -#if MAME_DELEGATE_USE_TYPE == MAME_DELEGATE_TYPE_COMPATIBLE - -template -struct delegate_mfp { using type = delegate_mfp_compatible; }; - -#elif MAME_DELEGATE_USE_TYPE == MAME_DELEGATE_TYPE_ITANIUM - -template -struct delegate_mfp { using type = delegate_mfp_itanium; }; - -#elif MAME_DELEGATE_USE_TYPE == MAME_DELEGATE_TYPE_MSVC - -/// \brief Determine whether a type is returned conventionally -/// -/// Under the MSVC C++ ABI with the Microsoft calling convention for -/// x86-64 or AArch64, the calling convention for member functions is -/// not quite the same as a free function with the "this" pointer as the -/// first parameter. -/// -/// Conventionally, structure and union values can be returned in -/// registers if they are small enough and are aggregates (trivially -/// constructible, destructible, copyable and assignable). On x86-64, -/// if the value cannot be returned in registers, the pointer to the -/// area for the return value is conventionally passed in RCX and -/// explicit parameters are shifted by one position. On AArch64, if the -/// value cannot be returned in registers, the pointer to the area for -/// the return value is passed in X8 (explicit parameters do not need to -/// be shifted). -/// -/// For member functions, structure and union types are never returned -/// in registers, and the pointer to the area for the return value is -/// passed differently for structures and unions. When a structure or -/// union is to be returned, a pointer to the area for the return value -/// is effectively passed as a second implicit parameter. On x86-64, -/// the "this" pointer is passed in RCX and the pointer to the area for -/// the return value is passed in RDX; on AArch64, the "this" pointer is -/// passed in X0 and the pointer to the area for the return value is -/// passed in X1. Explicit parameters are shifted an additional -/// position to allow for the second implicit parameter. -/// -/// Note that pointer types are returned conventionally from member -/// functions even when they're too large to return in registers (e.g. a -/// pointer to a function member of a class with unknown inheritance). -/// -/// Because of this, we may need to use the #delegate_mfp_compatible -/// class to generate adaptor thunks depending on the return type. This -/// trait doesn't need to reliably be true for types that are returned -/// conventionally from member functions; it only needs to reliably be -/// false for types that aren't. Incorrectly yielding true will result -/// in incorrect behaviour while incorrectly yielding false will just -/// cause increased overhead (both compile-time and run-time). -template -using delegate_mfp_conventional_return = std::bool_constant< - std::is_void_v || - std::is_scalar_v || - std::is_reference_v >; - -template -struct delegate_mfp; - -template -struct delegate_mfp::value> > { using type = delegate_mfp_msvc; }; - -template -struct delegate_mfp::value> > { using type = delegate_mfp_compatible; }; - -#endif - -template using delegate_mfp_t = typename delegate_mfp::type; - - - -/// \brief Helper class for generating late bind functions -/// -/// Members of this class don't depend on the delegate's signature. -/// Keeping them here reduces the number of template instantiations as -/// you'll only need one late bind helper for each class used for late -/// binding, not for each class for each delegate signature. -template -class delegate_late_bind_helper -{ -public: - // make it default constructible and copyable - delegate_late_bind_helper() = default; - delegate_late_bind_helper(delegate_late_bind_helper const &) = default; - delegate_late_bind_helper(delegate_late_bind_helper &&) = default; - delegate_late_bind_helper &operator=(delegate_late_bind_helper const &) = default; - delegate_late_bind_helper &operator=(delegate_late_bind_helper &&) = default; - - template - delegate_late_bind_helper(FunctionClass *) - : m_latebinder(&delegate_late_bind_helper::late_bind_helper) - { - } - - delegate_generic_class *operator()(LateBindBase &object) { return m_latebinder(object); } - - explicit operator bool() const noexcept { return bool(m_latebinder); } - -private: - using late_bind_func = delegate_generic_class*(*)(LateBindBase &object); - - template static delegate_generic_class *late_bind_helper(LateBindBase &object); - - late_bind_func m_latebinder = nullptr; -}; - - -template -template -delegate_generic_class *delegate_late_bind_helper::late_bind_helper(LateBindBase &object) -{ - FunctionClass *result = dynamic_cast(&object); - if (result) - return reinterpret_cast(result); - throw binding_type_exception(typeid(FunctionClass), typeid(object)); -} - - - -//************************************************************************** -// COMMON DELEGATE BASE CLASS -//************************************************************************** - -template -class delegate_base -{ -public: - // define our traits - template using traits = delegate_traits; - using generic_static_func = typename traits::static_func_type; - typedef MAME_ABI_CXX_MEMBER_CALL generic_static_func generic_member_func; - - // generic constructor - delegate_base() = default; - - // copy constructor - delegate_base(const delegate_base &src) - : m_function(src.m_function) - , m_object(src.m_object) - , m_latebinder(src.m_latebinder) - , m_raw_function(src.m_raw_function) - , m_raw_mfp(src.m_raw_mfp) - { - if (src.object() && is_mfp()) - m_raw_mfp.update_after_copy(m_function, m_object); - } - - // copy constructor with late bind - delegate_base(const delegate_base &src, LateBindBase &object) - : m_function(src.m_function) - , m_latebinder(src.m_latebinder) - , m_raw_function(src.m_raw_function) - , m_raw_mfp(src.m_raw_mfp) - { - late_bind(object); - } - - // construct from member function with object pointer - template - delegate_base(typename traits::member_func_type funcptr, FunctionClass *object) - : m_latebinder(object) - , m_raw_mfp(funcptr, object, static_cast(nullptr), static_cast(nullptr)) - { - bind(object); - } - - // construct from const member function with object pointer - template - delegate_base(typename traits::const_member_func_type funcptr, FunctionClass *object) - : m_latebinder(object) - , m_raw_mfp(funcptr, object, static_cast(nullptr), static_cast(nullptr)) - { - bind(object); - } - - // construct from static reference function with object reference - template - delegate_base(typename traits::static_ref_func_type funcptr, FunctionClass *object) - : m_function(reinterpret_cast(funcptr)) - , m_latebinder(object) - , m_raw_function(reinterpret_cast(funcptr)) - { - bind(object); - } - - // copy operator - delegate_base &operator=(const delegate_base &src) - { - if (this != &src) - { - m_function = src.m_function; - m_object = src.m_object; - m_latebinder = src.m_latebinder; - m_raw_function = src.m_raw_function; - m_raw_mfp = src.m_raw_mfp; - - if (src.object() && is_mfp()) - m_raw_mfp.update_after_copy(m_function, m_object); - } - return *this; - } - - // comparison helper - bool operator==(const delegate_base &rhs) const - { - return (m_raw_function == rhs.m_raw_function) && (object() == rhs.object()) && (m_raw_mfp == rhs.m_raw_mfp); - } - - // call the function - ReturnType operator()(Params... args) const - { - if ((MAME_DELEGATE_DIFFERENT_MEMBER_ABI) && is_mfp()) - return (*reinterpret_cast(m_function))(m_object, std::forward(args)...); - else - return (*m_function)(m_object, std::forward(args)...); - } - - // getters - bool has_object() const { return object() != nullptr; } - bool isnull() const { return !m_raw_function && m_raw_mfp.isnull(); } - bool is_mfp() const { return !m_raw_mfp.isnull(); } - - // late binding - void late_bind(LateBindBase &object) - { - if (m_latebinder) - bind(m_latebinder(object)); - } - -protected: - // return the actual object (not the one we use for calling) - delegate_generic_class *object() const { return is_mfp() ? m_raw_mfp.real_object(m_object) : m_object; } - - // bind the actual object - template - void bind(FunctionClass *object) - { - m_object = reinterpret_cast(object); - - // if we're wrapping a member function pointer, handle special stuff - if (m_object && is_mfp()) - m_raw_mfp.update_after_bind(m_function, m_object); - } - - // internal state - generic_static_func m_function = nullptr; // resolved static function pointer - delegate_generic_class * m_object = nullptr; // resolved object to the post-cast object - delegate_late_bind_helper m_latebinder; // late binding helper - generic_static_func m_raw_function = nullptr; // raw static function pointer - delegate_mfp_t m_raw_mfp; // raw member function pointer -}; - -} // namespace util::detail - - - -//************************************************************************** -// NATURAL SYNTAX -//************************************************************************** - -// declare the base template -template class delegate; - -template -class delegate : public util::detail::delegate_base -{ -private: - using basetype = util::detail::delegate_base; - using functoid_setter = void (*)(delegate &); - - template struct functoid_type_unwrap { using type = std::remove_reference_t; }; - template struct functoid_type_unwrap > { using type = typename functoid_type_unwrap::type; }; - template using unwrapped_functoid_t = typename functoid_type_unwrap > >::type; - - template static constexpr bool matching_non_const_call(T &&) { return false; } - template static constexpr bool matching_non_const_call(ReturnType (T::*)(Params...)) { return true; } - template static constexpr bool matching_const_call(T &&) { return false; } - template static constexpr bool matching_const_call(ReturnType (T::*)(Params...) const) { return true; } - - template static T *unwrap_functoid(T *functoid) { return functoid; } - template static T *unwrap_functoid(std::reference_wrapper *functoid) { return &functoid->get(); } - - template - unwrapped_functoid_t *unwrap_functoid() noexcept - { - return unwrap_functoid(std::any_cast > >(&m_functoid)); - } - - template - static functoid_setter make_functoid_setter() - { - if constexpr (matching_non_const_call(&unwrapped_functoid_t::operator())) - { - return - [] (delegate &obj) - { - obj.basetype::operator=( - basetype( - static_cast::*)(Params...)>(&unwrapped_functoid_t::operator()), - obj.unwrap_functoid())); - }; - } - else if constexpr (matching_const_call(&unwrapped_functoid_t::operator())) - { - return - [] (delegate &obj) - { - obj.basetype::operator=( - basetype( - static_cast::*)(Params...) const>(&unwrapped_functoid_t::operator()), - obj.unwrap_functoid())); - }; - } - else - { - return - [] (delegate &obj) - { - obj.basetype::operator=( - basetype( - [] (unwrapped_functoid_t &f, Params... args) { return ReturnType(f(std::forward(args)...)); }, - obj.unwrap_functoid())); - }; - } - } - - std::any m_functoid; - functoid_setter m_set_functoid = nullptr; - -protected: - template using traits = typename basetype::template traits; - template using member_func_type = typename traits::member_func_type; - template using const_member_func_type = typename traits::const_member_func_type; - template using static_ref_func_type = typename traits::static_ref_func_type; - - template using suitable_functoid = std::is_invocable_r; - -public: - delegate() : basetype() { } - - delegate(delegate const &src) - : basetype(src.m_functoid.has_value() ? static_cast(basetype()) : src) - , m_functoid(src.m_functoid) - , m_set_functoid(src.m_set_functoid) - { - if (m_functoid.has_value()) - m_set_functoid(*this); - } - - delegate(delegate &src) - : delegate(const_cast(src)) - { - } - - delegate(delegate &&src) - : basetype(src.m_functoid.has_value() ? basetype() : std::move(src)) - , m_functoid(std::move(src.m_functoid)) - , m_set_functoid(std::move(src.m_set_functoid)) - { - if (m_functoid.has_value()) - m_set_functoid(*this); - } - - delegate(delegate const &src, LateBindBase &object) - : basetype(src.m_functoid.has_value() ? basetype() : basetype(src, object)) - , m_functoid(src.m_functoid) - , m_set_functoid(src.m_set_functoid) - { - if (m_functoid.has_value()) - m_set_functoid(*this); - } - - template delegate(member_func_type funcptr, FunctionClass *object) : basetype(funcptr, object) { } - template delegate(const_member_func_type funcptr, FunctionClass *object) : basetype(funcptr, object) { } - template delegate(static_ref_func_type funcptr, FunctionClass *object) : basetype(funcptr, object) { } - - template - explicit delegate(T &&functoid, std::enable_if_t::value, int> = 0) - : basetype() - , m_functoid(std::forward(functoid)) - , m_set_functoid(make_functoid_setter()) - { - m_set_functoid(*this); - } - - delegate &operator=(std::nullptr_t) noexcept - { - reset(); - return *this; - } - - delegate &operator=(delegate const &src) - { - m_functoid = src.m_functoid; - m_set_functoid = src.m_set_functoid; - if (m_functoid.has_value()) - m_set_functoid(*this); - else - basetype::operator=(src); - return *this; - } - - delegate &operator=(delegate &&src) - { - m_functoid = std::move(src.m_functoid); - m_set_functoid = std::move(src.m_set_functoid); - if (m_functoid.has_value()) - m_set_functoid(*this); - else - basetype::operator=(std::move(src)); - return *this; - } - - void reset() noexcept - { - basetype::operator=(basetype()); - m_functoid.reset(); - m_set_functoid = nullptr; - } -}; - -#endif // MAME_LIB_UTIL_DELEGATE_H diff --git a/waterbox/ares64/ares/thirdparty/mame/lib/util/endianness.h b/waterbox/ares64/ares/thirdparty/mame/lib/util/endianness.h deleted file mode 100644 index cef615fcb8..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/lib/util/endianness.h +++ /dev/null @@ -1,76 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/*************************************************************************** - - endianness.h - - Endianness types and utility functions. - -***************************************************************************/ - -#ifndef MAME_LIB_UTIL_ENDIANNESS_H -#define MAME_LIB_UTIL_ENDIANNESS_H - -#pragma once - -#include - - -namespace util { - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// constants for expression endianness -enum class endianness -{ - little, - big, -#ifdef LSB_FIRST - native = little -#else - native = big -#endif -}; - - -//************************************************************************** -// MACROS AND INLINE FUNCTIONS -//************************************************************************** - -constexpr std::string_view endian_to_string_view(endianness e) { using namespace std::literals; return e == endianness::little ? "little"sv : "big"sv; } - -// endian-based value: first value is if native endianness is little-endian, second is if native is big-endian -#define NATIVE_ENDIAN_VALUE_LE_BE(leval,beval) ((util::endianness::native == util::endianness::little) ? (leval) : (beval)) - - -// inline functions for accessing bytes and words within larger chunks - -// read/write a byte to a 16-bit space -template constexpr T BYTE_XOR_BE(T a) { return a ^ NATIVE_ENDIAN_VALUE_LE_BE(1,0); } -template constexpr T BYTE_XOR_LE(T a) { return a ^ NATIVE_ENDIAN_VALUE_LE_BE(0,1); } - -// read/write a byte to a 32-bit space -template constexpr T BYTE4_XOR_BE(T a) { return a ^ NATIVE_ENDIAN_VALUE_LE_BE(3,0); } -template constexpr T BYTE4_XOR_LE(T a) { return a ^ NATIVE_ENDIAN_VALUE_LE_BE(0,3); } - -// read/write a word to a 32-bit space -template constexpr T WORD_XOR_BE(T a) { return a ^ NATIVE_ENDIAN_VALUE_LE_BE(2,0); } -template constexpr T WORD_XOR_LE(T a) { return a ^ NATIVE_ENDIAN_VALUE_LE_BE(0,2); } - -// read/write a byte to a 64-bit space -template constexpr T BYTE8_XOR_BE(T a) { return a ^ NATIVE_ENDIAN_VALUE_LE_BE(7,0); } -template constexpr T BYTE8_XOR_LE(T a) { return a ^ NATIVE_ENDIAN_VALUE_LE_BE(0,7); } - -// read/write a word to a 64-bit space -template constexpr T WORD2_XOR_BE(T a) { return a ^ NATIVE_ENDIAN_VALUE_LE_BE(6,0); } -template constexpr T WORD2_XOR_LE(T a) { return a ^ NATIVE_ENDIAN_VALUE_LE_BE(0,6); } - -// read/write a dword to a 64-bit space -template constexpr T DWORD_XOR_BE(T a) { return a ^ NATIVE_ENDIAN_VALUE_LE_BE(4,0); } -template constexpr T DWORD_XOR_LE(T a) { return a ^ NATIVE_ENDIAN_VALUE_LE_BE(0,4); } - -} // namespace util - -#endif // MAME_LIB_UTIL_ENDIANNESS_H diff --git a/waterbox/ares64/ares/thirdparty/mame/lib/util/hash.h b/waterbox/ares64/ares/thirdparty/mame/lib/util/hash.h deleted file mode 100644 index b13ac5556a..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/lib/util/hash.h +++ /dev/null @@ -1,122 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/*************************************************************************** - - hash.h - - Function to handle hash functions (checksums) - - Based on original idea by Farfetch'd - -***************************************************************************/ - -#ifndef MAME_UTIL_HASH_H -#define MAME_UTIL_HASH_H - -#pragma once - -#include "hashing.h" - - -//************************************************************************** -// MACROS -//************************************************************************** - -// use these to define compile-time internal-format hash strings -#define CRC(x) "R" #x -#define SHA1(x) "S" #x -#define NO_DUMP "!" -#define BAD_DUMP "^" - - -namespace util { -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - - -// ======================> hash_collection - -// a collection of the various supported hashes and flags -class hash_collection -{ -public: - // hash types are identified by non-hex alpha values (G-Z) - static constexpr char HASH_CRC = 'R'; - static constexpr char HASH_SHA1 = 'S'; - - // common combinations for requests - static char const *const HASH_TYPES_CRC; - static char const *const HASH_TYPES_CRC_SHA1; - static char const *const HASH_TYPES_ALL; - - // flags are identified by punctuation marks - static constexpr char FLAG_NO_DUMP = '!'; - static constexpr char FLAG_BAD_DUMP = '^'; - - // construction/destruction - hash_collection(); - hash_collection(std::string_view string); - hash_collection(const hash_collection &src); - ~hash_collection(); - - // operators - hash_collection &operator=(const hash_collection &src); - bool operator==(const hash_collection &rhs) const; - bool operator!=(const hash_collection &rhs) const { return !(*this == rhs); } - - // getters - bool flag(char flag) const { return (m_flags.find_first_of(flag) != std::string::npos); } - std::string hash_types() const; - - // hash manipulators - void reset(); - bool add_from_string(char type, std::string_view string); - bool remove(char type); - - // CRC-specific helpers - bool crc(uint32_t &result) const { result = m_crc32; return m_has_crc32; } - void add_crc(uint32_t crc) { m_crc32 = crc; m_has_crc32 = true; } - - // SHA1-specific helpers - bool sha1(sha1_t &result) const { result = m_sha1; return m_has_sha1; } - void add_sha1(sha1_t sha1) { m_has_sha1 = true; m_sha1 = sha1; } - - // string conversion - std::string internal_string() const; - std::string macro_string() const; - std::string attribute_string() const; - bool from_internal_string(std::string_view string); - - // creation - void begin(const char *types = nullptr); - void buffer(const uint8_t *data, uint32_t length); - void end(); - void compute(const uint8_t *data, uint32_t length, const char *types = nullptr) { begin(types); buffer(data, length); end(); } - -private: - // internal helpers - void copyfrom(const hash_collection &src); - - // internal state - std::string m_flags; - bool m_has_crc32; - crc32_t m_crc32; - bool m_has_sha1; - sha1_t m_sha1; - - // creators - struct hash_creator - { - bool m_doing_crc32; - crc32_creator m_crc32_creator; - bool m_doing_sha1; - sha1_creator m_sha1_creator; - }; - hash_creator * m_creator; -}; - - -} // namespace util - -#endif // MAME_UTIL_HASH_H diff --git a/waterbox/ares64/ares/thirdparty/mame/lib/util/hashing.h b/waterbox/ares64/ares/thirdparty/mame/lib/util/hashing.h deleted file mode 100644 index 6cd73ac184..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/lib/util/hashing.h +++ /dev/null @@ -1,314 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles, Vas Crabb -/*************************************************************************** - - hashing.h - - Hashing helper classes. - -***************************************************************************/ -#ifndef MAME_UTIL_HASHING_H -#define MAME_UTIL_HASHING_H - -#pragma once - -#include "md5.h" - -#include -#include -#include -#include -#include -#include - - -namespace util { - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - - -// ======================> SHA-1 - -// final digest -struct sha1_t -{ - bool operator==(const sha1_t &rhs) const { return memcmp(m_raw, rhs.m_raw, sizeof(m_raw)) == 0; } - bool operator!=(const sha1_t &rhs) const { return memcmp(m_raw, rhs.m_raw, sizeof(m_raw)) != 0; } - operator uint8_t *() { return m_raw; } - bool from_string(std::string_view string); - std::string as_string() const; - uint8_t m_raw[20]; - static const sha1_t null; -}; - -// creation helper -class sha1_creator -{ -public: - // construction/destruction - sha1_creator() { reset(); } - - // reset - void reset(); - - // append data - void append(const void *data, uint32_t length); - - // finalize and compute the final digest - sha1_t finish(); - - // static wrapper to just get the digest from a block - static sha1_t simple(const void *data, uint32_t length) - { - sha1_creator creator; - creator.append(data, length); - return creator.finish(); - } - -protected: - uint64_t m_cnt; - std::array m_st; - uint32_t m_buf[16]; -}; - - - -// ======================> MD5 - -// final digest -struct md5_t -{ - bool operator==(const md5_t &rhs) const { return memcmp(m_raw, rhs.m_raw, sizeof(m_raw)) == 0; } - bool operator!=(const md5_t &rhs) const { return memcmp(m_raw, rhs.m_raw, sizeof(m_raw)) != 0; } - operator uint8_t *() { return m_raw; } - bool from_string(std::string_view string); - std::string as_string() const; - uint8_t m_raw[16]; - static const md5_t null; -}; - -// creation helper -class md5_creator -{ -public: - // construction/destruction - md5_creator() { reset(); } - - // reset - void reset() { MD5Init(&m_context); } - - // append data - void append(const void *data, uint32_t length) { MD5Update(&m_context, reinterpret_cast(data), length); } - - // finalize and compute the final digest - md5_t finish() - { - md5_t result; - MD5Final(result.m_raw, &m_context); - return result; - } - - // static wrapper to just get the digest from a block - static md5_t simple(const void *data, uint32_t length) - { - md5_creator creator; - creator.append(data, length); - return creator.finish(); - } - -protected: - // internal state - struct MD5Context m_context; // internal context -}; - - - -// ======================> CRC-32 - -// final digest -struct crc32_t -{ - crc32_t() { } - constexpr crc32_t(const crc32_t &rhs) = default; - constexpr crc32_t(const uint32_t crc) : m_raw(crc) { } - - constexpr bool operator==(const crc32_t &rhs) const { return m_raw == rhs.m_raw; } - constexpr bool operator!=(const crc32_t &rhs) const { return m_raw != rhs.m_raw; } - - crc32_t &operator=(const crc32_t &rhs) = default; - crc32_t &operator=(const uint32_t crc) { m_raw = crc; return *this; } - - constexpr operator uint32_t() const { return m_raw; } - - bool from_string(std::string_view string); - std::string as_string() const; - - uint32_t m_raw; - - static const crc32_t null; -}; - -// creation helper -class crc32_creator -{ -public: - // construction/destruction - crc32_creator() { reset(); } - - // reset - void reset() { m_accum.m_raw = 0; } - - // append data - void append(const void *data, uint32_t length); - - // finalize and compute the final digest - crc32_t finish() { return m_accum; } - - // static wrapper to just get the digest from a block - static crc32_t simple(const void *data, uint32_t length) - { - crc32_creator creator; - creator.append(data, length); - return creator.finish(); - } - -protected: - // internal state - crc32_t m_accum; // internal accumulator -}; - - - -// ======================> CRC-16 - -// final digest -struct crc16_t -{ - crc16_t() { } - constexpr crc16_t(const crc16_t &rhs) = default; - constexpr crc16_t(const uint16_t crc) : m_raw(crc) { } - - constexpr bool operator==(const crc16_t &rhs) const { return m_raw == rhs.m_raw; } - constexpr bool operator!=(const crc16_t &rhs) const { return m_raw != rhs.m_raw; } - - crc16_t &operator=(const crc16_t &rhs) = default; - crc16_t &operator=(const uint16_t crc) { m_raw = crc; return *this; } - - constexpr operator uint16_t() const { return m_raw; } - - bool from_string(std::string_view string); - std::string as_string() const; - - uint16_t m_raw; - - static const crc16_t null; -}; - -// creation helper -class crc16_creator -{ -public: - // construction/destruction - crc16_creator() { reset(); } - - // reset - void reset() { m_accum.m_raw = 0xffff; } - - // append data - void append(const void *data, uint32_t length); - - // finalize and compute the final digest - crc16_t finish() { return m_accum; } - - // static wrapper to just get the digest from a block - static crc16_t simple(const void *data, uint32_t length) - { - crc16_creator creator; - creator.append(data, length); - return creator.finish(); - } - -protected: - // internal state - crc16_t m_accum; // internal accumulator -}; - - - -// ======================> SUM-16 - -// final digest -struct sum16_t -{ - sum16_t() { } - constexpr sum16_t(const sum16_t &rhs) = default; - constexpr sum16_t(const uint16_t sum) : m_raw(sum) { } - - constexpr bool operator==(const sum16_t &rhs) const { return m_raw == rhs.m_raw; } - constexpr bool operator!=(const sum16_t &rhs) const { return m_raw != rhs.m_raw; } - - sum16_t &operator=(const sum16_t &rhs) = default; - sum16_t &operator=(const uint16_t sum) { m_raw = sum; return *this; } - - constexpr operator uint16_t() const { return m_raw; } - - bool from_string(std::string_view string); - std::string as_string() const; - - uint16_t m_raw; - - static const sum16_t null; -}; - -// creation helper -class sum16_creator -{ -public: - // construction/destruction - sum16_creator() { reset(); } - - // reset - void reset() { m_accum.m_raw = 0; } - - // append data - void append(const void *data, uint32_t length); - - // finalize and compute the final digest - sum16_t finish() { return m_accum; } - - // static wrapper to just get the digest from a block - static sum16_t simple(const void *data, uint32_t length) - { - sum16_creator creator; - creator.append(data, length); - return creator.finish(); - } - -protected: - // internal state - sum16_t m_accum; // internal accumulator -}; - -} // namespace util - -namespace std { - -template <> struct hash<::util::crc32_t> -{ - typedef ::util::crc32_t argument_type; - typedef std::size_t result_type; - result_type operator()(argument_type const & s) const { return std::hash()(s); } -}; - -template <> struct hash<::util::crc16_t> -{ - typedef ::util::crc16_t argument_type; - typedef std::size_t result_type; - result_type operator()(argument_type const & s) const { return std::hash()(s); } -}; - -} // namespace std - -#endif // MAME_UTIL_HASHING_H diff --git a/waterbox/ares64/ares/thirdparty/mame/lib/util/md5.h b/waterbox/ares64/ares/thirdparty/mame/lib/util/md5.h deleted file mode 100644 index 8358e8c1e9..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/lib/util/md5.h +++ /dev/null @@ -1,43 +0,0 @@ -// license:Public Domain -// copyright-holders:Colin Plumb -/* - * This is the header file for the MD5 message-digest algorithm. - * The algorithm is due to Ron Rivest. This code was - * written by Colin Plumb in 1993, no copyright is claimed. - * This code is in the public domain; do with it what you wish. - * - * Equivalent code is available from RSA Data Security, Inc. - * This code has been tested against that, and is equivalent, - * except that you don't need to include two pages of legalese - * with every copy. - * - * To compute the message digest of a chunk of bytes, declare an - * MD5Context structure, pass it to MD5Init, call MD5Update as - * needed on buffers full of bytes, and then call MD5Final, which - * will fill a supplied 16-byte array with the digest. - * - * Changed so as no longer to depend on Colin Plumb's `usual.h' - * header definitions; now uses stuff from dpkg's config.h - * - Ian Jackson . - * Still in the public domain. - */ - -#ifndef MD5_H -#define MD5_H - -typedef unsigned int UWORD32; - -#define md5byte unsigned char - -struct MD5Context { - UWORD32 buf[4]; - UWORD32 bytes[2]; - UWORD32 in[16]; -}; - -void MD5Init(struct MD5Context *context); -void MD5Update(struct MD5Context *context, md5byte const *buf, unsigned len); -void MD5Final(unsigned char digest[16], struct MD5Context *context); -void MD5Transform(UWORD32 buf[4], UWORD32 const in[16]); - -#endif /* !MD5_H */ diff --git a/waterbox/ares64/ares/thirdparty/mame/lib/util/palette.h b/waterbox/ares64/ares/thirdparty/mame/lib/util/palette.h deleted file mode 100644 index d21c8ca812..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/lib/util/palette.h +++ /dev/null @@ -1,287 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/****************************************************************************** - - palette.h - - Core palette routines. - -***************************************************************************/ - -#ifndef MAME_UTIL_PALETTE_H -#define MAME_UTIL_PALETTE_H - -#pragma once - -#include -#include - - -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** - -// forward definitions -class palette_t; - -// an rgb15_t is a single combined 15-bit R,G,B value -typedef uint16_t rgb15_t; - - -// ======================> rgb_t - -// an rgb_t is a single combined R,G,B (and optionally alpha) value -class rgb_t -{ -public: - // construction/destruction - constexpr rgb_t() : m_data(0) { } - constexpr rgb_t(uint32_t data) : m_data(data) { } - constexpr rgb_t(uint8_t r, uint8_t g, uint8_t b) : m_data((255 << 24) | (r << 16) | (g << 8) | b) { } - constexpr rgb_t(uint8_t a, uint8_t r, uint8_t g, uint8_t b) : m_data((a << 24) | (r << 16) | (g << 8) | b) { } - - // getters - constexpr uint8_t a() const { return m_data >> 24; } - constexpr uint8_t r() const { return m_data >> 16; } - constexpr uint8_t g() const { return m_data >> 8; } - constexpr uint8_t b() const { return m_data >> 0; } - constexpr rgb15_t as_rgb15() const { return ((r() >> 3) << 10) | ((g() >> 3) << 5) | ((b() >> 3) << 0); } - constexpr uint8_t brightness() const { return (r() * 222 + g() * 707 + b() * 71) / 1000; } - constexpr uint32_t const *ptr() const { return &m_data; } - void expand_rgb(uint8_t &r, uint8_t &g, uint8_t &b) const { r = m_data >> 16; g = m_data >> 8; b = m_data >> 0; } - void expand_rgb(int &r, int &g, int &b) const { r = (m_data >> 16) & 0xff; g = (m_data >> 8) & 0xff; b = (m_data >> 0) & 0xff; } - - // setters - rgb_t &set_a(uint8_t a) { m_data &= ~0xff000000; m_data |= a << 24; return *this; } - rgb_t &set_r(uint8_t r) { m_data &= ~0x00ff0000; m_data |= r << 16; return *this; } - rgb_t &set_g(uint8_t g) { m_data &= ~0x0000ff00; m_data |= g << 8; return *this; } - rgb_t &set_b(uint8_t b) { m_data &= ~0x000000ff; m_data |= b << 0; return *this; } - - // implicit conversion operators - constexpr operator uint32_t() const { return m_data; } - - // operations - rgb_t &scale8(uint8_t scale) { m_data = rgb_t(clamphi((a() * scale) >> 8), clamphi((r() * scale) >> 8), clamphi((g() * scale) >> 8), clamphi((b() * scale) >> 8)); return *this; } - - // assignment operators - rgb_t &operator=(uint32_t rhs) { m_data = rhs; return *this; } - rgb_t &operator+=(const rgb_t &rhs) { m_data = uint32_t(*this + rhs); return *this; } - rgb_t &operator-=(const rgb_t &rhs) { m_data = uint32_t(*this - rhs); return *this; } - - // arithmetic operators - constexpr rgb_t operator+(const rgb_t &rhs) const { return rgb_t(clamphi(a() + rhs.a()), clamphi(r() + rhs.r()), clamphi(g() + rhs.g()), clamphi(b() + rhs.b())); } - constexpr rgb_t operator-(const rgb_t &rhs) const { return rgb_t(clamplo(a() - rhs.a()), clamplo(r() - rhs.r()), clamplo(g() - rhs.g()), clamplo(b() - rhs.b())); } - - // static helpers - static constexpr uint8_t clamp(int32_t value) { return (value < 0) ? 0 : (value > 255) ? 255 : value; } - static constexpr uint8_t clamphi(int32_t value) { return (value > 255) ? 255 : value; } - static constexpr uint8_t clamplo(int32_t value) { return (value < 0) ? 0 : value; } - - // constant factories - static constexpr rgb_t black() { return rgb_t(0, 0, 0); } - static constexpr rgb_t white() { return rgb_t(255, 255, 255); } - static constexpr rgb_t green() { return rgb_t(0, 255, 0); } - static constexpr rgb_t amber() { return rgb_t(247, 170, 0); } - static constexpr rgb_t transparent() { return rgb_t(0, 0, 0, 0); } - -private: - uint32_t m_data; -}; - - -// ======================> palette_client - -// a single palette client -class palette_client -{ -public: - // construction/destruction - palette_client(palette_t &palette); - ~palette_client(); - - // getters - palette_client *next() const { return m_next; } - palette_t &palette() const { return m_palette; } - const uint32_t *dirty_list(uint32_t &mindirty, uint32_t &maxdirty); - - // dirty marking - void mark_dirty(uint32_t index) { m_live->mark_dirty(index); } - -private: - // internal object to track dirty states - class dirty_state - { - public: - // construction - dirty_state(); - - // operations - const uint32_t *dirty_list(uint32_t &mindirty, uint32_t &maxdirty); - void resize(uint32_t colors); - void mark_dirty(uint32_t index); - void reset(); - - private: - // internal state - std::vector m_dirty; // bitmap of dirty entries - uint32_t m_mindirty; // minimum dirty entry - uint32_t m_maxdirty; // minimum dirty entry - }; - - // internal state - palette_t & m_palette; // reference to the palette - palette_client *m_next; // pointer to next client - dirty_state * m_live; // live dirty state - dirty_state * m_previous; // previous dirty state - dirty_state m_dirty[2]; // two dirty states -}; - - -// ======================> palette_t - -// a palette object -class palette_t -{ - friend class palette_client; - -public: - // static constructor: used to ensure same new/delete is used - static palette_t *alloc(uint32_t numcolors, uint32_t numgroups = 1); - - // reference counting - void ref() { m_refcount++; } - void deref(); - - // getters - int num_colors() const { return m_numcolors; } - int num_groups() const { return m_numgroups; } - int max_index() const { return m_numcolors * m_numgroups + 2; } - uint32_t black_entry() const { return m_numcolors * m_numgroups + 0; } - uint32_t white_entry() const { return m_numcolors * m_numgroups + 1; } - - // overall adjustments - void set_brightness(float brightness); - void set_contrast(float contrast); - void set_gamma(float gamma); - - // entry getters - rgb_t entry_color(uint32_t index) const { return (index < m_numcolors) ? m_entry_color[index] : rgb_t::black(); } - rgb_t entry_adjusted_color(uint32_t index) const { return (index < m_numcolors * m_numgroups) ? m_adjusted_color[index] : rgb_t::black(); } - float entry_contrast(uint32_t index) const { return (index < m_numcolors) ? m_entry_contrast[index] : 1.0f; } - - // entry setters - void entry_set_color(uint32_t index, rgb_t rgb); - void entry_set_red_level(uint32_t index, uint8_t level); - void entry_set_green_level(uint32_t index, uint8_t level); - void entry_set_blue_level(uint32_t index, uint8_t level); - void entry_set_contrast(uint32_t index, float contrast); - - // entry list getters - const rgb_t *entry_list_raw() const { return &m_entry_color[0]; } - const rgb_t *entry_list_adjusted() const { return &m_adjusted_color[0]; } - const rgb_t *entry_list_adjusted_rgb15() const { return &m_adjusted_rgb15[0]; } - - // group adjustments - void group_set_brightness(uint32_t group, float brightness); - void group_set_contrast(uint32_t group, float contrast); - - // utilities - void normalize_range(uint32_t start, uint32_t end, int lum_min = 0, int lum_max = 255); - -private: - // construction/destruction - palette_t(uint32_t numcolors, uint32_t numgroups = 1); - ~palette_t(); - - // internal helpers - rgb_t adjust_palette_entry(rgb_t entry, float brightness, float contrast, const uint8_t *gamma_map); - void update_adjusted_color(uint32_t group, uint32_t index); - - // internal state - uint32_t m_refcount; // reference count on the palette - uint32_t m_numcolors; // number of colors in the palette - uint32_t m_numgroups; // number of groups in the palette - - float m_brightness; // overall brightness value - float m_contrast; // overall contrast value - float m_gamma; // overall gamma value - uint8_t m_gamma_map[256]; // gamma map - - std::vector m_entry_color; // array of raw colors - std::vector m_entry_contrast; // contrast value for each entry - std::vector m_adjusted_color; // array of adjusted colors - std::vector m_adjusted_rgb15; // array of adjusted colors as RGB15 - - std::vector m_group_bright; // brightness value for each group - std::vector m_group_contrast; // contrast value for each group - - palette_client *m_client_list; // list of clients for this palette -}; - - - -//************************************************************************** -// INLINE FUNCTIONS -//************************************************************************** - -//------------------------------------------------- -// palexpand - expand a palette value to 8 bits -//------------------------------------------------- - -template -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; } - if (_NumBits == 3) { bits &= 7; return (bits << 5) | (bits << 2) | (bits >> 1); } - if (_NumBits == 4) { bits &= 0xf; return (bits << 4) | bits; } - if (_NumBits == 5) { bits &= 0x1f; return (bits << 3) | (bits >> 2); } - if (_NumBits == 6) { bits &= 0x3f; return (bits << 2) | (bits >> 4); } - if (_NumBits == 7) { bits &= 0x7f; return (bits << 1) | (bits >> 6); } - return bits; -} - - -//------------------------------------------------- -// palxbit - convert an x-bit value to 8 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); } - - -//------------------------------------------------- -// rgbexpand - expand a 32-bit raw data to 8-bit -// RGB -//------------------------------------------------- - -template -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 -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 -//------------------------------------------------- - -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 diff --git a/waterbox/ares64/ares/thirdparty/mame/lib/util/strformat.cpp b/waterbox/ares64/ares/thirdparty/mame/lib/util/strformat.cpp deleted file mode 100644 index cec14635e1..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/lib/util/strformat.cpp +++ /dev/null @@ -1,661 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Vas Crabb -/*************************************************************************** - - strformat.h - - type-safe printf substitutes - -***************************************************************************/ - -#include "strformat.h" - -#include -#include - - -namespace util { - -namespace detail { - -template class format_chars; -template class format_chars; - -template void format_flags::apply(std::ostream &) const; -template void format_flags::apply(std::wostream &) const; -template void format_flags::apply(std::iostream &) const; -template void format_flags::apply(std::wiostream &) const; -template void format_flags::apply(std::ostringstream &) const; -template void format_flags::apply(std::wostringstream &) const; -template void format_flags::apply(std::stringstream &) const; -template void format_flags::apply(std::wstringstream &) const; -template void format_flags::apply(ovectorstream &) const; -template void format_flags::apply(wovectorstream &) const; -template void format_flags::apply(vectorstream &) const; -template void format_flags::apply(wvectorstream &) const; - -template class format_argument; -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); - -template class format_argument; -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); - -template class format_argument; -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); - -template class format_argument; -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); - -template class format_argument; -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); - -template class format_argument; -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); - -template class format_argument; -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); - -template class format_argument; -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); - -template class format_argument; -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); - -template class format_argument; -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); - -template class format_argument; -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); - -template class format_argument; -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template bool format_argument::static_make_integer(void const *, int &); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); -template void format_argument::static_store_integer(void const *, std::streamoff); - -template class format_argument_pack; -template class format_argument_pack; -template class format_argument_pack; -template class format_argument_pack; -template class format_argument_pack; -template class format_argument_pack; -template class format_argument_pack; -template class format_argument_pack; -template class format_argument_pack; -template class format_argument_pack; -template class format_argument_pack; -template class format_argument_pack; - -template std::ostream::off_type stream_format(std::ostream &, format_argument_pack const &); -template std::wostream::off_type stream_format(std::wostream &, format_argument_pack const &); -template std::iostream::off_type stream_format(std::iostream &, format_argument_pack const &); -template std::iostream::off_type stream_format(std::iostream &, format_argument_pack const &); -template std::wiostream::off_type stream_format(std::wiostream &, format_argument_pack const &); -template std::wiostream::off_type stream_format(std::wiostream &, format_argument_pack const &); -template std::ostringstream::off_type stream_format(std::ostringstream &, format_argument_pack const &); -template std::ostringstream::off_type stream_format(std::ostringstream &, format_argument_pack const &); -template std::wostringstream::off_type stream_format(std::wostringstream &, format_argument_pack const &); -template std::wostringstream::off_type stream_format(std::wostringstream &, format_argument_pack const &); -template std::stringstream::off_type stream_format(std::stringstream &, format_argument_pack const &); -template std::stringstream::off_type stream_format(std::stringstream &, format_argument_pack const &); -template std::stringstream::off_type stream_format(std::stringstream &, format_argument_pack const &); -template std::wstringstream::off_type stream_format(std::wstringstream &, format_argument_pack const &); -template std::wstringstream::off_type stream_format(std::wstringstream &, format_argument_pack const &); -template std::wstringstream::off_type stream_format(std::wstringstream &, format_argument_pack const &); -template ovectorstream::off_type stream_format(ovectorstream &, format_argument_pack const &); -template ovectorstream::off_type stream_format(ovectorstream &, format_argument_pack const &); -template wovectorstream::off_type stream_format(wovectorstream &, format_argument_pack const &); -template wovectorstream::off_type stream_format(wovectorstream &, format_argument_pack const &); -template vectorstream::off_type stream_format(vectorstream &, format_argument_pack const &); -template vectorstream::off_type stream_format(vectorstream &, format_argument_pack const &); -template vectorstream::off_type stream_format(vectorstream &, format_argument_pack const &); -template wvectorstream::off_type stream_format(wvectorstream &, format_argument_pack const &); -template wvectorstream::off_type stream_format(wvectorstream &, format_argument_pack const &); -template wvectorstream::off_type stream_format(wvectorstream &, format_argument_pack const &); - -} // namespace detail - -} // namespace util diff --git a/waterbox/ares64/ares/thirdparty/mame/lib/util/strformat.h b/waterbox/ares64/ares/thirdparty/mame/lib/util/strformat.h deleted file mode 100644 index e6d2ee0a0f..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/lib/util/strformat.h +++ /dev/null @@ -1,2432 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Vas Crabb -/*************************************************************************** - - strformat.h - - type-safe printf substitutes - - This header provides type-safe printf substitutes that output to - std::ostream- or std::string-like objects. Most format strings - supported by C99, SUS, glibc and MSVCRT are accepted. Not all - features are implemented, and semantics differ in some cases. Any - object with an appropriate stream output operator can be used as - a format argument with the %s conversion. - - Since the functions are implemented using C++ iostream, some - behaviour more closely resembles iostream output operator behaviour - than printf behaviour. You are also exposed to bugs in your C++ - iostream implementation (e.g. hexadecimal scientific format doesn't - work properly on MinGW). - - These functions are designed to be forgiving - using an - inappropriate conversion for an argument's type just results in the - default conversion for the type being used. Inappropriate types or - out-of-range positions for parameterised field width and precision - are treated as if no width/precision was specified. Out-of-range - argument positions result in the format specification being printed. - - Position specifiers for arguments (%123$), field width (*456$) and - precision (.*789$) are supported. Mixing explicit and implied - positions for arguments/widths/precisions is discouraged, although - it does produce deterministic behaviour. - - The following format flags are recognised: - - "#": alternate format - sets showbase/showpoint, and also - boolalpha for bool with s conversion - - "0": pad with zeroes rather than spaces, ignored if '-' flag is - specified or if precision is specified for d/i/u/o/x/X - conversion - - "-": left-align output, overrides '0' - - " ": recognised but not implemented, ignored for u/o/x/X - conversion - - "+": show sign for positive numbers, overrides ' ', ignored for - u/o/x/X conversions - - "'": recognised for SUS compatibility but ignored (digit grouping - is controlled by stream locale) - - "I": recognised for glibc compatibility but ignored (digits are - controlled by stream locale) - - Precision is supported for conversions by setting precision on the - stream. This works as expected for a/A/e/E/f/F/g/G conversions on - floating-point types, and may work for objects with user-defined - stream output operators. Precision for d/i/u/o/x/X conversions - (minimum digits to print) is not supported. Precision for s - conversions (maximum characters to print) is only honoured for - string-like types (output character pointer/array and - std::basic_string). - - Length specifiers are supported but not required for d/i/u/o/x/X - conversions with integer/char/bool arguments. They result in the - value being cast to the desired type before being printed. Length - specifiers are ignored for other conversions. - - The following length specifiers are recognised: - - hh: cast to char/unsigned char for d/i/u/o/x/X - - h: cast to short/unsigned short for d/i/u/o/x/X - - l: cast to long/unsigned long for d/i/u/o/x/X - - ll: cast to long long/unsigned long long for d/i/u/o/x/X - - L: always ignored - - j: cast to intmax_t/uintmax_t for d/i/u/o/x/X - - z: cast to ssize_t/size_t for d/i/u/o/x/X - - t: cast to ptrdiff_t for d/i/u/o/x/X - - I: cast to ssize_t/size_t for d/i/u/o/x/X - - I32: cast to int32_t/uint32_t for d/i/u/o/x/X - - I64: cast to int64_t/uint64_t for d/i/u/o/x/X - - w: always ignored - - The following conversions are recognised: - - d/i: signed decimal for integer/char/bool types - - u: unsigned decimal for integer/char/bool types - - o: unsigned octal for integer/char/bool types - - x/X: lower/uppercase unsigned hexadecimal for integer/char/bool - types or scientific hexadecimal for floating-point types - - e/E: lower/uppercase scientific decimal for floating-point types - - f/F: lower/uppercase fixed-point decimal for floating-point types - - g/G: default stream output format for floating-point types (may - differ from printf behaviour) - - a/A: lower/uppercase scientific hexadecimal for floating-point - types or hexadecimal for integer types - - c/C: cast integer types to stream's character type, no automatic - widening or narrowing - - s/S: default stream output behaviour for argument - - p/P: cast any integer/char/bool/pointer/array to void const * - - n: store characters printed so far, produces no output, argument - must be pointer to type that std::streamoff is convertible to - - m: output of std::strerror(errno), no automatic widening or - narrowing, does not consume an argument - - %: literal %, field width applied, does not consume an argument - - The output stream type for stream_format must be equivalent to a - std::basic_ostream for duck-typing purposes. The output string for - string type for string_format must provide value_type, traits_type - and allocator_type declarations, and must be constructible from a - std::basic_string using the same value, traits and allocator types. - - The format string type can be a pointer to a NUL-terminated string, - an array containing a NUL-terminated or non-terminated string, or a - STL contiguous container holding a string (e.g. std::string, - std::string_view, std::vector or std::array). Note that NUL - characters characters are only treated as terminators for pointers - and arrays, they are treated as normal characters for other - containers. Using a non-contiguous container (e.g. std::list or - std::deque) will result in undesirable behaviour likely culminating - in a crash. - - The value type of the format string and the character type of the - output stream/string need to match. You can't use a wchar_t format - to format char output and vice versa. - - The format string encoding must have contiguous decimal digits. The - character encoding must not use shift states or multi-byte sequences - that could result in a format character codepoint appearing as part - of a multi-byte sequence or being interpreted differently. ASCII, - ISO Latin, KOI-8, UTF-8, EUC, EBCDIC, and UTF-EBCDIC encodings meet - these requirements, while ISO-2022, UTF-7, KOI-7 and Shift-JIS - encodings do not. For character types other than char and wchar_t, - the encoding must be a strict superset of the char encoding. - - The following conditions cause assertion failures in debug builds: - - Unsupported conversion specifier - - Out-of-range argument/width/precision position - - Inappropriate type for parameterised width/precision - - Positional width/precision specifier not terminated with $ - - Inappropriate type for n conversion - - Default conversion for type that lacks stream out operator - - Some limitations have been described in passing. Major limitations - and bugs include: - - No automatic widening/narrowing support, so no simple way to - output wide characters/strings to narrow streams/strings and vice - versa. - - Precision ignored for d/i/u/o/x/X conversions (should set minimum - digits to print). - - Precision for s/S conversion is only honoured for string-like - types (output character pointer/array and std::basic_string). - - If the output character type is not char, signed char or unsgined - char, printing the a value of this type with d/i/u/o/x/X - conversion and no length specifier causes it to be printed as a - character. Can be worked around by casting to another integer - type or using length specifier. - - Printing with d/i/u/o/x/X conversions may not behave as expected - if the output character type is an integer type other than char, - signed char, unsigned char, or wchar_t. - - Only output character pointer/array is treated as a C string, any - other pointer/array will be printed as a pointer value. The - signed/unsigned/default char are not handled equivalently. - - There is no length specifier to force cast to int/unsigned. Can - be worked around by casting the argument. - - MSVCRT length specifiers I/I32/I64 will not be recognised if no - width or precision is specified, as they will be mistaken for - glibc alternate digits flag. - - The " " flag to prefix positive numbers with a space is not - implemented. - - The "'" and "I" flags are not implemented, as digit grouping and - characters are controlled by the output stream's locale. - - The characters used for space- and zero-padding are not locale- - aware. - -***************************************************************************/ - -#ifndef MAME_UTIL_STRFORMAT_H -#define MAME_UTIL_STRFORMAT_H - -#pragma once - -#include "vecstream.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace util { - -namespace detail { - -//************************************************************************** -// FORMAT CHARACTER DEFINITIONS -//************************************************************************** - -template -class format_chars -{ -public: - typedef Character char_type; - enum : Character { - nul = Character('\0'), - space = Character(' '), - point = Character('.'), - percent = Character('%'), - dollar = Character('$'), - hash = Character('#'), - minus = Character('-'), - plus = Character('+'), - asterisk = Character('*'), - quote = Character('\''), - zero = Character('0'), - nine = Character('9'), - a = Character('a'), - A = Character('A'), - c = Character('c'), - C = Character('C'), - d = Character('d'), - e = Character('e'), - E = Character('E'), - f = Character('f'), - F = Character('F'), - g = Character('g'), - G = Character('G'), - h = Character('h'), - i = Character('i'), - I = Character('I'), - j = Character('j'), - l = Character('l'), - L = Character('L'), - m = Character('m'), - n = Character('n'), - o = Character('o'), - p = Character('p'), - s = Character('s'), - S = Character('S'), - t = Character('t'), - u = Character('u'), - w = Character('w'), - x = Character('x'), - X = Character('X'), - z = Character('z') - }; -}; - -template <> -class format_chars -{ -public: - typedef wchar_t char_type; - enum : wchar_t { - nul = L'\0', - space = L' ', - point = L'.', - percent = L'%', - dollar = L'$', - hash = L'#', - minus = L'-', - plus = L'+', - asterisk = L'*', - quote = L'\'', - zero = L'0', - nine = L'9', - a = L'a', - A = L'A', - c = L'c', - C = L'C', - d = L'd', - e = L'e', - E = L'E', - f = L'f', - F = L'F', - g = L'g', - G = L'G', - h = L'h', - i = L'i', - I = L'I', - j = L'j', - l = L'l', - L = L'L', - m = L'm', - n = L'n', - o = L'o', - p = L'p', - s = L's', - S = L'S', - t = L't', - u = L'u', - w = L'w', - x = L'x', - X = L'X', - z = L'z' - }; -}; - - -//************************************************************************** -// FORMAT SPECIFIER ENCAPSULATION -//************************************************************************** - -class format_flags -{ -public: - enum class positive_sign { - none, - space, // ' ' - plus // + - }; - - enum class length { - unspecified, - character, // hh - short_integer, // h - long_integer, // l - long_long_integer, // ll - long_double, // L - integer_maximum, // j - size_type, // z, I - pointer_difference, // t - integer_32, // I32 - integer_64, // I64 - wide_character // w - }; - - enum class conversion { - unspecified, - signed_decimal, // i, d - unsigned_decimal, // u - octal, // o - hexadecimal, // x, X - scientific_decimal, // e, E - fixed_decimal, // f, F - floating_decimal, // g, G - scientific_hexadecimal, // a, A - character, // c, C - string, // s, S - pointer, // p - tell, // n - strerror, // m - percent // % - }; - - format_flags() - : m_alternate_format(false) - , m_zero_pad(false) - , m_left_align(false) - , m_positive_sign(positive_sign::none) - , m_digit_grouping(false) - , m_alternate_digits(false) - , m_field_width(0) - , m_precision(-1) - , m_length(length::unspecified) - , m_uppercase(false) - , m_conversion(conversion::unspecified) - { - } - - template void apply(Stream &stream) const - { - typedef format_chars chars; - - stream.unsetf( - Stream::basefield | - Stream::adjustfield | - Stream::floatfield | - Stream::boolalpha | - Stream::showbase | - Stream::showpoint | - Stream::showpos | - Stream::uppercase); - - if (get_alternate_format()) stream.setf(Stream::showbase | Stream::showpoint); - stream.fill(get_zero_pad() ? chars::zero : chars::space); - stream.setf(get_left_align() ? Stream::left : get_zero_pad() ? Stream::internal : Stream::right); - if (positive_sign::plus == get_positive_sign()) stream.setf(Stream::showpos); - stream.precision((get_precision() < 0) ? 6 : get_precision()); - stream.width(get_field_width()); - if (get_uppercase()) stream.setf(Stream::uppercase); - switch (get_conversion()) - { - case conversion::unspecified: - break; - case conversion::signed_decimal: - case conversion::unsigned_decimal: - stream.setf(Stream::dec); - break; - case conversion::octal: - stream.setf(Stream::oct); - break; - case conversion::hexadecimal: - stream.setf(Stream::hex | Stream::scientific | Stream::fixed); - break; - case conversion::scientific_decimal: - stream.setf(Stream::dec | Stream::scientific); - break; - case conversion::fixed_decimal: - stream.setf(Stream::dec | Stream::fixed); - break; - case conversion::floating_decimal: - stream.setf(Stream::dec); - break; - case conversion::scientific_hexadecimal: - stream.setf(Stream::hex | Stream::scientific | Stream::fixed); - break; - case conversion::character: - case conversion::string: - case conversion::pointer: - case conversion::tell: - case conversion::strerror: - case conversion::percent: - break; - } - } - - bool get_alternate_format() const { return m_alternate_format; } - bool get_zero_pad() const { return m_zero_pad; } - bool get_left_align() const { return m_left_align; } - positive_sign get_positive_sign() const { return m_positive_sign; } - bool get_digit_grouping() const { return m_digit_grouping; } - bool get_alternate_digits() const { return m_alternate_digits; } - unsigned get_field_width() const { return m_field_width; } - int get_precision() const { return m_precision; } - length get_length() const { return m_length; } - bool get_uppercase() const { return m_uppercase; } - conversion get_conversion() const { return m_conversion; } - - void set_alternate_format() - { - m_alternate_format = true; - } - - void set_zero_pad() - { - if (!m_left_align) - { - switch (m_conversion) - { - case conversion::signed_decimal: - case conversion::unsigned_decimal: - case conversion::octal: - case conversion::hexadecimal: - m_zero_pad = (0 > m_precision); - break; - default: - m_zero_pad = true; - } - } - } - - void set_left_align() - { - m_zero_pad = false; - m_left_align = true; - } - - void set_positive_sign_space() - { - switch (m_conversion) - { - case conversion::unsigned_decimal: - case conversion::octal: - case conversion::hexadecimal: - break; - default: - if (positive_sign::plus != m_positive_sign) - m_positive_sign = positive_sign::space; - } - } - - void set_positive_sign_plus() - { - switch (m_conversion) - { - case conversion::unsigned_decimal: - case conversion::octal: - case conversion::hexadecimal: - break; - default: - m_positive_sign = positive_sign::plus; - } - } - - void set_digit_grouping() - { - m_digit_grouping = true; - } - - void set_alternate_digits() - { - m_alternate_digits = true; - } - - void set_field_width(int value) - { - if (0 > value) - { - set_left_align(); - m_field_width = unsigned(-value); - } - else - { - m_field_width = unsigned(value); - } - } - - void set_precision(int value) - { - m_precision = value; - if (0 <= value) - { - switch (m_conversion) - { - case conversion::signed_decimal: - case conversion::unsigned_decimal: - case conversion::octal: - case conversion::hexadecimal: - m_zero_pad = false; - break; - default: - break; - } - } - } - - void set_length(length value) - { - m_length = value; - } - - void set_uppercase() - { - m_uppercase = true; - } - - void set_conversion(conversion value) - { - m_conversion = value; - switch (value) - { - case conversion::unsigned_decimal: - case conversion::octal: - case conversion::hexadecimal: - m_positive_sign = positive_sign::none; - [[fallthrough]]; - case conversion::signed_decimal: - if (0 <= m_precision) - m_zero_pad = false; - break; - default: - break; - } - } - -private: - bool m_alternate_format; // # - bool m_zero_pad; // 0 - bool m_left_align; // - - positive_sign m_positive_sign; // ' ', + - bool m_digit_grouping; // ' - bool m_alternate_digits; // I - unsigned m_field_width; - int m_precision; // . - length m_length; // hh, h, l, ll, L, j, z, I, t, w - bool m_uppercase; // X, E, F, G, A - conversion m_conversion; // i, d, u, o, x, X, e, E, f, F, g, G, a, A, c, C, s, S, p, m, % -}; - - -//************************************************************************** -// FORMAT OUTPUT HELPERS -//************************************************************************** - -template -class format_output -{ -private: - template - struct string_semantics : public std::false_type { }; - template - struct string_semantics > : public std::true_type { }; - template - struct string_semantics > : public std::true_type { }; - template - using signed_integer_semantics = std::bool_constant && std::is_signed_v >; - template - using unsigned_integer_semantics = std::bool_constant && !std::is_signed_v >; - - template - static std::enable_if_t, std::make_signed_t > || std::is_integral_v > apply_signed(Stream &str, U const &value) - { - if constexpr (std::is_same_v, std::make_signed_t >) - str << int(std::make_signed_t(value)); - else if constexpr (!std::is_signed_v || std::is_same_v) - str << std::make_signed_t(value); -#if __cplusplus > 201703L - else if constexpr (!std::is_invocable_v decltype(x << y) { return x << y; }), Stream &, U const &>) - str << std::make_signed_t(value); -#endif - else - str << value; - } - - template - static std::enable_if_t, std::make_unsigned_t > || std::is_integral_v > apply_unsigned(Stream &str, U const &value) - { - if constexpr (std::is_same_v, std::make_unsigned_t >) - str << unsigned(std::make_unsigned_t(value)); - else if constexpr (!std::is_unsigned_v || std::is_same_v) - str << std::make_unsigned_t(value); -#if __cplusplus > 201703L - else if constexpr (!std::is_invocable_v decltype(x << y) { return x << y; }), Stream &, U const &>) - str << std::make_unsigned_t(value); -#endif - else - str << value; - } - -public: - template - static void apply(Stream &str, format_flags const &flags, U const &value) - { - if constexpr (string_semantics::value) - { - int const precision(flags.get_precision()); - if ((0 <= precision) && (value.size() > unsigned(precision))) - { - if constexpr (std::is_same_v) - { - unsigned width(flags.get_field_width()); - bool const pad(unsigned(precision) < width); - typename Stream::fmtflags const adjust(str.flags() & Stream::adjustfield); - if (!pad || (Stream::left == adjust)) str.write(&*value.begin(), unsigned(precision)); - if (pad) - { - for (width -= precision; 0U < width; --width) str.put(str.fill()); - if (Stream::left != adjust) str.write(&*value.begin(), unsigned(precision)); - } - str.width(0); - } - else - { - str << value.substr(0, unsigned(precision)); - } - } - else - { - str << value; - } - } - else if constexpr (signed_integer_semantics::value) - { - switch (flags.get_conversion()) - { - case format_flags::conversion::signed_decimal: - switch (flags.get_length()) - { - case format_flags::length::character: - str << int(static_cast(value)); - break; - case format_flags::length::short_integer: - str << short(value); - break; - case format_flags::length::long_integer: - str << long(value); - break; - case format_flags::length::long_long_integer: - str << static_cast(value); - break; - case format_flags::length::integer_maximum: - str << std::intmax_t(value); - break; - case format_flags::length::size_type: - str << std::make_signed_t(value); - break; - case format_flags::length::pointer_difference: - str << std::make_signed_t(value); - break; - case format_flags::length::integer_32: - str << std::uint32_t(std::int32_t(value)); - break; - case format_flags::length::integer_64: - str << std::int64_t(value); - break; - default: - apply_signed(str, value); - } - break; - case format_flags::conversion::unsigned_decimal: - case format_flags::conversion::octal: - case format_flags::conversion::hexadecimal: - switch (flags.get_length()) - { - case format_flags::length::character: - str << unsigned(static_cast(static_cast(value))); - break; - case format_flags::length::short_integer: - str << static_cast(short(value)); - break; - case format_flags::length::long_integer: - str << static_cast(long(value)); - break; - case format_flags::length::long_long_integer: - str << static_cast(static_cast(value)); - break; - case format_flags::length::integer_maximum: - str << std::uintmax_t(std::intmax_t(value)); - break; - case format_flags::length::size_type: - str << std::make_unsigned_t(std::make_signed_t(value)); - break; - case format_flags::length::pointer_difference: - str << std::make_unsigned_t(std::make_signed_t(value)); - break; - case format_flags::length::integer_32: - str << std::uint32_t(std::int32_t(value)); - break; - case format_flags::length::integer_64: - str << std::uint64_t(std::int64_t(value)); - break; - default: - apply_unsigned(str, value); - } - break; - case format_flags::conversion::character: - if (std::is_signed::value) - str << typename Stream::char_type(value); - else - str << typename Stream::char_type(std::make_signed_t(value)); - break; - case format_flags::conversion::pointer: - str << reinterpret_cast(std::uintptr_t(std::intptr_t(value))); - break; - default: - str << value; - } - } - else if constexpr (unsigned_integer_semantics::value) - { - switch (flags.get_conversion()) - { - case format_flags::conversion::signed_decimal: - switch (flags.get_length()) - { - case format_flags::length::character: - str << int(static_cast(static_cast(value))); - break; - case format_flags::length::short_integer: - str << short(static_cast(value)); - break; - case format_flags::length::long_integer: - str << long(static_cast(value)); - break; - case format_flags::length::long_long_integer: - str << static_cast(static_cast(value)); - break; - case format_flags::length::integer_maximum: - str << std::intmax_t(std::uintmax_t(value)); - break; - case format_flags::length::size_type: - str << std::make_signed_t(std::make_unsigned_t(value)); - break; - case format_flags::length::pointer_difference: - str << std::make_signed_t(std::make_unsigned_t(value)); - break; - case format_flags::length::integer_32: - str << std::int32_t(std::uint32_t(value)); - break; - case format_flags::length::integer_64: - str << std::int64_t(std::uint64_t(value)); - break; - default: - apply_signed(str, value); - } - break; - case format_flags::conversion::unsigned_decimal: - case format_flags::conversion::octal: - case format_flags::conversion::hexadecimal: - switch (flags.get_length()) - { - case format_flags::length::character: - str << unsigned(static_cast(value)); - break; - case format_flags::length::short_integer: - str << static_cast(value); - break; - case format_flags::length::long_integer: - str << static_cast(value); - break; - case format_flags::length::long_long_integer: - str << static_cast(value); - break; - case format_flags::length::integer_maximum: - str << std::uintmax_t(value); - break; - case format_flags::length::size_type: - str << std::make_unsigned_t(value); - break; - case format_flags::length::pointer_difference: - str << std::make_unsigned_t(value); - break; - case format_flags::length::integer_32: - str << std::uint32_t(std::int32_t(value)); - break; - case format_flags::length::integer_64: - str << std::int64_t(value); - break; - default: - apply_unsigned(str, value); - } - break; - case format_flags::conversion::character: - if (std::is_signed::value) - str << typename Stream::char_type(value); - else - str << typename Stream::char_type(std::make_signed_t(value)); - break; - case format_flags::conversion::pointer: - str << reinterpret_cast(std::uintptr_t(value)); - break; - default: -#if __cplusplus > 201703L - if constexpr (!std::is_invocable_v decltype(x << y) { return x << y; }), Stream &, U const &>) - { - assert(false); // stream out operator not declared or declared deleted - str << '?'; - } - else -#endif - { - str << value; - } - } - } - else - { - str << value; - } - } - static void apply(Stream &str, format_flags const &flags, bool value) - { - switch (flags.get_conversion()) - { - case format_flags::conversion::signed_decimal: - case format_flags::conversion::unsigned_decimal: - case format_flags::conversion::octal: - case format_flags::conversion::hexadecimal: - case format_flags::conversion::scientific_decimal: - case format_flags::conversion::fixed_decimal: - case format_flags::conversion::floating_decimal: - case format_flags::conversion::scientific_hexadecimal: - case format_flags::conversion::character: - case format_flags::conversion::pointer: - apply(str, flags, unsigned(value)); - break; - default: - if (flags.get_alternate_format()) str.setf(Stream::boolalpha); - str << value; - } - } -}; - -template -class format_output -{ -protected: - template - using string_semantics = std::bool_constant, typename Stream::char_type> >; - -public: - template - static void apply(Stream &str, format_flags const &flags, U const *value) - { - if constexpr (string_semantics::value) - { - switch (flags.get_conversion()) - { - case format_flags::conversion::string: - { - int precision(flags.get_precision()); - if (0 <= flags.get_precision()) - { - std::streamsize cnt(0); - for ( ; (0 < precision) && (U(format_chars::nul) != value[cnt]); --precision, ++cnt) { } - unsigned width(flags.get_field_width()); - bool const pad(std::make_unsigned_t(cnt) < width); - typename Stream::fmtflags const adjust(str.flags() & Stream::adjustfield); - if (!pad || (Stream::left == adjust)) str.write(value, cnt); - if (pad) - { - for (width -= cnt; 0U < width; --width) str.put(str.fill()); - if (Stream::left != adjust) str.write(value, cnt); - } - str.width(0); - } - else - { - str << value; - } - } - break; - case format_flags::conversion::pointer: - str << reinterpret_cast(const_cast *>(value)); - break; - default: - str << value; - } - } - else - { - str << reinterpret_cast(const_cast *>(value)); - } - } -}; - -template -class format_output : protected format_output -{ -public: - template - static void apply(Stream &str, format_flags const &flags, U const *value) - { - static_assert( - !format_output::template string_semantics::value || (N <= size_t(unsigned((std::numeric_limits::max)()))), - "C string array length must not exceed maximum integer value"); - format_flags f(flags); - if (format_output::template string_semantics::value && ((0 > f.get_precision()) || (N < unsigned(f.get_precision())))) - f.set_precision(int(unsigned(N))); - format_output::apply(str, f, value); - } -}; - - -//************************************************************************** -// INTEGER INPUT HELPERS -//************************************************************************** - -template -class format_make_integer -{ -private: - template - using use_unsigned_cast = std::bool_constant && std::is_unsigned_v >; - template - using use_signed_cast = std::bool_constant::value && std::is_convertible_v >; - -public: - template static bool apply(U const &value, int &result) - { - if constexpr (use_unsigned_cast::value) - { - result = int(unsigned(value)); - return true; - } - else if constexpr (use_signed_cast::value) - { - result = int(value); - return true; - } - else - { - return false; - } - } -}; - - -//************************************************************************** -// INTEGER OUTPUT HELPERS -//************************************************************************** - -template -class format_store_integer -{ -private: - template - using is_non_const_ptr = std::bool_constant && !std::is_const_v > >; - template - using is_unsigned_ptr = std::bool_constant && std::is_unsigned_v > >; - template - using use_unsigned_cast = std::bool_constant::value && is_unsigned_ptr::value && std::is_convertible_v, std::remove_pointer_t > >; - template - using use_signed_cast = std::bool_constant::value && !use_unsigned_cast::value && std::is_convertible_v > >; - -public: - template static bool apply(U const &value, std::streamoff data) - { - if constexpr (use_unsigned_cast::value) - { - *value = std::remove_pointer_t(std::make_unsigned_t(data)); - return true; - } - else if constexpr (use_signed_cast::value) - { - *value = std::remove_pointer_t(std::make_signed_t(data)); - return true; - } - else - { - assert(false); // inappropriate type for storing characters written so far - return false; - } - } -}; - - -//************************************************************************** -// NON-POLYMORPHIC ARGUMENT WRAPPER -//************************************************************************** - -template -class format_argument -{ -public: - format_argument() - : m_value(nullptr) - , m_output_function(nullptr) - , m_make_integer_function(nullptr) - , m_store_integer_function(nullptr) - { - } - - template - format_argument(T const &value) - : m_value(reinterpret_cast(&value)) - , m_output_function(&static_output) - , m_make_integer_function(&static_make_integer) - , m_store_integer_function(&static_store_integer) - { - } - - void output(Stream &str, format_flags const &flags) const { m_output_function(str, flags, m_value); } - bool make_integer(int &result) const { return m_make_integer_function(m_value, result); } - void store_integer(std::streamoff data) const { m_store_integer_function(m_value, data); } - -private: - typedef void (*output_function)(Stream &str, format_flags const &flags, void const *value); - typedef bool (*make_integer_function)(void const *value, int &result); - typedef void (*store_integer_function)(void const *value, std::streamoff data); - - template static void static_output(Stream &str, format_flags const &flags, void const *value) - { - format_output::apply(str, flags, *reinterpret_cast(value)); - } - - template static bool static_make_integer(void const *value, int &result) - { - return format_make_integer::apply(*reinterpret_cast(value), result); - } - - template static void static_store_integer(void const *value, std::streamoff data) - { - format_store_integer::apply(*reinterpret_cast(value), data); - } - - void const *m_value; - output_function m_output_function; - make_integer_function m_make_integer_function; - store_integer_function m_store_integer_function; -}; - - -//************************************************************************** -// NON-POLYMORPHIC ARGUMENT PACK WRAPPER BASE -//************************************************************************** - -template -class format_argument_pack -{ -public: - typedef typename Stream::char_type char_type; - typedef char_type const *iterator; - iterator format_begin() const - { - return m_begin; - } - bool format_at_end(iterator it) const - { - return (m_end && (m_end == it)) || (m_check_nul && (format_chars::nul == *it)); - } - std::size_t argument_count() const - { - return m_argument_count; - } - format_argument const &operator[](std::size_t index) const - { - assert(m_argument_count > index); - return m_arguments[index]; - } - -protected: - template - using handle_char_ptr = std::bool_constant && std::is_same_v >, char_type> >; - template - using handle_char_array = std::bool_constant && std::is_same_v >, char_type> >; - template - using handle_container = std::bool_constant::value && !handle_char_array::value>; - - template - format_argument_pack( - Format &&fmt, - format_argument const *arguments, - std::enable_if_t >::value, std::size_t> argument_count) - : m_begin(fmt) - , m_end(nullptr) - , m_check_nul(true) - , m_arguments(arguments) - , m_argument_count(argument_count) - { - assert(m_begin); - assert(m_end || m_check_nul); - assert(!m_end || (m_end > m_begin)); - assert(m_arguments || !m_argument_count); - } - template - format_argument_pack( - Format &&fmt, - format_argument const *arguments, - std::enable_if_t >::value, std::size_t> argument_count) - : m_begin(std::cbegin(fmt)) - , m_end(std::cend(fmt)) - , m_check_nul(true) - , m_arguments(arguments) - , m_argument_count(argument_count) - { - assert(m_begin); - assert(m_end || m_check_nul); - assert(!m_end || (m_end > m_begin)); - assert(m_arguments || !m_argument_count); - } - template - format_argument_pack( - Format &&fmt, - format_argument const *arguments, - std::enable_if_t >::value, std::size_t> argument_count) - : m_begin(fmt.empty() ? nullptr : &*std::cbegin(fmt)) - , m_end(fmt.empty() ? nullptr : (m_begin + std::distance(std::cbegin(fmt), std::cend(fmt)))) - , m_check_nul(true) - , m_arguments(arguments) - , m_argument_count(argument_count) - { - assert(m_begin); - assert(m_end || m_check_nul); - assert(!m_end || (m_end > m_begin)); - assert(m_arguments || !m_argument_count); - } - - format_argument_pack(format_argument_pack const &) = default; - format_argument_pack(format_argument_pack &&) = default; - format_argument_pack &operator=(format_argument_pack const &) = default; - format_argument_pack &operator=(format_argument_pack &&) = default; - -private: - iterator m_begin; - iterator m_end; - bool m_check_nul; - format_argument const *m_arguments; - std::size_t m_argument_count; -}; - - -//************************************************************************** -// ARGUMENT PACK WRAPPER IMPLEMENTATION -//************************************************************************** - -template -class format_argument_pack_impl - : private std::array, Count> - , public format_argument_pack -{ -public: - using typename format_argument_pack::iterator; - using format_argument_pack::operator[]; - - template - format_argument_pack_impl(Format &&fmt, Params &&... args) - : std::array, Count>({ { format_argument(std::forward(args))... } }) - , format_argument_pack(std::forward(fmt), Count ? &*this->cbegin() : nullptr, Count) - { - static_assert(sizeof...(Params) == Count, "Wrong number of constructor arguments"); - } - - format_argument_pack_impl(format_argument_pack_impl const &) = default; - format_argument_pack_impl(format_argument_pack_impl &&) = default; - format_argument_pack_impl &operator=(format_argument_pack_impl const &) = default; - format_argument_pack_impl &operator=(format_argument_pack_impl &&) = default; -}; - - -//************************************************************************** -// ARGUMENT PACK CREATOR FUNCTION -//************************************************************************** - -template -inline format_argument_pack_impl make_format_argument_pack(Format &&fmt, Params &&... args) -{ - return format_argument_pack_impl(std::forward(fmt), std::forward(args)...); -} - - -//************************************************************************** -// FORMAT STRING PARSING HELPER -//************************************************************************** - -template -class format_helper : public format_chars -{ -public: - static bool parse_format( - Format const &fmt, - typename Format::iterator &it, - format_flags &flags, - int &next_position, - int &argument_position, - int &width_position, - int &precision_position) - { - static_assert((format_helper::nine - format_helper::zero) == 9, "Digits must be contiguous"); - assert(!fmt.format_at_end(it)); - assert(format_helper::percent == *it); - - int num; - int nxt(next_position); - ++it; - flags = format_flags(); - argument_position = -1; - width_position = -1; - precision_position = -1; - - // Leading zeroes are tricky - they could be a zero-pad flag or part of a position specifier - bool const leading_zero(!fmt.format_at_end(it) && (format_helper::zero == *it)); - while (!fmt.format_at_end(it) && (format_helper::zero == *it)) ++it; - - // Digits encountered at this point could be a field width or a position specifier - num = 0; - bool leading_num(have_digit(fmt, it)); - while (have_digit(fmt, it)) add_digit(num, *it++); - if (leading_num && !have_dollar(fmt, it)) - { - // No dollar sign, leading number is field width - if (leading_zero) flags.set_zero_pad(); - flags.set_field_width(num); - } - else - { - // If we hit a dollar sign after a number, that's a position specifier - if ((leading_zero || leading_num) && have_dollar(fmt, it)) - { - argument_position = num; - ++it; - } - else if (leading_zero) - { - flags.set_zero_pad(); - } - - // Parse flag characters - while (!fmt.format_at_end(it)) - { - switch (*it) - { - case format_helper::hash: ++it; flags.set_alternate_format(); continue; - case format_helper::zero: ++it; flags.set_zero_pad(); continue; - case format_helper::minus: ++it; flags.set_left_align(); continue; - case format_helper::space: ++it; flags.set_positive_sign_space(); continue; - case format_helper::plus: ++it; flags.set_positive_sign_plus(); continue; - case format_helper::quote: ++it; flags.set_digit_grouping(); continue; - case format_helper::I: ++it; flags.set_alternate_digits(); continue; - default: break; - } - break; - } - - // Check for literal or parameterised field width - if (!fmt.format_at_end(it)) - { - if (is_digit(*it)) - { - flags.set_field_width(read_number(fmt, it)); - } - else if (format_helper::asterisk == *it) - { - ++it; - if (have_digit(fmt, it)) - { - num = read_number(fmt, it); - assert(have_dollar(fmt, it)); // invalid positional width - if (!have_dollar(fmt, it)) return false; - width_position = num; - nxt = width_position + 1; - ++it; - } - else - { - width_position = nxt++; - } - } - } - } - - // Check for literal or parameterised precision - if (!fmt.format_at_end(it) && (*it == format_helper::point)) - { - ++it; - if (have_digit(fmt, it)) - { - flags.set_precision(read_number(fmt, it)); - } - else if (!fmt.format_at_end(it) && (format_helper::asterisk == *it)) - { - ++it; - if (have_digit(fmt, it)) - { - num = read_number(fmt, it); - assert(have_dollar(fmt, it)); // invalid positional precision - if (!have_dollar(fmt, it)) return false; - precision_position = num; - nxt = precision_position + 1; - ++it; - } - else - { - precision_position = nxt++; - } - } - else - { - flags.set_precision(0); - } - } - - // Check for length modifiers - if (!fmt.format_at_end(it)) switch (*it) - { - case format_helper::h: - ++it; - if (!fmt.format_at_end(it) && (format_helper::h == *it)) - { - ++it; - flags.set_length(format_flags::length::character); - } - else - { - flags.set_length(format_flags::length::short_integer); - } - break; - case format_helper::l: - ++it; - if (!fmt.format_at_end(it) && (format_helper::l == *it)) - { - ++it; - flags.set_length(format_flags::length::long_long_integer); - } - else - { - flags.set_length(format_flags::length::long_integer); - } - break; - case format_helper::L: - ++it; - flags.set_length(format_flags::length::long_double); - break; - case format_helper::j: - ++it; - flags.set_length(format_flags::length::integer_maximum); - break; - case format_helper::z: - ++it; - flags.set_length(format_flags::length::size_type); - break; - case format_helper::t: - ++it; - flags.set_length(format_flags::length::pointer_difference); - break; - case format_helper::I: - { - ++it; - format_flags::length length = format_flags::length::size_type; - if (!fmt.format_at_end(it)) - { - if ((typename format_helper::char_type(format_helper::zero) + 3) == *it) - { - typename Format::iterator tmp(it); - ++tmp; - if (!fmt.format_at_end(tmp) && ((typename format_helper::char_type(format_helper::zero) + 2) == *tmp)) - { - length = format_flags::length::integer_32; - it = ++tmp; - } - } - else if ((typename format_helper::char_type(format_helper::zero) + 6) == *it) - { - typename Format::iterator tmp(it); - ++tmp; - if (!fmt.format_at_end(tmp) && ((typename format_helper::char_type(format_helper::zero) + 4) == *tmp)) - { - length = format_flags::length::integer_64; - it = ++tmp; - } - } - } - flags.set_length(length); - } - break; - case format_helper::w: - ++it; - flags.set_length(format_flags::length::wide_character); - break; - default: - break; - } - - // Now we should find a conversion specifier - assert(!fmt.format_at_end(it)); // missing conversion - if (fmt.format_at_end(it)) return false; - switch (*it) - { - case format_helper::d: - case format_helper::i: - flags.set_conversion(format_flags::conversion::signed_decimal); - break; - case format_helper::o: - flags.set_conversion(format_flags::conversion::octal); - break; - case format_helper::u: - flags.set_conversion(format_flags::conversion::unsigned_decimal); - break; - case format_helper::X: - flags.set_uppercase(); - [[fallthrough]]; - case format_helper::x: - flags.set_conversion(format_flags::conversion::hexadecimal); - break; - case format_helper::E: - flags.set_uppercase(); - [[fallthrough]]; - case format_helper::e: - flags.set_conversion(format_flags::conversion::scientific_decimal); - break; - case format_helper::F: - flags.set_uppercase(); - [[fallthrough]]; - case format_helper::f: - flags.set_conversion(format_flags::conversion::fixed_decimal); - break; - case format_helper::G: - flags.set_uppercase(); - [[fallthrough]]; - case format_helper::g: - flags.set_conversion(format_flags::conversion::floating_decimal); - break; - case format_helper::A: - flags.set_uppercase(); - [[fallthrough]]; - case format_helper::a: - flags.set_conversion(format_flags::conversion::scientific_hexadecimal); - break; - case format_helper::C: - if (format_flags::length::unspecified == flags.get_length()) - flags.set_length(format_flags::length::long_integer); - [[fallthrough]]; - case format_helper::c: - flags.set_conversion(format_flags::conversion::character); - break; - case format_helper::S: - if (format_flags::length::unspecified == flags.get_length()) - flags.set_length(format_flags::length::long_integer); - [[fallthrough]]; - case format_helper::s: - flags.set_conversion(format_flags::conversion::string); - break; - case format_helper::p: - flags.set_conversion(format_flags::conversion::pointer); - break; - case format_helper::n: - flags.set_conversion(format_flags::conversion::tell); - break; - case format_helper::m: - flags.set_conversion(format_flags::conversion::strerror); - break; - case format_helper::percent: - flags.set_conversion(format_flags::conversion::percent); - break; - default: - assert(false); // unsupported conversion - return false; - } - ++it; - - // Finalise argument position - if (argument_position < 0) argument_position = nxt; - next_position = argument_position; - switch (flags.get_conversion()) - { - case format_flags::conversion::strerror: - case format_flags::conversion::percent: - break; - default: - ++next_position; - } - return true; - } - -private: - static bool have_dollar(Format const &fmt, typename Format::iterator const &it) - { - return !fmt.format_at_end(it) && (*it == format_helper::dollar); - } - - static bool have_digit(Format const &fmt, typename Format::iterator const &it) - { - return !fmt.format_at_end(it) && is_digit(*it); - } - - static bool is_digit(typename format_helper::char_type value) - { - return (format_helper::zero <= value) && (format_helper::nine >= value); - } - - static int digit_value(typename format_helper::char_type value) - { - assert(is_digit(value)); - return int(std::make_signed_t(value - format_helper::zero)); - } - - static void add_digit(int &num, typename format_helper::char_type digit) - { - num = (num * 10) + digit_value(digit); - } - - static int read_number(Format const &fmt, typename Format::iterator &it) - { - assert(have_digit(fmt, it)); - int value = 0; - do add_digit(value, *it++); while (have_digit(fmt, it)); - return value; - } -}; - - -//************************************************************************** -// CORE FORMATTING FUNCTION -//************************************************************************** - -template -typename Stream::off_type stream_format(Stream &str, format_argument_pack const &args) -{ - typedef format_helper > format_helper; - typedef typename format_argument_pack::iterator iterator; - class stream_preserver - { - public: - stream_preserver(Stream &stream) - : m_stream(stream) - , m_fill(stream.fill()) - , m_flags(stream.flags()) - , m_precision(stream.precision()) - , m_width(stream.width()) - { - } - ~stream_preserver() - { - m_stream.width(m_width); - m_stream.precision(m_precision); - m_stream.flags(m_flags); - m_stream.fill(m_fill); - } - private: - Stream &m_stream; - typename Stream::char_type m_fill; - typename Stream::fmtflags m_flags; - std::streamsize m_precision; - std::streamsize m_width; - }; - - typename Stream::pos_type const begin(str.tellp()); - stream_preserver const preserver(str); - int next_pos(1); - iterator start = args.format_begin(); - for (iterator it = start; !args.format_at_end(start); ) - { - while (!args.format_at_end(it) && (format_helper::percent != *it)) ++it; - if (start != it) - { - str.write(&*start, it - start); - start = it; - } - if (!args.format_at_end(it)) - { - // Try to parse a percent format specification - format_flags flags; - int arg_pos, width_pos, prec_pos; - if (!format_helper::parse_format(args, it, flags, next_pos, arg_pos, width_pos, prec_pos)) - continue; - - // Handle parameterised width - if (0 <= width_pos) - { - assert(flags.get_field_width() == 0U); - assert(0 < width_pos); - assert(args.argument_count() >= unsigned(width_pos)); - if ((0 < width_pos) && (args.argument_count() >= unsigned(width_pos))) - { - int width; - if (args[width_pos - 1].make_integer(width)) - { - if (0 > width) - { - flags.set_left_align(); - flags.set_field_width(unsigned(-width)); - } - else - { - flags.set_field_width(unsigned(width)); - } - } - else - { - assert(false); // inappropriate type passed as width argument - } - } - } - - // Handle parameterised precision - if (0 <= prec_pos) - { - assert(flags.get_precision() < 0); - assert(0 < prec_pos); - assert(args.argument_count() >= unsigned(prec_pos)); - if ((0 < prec_pos) && (args.argument_count() >= unsigned(prec_pos))) - { - int precision; - if (args[prec_pos - 1].make_integer(precision)) - flags.set_precision(precision); - else - assert(false); // inappropriate type passed as precision argument - } - } - - // Some conversions don't actually take an argument - get them out of the way - flags.apply(str); - if (format_flags::conversion::strerror == flags.get_conversion()) - { - str << std::strerror(errno); - start = it; - } - else if (format_flags::conversion::percent == flags.get_conversion()) - { - str << typename Stream::char_type(format_chars::percent); - start = it; - } - else - { - assert(0 < arg_pos); - assert(args.argument_count() >= unsigned(arg_pos)); - if ((0 >= arg_pos) || (args.argument_count() < unsigned(arg_pos))) - continue; - if (format_flags::conversion::tell == flags.get_conversion()) - { - typename Stream::pos_type const current(str.tellp()); - args[arg_pos - 1].store_integer( - ((typename Stream::pos_type(-1) == begin) || (typename Stream::pos_type(-1) == current)) - ? typename Stream::off_type(-1) - : (current - begin)); - } - else - { - args[arg_pos - 1].output(str, flags); - } - start = it; - } - } - } - typename Stream::pos_type const end(str.tellp()); - return ((typename Stream::pos_type(-1) == begin) || (typename Stream::pos_type(-1) == end)) - ? typename Stream::off_type(-1) - : (end - begin); -} - -} // namespace detail - - -//************************************************************************** -// FORMAT TO STREAM FUNCTIONS -//************************************************************************** - -template -inline typename Stream::off_type stream_format(Stream &str, Format const &fmt, Params &&... args) -{ - return detail::stream_format(str, detail::make_format_argument_pack(fmt, std::forward(args)...)); -} - -template -inline typename Stream::off_type stream_format(Stream &str, detail::format_argument_pack const &args) -{ - return detail::stream_format(str, args); -} - -template -inline typename Stream::off_type stream_format(Stream &str, detail::format_argument_pack &&args) -{ - return detail::stream_format(str, args); -} - - -//************************************************************************** -// FORMAT TO NEW STRING FUNCTIONS -//************************************************************************** - -template -inline String string_format(Format &&fmt, Params &&... args) -{ - typedef std::basic_ostringstream ostream; - ostream str; - stream_format(str, fmt, std::forward(args)...); - return str.str(); -}; - -template -inline String string_format(std::locale const &locale, Format &&fmt, Params &&... args) -{ - typedef std::basic_ostringstream ostream; - ostream str; - str.imbue(locale); - stream_format(str, fmt, std::forward(args)...); - return str.str(); -}; - -template -inline String string_format(detail::format_argument_pack const &args) -{ - typedef std::basic_ostringstream ostream; - ostream str; - detail::stream_format(str, args); - return str.str(); -}; - -template -inline String string_format(detail::format_argument_pack &&args) -{ - typedef std::basic_ostringstream ostream; - ostream str; - detail::stream_format(str, std::move(args)); - return str.str(); -}; - -template -inline String string_format(std::locale const &locale, detail::format_argument_pack const &args) -{ - typedef std::basic_ostringstream ostream; - ostream str; - str.imbue(locale); - detail::stream_format(str, args); - return str.str(); -}; - -template -inline String string_format(std::locale const &locale, detail::format_argument_pack &&args) -{ - typedef std::basic_ostringstream ostream; - ostream str; - str.imbue(locale); - detail::stream_format(str, std::move(args)); - return str.str(); -}; - - -//************************************************************************** -// CREATING ARGUMENT PACKS -//************************************************************************** - -using detail::format_argument_pack; -using detail::make_format_argument_pack; - -} // namespace util - - -//************************************************************************** -// EXTERNAL TEMPLATE INSTANTIATIONS -//************************************************************************** - -namespace util { - -namespace detail { - -extern template class format_chars; -extern template class format_chars; - -extern template void format_flags::apply(std::ostream &) const; -extern template void format_flags::apply(std::wostream &) const; -extern template void format_flags::apply(std::iostream &) const; -extern template void format_flags::apply(std::wiostream &) const; -extern template void format_flags::apply(std::ostringstream &) const; -extern template void format_flags::apply(std::wostringstream &) const; -extern template void format_flags::apply(std::stringstream &) const; -extern template void format_flags::apply(std::wstringstream &) const; -extern template void format_flags::apply(ovectorstream &) const; -extern template void format_flags::apply(wovectorstream &) const; -extern template void format_flags::apply(vectorstream &) const; -extern template void format_flags::apply(wvectorstream &) const; - -extern template class format_argument; -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostream &, format_flags const &, void const *); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); - -extern template class format_argument; -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostream &, format_flags const &, void const *); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); - -extern template class format_argument; -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::iostream &, format_flags const &, void const *); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); - -extern template class format_argument; -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wiostream &, format_flags const &, void const *); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); - -extern template class format_argument; -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::ostringstream &, format_flags const &, void const *); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); - -extern template class format_argument; -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wostringstream &, format_flags const &, void const *); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); - -extern template class format_argument; -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::stringstream &, format_flags const &, void const *); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); - -extern template class format_argument; -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template void format_argument::static_output(std::wstringstream &, format_flags const &, void const *); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); - -extern template class format_argument; -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(ovectorstream &, format_flags const &, void const *); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); - -extern template class format_argument; -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wovectorstream &, format_flags const &, void const *); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); - -extern template class format_argument; -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(vectorstream &, format_flags const &, void const *); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); - -extern template class format_argument; -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template void format_argument::static_output(wvectorstream &, format_flags const &, void const *); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template bool format_argument::static_make_integer(void const *, int &); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); -extern template void format_argument::static_store_integer(void const *, std::streamoff); - -extern template class format_argument_pack; -extern template class format_argument_pack; -extern template class format_argument_pack; -extern template class format_argument_pack; -extern template class format_argument_pack; -extern template class format_argument_pack; -extern template class format_argument_pack; -extern template class format_argument_pack; -extern template class format_argument_pack; -extern template class format_argument_pack; -extern template class format_argument_pack; -extern template class format_argument_pack; - -extern template std::ostream::off_type stream_format(std::ostream &, format_argument_pack const &); -extern template std::wostream::off_type stream_format(std::wostream &, format_argument_pack const &); -extern template std::iostream::off_type stream_format(std::iostream &, format_argument_pack const &); -extern template std::iostream::off_type stream_format(std::iostream &, format_argument_pack const &); -extern template std::wiostream::off_type stream_format(std::wiostream &, format_argument_pack const &); -extern template std::wiostream::off_type stream_format(std::wiostream &, format_argument_pack const &); -extern template std::ostringstream::off_type stream_format(std::ostringstream &, format_argument_pack const &); -extern template std::ostringstream::off_type stream_format(std::ostringstream &, format_argument_pack const &); -extern template std::wostringstream::off_type stream_format(std::wostringstream &, format_argument_pack const &); -extern template std::wostringstream::off_type stream_format(std::wostringstream &, format_argument_pack const &); -extern template std::stringstream::off_type stream_format(std::stringstream &, format_argument_pack const &); -extern template std::stringstream::off_type stream_format(std::stringstream &, format_argument_pack const &); -extern template std::stringstream::off_type stream_format(std::stringstream &, format_argument_pack const &); -extern template std::wstringstream::off_type stream_format(std::wstringstream &, format_argument_pack const &); -extern template std::wstringstream::off_type stream_format(std::wstringstream &, format_argument_pack const &); -extern template std::wstringstream::off_type stream_format(std::wstringstream &, format_argument_pack const &); -extern template ovectorstream::off_type stream_format(ovectorstream &, format_argument_pack const &); -extern template ovectorstream::off_type stream_format(ovectorstream &, format_argument_pack const &); -extern template wovectorstream::off_type stream_format(wovectorstream &, format_argument_pack const &); -extern template wovectorstream::off_type stream_format(wovectorstream &, format_argument_pack const &); -extern template vectorstream::off_type stream_format(vectorstream &, format_argument_pack const &); -extern template vectorstream::off_type stream_format(vectorstream &, format_argument_pack const &); -extern template vectorstream::off_type stream_format(vectorstream &, format_argument_pack const &); -extern template wvectorstream::off_type stream_format(wvectorstream &, format_argument_pack const &); -extern template wvectorstream::off_type stream_format(wvectorstream &, format_argument_pack const &); -extern template wvectorstream::off_type stream_format(wvectorstream &, format_argument_pack const &); - -} // namespace detail - -} // namespace util - -#endif // MAME_UTIL_STRFORMAT_H diff --git a/waterbox/ares64/ares/thirdparty/mame/lib/util/vecstream.h b/waterbox/ares64/ares/thirdparty/mame/lib/util/vecstream.h deleted file mode 100644 index 1af7dd0cd8..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/lib/util/vecstream.h +++ /dev/null @@ -1,408 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Vas Crabb -/*************************************************************************** - - vecstream.h - - streams with vector storage - - These types are useful if you want a persistent buffer for formatted - text and you need to use it like a character array or character - pointer, as you get read-only access to it without copying. The - storage is always guaranteed to be contiguous. Writing to the - stream may invalidate pointers to storage. - -***************************************************************************/ - -#ifndef MAME_UTIL_VECSTREAM_H -#define MAME_UTIL_VECSTREAM_H - -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace util { - -template , typename Allocator = std::allocator > -class basic_vectorbuf : public std::basic_streambuf -{ -public: - typedef typename std::basic_streambuf::char_type char_type; - typedef typename std::basic_streambuf::int_type int_type; - typedef typename std::basic_streambuf::pos_type pos_type; - typedef typename std::basic_streambuf::off_type off_type; - typedef Allocator allocator_type; - typedef std::vector vector_type; - - basic_vectorbuf(std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : std::basic_streambuf(), m_mode(mode), m_storage(), m_threshold(nullptr) - { - setup(); - } - - basic_vectorbuf(vector_type const &content, std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : std::basic_streambuf(), m_mode(mode), m_storage(content), m_threshold(nullptr) - { - setup(); - } - - basic_vectorbuf(vector_type &&content, std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : std::basic_streambuf(), m_mode(mode), m_storage(std::move(content)), m_threshold(nullptr) - { - setup(); - } - - basic_vectorbuf(basic_vectorbuf const &that) : std::basic_streambuf(that), m_mode(that.m_mode), m_storage(that.m_storage), m_threshold(nullptr) - { - adjust(); - } - - basic_vectorbuf(basic_vectorbuf &&that) : std::basic_streambuf(that), m_mode(that.m_mode), m_storage(std::move(that.m_storage)), m_threshold(that.m_threshold) - { - that.clear(); - } - - vector_type const &vec() const - { - if (m_mode & std::ios_base::out) - { - if (this->pptr() > m_threshold) m_threshold = this->pptr(); - auto const base(this->pbase()); - auto const end(m_threshold - base); - if (m_storage.size() > std::make_unsigned_t(end)) - { - m_storage.resize(std::make_unsigned_t(end)); - assert(&m_storage[0] == base); - auto const put_offset(this->pptr() - base); - const_cast(this)->setp(base, base + put_offset); - const_cast(this)->pbump(put_offset); - } - } - return m_storage; - } - - void vec(const vector_type &content) - { - m_storage = content; - setup(); - } - - void vec(vector_type &&content) - { - m_storage = std::move(content); - setup(); - } - - void clear() - { - m_storage.clear(); - setup(); - } - - void swap(basic_vectorbuf &that) - { - using std::swap; - std::basic_streambuf::swap(that); - swap(m_mode, that.m_mode); - swap(m_storage, that.m_storage); - swap(m_threshold, that.m_threshold); - } - - void reserve(typename vector_type::size_type size) - { - if ((m_mode & std::ios_base::out) && (m_storage.capacity() < size)) - { - m_storage.reserve(size); - adjust(); - } - } - - basic_vectorbuf &operator=(basic_vectorbuf const &that) - { - std::basic_streambuf::operator=(that); - m_mode = that.m_mode; - m_storage = that.m_storage; - m_threshold = that.m_threshold; - adjust(); - return *this; - } - - basic_vectorbuf &operator=(basic_vectorbuf &&that) - { - std::basic_streambuf::operator=(that); - m_mode = that.m_mode; - m_storage = std::move(that.m_storage); - m_threshold = that.m_threshold; - that.clear(); - return *this; - } - -protected: - virtual pos_type seekoff(off_type off, std::ios_base::seekdir dir, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out) override - { - bool const in(which & std::ios_base::in); - bool const out(which & std::ios_base::out); - if ((!in && !out) || - (in && out && (std::ios_base::cur == dir)) || - (in && !(m_mode & std::ios_base::in)) || - (out && !(m_mode & std::ios_base::out))) - { - return pos_type(off_type(-1)); - } - maximise_egptr(); - off_type const end((m_mode & std::ios_base::out) ? off_type(m_threshold - this->pbase()) : off_type(m_storage.size())); - switch (dir) - { - case std::ios_base::beg: - break; - case std::ios_base::end: - off += end; - break; - case std::ios_base::cur: - off += off_type(in ? (this->gptr() - this->eback()) : (this->pptr() - this->pbase())); - break; - default: - return pos_type(off_type(-1)); - } - if ((off_type(0) > off) || ((m_mode & std::ios_base::app) && out && (end != off))) return pos_type(off_type(-1)); - if ((out ? off_type(this->epptr() - this->pbase()) : end) < off) return pos_type(off_type(-1)); - if (out) - { - this->setp(this->pbase(), this->epptr()); - this->pbump(off); - if (m_threshold < this->pptr()) m_threshold = this->pptr(); - if (m_mode & std::ios_base::in) - { - if (in) this->setg(this->eback(), this->eback() + off, m_threshold); - else if (this->egptr() < m_threshold) this->setg(this->eback(), this->gptr(), m_threshold); - } - } - else if (in) - { - this->setg(this->eback(), this->eback() + off, this->egptr()); - } - return pos_type(off); - } - - virtual pos_type seekpos(pos_type pos, std::ios_base::openmode which = std::ios_base::in |std:: ios_base::out) override - { - return seekoff(off_type(pos), std::ios_base::beg, which); - } - - virtual int_type underflow() override - { - if (!this->gptr()) return Traits::eof(); - maximise_egptr(); - return (this->gptr() < this->egptr()) ? Traits::to_int_type(*this->gptr()) : Traits::eof(); - } - - virtual int_type overflow(int_type ch = Traits::eof()) override - { - if (!(m_mode & std::ios_base::out)) return Traits::eof(); - if (Traits::eq_int_type(ch, Traits::eof())) return Traits::not_eof(ch); - auto const put_offset(this->pptr() - this->pbase() + 1); - auto const threshold_offset((std::max)(m_threshold - this->pbase(), put_offset)); - m_storage.push_back(Traits::to_char_type(ch)); - m_storage.resize(m_storage.capacity()); - auto const base(&m_storage[0]); - this->setp(base, base + m_storage.size()); - m_threshold = base + threshold_offset; - if (m_mode & std::ios_base::in) this->setg(base, base + (this->gptr() - this->eback()), m_threshold); - this->pbump(int(put_offset)); - return ch; - } - - virtual int_type pbackfail(int_type ch = Traits::eof()) override - { - if (this->gptr() != this->eback()) - { - if (Traits::eq_int_type(ch, Traits::eof())) - { - this->gbump(-1); - return Traits::not_eof(ch); - } - else if (Traits::eq(Traits::to_char_type(ch), this->gptr()[-1])) - { - this->gbump(-1); - return ch; - } - else if (m_mode & std::ios_base::out) - { - this->gbump(-1); - *this->gptr() = Traits::to_char_type(ch); - return ch; - } - } - return Traits::eof(); - } - -private: - void setup() - { - if (m_mode & std::ios_base::out) - { - auto const end(m_storage.size()); - m_storage.resize(m_storage.capacity()); - if (m_storage.empty()) - { - m_threshold = nullptr; - this->setg(nullptr, nullptr, nullptr); - this->setp(nullptr, nullptr); - } - else - { - auto const base(&m_storage[0]); - m_threshold = base + end; - this->setp(base, base + m_storage.size()); - if (m_mode & std::ios_base::in) this->setg(base, base, m_threshold); - } - if (m_mode & (std::ios_base::app | std::ios_base::ate)) this->pbump(int(unsigned(end))); - } - else if (m_storage.empty()) - { - this->setg(nullptr, nullptr, nullptr); - } - else if (m_mode & std::ios_base::in) - { - auto const base(&m_storage[0]); - this->setg(base, base, base + m_storage.size()); - } - } - - void adjust() - { - auto const put_offset(this->pptr() - this->pbase()); - auto const get_offset(this->gptr() - this->eback()); - setup(); - if (m_mode & std::ios_base::out) - { - this->pbump(int(put_offset)); - m_threshold = this->pptr(); - if (m_mode & std::ios_base::in) - { - auto const base(&m_storage[0]); - this->setg(base, base + get_offset, m_threshold); - } - } - else if (m_mode & std::ios_base::in) - { - this->gbump(int(get_offset)); - } - } - - void maximise_egptr() - { - if (m_mode & std::ios_base::out) - { - if (m_threshold < this->pptr()) m_threshold = this->pptr(); - if ((m_mode & std::ios_base::in) && (this->egptr() < m_threshold)) this->setg(this->eback(), this->gptr(), m_threshold); - } - } - - std::ios_base::openmode m_mode; - mutable vector_type m_storage; - mutable CharT *m_threshold; -}; - -template , typename Allocator = std::allocator > -class basic_ivectorstream : public std::basic_istream -{ -public: - typedef typename basic_vectorbuf::vector_type vector_type; - - basic_ivectorstream(std::ios_base::openmode mode = std::ios_base::in) : std::basic_istream(&m_rdbuf), m_rdbuf(mode) { } - basic_ivectorstream(vector_type const &content, std::ios_base::openmode mode = std::ios_base::in) : std::basic_istream(&m_rdbuf), m_rdbuf(content, mode) { } - basic_ivectorstream(vector_type &&content, std::ios_base::openmode mode = std::ios_base::in) : std::basic_istream(&m_rdbuf), m_rdbuf(std::move(content), mode) { } - - basic_vectorbuf *rdbuf() const { return static_cast *>(std::basic_istream::rdbuf()); } - vector_type const &vec() const { return rdbuf()->vec(); } - void vec(const vector_type &content) { rdbuf()->vec(content); } - void vec(vector_type &&content) { rdbuf()->vec(std::move(content)); } - - void swap(basic_ivectorstream &that) { std::basic_istream::swap(that); rdbuf()->swap(*that.rdbuf()); } - -private: - basic_vectorbuf m_rdbuf; -}; - -template , typename Allocator = std::allocator > -class basic_ovectorstream : public std::basic_ostream -{ -public: - typedef typename basic_vectorbuf::vector_type vector_type; - - basic_ovectorstream(std::ios_base::openmode mode = std::ios_base::out) : std::basic_ostream(&m_rdbuf), m_rdbuf(mode) { } - basic_ovectorstream(vector_type const &content, std::ios_base::openmode mode = std::ios_base::out) : std::basic_ostream(&m_rdbuf), m_rdbuf(content, mode) { } - basic_ovectorstream(vector_type &&content, std::ios_base::openmode mode = std::ios_base::out) : std::basic_ostream(&m_rdbuf), m_rdbuf(std::move(content), mode) { } - - basic_vectorbuf *rdbuf() const { return static_cast *>(std::basic_ostream::rdbuf()); } - - vector_type const &vec() const { return rdbuf()->vec(); } - void vec(const vector_type &content) { rdbuf()->vec(content); } - void vec(vector_type &&content) { rdbuf()->vec(std::move(content)); } - basic_ovectorstream &reserve(typename vector_type::size_type size) { rdbuf()->reserve(size); return *this; } - - void swap(basic_ovectorstream &that) { std::basic_ostream::swap(that); rdbuf()->swap(*that.rdbuf()); } - -private: - basic_vectorbuf m_rdbuf; -}; - -template , typename Allocator = std::allocator > -class basic_vectorstream : public std::basic_iostream -{ -public: - typedef typename basic_vectorbuf::vector_type vector_type; - - basic_vectorstream(std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : std::basic_iostream(&m_rdbuf), m_rdbuf(mode) { } - basic_vectorstream(vector_type const &content, std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : std::basic_iostream(&m_rdbuf), m_rdbuf(content, mode) { } - basic_vectorstream(vector_type &&content, std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : std::basic_iostream(&m_rdbuf), m_rdbuf(std::move(content), mode) { } - - basic_vectorbuf *rdbuf() const { return static_cast *>(std::basic_iostream::rdbuf()); } - - vector_type const &vec() const { return rdbuf()->vec(); } - void vec(const vector_type &content) { rdbuf()->vec(content); } - void vec(vector_type &&content) { rdbuf()->vec(std::move(content)); } - basic_vectorstream &reserve(typename vector_type::size_type size) { rdbuf()->reserve(size); return *this; } - - void swap(basic_vectorstream &that) { std::basic_iostream::swap(that); rdbuf()->swap(*that.rdbuf()); } - -private: - basic_vectorbuf m_rdbuf; -}; - -typedef basic_ivectorstream ivectorstream; -typedef basic_ivectorstream wivectorstream; -typedef basic_ovectorstream ovectorstream; -typedef basic_ovectorstream wovectorstream; -typedef basic_vectorstream vectorstream; -typedef basic_vectorstream wvectorstream; - -template -void swap(basic_vectorbuf &a, basic_vectorbuf &b) { a.swap(b); } - -template -void swap(basic_ivectorstream &a, basic_ivectorstream &b) { a.swap(b); } -template -void swap(basic_ovectorstream &a, basic_ovectorstream &b) { a.swap(b); } -template -void swap(basic_vectorstream &a, basic_vectorstream &b) { a.swap(b); } - -extern template class basic_ivectorstream; -extern template class basic_ivectorstream; -extern template class basic_ovectorstream; -extern template class basic_ovectorstream; -extern template class basic_vectorstream; -extern template class basic_vectorstream; - -} // namespace util - -#endif // MAME_UTIL_VECSTREAM_H diff --git a/waterbox/ares64/ares/thirdparty/mame/mame/includes/n64.h b/waterbox/ares64/ares/thirdparty/mame/mame/includes/n64.h deleted file mode 100644 index 3fa804c8bb..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/mame/includes/n64.h +++ /dev/null @@ -1,470 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz -#ifndef MAME_INCLUDES_N64_H -#define MAME_INCLUDES_N64_H - -#pragma once - -#if defined(MAME_RDP) -#include "video/n64.h" - -class running_machine -{ -public: - running_machine(n64_state* state) - : m_state(state), m_rand_seed(0x9d14abd7) - { } - - template DriverClass *driver_data() const; - - u32 rand() - { - m_rand_seed = 1664525 * m_rand_seed + 1013904223; - - // return rotated by 16 bits; the low bits have a short period - // and are frequently used - return (m_rand_seed >> 16) | (m_rand_seed << 16); - } - -private: - n64_state* m_state; - u32 m_rand_seed; // current random number seed -}; - -template <> inline n64_state *running_machine::driver_data() const { return m_state; } - -class n64_state -{ -public: - n64_state(uint32_t* rdram, uint32_t* rsp_dmem, n64_periphs* rcp_periphs) - : m_machine(this), m_rdram(rdram), m_rsp_dmem(rsp_dmem), m_rcp_periphs(rcp_periphs) - { } - - void video_start(); - - // Getters - n64_rdp* rdp() { return m_rdp.get(); } - - running_machine& machine() { return m_machine; } - -protected: - running_machine m_machine; - - uint32_t* m_rdram; - uint32_t* m_rsp_dmem; - - n64_periphs* m_rcp_periphs; - - /* video-related */ - std::unique_ptr m_rdp; -}; - -class n64_periphs -{ -public: - virtual void dp_full_sync() = 0; -}; -#else -#include "cpu/rsp/rsp.h" -#include "cpu/mips/mips3.h" -#include "sound/dmadac.h" -#include "video/n64.h" - -/*----------- driver state -----------*/ - -class n64_rdp; -class n64_periphs; - -class n64_state : public driver_device -{ -public: - n64_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_vr4300(*this, "maincpu") - , m_rsp(*this, "rsp") - , m_sram(*this, "sram") - , m_rdram(*this, "rdram") - , m_rsp_imem(*this, "rsp_imem") - , m_rsp_dmem(*this, "rsp_dmem") - , m_rcp_periphs(*this, "rcp") - { - } - - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - void n64_machine_stop(); - - uint32_t screen_update_n64(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - DECLARE_WRITE_LINE_MEMBER(screen_vblank_n64); - - // Getters - n64_rdp* rdp() { return m_rdp.get(); } - uint32_t* rdram() { return m_rdram; } - uint32_t* sram() { return m_sram; } - -protected: - required_device m_vr4300; - required_device m_rsp; - - optional_shared_ptr m_sram; - required_shared_ptr m_rdram; - required_shared_ptr m_rsp_imem; - required_shared_ptr m_rsp_dmem; - - required_device m_rcp_periphs; - - /* video-related */ - std::unique_ptr m_rdp; -}; - -/*----------- devices -----------*/ - -#define AUDIO_DMA_DEPTH 2 - -struct n64_savable_data_t -{ - uint8_t sram[0x20000]; - uint8_t eeprom[2048]; - uint8_t mempak[2][0x8000]; -}; - -class n64_periphs : public device_t, - public device_video_interface -{ -private: - struct AUDIO_DMA - { - uint32_t address; - uint32_t length; - }; - -public: - // construction/destruction - n64_periphs(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - uint32_t is64_r(offs_t offset); - void is64_w(offs_t offset, uint32_t data); - uint32_t open_r(offs_t offset); - void open_w(uint32_t data); - uint32_t rdram_reg_r(offs_t offset, uint32_t mem_mask = ~0); - void rdram_reg_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - uint32_t mi_reg_r(offs_t offset, uint32_t mem_mask = ~0); - void mi_reg_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - uint32_t vi_reg_r(offs_t offset, uint32_t mem_mask = ~0); - void vi_reg_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - uint32_t ai_reg_r(offs_t offset, uint32_t mem_mask = ~0); - void ai_reg_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - uint32_t pi_reg_r(offs_t offset, uint32_t mem_mask = ~0); - void pi_reg_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - uint32_t ri_reg_r(offs_t offset, uint32_t mem_mask = ~0); - void ri_reg_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - uint32_t si_reg_r(offs_t offset); - void si_reg_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - uint32_t dd_reg_r(offs_t offset); - void dd_reg_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - uint32_t pif_ram_r(offs_t offset, uint32_t mem_mask = ~0); - void pif_ram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - TIMER_CALLBACK_MEMBER(reset_timer_callback); - TIMER_CALLBACK_MEMBER(vi_scanline_callback); - TIMER_CALLBACK_MEMBER(dp_delay_callback); - TIMER_CALLBACK_MEMBER(ai_timer_callback); - TIMER_CALLBACK_MEMBER(pi_dma_callback); - TIMER_CALLBACK_MEMBER(si_dma_callback); - uint32_t dp_reg_r(offs_t offset, uint32_t mem_mask = ~0); - void dp_reg_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - uint32_t sp_reg_r(offs_t offset); - void sp_reg_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - void sp_set_status(uint32_t data); - void signal_rcp_interrupt(int interrupt); - void check_interrupts(); - - void dp_full_sync(); - void ai_timer_tick(); - void pi_dma_tick(); - void si_dma_tick(); - void reset_tick(); - void video_update(bitmap_rgb32 &bitmap); - - // Video Interface (VI) registers - uint32_t vi_width; - uint32_t vi_origin; - uint32_t vi_control; - uint32_t vi_blank; - uint32_t vi_hstart; - uint32_t vi_vstart; - uint32_t vi_xscale; - uint32_t vi_yscale; - uint32_t vi_burst; - uint32_t vi_vsync; - uint32_t vi_hsync; - uint32_t vi_leap; - uint32_t vi_intr; - uint32_t vi_vburst; - uint8_t field; - - // nvram-specific for the console - device_t *m_nvram_image; - - n64_savable_data_t m_save_data; - - uint32_t cart_length; - - bool dd_present; - bool disk_present; - bool cart_present; - - // Mouse X2/Y2 for delta position - int mouse_x2[4]; - int mouse_y2[4]; - - void poll_reset_button(bool button); - - uint32_t dp_clock; - -protected: - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - -private: - n64_state* m_n64; - address_space *m_mem_map; - required_device m_vr4300; - required_device m_rsp; - required_shared_ptr m_rsp_imem; - required_shared_ptr m_rsp_dmem; - - uint32_t *m_rdram; - uint32_t *m_sram; - - void clear_rcp_interrupt(int interrupt); - - bool reset_held; - emu_timer *reset_timer; - emu_timer *dp_delay_timer; - - uint8_t is64_buffer[0x10000]; - - // Video interface (VI) registers and functions - emu_timer *vi_scanline_timer; - - // Audio Interface (AI) registers and functions - void ai_dma(); - AUDIO_DMA *ai_fifo_get_top(); - void ai_fifo_push(uint32_t address, uint32_t length); - void ai_fifo_pop(); - bool ai_delayed_carry; - - required_device_array ai_dac; - uint32_t ai_dram_addr; - uint32_t ai_len; - uint32_t ai_control; - int ai_dacrate; - int ai_bitrate; - uint32_t ai_status; - - emu_timer *ai_timer; - - AUDIO_DMA ai_fifo[AUDIO_DMA_DEPTH]; - int ai_fifo_wpos; - int ai_fifo_rpos; - int ai_fifo_num; - - // Memory Interface (MI) registers - uint32_t mi_version; - uint32_t mi_interrupt; - uint32_t mi_intr_mask; - uint32_t mi_mode; - - // RDRAM Interface (RI) registers - uint32_t rdram_regs[10]; - uint32_t ri_regs[8]; - - // RSP Interface (SP) registers - void sp_dma(int direction); - - uint32_t sp_mem_addr; - uint32_t sp_dram_addr; - uint32_t sp_mem_addr_start; - uint32_t sp_dram_addr_start; - int sp_dma_length; - int sp_dma_count; - int sp_dma_skip; - uint32_t sp_semaphore; - - // Disk Drive (DD) registers and functions - void dd_set_zone_and_track_offset(); - void dd_update_bm(); - void dd_write_sector(); - void dd_read_sector(); - void dd_read_C2(); - uint32_t dd_buffer[256]; - uint32_t dd_sector_data[64]; - uint32_t dd_ram_seq_data[16]; - uint32_t dd_data_reg; - uint32_t dd_status_reg; - uint32_t dd_track_reg; - uint32_t dd_buf_status_reg; - uint32_t dd_sector_err_reg; - uint32_t dd_seq_status_reg; - uint32_t dd_seq_ctrl_reg; - uint32_t dd_sector_reg; - uint32_t dd_reset_reg; - uint32_t dd_current_reg; - bool dd_bm_reset_held; - bool dd_write; - uint8_t dd_int; - uint8_t dd_start_block; - uint8_t dd_start_sector; - uint8_t dd_sectors_per_block; - uint8_t dd_sector_size; - uint8_t dd_zone; - uint32_t dd_track_offset; - - // Peripheral Interface (PI) registers and functions - emu_timer *pi_dma_timer; - uint32_t pi_dram_addr; - uint32_t pi_cart_addr; - uint32_t pi_rd_len; - uint32_t pi_wr_len; - uint32_t pi_status; - uint32_t pi_bsd_dom1_lat; - uint32_t pi_bsd_dom1_pwd; - uint32_t pi_bsd_dom1_pgs; - uint32_t pi_bsd_dom1_rls; - uint32_t pi_bsd_dom2_lat; - uint32_t pi_bsd_dom2_pwd; - uint32_t pi_bsd_dom2_pgs; - uint32_t pi_bsd_dom2_rls; - uint32_t pi_dma_dir; - - // Serial Interface (SI) registers and functions - emu_timer *si_dma_timer; - void pif_dma(int direction); - void handle_pif(); - int pif_channel_handle_command(int channel, int slength, uint8_t *sdata, int rlength, uint8_t *rdata); - uint8_t calc_mempak_crc(uint8_t *buffer, int length); - uint8_t pif_ram[0x40]; - uint8_t pif_cmd[0x40]; - uint32_t si_dram_addr; - uint32_t si_pif_addr; - uint32_t si_pif_addr_rd64b; - uint32_t si_pif_addr_wr64b; - uint32_t si_status_val; - uint32_t si_dma_dir; - uint32_t cic_status; - int cic_type; - - n64_savable_data_t savable_data; - - // Video Interface (VI) functions - void vi_recalculate_resolution(); - void video_update16(bitmap_rgb32 &bitmap); - void video_update32(bitmap_rgb32 &bitmap); - uint8_t random_seed; // %HACK%, adds 19 each time it's read and is more or less random - uint8_t get_random() { return random_seed += 0x13; } - - int32_t m_gamma_table[256]; - int32_t m_gamma_dither_table[0x4000]; - -}; - -// device type definition -DECLARE_DEVICE_TYPE(N64PERIPH, n64_periphs) -#endif - -/*----------- defined in video/n64.c -----------*/ - -#define DACRATE_NTSC (48681812) -#define DACRATE_PAL (49656530) -#define DACRATE_MPAL (48628316) - -/*----------- defined in machine/n64.c -----------*/ - -#define SP_INTERRUPT 0x1 -#define SI_INTERRUPT 0x2 -#define AI_INTERRUPT 0x4 -#define VI_INTERRUPT 0x8 -#define PI_INTERRUPT 0x10 -#define DP_INTERRUPT 0x20 - -#define SP_STATUS_HALT 0x0001 -#define SP_STATUS_BROKE 0x0002 -#define SP_STATUS_DMABUSY 0x0004 -#define SP_STATUS_DMAFULL 0x0008 -#define SP_STATUS_IOFULL 0x0010 -#define SP_STATUS_SSTEP 0x0020 -#define SP_STATUS_INTR_BREAK 0x0040 -#define SP_STATUS_SIGNAL0 0x0080 -#define SP_STATUS_SIGNAL1 0x0100 -#define SP_STATUS_SIGNAL2 0x0200 -#define SP_STATUS_SIGNAL3 0x0400 -#define SP_STATUS_SIGNAL4 0x0800 -#define SP_STATUS_SIGNAL5 0x1000 -#define SP_STATUS_SIGNAL6 0x2000 -#define SP_STATUS_SIGNAL7 0x4000 - -#define DP_STATUS_XBUS_DMA 0x01 -#define DP_STATUS_FREEZE 0x02 -#define DP_STATUS_FLUSH 0x04 -#define DP_STATUS_START_VALID 0x400 - -#define DD_ASIC_STATUS_DISK_CHANGE 0x00010000 -#define DD_ASIC_STATUS_MECHA_ERR 0x00020000 -#define DD_ASIC_STATUS_WRPROTECT_ERR 0x00040000 -#define DD_ASIC_STATUS_HEAD_RETRACT 0x00080000 -#define DD_ASIC_STATUS_MOTOR_OFF 0x00100000 -#define DD_ASIC_STATUS_RESET 0x00400000 -#define DD_ASIC_STATUS_BUSY 0x00800000 -#define DD_ASIC_STATUS_DISK 0x01000000 -#define DD_ASIC_STATUS_MECHA_INT 0x02000000 -#define DD_ASIC_STATUS_BM_INT 0x04000000 -#define DD_ASIC_STATUS_BM_ERROR 0x08000000 -#define DD_ASIC_STATUS_C2_XFER 0x10000000 -#define DD_ASIC_STATUS_DREQ 0x40000000 - -#define DD_TRACK_INDEX_LOCK 0x60000000 - -#define DD_BM_MECHA_INT_RESET 0x01000000 -#define DD_BM_XFERBLOCKS 0x02000000 -#define DD_BM_DISABLE_C1 0x04000000 -#define DD_BM_DISABLE_OR_CHK 0x08000000 -#define DD_BM_RESET 0x10000000 -#define DD_BM_INT_MASK 0x20000000 -#define DD_BM_MODE 0x40000000 -#define DD_BM_START 0x80000000 - -#define DD_BMST_RUNNING 0x80000000 -#define DD_BMST_ERROR 0x04000000 -#define DD_BMST_MICRO_STATUS 0x02000000 -#define DD_BMST_BLOCKS 0x01000000 -#define DD_BMST_C1_CORRECT 0x00800000 -#define DD_BMST_C1_DOUBLE 0x00400000 -#define DD_BMST_C1_SINGLE 0x00200000 -#define DD_BMST_C1_ERROR 0x00010000 - -#define DD_ASIC_ERR_AM_FAIL 0x80000000 -#define DD_ASIC_ERR_MICRO_FAIL 0x40000000 -#define DD_ASIC_ERR_SPINDLE_FAIL 0x20000000 -#define DD_ASIC_ERR_OVER_RUN 0x10000000 -#define DD_ASIC_ERR_OFFTRACK 0x08000000 -#define DD_ASIC_ERR_NO_DISK 0x04000000 -#define DD_ASIC_ERR_CLOCK_UNLOCK 0x02000000 -#define DD_ASIC_ERR_SELF_STOP 0x01000000 - -#define DD_SEQ_MICRO_INT_MASK 0x80000000 -#define DD_SEQ_MICRO_PC_ENABLE 0x40000000 - -#define SECTORS_PER_BLOCK 85 -#define BLOCKS_PER_TRACK 2 - -const unsigned int ddZoneSecSize[16] = {232,216,208,192,176,160,144,128, - 216,208,192,176,160,144,128,112}; -const unsigned int ddZoneTrackSize[16] = {158,158,149,149,149,149,149,114, - 158,158,149,149,149,149,149,114}; -const unsigned int ddStartOffset[16] = - {0x0,0x5F15E0,0xB79D00,0x10801A0,0x1523720,0x1963D80,0x1D414C0,0x20BBCE0, - 0x23196E0,0x28A1E00,0x2DF5DC0,0x3299340,0x36D99A0,0x3AB70E0,0x3E31900,0x4149200}; - -#endif // MAME_INCLUDES_N64_H diff --git a/waterbox/ares64/ares/thirdparty/mame/mame/video/n64.cpp b/waterbox/ares64/ares/thirdparty/mame/mame/video/n64.cpp deleted file mode 100644 index 4a88912495..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/mame/video/n64.cpp +++ /dev/null @@ -1,4415 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz -/****************************************************************************** - - - SGI/Nintendo Reality Display Processor - ------------------- - - by Ryan Holtz - based on initial C code by Ville Linde - contains additional improvements from angrylion, Ziggy, Gonetz and Orkin - - -******************************************************************************* - -STATUS: - -Much behavior needs verification against real hardware. Many edge cases must -be verified on real hardware as well. - -TODO: - -- Further re-work class structure to avoid dependencies - -*******************************************************************************/ - -#include "emu.h" -#include "includes/n64.h" -#include "video/rdpblend.h" -#include "video/rdptpipe.h" -#if !defined(MAME_RDP) -#include "screen.h" -#endif - -#include - -#define LOG_RDP_EXECUTION 0 -#define DEBUG_RDP_PIXEL 0 -#define DRAW_FRAME_COUNTER 0 - -#if DEBUG_RDP_PIXEL -static bool s_debug_drawing = false; -#endif - -static FILE* rdp_exec; - -uint32_t n64_rdp::s_special_9bit_clamptable[512]; - -bool n64_rdp::rdp_range_check(uint32_t addr) -{ - if(m_misc_state.m_fb_size == 0) return false; - - int32_t fbcount = ((m_misc_state.m_fb_width * m_scissor.m_yl) << (m_misc_state.m_fb_size - 1)) * 3; - int32_t fbaddr = m_misc_state.m_fb_address & 0x007fffff; - if ((addr >= fbaddr) && (addr < (fbaddr + fbcount))) - { - return false; - } - - int32_t zbcount = m_misc_state.m_fb_width * m_scissor.m_yl * 2; - int32_t zbaddr = m_misc_state.m_zb_address & 0x007fffff; - if ((addr >= zbaddr) && (addr < (zbaddr + zbcount))) - { - return false; - } - - printf("Check failed: %08x vs. %08x-%08x, %08x-%08x (%d, %d)\n", addr, fbaddr, fbaddr + fbcount, zbaddr, zbaddr + zbcount, m_misc_state.m_fb_width, m_scissor.m_yl); - fflush(stdout); - return true; -} - -/*****************************************************************************/ - -// The functions in this file should be moved into the parent Processor class. -#include "rdpfiltr.hxx" - -int32_t n64_rdp::get_alpha_cvg(int32_t comb_alpha, rdp_span_aux* userdata, const rdp_poly_state &object) -{ - int32_t temp = comb_alpha; - int32_t temp2 = userdata->m_current_pix_cvg; - int32_t temp3 = 0; - - if (object.m_other_modes.cvg_times_alpha) - { - temp3 = (temp * temp2) + 4; - userdata->m_current_pix_cvg = (temp3 >> 8) & 0xf; - } - if (object.m_other_modes.alpha_cvg_select) - { - temp = (m_other_modes.cvg_times_alpha) ? (temp3 >> 3) : (temp2 << 5); - } - if (temp > 0xff) - { - temp = 0xff; - } - return temp; -} - -/*****************************************************************************/ - -void n64_state::video_start() -{ - m_rdp = std::make_unique(*this, m_rdram, m_rsp_dmem); - - m_rdp->set_machine(machine()); - m_rdp->init_internal_state(); - m_rdp->set_n64_periphs(m_rcp_periphs); - - m_rdp->m_blender.set_machine(machine()); - m_rdp->m_blender.set_processor(m_rdp.get()); - - m_rdp->m_tex_pipe.set_machine(machine()); - - m_rdp->m_aux_buf = make_unique_clear(EXTENT_AUX_COUNT); - - if (LOG_RDP_EXECUTION) - { - rdp_exec = fopen("rdp_execute.txt", "wt"); - } -} - -#if !defined(MAME_RDP) -uint32_t n64_state::screen_update_n64(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - //uint16_t* frame_buffer = (uint16_t*)&rdram[(m_rcp_periphs->vi_origin & 0xffffff) >> 2]; - //uint8_t* cvg_buffer = &m_rdp.m_hidden_bits[((m_rcp_periphs->vi_origin & 0xffffff) >> 2) >> 1]; - //int32_t vibuffering = ((m_rcp_periphs->vi_control & 2) && fsaa && divot); - - //vibuffering = 0; // Disabled for now - - /* - if (vibuffering && ((m_rcp_periphs->vi_control & 3) == 2)) - { - if (frame_buffer) - { - for (j=0; j < vres; j++) - { - for (i=0; i < hres; i++) - { - uint16_t pix; - pix = frame_buffer[pixels ^ WORD_ADDR_XOR]; - curpixel_cvg = ((pix & 1) << 2) | (cvg_buffer[pixels ^ BYTE_ADDR_XOR] & 3); // Reuse of this variable - if (curpixel_cvg < 7 && i > 1 && j > 1 && i < (hres - 2) && j < (vres - 2) && fsaa) - { - newc = video_filter16(&frame_buffer[pixels ^ WORD_ADDR_XOR], &cvg_buffer[pixels ^ BYTE_ADDR_XOR], m_rcp_periphs->vi_width); - ViBuffer[i][j] = newc; - } - else - { - newc.i.r = ((pix >> 8) & 0xf8) | (pix >> 13); - newc.i.g = ((pix >> 3) & 0xf8) | ((pix >> 8) & 0x07); - newc.i.b = ((pix << 2) & 0xf8) | ((pix >> 3) & 0x07); - ViBuffer[i][j] = newc; - } - pixels++; - } - pixels += invisiblewidth; - } - } - } - */ - - m_rdp->mark_frame(); - - if (m_rcp_periphs->vi_blank) - { - bitmap.fill(0, screen.visible_area()); - return 0; - } - - m_rcp_periphs->video_update(bitmap); - - return 0; -} - -WRITE_LINE_MEMBER(n64_state::screen_vblank_n64) -{ -} - -void n64_periphs::video_update(bitmap_rgb32 &bitmap) -{ - - if (vi_control & 0x40) /* Interlace */ - { - field ^= 1; - } - else - { - field = 0; - } - - switch (vi_control & 0x3) - { - case PIXEL_SIZE_16BIT: - video_update16(bitmap); - break; - - case PIXEL_SIZE_32BIT: - video_update32(bitmap); - break; - - default: - //fatalerror("Unsupported framebuffer depth: m_fb_size=%d\n", m_misc_state.m_fb_size); - break; - } -} - -void n64_periphs::video_update16(bitmap_rgb32 &bitmap) -{ - //int32_t fsaa = (((n64->vi_control >> 8) & 3) < 2); - //int32_t divot = (n64->vi_control >> 4) & 1; - - //uint32_t prev_cvg = 0; - //uint32_t next_cvg = 0; - //int32_t dither_filter = (n64->vi_control >> 16) & 1; - //int32_t vibuffering = ((n64->vi_control & 2) && fsaa && divot); - - uint16_t* frame_buffer = (uint16_t*)&m_rdram[(vi_origin & 0xffffff) >> 2]; - //uint32_t hb = ((n64->vi_origin & 0xffffff) >> 2) >> 1; - //uint8_t* hidden_buffer = &m_hidden_bits[hb]; - - int32_t hend = vi_hstart & 0x3ff; - int32_t hstart = (vi_hstart >> 16) & 0x3ff; - int32_t hdiff = hend - hstart; - float hcoeff = ((float)(vi_xscale & 0xfff) / (1 << 10)); - uint32_t hres = ((float)hdiff * hcoeff); - - int32_t vend = (vi_vstart & 0x3ff) >> 1; - int32_t vstart = ((vi_vstart >> 16) & 0x3ff) >> 1; - int32_t vdiff = vend - vstart; - float vcoeff = ((float)(vi_yscale & 0xfff) / (1 << 10)); - uint32_t vres = ((float)vdiff * vcoeff); - - fflush(stdout); - - if (vdiff <= 0 || hdiff <= 0) - { - return; - } - - if (vres > bitmap.height()) // makes Perfect Dark boot w/o crashing - { - vres = bitmap.height(); - } - -#if DRAW_FRAME_COUNTER - static uint32_t frame_num = 0; - static const uint8_t s_numbers[10][9] = { - { 0x00, 0x3c, 0x66, 0x6e, 0x7e, 0x76, 0x66, 0x3c, 0x00 }, - { 0x00, 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00 }, - { 0x00, 0x3c, 0x66, 0x06, 0x3c, 0x60, 0x60, 0x7e, 0x00 }, - { 0x00, 0x3c, 0x66, 0x06, 0x0c, 0x06, 0x66, 0x3c, 0x00 }, - { 0x00, 0x66, 0x66, 0x66, 0x7e, 0x06, 0x06, 0x06, 0x00 }, - { 0x00, 0x7e, 0x60, 0x60, 0x7c, 0x06, 0x66, 0x3c, 0x00 }, - { 0x00, 0x3c, 0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00 }, - { 0x00, 0x7e, 0x66, 0x06, 0x0c, 0x18, 0x18, 0x18, 0x00 }, - { 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00 }, - { 0x00, 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00 } - }; -#endif - - if (frame_buffer) - { -#if DRAW_FRAME_COUNTER - uint32_t digits[4] = { (frame_num / 1000) % 10, (frame_num / 100) % 10, (frame_num / 10) % 10, frame_num % 10 }; - - for (int32_t d = 0; d < 4; d++) - { - for (int32_t y = 0; y < 9; y++) - { - const uint8_t *pixdata = s_numbers[digits[d]]; - for (int32_t x = 0; x < 8; x++) - { - frame_buffer[((y + 16) * vi_width + d * 8 + x + 16) ^ WORD_ADDR_XOR] = BIT(pixdata[y], 7 - x) ? 0x0000 : 0xffff; - } - } - } -#if DEBUG_RDP_PIXEL - s_debug_drawing = (frame_num == 1392); -#endif - frame_num++; -#endif - - const uint32_t aa_control = (vi_control >> 8) & 3; - float v0 = 0.0f; - if (aa_control < 3) // Resample pixels - { - for (int32_t j = 0; j < vdiff; j++, v0 += vcoeff) - { - uint32_t *const d = &bitmap.pix(j); - - float u0 = (float)0.0f; - - int iv0 = (int)v0; - int pix_v0_line = iv0 * vi_width; - - int iv1 = (iv0 >= (vres - 1) ? iv0 : (iv0 + 1)); - int pix_v1_line = iv1 * vi_width; - - for (int32_t i = 0; i < hdiff; i++) - { - int iu0 = (int)u0; - int iu1 = (iu0 >= (hres - 1) ? iu0 : (iu0 + 1)); - uint16_t pix00 = frame_buffer[(pix_v0_line + iu0) ^ WORD_ADDR_XOR]; - uint16_t pix10 = frame_buffer[(pix_v0_line + iu1) ^ WORD_ADDR_XOR]; - uint16_t pix01 = frame_buffer[(pix_v1_line + iu0) ^ WORD_ADDR_XOR]; - uint16_t pix11 = frame_buffer[(pix_v1_line + iu1) ^ WORD_ADDR_XOR]; - - const uint8_t r00 = ((pix00 >> 8) & 0xf8) | (pix00 >> 13); - const uint8_t g00 = ((pix00 >> 3) & 0xf8) | ((pix00 >> 8) & 0x07); - const uint8_t b00 = ((pix00 << 2) & 0xf8) | ((pix00 >> 3) & 0x07); - - const uint8_t r10 = ((pix10 >> 8) & 0xf8) | (pix10 >> 13); - const uint8_t g10 = ((pix10 >> 3) & 0xf8) | ((pix10 >> 8) & 0x07); - const uint8_t b10 = ((pix10 << 2) & 0xf8) | ((pix10 >> 3) & 0x07); - - const uint8_t r01 = ((pix01 >> 8) & 0xf8) | (pix01 >> 13); - const uint8_t g01 = ((pix01 >> 3) & 0xf8) | ((pix01 >> 8) & 0x07); - const uint8_t b01 = ((pix01 << 2) & 0xf8) | ((pix01 >> 3) & 0x07); - - const uint8_t r11 = ((pix11 >> 8) & 0xf8) | (pix11 >> 13); - const uint8_t g11 = ((pix11 >> 3) & 0xf8) | ((pix11 >> 8) & 0x07); - const uint8_t b11 = ((pix11 << 2) & 0xf8) | ((pix11 >> 3) & 0x07); - - const float ut = u0 - (int)u0; - const float vt = v0 - (int)v0; - - float ur0 = (1.0f - ut) * r00 + ut * r10; - float ug0 = (1.0f - ut) * g00 + ut * g10; - float ub0 = (1.0f - ut) * b00 + ut * b10; - - float ur1 = (1.0f - ut) * r01 + ut * r11; - float ug1 = (1.0f - ut) * g01 + ut * g11; - float ub1 = (1.0f - ut) * b01 + ut * b11; - - float r = (1.0f - vt) * ur0 + vt * ur1; - float g = (1.0f - vt) * ug0 + vt * ug1; - float b = (1.0f - vt) * ub0 + vt * ub1; - - uint8_t r8 = std::clamp((uint8_t)r, (uint8_t)0, (uint8_t)255); - uint8_t g8 = std::clamp((uint8_t)g, (uint8_t)0, (uint8_t)255); - uint8_t b8 = std::clamp((uint8_t)b, (uint8_t)0, (uint8_t)255); - - d[iu0] = (r8 << 16) | (g8 << 8) | b8; - - u0 += hcoeff; - } - } - } - else // Replicate pixels - { - for (int32_t j = 0; j < vdiff; j++, v0 += vcoeff) - { - uint32_t *const d = &bitmap.pix(j); - - int iv0 = (int)v0; - int pix_v0_line = iv0 * vi_width; - - for (int32_t i = 0; i < hdiff; i++) - { - int u0 = (int)(i * hcoeff); - uint16_t pix = frame_buffer[(pix_v0_line + u0) ^ WORD_ADDR_XOR]; - - const uint8_t r = ((pix >> 8) & 0xf8) | (pix >> 13); - const uint8_t g = ((pix >> 3) & 0xf8) | ((pix >> 8) & 0x07); - const uint8_t b = ((pix << 2) & 0xf8) | ((pix >> 3) & 0x07); - d[u0] = (r << 16) | (g << 8) | b; - } - } - } - } -} - -void n64_periphs::video_update32(bitmap_rgb32 &bitmap) -{ - //int32_t gamma = (vi_control >> 3) & 1; - //int32_t gamma_dither = (vi_control >> 2) & 1; - //int32_t vibuffering = ((n64->vi_control & 2) && fsaa && divot); - - uint32_t* frame_buffer32 = (uint32_t*)&m_rdram[(vi_origin & 0xffffff) >> 2]; - - int32_t hend = vi_hstart & 0x3ff; - int32_t hstart = (vi_hstart >> 16) & 0x3ff; - int32_t hdiff = hend - hstart; - const float hcoeff = ((float)(vi_xscale & 0xfff) / (1 << 10)); - uint32_t hres = ((float)hdiff * hcoeff); - - int32_t vend = (vi_vstart & 0x3ff) >> 1; - int32_t vstart = ((vi_vstart >> 16) & 0x3ff) >> 1; - int32_t vdiff = vend - vstart; - const float vcoeff = ((float)(vi_yscale & 0xfff) / (1 << 10)); - const uint32_t vres = ((float)vdiff * vcoeff); - - if (vdiff <= 0 || hdiff <= 0) - { - return; - } - - //printf("hd,vd: %d,%d hc,vc: %f,%f hs,he: %d,%d vs,ve: %d,%d hr,vr: %d, %d viw: %d\n", hdiff, vdiff, hcoeff, vcoeff, hstart, hend, vstart, vend, hres, vres, vi_width); - - if (frame_buffer32) - { - const uint32_t aa_control = (vi_control >> 8) & 3; - float v0 = 0.0f; - if (aa_control < 3) // Resample pixels - { - for (int32_t j = 0; j < vres; j++, v0 += 1.0f) - { - uint32_t *const d = &bitmap.pix(j); - - float u0 = 0.0f; - - int iv0 = (int)v0; - int pix_v0_line = iv0 * vi_width; - - int iv1 = (iv0 >= (vres - 1) ? iv0 : (iv0 + 1)); - int pix_v1_line = iv1 * vi_width; - - for (int32_t i = 0; i < hdiff; i++) - { - int iu0 = (int)u0; - int iu1 = (iu0 >= (hres - 1) ? iu0 : (iu0 + 1)); - uint32_t pix00 = frame_buffer32[pix_v0_line + iu0]; - uint32_t pix10 = frame_buffer32[pix_v0_line + iu1]; - uint32_t pix01 = frame_buffer32[pix_v1_line + iu0]; - uint32_t pix11 = frame_buffer32[pix_v1_line + iu1]; - - const uint8_t r00 = (uint8_t)(pix00 >> 24); - const uint8_t g00 = (uint8_t)(pix00 >> 16); - const uint8_t b00 = (uint8_t)(pix00 >> 8); - - const uint8_t r10 = (uint8_t)(pix01 >> 24); - const uint8_t g10 = (uint8_t)(pix01 >> 16); - const uint8_t b10 = (uint8_t)(pix01 >> 8); - - const uint8_t r01 = (uint8_t)(pix10 >> 24); - const uint8_t g01 = (uint8_t)(pix10 >> 16); - const uint8_t b01 = (uint8_t)(pix10 >> 8); - - const uint8_t r11 = (uint8_t)(pix11 >> 24); - const uint8_t g11 = (uint8_t)(pix11 >> 16); - const uint8_t b11 = (uint8_t)(pix11 >> 8); - - const float ut = u0 - (int)u0; - const float vt = v0 - (int)v0; - - float ur0 = (1.0f - ut) * r00 + ut * r10; - float ug0 = (1.0f - ut) * g00 + ut * g10; - float ub0 = (1.0f - ut) * b00 + ut * b10; - - float ur1 = (1.0f - ut) * r01 + ut * r11; - float ug1 = (1.0f - ut) * g01 + ut * g11; - float ub1 = (1.0f - ut) * b01 + ut * b11; - - float r = (1.0f - vt) * ur0 + vt * ur1; - float g = (1.0f - vt) * ug0 + vt * ug1; - float b = (1.0f - vt) * ub0 + vt * ub1; - - uint8_t r8 = std::clamp((uint8_t)r, (uint8_t)0, (uint8_t)255); - uint8_t g8 = std::clamp((uint8_t)g, (uint8_t)0, (uint8_t)255); - uint8_t b8 = std::clamp((uint8_t)b, (uint8_t)0, (uint8_t)255); - - d[iu0] = (r8 << 16) | (g8 << 8) | b8; - - u0 += hcoeff; - } - } - } - else // Replicate pixels - { - for (int32_t j = 0; j < vdiff; j++, v0 += vcoeff) - { - uint32_t *const d = &bitmap.pix(j); - - int iv0 = (int)v0; - int pix_v0_line = iv0 * vi_width; - - for (int32_t i = 0; i < hdiff; i++) - { - int u0 = (int)(i * hcoeff); - d[u0] = (frame_buffer32[pix_v0_line + u0] >> 8); - } - } - } - } -} -#endif - -/*****************************************************************************/ - -void n64_rdp::tc_div_no_perspective(int32_t ss, int32_t st, int32_t sw, int32_t* sss, int32_t* sst) -{ - *sss = (SIGN16(ss)) & 0x1ffff; - *sst = (SIGN16(st)) & 0x1ffff; -} - -void n64_rdp::tc_div(int32_t ss, int32_t st, int32_t sw, int32_t* sss, int32_t* sst) -{ - int32_t w_carry = 0; - if ((sw & 0x8000) || !(sw & 0x7fff)) - { - w_carry = 1; - } - - sw &= 0x7fff; - - int32_t shift; - for (shift = 1; shift <= 14 && !((sw << shift) & 0x8000); shift++); - shift -= 1; - - int32_t normout = (sw << shift) & 0x3fff; - int32_t wnorm = (normout & 0xff) << 2; - normout >>= 8; - - int32_t temppoint = m_norm_point_rom[normout]; - int32_t tempslope = m_norm_slope_rom[normout]; - - int32_t tlu_rcp = ((-(tempslope * wnorm)) >> 10) + temppoint; - - int32_t sprod = SIGN16(ss) * tlu_rcp; - int32_t tprod = SIGN16(st) * tlu_rcp; - int32_t tempmask = ((1 << (shift + 1)) - 1) << (29 - shift); - int32_t shift_value = 13 - shift; - - int32_t outofbounds_s = sprod & tempmask; - int32_t outofbounds_t = tprod & tempmask; - if (shift == 0xe) - { - *sss = sprod << 1; - *sst = tprod << 1; - } - else - { - *sss = sprod = (sprod >> shift_value); - *sst = tprod = (tprod >> shift_value); - } - //compute clamp flags - int32_t under_s = 0; - int32_t under_t = 0; - int32_t over_s = 0; - int32_t over_t = 0; - - if (outofbounds_s != tempmask && outofbounds_s != 0) - { - if (sprod & (1 << 29)) - { - under_s = 1; - } - else - { - over_s = 1; - } - } - - if (outofbounds_t != tempmask && outofbounds_t != 0) - { - if (tprod & (1 << 29)) - { - under_t = 1; - } - else - { - over_t = 1; - } - } - - over_s |= w_carry; - over_t |= w_carry; - - *sss = (*sss & 0x1ffff) | (over_s << 18) | (under_s << 17); - *sst = (*sst & 0x1ffff) | (over_t << 18) | (under_t << 17); -} - -int32_t n64_rdp::color_combiner_equation(int32_t a, int32_t b, int32_t c, int32_t d) -{ - a = KURT_AKELEY_SIGN9(a); - b = KURT_AKELEY_SIGN9(b); - c = SIGN9(c); - d = KURT_AKELEY_SIGN9(d); - a = (((a - b) * c) + (d << 8) + 0x80); - a = SIGN17(a) >> 8; - a = s_special_9bit_clamptable[a & 0x1ff]; - return a; -} - -int32_t n64_rdp::alpha_combiner_equation(int32_t a, int32_t b, int32_t c, int32_t d) -{ - a = KURT_AKELEY_SIGN9(a); - b = KURT_AKELEY_SIGN9(b); - c = SIGN9(c); - d = KURT_AKELEY_SIGN9(d); - a = (((a - b) * c) + (d << 8) + 0x80) >> 8; - a = SIGN9(a); - a = s_special_9bit_clamptable[a & 0x1ff]; - return a; -} - -void n64_rdp::set_suba_input_rgb(color_t** input, int32_t code, rdp_span_aux* userdata) -{ - switch (code & 0xf) - { - case 0: *input = &userdata->m_combined_color; break; - case 1: *input = &userdata->m_texel0_color; break; - case 2: *input = &userdata->m_texel1_color; break; - case 3: *input = &userdata->m_prim_color; break; - case 4: *input = &userdata->m_shade_color; break; - case 5: *input = &userdata->m_env_color; break; - case 6: *input = &m_one; break; - case 7: *input = &userdata->m_noise_color; break; - case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: - { - *input = &m_zero; break; - } - } -} - -void n64_rdp::set_subb_input_rgb(color_t** input, int32_t code, rdp_span_aux* userdata) -{ - switch (code & 0xf) - { - case 0: *input = &userdata->m_combined_color; break; - case 1: *input = &userdata->m_texel0_color; break; - case 2: *input = &userdata->m_texel1_color; break; - case 3: *input = &userdata->m_prim_color; break; - case 4: *input = &userdata->m_shade_color; break; - case 5: *input = &userdata->m_env_color; break; - case 6: fatalerror("SET_SUBB_RGB_INPUT: key_center\n"); - case 7: *input = &userdata->m_k4; break; - case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: - { - *input = &m_zero; break; - } - } -} - -void n64_rdp::set_mul_input_rgb(color_t** input, int32_t code, rdp_span_aux* userdata) -{ - switch (code & 0x1f) - { - case 0: *input = &userdata->m_combined_color; break; - case 1: *input = &userdata->m_texel0_color; break; - case 2: *input = &userdata->m_texel1_color; break; - case 3: *input = &userdata->m_prim_color; break; - case 4: *input = &userdata->m_shade_color; break; - case 5: *input = &userdata->m_env_color; break; - case 6: *input = &userdata->m_key_scale; break; - case 7: *input = &userdata->m_combined_alpha; break; - case 8: *input = &userdata->m_texel0_alpha; break; - case 9: *input = &userdata->m_texel1_alpha; break; - case 10: *input = &userdata->m_prim_alpha; break; - case 11: *input = &userdata->m_shade_alpha; break; - case 12: *input = &userdata->m_env_alpha; break; - case 13: *input = &userdata->m_lod_fraction; break; - case 14: *input = &userdata->m_prim_lod_fraction; break; - case 15: *input = &userdata->m_k5; break; - case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: - case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: - { - *input = &m_zero; break; - } - } -} - -void n64_rdp::set_add_input_rgb(color_t** input, int32_t code, rdp_span_aux* userdata) -{ - switch (code & 0x7) - { - case 0: *input = &userdata->m_combined_color; break; - case 1: *input = &userdata->m_texel0_color; break; - case 2: *input = &userdata->m_texel1_color; break; - case 3: *input = &userdata->m_prim_color; break; - case 4: *input = &userdata->m_shade_color; break; - case 5: *input = &userdata->m_env_color; break; - case 6: *input = &m_one; break; - case 7: *input = &m_zero; break; - } -} - -void n64_rdp::set_sub_input_alpha(color_t** input, int32_t code, rdp_span_aux* userdata) -{ - switch (code & 0x7) - { - case 0: *input = &userdata->m_combined_alpha; break; - case 1: *input = &userdata->m_texel0_alpha; break; - case 2: *input = &userdata->m_texel1_alpha; break; - case 3: *input = &userdata->m_prim_alpha; break; - case 4: *input = &userdata->m_shade_alpha; break; - case 5: *input = &userdata->m_env_alpha; break; - case 6: *input = &m_one; break; - case 7: *input = &m_zero; break; - } -} - -void n64_rdp::set_mul_input_alpha(color_t** input, int32_t code, rdp_span_aux* userdata) -{ - switch (code & 0x7) - { - case 0: *input = &userdata->m_lod_fraction; break; - case 1: *input = &userdata->m_texel0_alpha; break; - case 2: *input = &userdata->m_texel1_alpha; break; - case 3: *input = &userdata->m_prim_alpha; break; - case 4: *input = &userdata->m_shade_alpha; break; - case 5: *input = &userdata->m_env_alpha; break; - case 6: *input = &userdata->m_prim_lod_fraction; break; - case 7: *input = &m_zero; break; - } -} - -void n64_rdp::set_blender_input(int32_t cycle, int32_t which, color_t** input_rgb, color_t** input_a, int32_t a, int32_t b, rdp_span_aux* userdata) -{ - switch (a & 0x3) - { - case 0: - *input_rgb = cycle == 0 ? &userdata->m_pixel_color : &userdata->m_blended_pixel_color; - break; - - case 1: - *input_rgb = &userdata->m_memory_color; - break; - - case 2: - *input_rgb = &userdata->m_blend_color; - break; - - case 3: - *input_rgb = &userdata->m_fog_color; - break; - } - - if (which == 0) - { - switch (b & 0x3) - { - case 0: *input_a = &userdata->m_pixel_color; break; - case 1: *input_a = &userdata->m_fog_color; break; - case 2: *input_a = &userdata->m_shade_color; break; - case 3: *input_a = &m_zero; break; - } - } - else - { - switch (b & 0x3) - { - case 0: *input_a = &userdata->m_inv_pixel_color; break; - case 1: *input_a = &userdata->m_memory_color; break; - case 2: *input_a = &m_one; break; - case 3: *input_a = &m_zero; break; - } - } -} - -uint8_t const n64_rdp::s_bayer_matrix[16] = -{ /* Bayer matrix */ - 0, 4, 1, 5, - 6, 2, 7, 3, - 1, 5, 0, 4, - 7, 3, 6, 2 -}; - -uint8_t const n64_rdp::s_magic_matrix[16] = -{ /* Magic square matrix */ - 0, 4, 3, 7, - 6, 2, 5, 1, - 1, 5, 2, 6, - 7, 3, 4, 0 -}; - -z_decompress_entry_t const n64_rdp::m_z_dec_table[8] = -{ - { 6, 0x00000 }, - { 5, 0x20000 }, - { 4, 0x30000 }, - { 3, 0x38000 }, - { 2, 0x3c000 }, - { 1, 0x3e000 }, - { 0, 0x3f000 }, - { 0, 0x3f800 }, -}; - -/*****************************************************************************/ - -void n64_rdp::z_build_com_table(void) -{ - uint16_t altmem = 0; - for(int32_t z = 0; z < 0x40000; z++) - { - switch((z >> 11) & 0x7f) - { - case 0x00: - case 0x01: - case 0x02: - case 0x03: - case 0x04: - case 0x05: - case 0x06: - case 0x07: - case 0x08: - case 0x09: - case 0x0a: - case 0x0b: - case 0x0c: - case 0x0d: - case 0x0e: - case 0x0f: - case 0x10: - case 0x11: - case 0x12: - case 0x13: - case 0x14: - case 0x15: - case 0x16: - case 0x17: - case 0x18: - case 0x19: - case 0x1a: - case 0x1b: - case 0x1c: - case 0x1d: - case 0x1e: - case 0x1f: - case 0x20: - case 0x21: - case 0x22: - case 0x23: - case 0x24: - case 0x25: - case 0x26: - case 0x27: - case 0x28: - case 0x29: - case 0x2a: - case 0x2b: - case 0x2c: - case 0x2d: - case 0x2e: - case 0x2f: - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - case 0x3a: - case 0x3b: - case 0x3c: - case 0x3d: - case 0x3e: - case 0x3f: - altmem = (z >> 4) & 0x1ffc; - break; - case 0x40: - case 0x41: - case 0x42: - case 0x43: - case 0x44: - case 0x45: - case 0x46: - case 0x47: - case 0x48: - case 0x49: - case 0x4a: - case 0x4b: - case 0x4c: - case 0x4d: - case 0x4e: - case 0x4f: - case 0x50: - case 0x51: - case 0x52: - case 0x53: - case 0x54: - case 0x55: - case 0x56: - case 0x57: - case 0x58: - case 0x59: - case 0x5a: - case 0x5b: - case 0x5c: - case 0x5d: - case 0x5e: - case 0x5f: - altmem = ((z >> 3) & 0x1ffc) | 0x2000; - break; - case 0x60: - case 0x61: - case 0x62: - case 0x63: - case 0x64: - case 0x65: - case 0x66: - case 0x67: - case 0x68: - case 0x69: - case 0x6a: - case 0x6b: - case 0x6c: - case 0x6d: - case 0x6e: - case 0x6f: - altmem = ((z >> 2) & 0x1ffc) | 0x4000; - break; - case 0x70: - case 0x71: - case 0x72: - case 0x73: - case 0x74: - case 0x75: - case 0x76: - case 0x77: - altmem = ((z >> 1) & 0x1ffc) | 0x6000; - break; - case 0x78://uncompressed z = 0x3c000 - case 0x79: - case 0x7a: - case 0x7b: - altmem = (z & 0x1ffc) | 0x8000; - break; - case 0x7c://uncompressed z = 0x3e000 - case 0x7d: - altmem = ((z << 1) & 0x1ffc) | 0xa000; - break; - case 0x7e://uncompressed z = 0x3f000 - altmem = ((z << 2) & 0x1ffc) | 0xc000; - break; - case 0x7f://uncompressed z = 0x3f000 - altmem = ((z << 2) & 0x1ffc) | 0xe000; - break; - } - - m_z_com_table[z] = altmem; - - } -} - -void n64_rdp::precalc_cvmask_derivatives(void) -{ - const uint8_t yarray[16] = {0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0}; - const uint8_t xarray[16] = {0, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}; - - for (int32_t i = 0; i < 0x10000; i++) - { - m_compressed_cvmasks[i] = (i & 1) | ((i & 4) >> 1) | ((i & 0x20) >> 3) | ((i & 0x80) >> 4) | - ((i & 0x100) >> 4) | ((i & 0x400) >> 5) | ((i & 0x2000) >> 7) | ((i & 0x8000) >> 8); - } - - for (int32_t i = 0; i < 0x100; i++) - { - uint16_t mask = decompress_cvmask_frombyte(i); - cvarray[i].cvg = cvarray[i].cvbit = 0; - cvarray[i].cvbit = (i >> 7) & 1; - for (int32_t k = 0; k < 8; k++) - { - cvarray[i].cvg += ((i >> k) & 1); - } - - uint16_t masky = 0; - for (int32_t k = 0; k < 4; k++) - { - masky |= ((mask & (0xf000 >> (k << 2))) > 0) << k; - } - uint8_t offy = yarray[masky]; - - uint16_t maskx = (mask & (0xf000 >> (offy << 2))) >> ((offy ^ 3) << 2); - uint8_t offx = xarray[maskx]; - - cvarray[i].xoff = offx; - cvarray[i].yoff = offy; - } -} - -uint16_t n64_rdp::decompress_cvmask_frombyte(uint8_t x) -{ - uint16_t y = (x & 1) | ((x & 2) << 1) | ((x & 4) << 3) | ((x & 8) << 4) | - ((x & 0x10) << 4) | ((x & 0x20) << 5) | ((x & 0x40) << 7) | ((x & 0x80) << 8); - return y; -} - -void n64_rdp::lookup_cvmask_derivatives(uint32_t mask, uint8_t* offx, uint8_t* offy, rdp_span_aux* userdata) -{ - const uint32_t index = m_compressed_cvmasks[mask]; - userdata->m_current_pix_cvg = cvarray[index].cvg; - userdata->m_current_cvg_bit = cvarray[index].cvbit; - *offx = cvarray[index].xoff; - *offy = cvarray[index].yoff; -} - -void n64_rdp::z_store(const rdp_poly_state &object, uint32_t zcurpixel, uint32_t dzcurpixel, uint32_t z, uint32_t enc) -{ - uint16_t zval = m_z_com_table[z & 0x3ffff]|(enc >> 2); - if(zcurpixel <= MEM16_LIMIT) - { - ((uint16_t*)m_rdram)[zcurpixel ^ WORD_ADDR_XOR] = zval; - } - if(dzcurpixel <= MEM8_LIMIT) - { - m_hidden_bits[dzcurpixel ^ BYTE_ADDR_XOR] = enc & 3; - } -} - -int32_t n64_rdp::normalize_dzpix(int32_t sum) -{ - if (sum & 0xc000) - { - return 0x8000; - } - if (!(sum & 0xffff)) - { - return 1; - } - for(int32_t count = 0x2000; count > 0; count >>= 1) - { - if (sum & count) - { - return(count << 1); - } - } - return 0; -} - -uint32_t n64_rdp::z_decompress(uint32_t zcurpixel) -{ - return m_z_complete_dec_table[(RREADIDX16(zcurpixel) >> 2) & 0x3fff]; -} - -uint32_t n64_rdp::dz_decompress(uint32_t zcurpixel, uint32_t dzcurpixel) -{ - const uint16_t zval = RREADIDX16(zcurpixel); - const uint8_t dzval = (((dzcurpixel) <= 0x7fffff) ? (m_hidden_bits[(dzcurpixel) ^ BYTE_ADDR_XOR]) : 0); - const uint32_t dz_compressed = ((zval & 3) << 2) | (dzval & 3); - return (1 << dz_compressed); -} - -uint32_t n64_rdp::dz_compress(uint32_t value) -{ - int32_t j = 0; - for (; value > 1; j++, value >>= 1); - return j; -} - -void n64_rdp::get_dither_values(int32_t x, int32_t y, int32_t* cdith, int32_t* adith, const rdp_poly_state& object) -{ - const int32_t dithindex = ((y & 3) << 2) | (x & 3); - switch((object.m_other_modes.rgb_dither_sel << 2) | object.m_other_modes.alpha_dither_sel) - { - case 0: - *adith = *cdith = s_magic_matrix[dithindex]; - break; - case 1: - *cdith = s_magic_matrix[dithindex]; - *adith = (~(*cdith)) & 7; - break; - case 2: - *cdith = s_magic_matrix[dithindex]; - *adith = machine().rand() & 7; - break; - case 3: - *cdith = s_magic_matrix[dithindex]; - *adith = 0; - break; - case 4: - *adith = *cdith = s_bayer_matrix[dithindex]; - break; - case 5: - *cdith = s_bayer_matrix[dithindex]; - *adith = (~(*cdith)) & 7; - break; - case 6: - *cdith = s_bayer_matrix[dithindex]; - *adith = machine().rand() & 7; - break; - case 7: - *cdith = s_bayer_matrix[dithindex]; - *adith = 0; - break; - case 8: - *cdith = machine().rand() & 7; - *adith = s_magic_matrix[dithindex]; - break; - case 9: - *cdith = machine().rand() & 7; - *adith = (~s_magic_matrix[dithindex]) & 7; - break; - case 10: - *cdith = machine().rand() & 7; - *adith = (*cdith + 17) & 7; - break; - case 11: - *cdith = machine().rand() & 7; - *adith = 0; - break; - case 12: - *cdith = 0; - *adith = s_bayer_matrix[dithindex]; - break; - case 13: - *cdith = 0; - *adith = (~s_bayer_matrix[dithindex]) & 7; - break; - case 14: - *cdith = 0; - *adith = machine().rand() & 7; - break; - case 15: - *adith = *cdith = 0; - break; - } -} - -int32_t CLAMP(int32_t in, int32_t min, int32_t max) -{ - if(in < min) return min; - if(in > max) return max; - return in; -} - -bool n64_rdp::z_compare(uint32_t zcurpixel, uint32_t dzcurpixel, uint32_t sz, uint16_t dzpix, rdp_span_aux* userdata, const rdp_poly_state &object) -{ - bool force_coplanar = false; - sz &= 0x3ffff; - - uint32_t oz; - uint32_t dzmem; - uint32_t zval; - int32_t rawdzmem; - - if (object.m_other_modes.z_compare_en) - { - oz = z_decompress(zcurpixel); - dzmem = dz_decompress(zcurpixel, dzcurpixel); - zval = RREADIDX16(zcurpixel); - rawdzmem = ((zval & 3) << 2) | ((((dzcurpixel) <= 0x3fffff) ? (m_hidden_bits[(dzcurpixel) ^ BYTE_ADDR_XOR]) : 0) & 3); - } - else - { - oz = 0; - dzmem = 1 << 0xf; - zval = 0x3; - rawdzmem = 0xf; - } - - userdata->m_dzpix_enc = dz_compress(dzpix & 0xffff); - userdata->m_shift_a = CLAMP(userdata->m_dzpix_enc - rawdzmem, 0, 4); - userdata->m_shift_b = CLAMP(rawdzmem - userdata->m_dzpix_enc, 0, 4); - - int32_t precision_factor = (zval >> 13) & 0xf; - if (precision_factor < 3) - { - int32_t dzmemmodifier = 16 >> precision_factor; - if (dzmem == 0x8000) - { - force_coplanar = true; - } - dzmem <<= 1; - if (dzmem <= dzmemmodifier) - { - dzmem = dzmemmodifier; - } - if (!dzmem) - { - dzmem = 0xffff; - } - } - if (dzmem > 0x8000) - { - dzmem = 0xffff; - } - - uint32_t dznew = (dzmem > dzpix) ? dzmem : (uint32_t)dzpix; - uint32_t dznotshift = dznew; - dznew <<= 3; - - bool farther = (sz + dznew) >= oz; - bool infront = sz < oz; - - if (force_coplanar) - { - farther = true; - } - - bool overflow = ((userdata->m_current_mem_cvg + userdata->m_current_pix_cvg) & 8) > 0; - userdata->m_blend_enable = (object.m_other_modes.force_blend || (!overflow && object.m_other_modes.antialias_en && farther)) ? 1 : 0; - userdata->m_pre_wrap = overflow; - - int32_t cvgcoeff = 0; - uint32_t dzenc = 0; - - if (object.m_other_modes.z_mode == 1 && infront && farther && overflow) - { - dzenc = dz_compress(dznotshift & 0xffff); - cvgcoeff = ((oz >> dzenc) - (sz >> dzenc)) & 0xf; - userdata->m_current_pix_cvg = ((cvgcoeff * userdata->m_current_pix_cvg) >> 3) & 0xf; - } - - if (!object.m_other_modes.z_compare_en) - { - return true; - } - - int32_t diff = (int32_t)sz - (int32_t)dznew; - bool nearer = diff <= (int32_t)oz; - bool max = (oz == 0x3ffff); - if (force_coplanar) - { - nearer = true; - } - - switch(object.m_other_modes.z_mode) - { - case 0: - return (max || (overflow ? infront : nearer)); - case 1: - return (max || (overflow ? infront : nearer)); - case 2: - return (infront || max); - case 3: - return (farther && nearer && !max); - } - - return false; -} - -uint32_t n64_rdp::get_log2(uint32_t lod_clamp) -{ - if (lod_clamp < 2) - { - return 0; - } - else - { - for (int32_t i = 7; i > 0; i--) - { - if ((lod_clamp >> i) & 1) - { - return i; - } - } - } - - return 0; -} - -/*****************************************************************************/ - -uint64_t n64_rdp::read_data(uint32_t address) -{ - if (m_status & 0x1) // XBUS_DMEM_DMA enabled - { - return (uint64_t(m_dmem[(address & 0xfff) / 4]) << 32) | m_dmem[((address + 4) & 0xfff) / 4]; - } - else - { - return (uint64_t(m_rdram[((address & 0xffffff) / 4)]) << 32) | m_rdram[(((address + 4) & 0xffffff) / 4)]; - } -} - -char const *const n64_rdp::s_image_format[] = { "RGBA", "YUV", "CI", "IA", "I", "???", "???", "???" }; -char const *const n64_rdp::s_image_size[] = { "4-bit", "8-bit", "16-bit", "32-bit" }; - -int32_t const n64_rdp::s_rdp_command_length[64] = -{ - 8, // 0x00, No Op - 8, // 0x01, ??? - 8, // 0x02, ??? - 8, // 0x03, ??? - 8, // 0x04, ??? - 8, // 0x05, ??? - 8, // 0x06, ??? - 8, // 0x07, ??? - 32, // 0x08, Non-Shaded Triangle - 32+16, // 0x09, Non-Shaded, Z-Buffered Triangle - 32+64, // 0x0a, Textured Triangle - 32+64+16, // 0x0b, Textured, Z-Buffered Triangle - 32+64, // 0x0c, Shaded Triangle - 32+64+16, // 0x0d, Shaded, Z-Buffered Triangle - 32+64+64, // 0x0e, Shaded+Textured Triangle - 32+64+64+16,// 0x0f, Shaded+Textured, Z-Buffered Triangle - 8, // 0x10, ??? - 8, // 0x11, ??? - 8, // 0x12, ??? - 8, // 0x13, ??? - 8, // 0x14, ??? - 8, // 0x15, ??? - 8, // 0x16, ??? - 8, // 0x17, ??? - 8, // 0x18, ??? - 8, // 0x19, ??? - 8, // 0x1a, ??? - 8, // 0x1b, ??? - 8, // 0x1c, ??? - 8, // 0x1d, ??? - 8, // 0x1e, ??? - 8, // 0x1f, ??? - 8, // 0x20, ??? - 8, // 0x21, ??? - 8, // 0x22, ??? - 8, // 0x23, ??? - 16, // 0x24, Texture_Rectangle - 16, // 0x25, Texture_Rectangle_Flip - 8, // 0x26, Sync_Load - 8, // 0x27, Sync_Pipe - 8, // 0x28, Sync_Tile - 8, // 0x29, Sync_Full - 8, // 0x2a, Set_Key_GB - 8, // 0x2b, Set_Key_R - 8, // 0x2c, Set_Convert - 8, // 0x2d, Set_Scissor - 8, // 0x2e, Set_Prim_Depth - 8, // 0x2f, Set_Other_Modes - 8, // 0x30, Load_TLUT - 8, // 0x31, ??? - 8, // 0x32, Set_Tile_Size - 8, // 0x33, Load_Block - 8, // 0x34, Load_Tile - 8, // 0x35, Set_Tile - 8, // 0x36, Fill_Rectangle - 8, // 0x37, Set_Fill_Color - 8, // 0x38, Set_Fog_Color - 8, // 0x39, Set_Blend_Color - 8, // 0x3a, Set_Prim_Color - 8, // 0x3b, Set_Env_Color - 8, // 0x3c, Set_Combine - 8, // 0x3d, Set_Texture_Image - 8, // 0x3e, Set_Mask_Image - 8 // 0x3f, Set_Color_Image -}; - -void n64_rdp::disassemble(uint64_t *cmd_buf, char* buffer) -{ - char sl[32], tl[32], sh[32], th[32]; - char s[32], t[32], w[32]; - char dsdx[32], dtdx[32], dwdx[32]; - char dsdy[32], dtdy[32], dwdy[32]; - char dsde[32], dtde[32], dwde[32]; - char yl[32], yh[32], ym[32], xl[32], xh[32], xm[32]; - char dxldy[32], dxhdy[32], dxmdy[32]; - char rt[32], gt[32], bt[32], at[32]; - char drdx[32], dgdx[32], dbdx[32], dadx[32]; - char drdy[32], dgdy[32], dbdy[32], dady[32]; - char drde[32], dgde[32], dbde[32], dade[32]; - - const int32_t tile = (cmd_buf[0] >> 56) & 0x7; - sprintf(sl, "%4.2f", (float)((cmd_buf[0] >> 44) & 0xfff) / 4.0f); - sprintf(tl, "%4.2f", (float)((cmd_buf[0] >> 32) & 0xfff) / 4.0f); - sprintf(sh, "%4.2f", (float)((cmd_buf[0] >> 12) & 0xfff) / 4.0f); - sprintf(th, "%4.2f", (float)((cmd_buf[0] >> 0) & 0xfff) / 4.0f); - - const char* format = s_image_format[(cmd_buf[0] >> 53) & 0x7]; - const char* size = s_image_size[(cmd_buf[0] >> 51) & 0x3]; - - const uint32_t r = (cmd_buf[0] >> 24) & 0xff; - const uint32_t g = (cmd_buf[0] >> 16) & 0xff; - const uint32_t b = (cmd_buf[0] >> 8) & 0xff; - const uint32_t a = (cmd_buf[0] >> 0) & 0xff; - - const uint32_t command = (cmd_buf[0] >> 56) & 0x3f; - switch (command) - { - case 0x00: sprintf(buffer, "No Op"); break; - case 0x08: // Tri_NoShade - { - const int32_t lft = (cmd_buf[0] >> 55) & 0x1; - - sprintf(yl, "%4.4f", (float)((cmd_buf[0] >> 32) & 0x1fff) / 4.0f); - sprintf(ym, "%4.4f", (float)((cmd_buf[0] >> 16) & 0x1fff) / 4.0f); - sprintf(yh, "%4.4f", (float)((cmd_buf[0] >> 0) & 0x1fff) / 4.0f); - sprintf(xl, "%4.4f", (float)int32_t(cmd_buf[1] >> 32) / 65536.0f); - sprintf(dxldy, "%4.4f", (float)int32_t(cmd_buf[1]) / 65536.0f); - sprintf(xh, "%4.4f", (float)int32_t(cmd_buf[2] >> 32) / 65536.0f); - sprintf(dxhdy, "%4.4f", (float)int32_t(cmd_buf[2]) / 65536.0f); - sprintf(xm, "%4.4f", (float)int32_t(cmd_buf[3] >> 32) / 65536.0f); - sprintf(dxmdy, "%4.4f", (float)int32_t(cmd_buf[3]) / 65536.0f); - - sprintf(buffer, "Tri_NoShade %d, XL: %s, XM: %s, XH: %s, YL: %s, YM: %s, YH: %s\n", lft, xl,xm,xh,yl,ym,yh); - break; - } - case 0x09: // Tri_NoShadeZ - { - const int32_t lft = (cmd_buf[0] >> 55) & 0x1; - - sprintf(yl, "%4.4f", (float)((cmd_buf[0] >> 32) & 0x1fff) / 4.0f); - sprintf(ym, "%4.4f", (float)((cmd_buf[0] >> 16) & 0x1fff) / 4.0f); - sprintf(yh, "%4.4f", (float)((cmd_buf[0] >> 0) & 0x1fff) / 4.0f); - sprintf(xl, "%4.4f", (float)int32_t(cmd_buf[1] >> 32) / 65536.0f); - sprintf(dxldy, "%4.4f", (float)int32_t(cmd_buf[1]) / 65536.0f); - sprintf(xh, "%4.4f", (float)int32_t(cmd_buf[2] >> 32) / 65536.0f); - sprintf(dxhdy, "%4.4f", (float)int32_t(cmd_buf[2]) / 65536.0f); - sprintf(xm, "%4.4f", (float)int32_t(cmd_buf[3] >> 32) / 65536.0f); - sprintf(dxmdy, "%4.4f", (float)int32_t(cmd_buf[3]) / 65536.0f); - - sprintf(buffer, "Tri_NoShadeZ %d, XL: %s, XM: %s, XH: %s, YL: %s, YM: %s, YH: %s\n", lft, xl,xm,xh,yl,ym,yh); - break; - } - case 0x0a: // Tri_Tex - { - const int32_t lft = (cmd_buf[0] >> 55) & 0x1; - - sprintf(yl, "%4.4f", (float)((cmd_buf[0] >> 32) & 0x1fff) / 4.0f); - sprintf(ym, "%4.4f", (float)((cmd_buf[0] >> 16) & 0x1fff) / 4.0f); - sprintf(yh, "%4.4f", (float)((cmd_buf[0] >> 0) & 0x1fff) / 4.0f); - sprintf(xl, "%4.4f", (float)int32_t(cmd_buf[1] >> 32) / 65536.0f); - sprintf(dxldy, "%4.4f", (float)int32_t(cmd_buf[1]) / 65536.0f); - sprintf(xh, "%4.4f", (float)int32_t(cmd_buf[2] >> 32) / 65536.0f); - sprintf(dxhdy, "%4.4f", (float)int32_t(cmd_buf[2]) / 65536.0f); - sprintf(xm, "%4.4f", (float)int32_t(cmd_buf[3] >> 32) / 65536.0f); - sprintf(dxmdy, "%4.4f", (float)int32_t(cmd_buf[3]) / 65536.0f); - - sprintf(s, "%4.4f", (float)int32_t( ((cmd_buf[4] >> 32) & 0xffff0000) | ((cmd_buf[ 6] >> 48) & 0xffff)) / 65536.0f); - sprintf(t, "%4.4f", (float)int32_t((((cmd_buf[4] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 6] >> 32) & 0xffff)) / 65536.0f); - sprintf(w, "%4.4f", (float)int32_t( (cmd_buf[4] & 0xffff0000) | ((cmd_buf[ 6] >> 16) & 0xffff)) / 65536.0f); - sprintf(dsdx, "%4.4f", (float)int32_t( ((cmd_buf[5] >> 32) & 0xffff0000) | ((cmd_buf[ 7] >> 48) & 0xffff)) / 65536.0f); - sprintf(dtdx, "%4.4f", (float)int32_t((((cmd_buf[5] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 7] >> 32) & 0xffff)) / 65536.0f); - sprintf(dwdx, "%4.4f", (float)int32_t( (cmd_buf[5] & 0xffff0000) | ((cmd_buf[ 7] >> 16) & 0xffff)) / 65536.0f); - sprintf(dsde, "%4.4f", (float)int32_t( ((cmd_buf[8] >> 32) & 0xffff0000) | ((cmd_buf[10] >> 48) & 0xffff)) / 65536.0f); - sprintf(dtde, "%4.4f", (float)int32_t((((cmd_buf[8] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[10] >> 32) & 0xffff)) / 65536.0f); - sprintf(dwde, "%4.4f", (float)int32_t( (cmd_buf[8] & 0xffff0000) | ((cmd_buf[10] >> 16) & 0xffff)) / 65536.0f); - sprintf(dsdy, "%4.4f", (float)int32_t( ((cmd_buf[9] >> 32) & 0xffff0000) | ((cmd_buf[11] >> 48) & 0xffff)) / 65536.0f); - sprintf(dtdy, "%4.4f", (float)int32_t((((cmd_buf[9] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[11] >> 32) & 0xffff)) / 65536.0f); - sprintf(dwdy, "%4.4f", (float)int32_t( (cmd_buf[9] & 0xffff0000) | ((cmd_buf[11] >> 16) & 0xffff)) / 65536.0f); - - buffer+=sprintf(buffer, "Tri_Tex %d, XL: %s, XM: %s, XH: %s, YL: %s, YM: %s, YH: %s\n", lft, xl,xm,xh,yl,ym,yh); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " S: %s, T: %s, W: %s\n", s, t, w); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DSDX: %s, DTDX: %s, DWDX: %s\n", dsdx, dtdx, dwdx); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DSDE: %s, DTDE: %s, DWDE: %s\n", dsde, dtde, dwde); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DSDY: %s, DTDY: %s, DWDY: %s\n", dsdy, dtdy, dwdy); - break; - } - case 0x0b: // Tri_TexZ - { - const int32_t lft = (cmd_buf[0] >> 55) & 0x1; - - sprintf(yl, "%4.4f", (float)((cmd_buf[0] >> 32) & 0x1fff) / 4.0f); - sprintf(ym, "%4.4f", (float)((cmd_buf[0] >> 16) & 0x1fff) / 4.0f); - sprintf(yh, "%4.4f", (float)((cmd_buf[0] >> 0) & 0x1fff) / 4.0f); - sprintf(xl, "%4.4f", (float)int32_t(cmd_buf[1] >> 32) / 65536.0f); - sprintf(dxldy, "%4.4f", (float)int32_t(cmd_buf[1]) / 65536.0f); - sprintf(xh, "%4.4f", (float)int32_t(cmd_buf[2] >> 32) / 65536.0f); - sprintf(dxhdy, "%4.4f", (float)int32_t(cmd_buf[2]) / 65536.0f); - sprintf(xm, "%4.4f", (float)int32_t(cmd_buf[3] >> 32) / 65536.0f); - sprintf(dxmdy, "%4.4f", (float)int32_t(cmd_buf[3]) / 65536.0f); - - sprintf(s, "%4.4f", (float)int32_t( ((cmd_buf[4] >> 32) & 0xffff0000) | ((cmd_buf[ 6] >> 48) & 0xffff)) / 65536.0f); - sprintf(t, "%4.4f", (float)int32_t((((cmd_buf[4] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 6] >> 32) & 0xffff)) / 65536.0f); - sprintf(w, "%4.4f", (float)int32_t( (cmd_buf[4] & 0xffff0000) | ((cmd_buf[ 6] >> 16) & 0xffff)) / 65536.0f); - sprintf(dsdx, "%4.4f", (float)int32_t( ((cmd_buf[5] >> 32) & 0xffff0000) | ((cmd_buf[ 7] >> 48) & 0xffff)) / 65536.0f); - sprintf(dtdx, "%4.4f", (float)int32_t((((cmd_buf[5] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 7] >> 32) & 0xffff)) / 65536.0f); - sprintf(dwdx, "%4.4f", (float)int32_t( (cmd_buf[5] & 0xffff0000) | ((cmd_buf[ 7] >> 16) & 0xffff)) / 65536.0f); - sprintf(dsde, "%4.4f", (float)int32_t( ((cmd_buf[8] >> 32) & 0xffff0000) | ((cmd_buf[10] >> 48) & 0xffff)) / 65536.0f); - sprintf(dtde, "%4.4f", (float)int32_t((((cmd_buf[8] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[10] >> 32) & 0xffff)) / 65536.0f); - sprintf(dwde, "%4.4f", (float)int32_t( (cmd_buf[8] & 0xffff0000) | ((cmd_buf[10] >> 16) & 0xffff)) / 65536.0f); - sprintf(dsdy, "%4.4f", (float)int32_t( ((cmd_buf[9] >> 32) & 0xffff0000) | ((cmd_buf[11] >> 48) & 0xffff)) / 65536.0f); - sprintf(dtdy, "%4.4f", (float)int32_t((((cmd_buf[9] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[11] >> 32) & 0xffff)) / 65536.0f); - sprintf(dwdy, "%4.4f", (float)int32_t( (cmd_buf[9] & 0xffff0000) | ((cmd_buf[11] >> 16) & 0xffff)) / 65536.0f); - - buffer+=sprintf(buffer, "Tri_TexZ %d, XL: %s, XM: %s, XH: %s, YL: %s, YM: %s, YH: %s\n", lft, xl,xm,xh,yl,ym,yh); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " S: %s, T: %s, W: %s\n", s, t, w); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DSDX: %s, DTDX: %s, DWDX: %s\n", dsdx, dtdx, dwdx); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DSDE: %s, DTDE: %s, DWDE: %s\n", dsde, dtde, dwde); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DSDY: %s, DTDY: %s, DWDY: %s\n", dsdy, dtdy, dwdy); - break; - } - case 0x0c: // Tri_Shade - { - const int32_t lft = (cmd_buf[0] >> 23) & 0x1; - - sprintf(yl, "%4.4f", (float)((cmd_buf[0] >> 32) & 0x1fff) / 4.0f); - sprintf(ym, "%4.4f", (float)((cmd_buf[0] >> 16) & 0x1fff) / 4.0f); - sprintf(yh, "%4.4f", (float)((cmd_buf[0] >> 0) & 0x1fff) / 4.0f); - sprintf(xl, "%4.4f", (float)int32_t(cmd_buf[1] >> 32) / 65536.0f); - sprintf(dxldy, "%4.4f", (float)int32_t(cmd_buf[1]) / 65536.0f); - sprintf(xh, "%4.4f", (float)int32_t(cmd_buf[2] >> 32) / 65536.0f); - sprintf(dxhdy, "%4.4f", (float)int32_t(cmd_buf[2]) / 65536.0f); - sprintf(xm, "%4.4f", (float)int32_t(cmd_buf[3] >> 32) / 65536.0f); - sprintf(dxmdy, "%4.4f", (float)int32_t(cmd_buf[3]) / 65536.0f); - - sprintf(rt, "%4.4f", (float)int32_t( ((cmd_buf[4] >> 32) & 0xffff0000) | ((cmd_buf[ 6] >> 48) & 0xffff)) / 65536.0f); - sprintf(gt, "%4.4f", (float)int32_t((((cmd_buf[4] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 6] >> 32) & 0xffff)) / 65536.0f); - sprintf(bt, "%4.4f", (float)int32_t( (cmd_buf[4] & 0xffff0000) | ((cmd_buf[ 6] >> 16) & 0xffff)) / 65536.0f); - sprintf(at, "%4.4f", (float)int32_t( ((cmd_buf[4] & 0x0000ffff) << 16) | ( cmd_buf[ 6] & 0xffff)) / 65536.0f); - sprintf(drdx, "%4.4f", (float)int32_t( ((cmd_buf[5] >> 32) & 0xffff0000) | ((cmd_buf[ 7] >> 48) & 0xffff)) / 65536.0f); - sprintf(dgdx, "%4.4f", (float)int32_t((((cmd_buf[5] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 7] >> 32) & 0xffff)) / 65536.0f); - sprintf(dbdx, "%4.4f", (float)int32_t( (cmd_buf[5] & 0xffff0000) | ((cmd_buf[ 7] >> 16) & 0xffff)) / 65536.0f); - sprintf(dadx, "%4.4f", (float)int32_t( ((cmd_buf[5] & 0x0000ffff) << 16) | ( cmd_buf[ 7] & 0xffff)) / 65536.0f); - sprintf(drde, "%4.4f", (float)int32_t( ((cmd_buf[8] >> 32) & 0xffff0000) | ((cmd_buf[10] >> 48) & 0xffff)) / 65536.0f); - sprintf(dgde, "%4.4f", (float)int32_t((((cmd_buf[8] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[10] >> 32) & 0xffff)) / 65536.0f); - sprintf(dbde, "%4.4f", (float)int32_t( (cmd_buf[8] & 0xffff0000) | ((cmd_buf[10] >> 16) & 0xffff)) / 65536.0f); - sprintf(dade, "%4.4f", (float)int32_t( ((cmd_buf[8] & 0x0000ffff) << 16) | ( cmd_buf[10] & 0xffff)) / 65536.0f); - sprintf(drdy, "%4.4f", (float)int32_t( ((cmd_buf[9] >> 32) & 0xffff0000) | ((cmd_buf[11] >> 48) & 0xffff)) / 65536.0f); - sprintf(dgdy, "%4.4f", (float)int32_t((((cmd_buf[9] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[11] >> 32) & 0xffff)) / 65536.0f); - sprintf(dbdy, "%4.4f", (float)int32_t( (cmd_buf[9] & 0xffff0000) | ((cmd_buf[11] >> 16) & 0xffff)) / 65536.0f); - sprintf(dady, "%4.4f", (float)int32_t( ((cmd_buf[9] & 0x0000ffff) << 16) | ( cmd_buf[11] & 0xffff)) / 65536.0f); - - buffer+=sprintf(buffer, "Tri_Shade %d, XL: %s, XM: %s, XH: %s, YL: %s, YM: %s, YH: %s\n", lft, xl,xm,xh,yl,ym,yh); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " R: %s, G: %s, B: %s, A: %s\n", rt, gt, bt, at); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DRDX: %s, DGDX: %s, DBDX: %s, DADX: %s\n", drdx, dgdx, dbdx, dadx); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DRDE: %s, DGDE: %s, DBDE: %s, DADE: %s\n", drde, dgde, dbde, dade); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DRDY: %s, DGDY: %s, DBDY: %s, DADY: %s\n", drdy, dgdy, dbdy, dady); - break; - } - case 0x0d: // Tri_ShadeZ - { - const int32_t lft = (cmd_buf[0] >> 23) & 0x1; - - sprintf(yl, "%4.4f", (float)((cmd_buf[0] >> 32) & 0x1fff) / 4.0f); - sprintf(ym, "%4.4f", (float)((cmd_buf[0] >> 16) & 0x1fff) / 4.0f); - sprintf(yh, "%4.4f", (float)((cmd_buf[0] >> 0) & 0x1fff) / 4.0f); - sprintf(xl, "%4.4f", (float)int32_t(cmd_buf[1] >> 32) / 65536.0f); - sprintf(dxldy, "%4.4f", (float)int32_t(cmd_buf[1]) / 65536.0f); - sprintf(xh, "%4.4f", (float)int32_t(cmd_buf[2] >> 32) / 65536.0f); - sprintf(dxhdy, "%4.4f", (float)int32_t(cmd_buf[2]) / 65536.0f); - sprintf(xm, "%4.4f", (float)int32_t(cmd_buf[3] >> 32) / 65536.0f); - sprintf(dxmdy, "%4.4f", (float)int32_t(cmd_buf[3]) / 65536.0f); - - sprintf(rt, "%4.4f", (float)int32_t( ((cmd_buf[4] >> 32) & 0xffff0000) | ((cmd_buf[ 6] >> 48) & 0xffff)) / 65536.0f); - sprintf(gt, "%4.4f", (float)int32_t((((cmd_buf[4] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 6] >> 32) & 0xffff)) / 65536.0f); - sprintf(bt, "%4.4f", (float)int32_t( (cmd_buf[4] & 0xffff0000) | ((cmd_buf[ 6] >> 16) & 0xffff)) / 65536.0f); - sprintf(at, "%4.4f", (float)int32_t( ((cmd_buf[4] & 0x0000ffff) << 16) | ( cmd_buf[ 6] & 0xffff)) / 65536.0f); - sprintf(drdx, "%4.4f", (float)int32_t( ((cmd_buf[5] >> 32) & 0xffff0000) | ((cmd_buf[ 7] >> 48) & 0xffff)) / 65536.0f); - sprintf(dgdx, "%4.4f", (float)int32_t((((cmd_buf[5] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 7] >> 32) & 0xffff)) / 65536.0f); - sprintf(dbdx, "%4.4f", (float)int32_t( (cmd_buf[5] & 0xffff0000) | ((cmd_buf[ 7] >> 16) & 0xffff)) / 65536.0f); - sprintf(dadx, "%4.4f", (float)int32_t( ((cmd_buf[5] & 0x0000ffff) << 16) | ( cmd_buf[ 7] & 0xffff)) / 65536.0f); - sprintf(drde, "%4.4f", (float)int32_t( ((cmd_buf[8] >> 32) & 0xffff0000) | ((cmd_buf[10] >> 48) & 0xffff)) / 65536.0f); - sprintf(dgde, "%4.4f", (float)int32_t((((cmd_buf[8] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[10] >> 32) & 0xffff)) / 65536.0f); - sprintf(dbde, "%4.4f", (float)int32_t( (cmd_buf[8] & 0xffff0000) | ((cmd_buf[10] >> 16) & 0xffff)) / 65536.0f); - sprintf(dade, "%4.4f", (float)int32_t( ((cmd_buf[8] & 0x0000ffff) << 16) | ( cmd_buf[10] & 0xffff)) / 65536.0f); - sprintf(drdy, "%4.4f", (float)int32_t( ((cmd_buf[9] >> 32) & 0xffff0000) | ((cmd_buf[11] >> 48) & 0xffff)) / 65536.0f); - sprintf(dgdy, "%4.4f", (float)int32_t((((cmd_buf[9] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[11] >> 32) & 0xffff)) / 65536.0f); - sprintf(dbdy, "%4.4f", (float)int32_t( (cmd_buf[9] & 0xffff0000) | ((cmd_buf[11] >> 16) & 0xffff)) / 65536.0f); - sprintf(dady, "%4.4f", (float)int32_t( ((cmd_buf[9] & 0x0000ffff) << 16) | ( cmd_buf[11] & 0xffff)) / 65536.0f); - - buffer+=sprintf(buffer, "Tri_ShadeZ %d, XL: %s, XM: %s, XH: %s, YL: %s, YM: %s, YH: %s\n", lft, xl,xm,xh,yl,ym,yh); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " R: %s, G: %s, B: %s, A: %s\n", rt, gt, bt, at); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DRDX: %s, DGDX: %s, DBDX: %s, DADX: %s\n", drdx, dgdx, dbdx, dadx); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DRDE: %s, DGDE: %s, DBDE: %s, DADE: %s\n", drde, dgde, dbde, dade); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DRDY: %s, DGDY: %s, DBDY: %s, DADY: %s\n", drdy, dgdy, dbdy, dady); - break; - } - case 0x0e: // Tri_TexShade - { - const int32_t lft = (cmd_buf[0] >> 23) & 0x1; - - sprintf(yl, "%4.4f", (float)((cmd_buf[0] >> 32) & 0x1fff) / 4.0f); - sprintf(ym, "%4.4f", (float)((cmd_buf[0] >> 16) & 0x1fff) / 4.0f); - sprintf(yh, "%4.4f", (float)((cmd_buf[0] >> 0) & 0x1fff) / 4.0f); - sprintf(xl, "%4.4f", (float)int32_t(cmd_buf[1] >> 32) / 65536.0f); - sprintf(dxldy, "%4.4f", (float)int32_t(cmd_buf[1]) / 65536.0f); - sprintf(xh, "%4.4f", (float)int32_t(cmd_buf[2] >> 32) / 65536.0f); - sprintf(dxhdy, "%4.4f", (float)int32_t(cmd_buf[2]) / 65536.0f); - sprintf(xm, "%4.4f", (float)int32_t(cmd_buf[3] >> 32) / 65536.0f); - sprintf(dxmdy, "%4.4f", (float)int32_t(cmd_buf[3]) / 65536.0f); - - sprintf(rt, "%4.4f", (float)int32_t( ((cmd_buf[4] >> 32) & 0xffff0000) | ((cmd_buf[ 6] >> 48) & 0xffff)) / 65536.0f); - sprintf(gt, "%4.4f", (float)int32_t((((cmd_buf[4] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 6] >> 32) & 0xffff)) / 65536.0f); - sprintf(bt, "%4.4f", (float)int32_t( (cmd_buf[4] & 0xffff0000) | ((cmd_buf[ 6] >> 16) & 0xffff)) / 65536.0f); - sprintf(at, "%4.4f", (float)int32_t( ((cmd_buf[4] & 0x0000ffff) << 16) | ( cmd_buf[ 6] & 0xffff)) / 65536.0f); - sprintf(drdx, "%4.4f", (float)int32_t( ((cmd_buf[5] >> 32) & 0xffff0000) | ((cmd_buf[ 7] >> 48) & 0xffff)) / 65536.0f); - sprintf(dgdx, "%4.4f", (float)int32_t((((cmd_buf[5] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 7] >> 32) & 0xffff)) / 65536.0f); - sprintf(dbdx, "%4.4f", (float)int32_t( (cmd_buf[5] & 0xffff0000) | ((cmd_buf[ 7] >> 16) & 0xffff)) / 65536.0f); - sprintf(dadx, "%4.4f", (float)int32_t( ((cmd_buf[5] & 0x0000ffff) << 16) | ( cmd_buf[ 7] & 0xffff)) / 65536.0f); - sprintf(drde, "%4.4f", (float)int32_t( ((cmd_buf[8] >> 32) & 0xffff0000) | ((cmd_buf[10] >> 48) & 0xffff)) / 65536.0f); - sprintf(dgde, "%4.4f", (float)int32_t((((cmd_buf[8] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[10] >> 32) & 0xffff)) / 65536.0f); - sprintf(dbde, "%4.4f", (float)int32_t( (cmd_buf[8] & 0xffff0000) | ((cmd_buf[10] >> 16) & 0xffff)) / 65536.0f); - sprintf(dade, "%4.4f", (float)int32_t( ((cmd_buf[8] & 0x0000ffff) << 16) | ( cmd_buf[10] & 0xffff)) / 65536.0f); - sprintf(drdy, "%4.4f", (float)int32_t( ((cmd_buf[9] >> 32) & 0xffff0000) | ((cmd_buf[11] >> 48) & 0xffff)) / 65536.0f); - sprintf(dgdy, "%4.4f", (float)int32_t((((cmd_buf[9] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[11] >> 32) & 0xffff)) / 65536.0f); - sprintf(dbdy, "%4.4f", (float)int32_t( (cmd_buf[9] & 0xffff0000) | ((cmd_buf[11] >> 16) & 0xffff)) / 65536.0f); - sprintf(dady, "%4.4f", (float)int32_t( ((cmd_buf[9] & 0x0000ffff) << 16) | ( cmd_buf[11] & 0xffff)) / 65536.0f); - - sprintf(s, "%4.4f", (float)int32_t( ((cmd_buf[4] >> 32) & 0xffff0000) | ((cmd_buf[ 6] >> 48) & 0xffff)) / 65536.0f); - sprintf(t, "%4.4f", (float)int32_t((((cmd_buf[4] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 6] >> 32) & 0xffff)) / 65536.0f); - sprintf(w, "%4.4f", (float)int32_t( (cmd_buf[4] & 0xffff0000) | ((cmd_buf[ 6] >> 16) & 0xffff)) / 65536.0f); - sprintf(dsdx, "%4.4f", (float)int32_t( ((cmd_buf[5] >> 32) & 0xffff0000) | ((cmd_buf[ 7] >> 48) & 0xffff)) / 65536.0f); - sprintf(dtdx, "%4.4f", (float)int32_t((((cmd_buf[5] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 7] >> 32) & 0xffff)) / 65536.0f); - sprintf(dwdx, "%4.4f", (float)int32_t( (cmd_buf[5] & 0xffff0000) | ((cmd_buf[ 7] >> 16) & 0xffff)) / 65536.0f); - sprintf(dsde, "%4.4f", (float)int32_t( ((cmd_buf[8] >> 32) & 0xffff0000) | ((cmd_buf[10] >> 48) & 0xffff)) / 65536.0f); - sprintf(dtde, "%4.4f", (float)int32_t((((cmd_buf[8] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[10] >> 32) & 0xffff)) / 65536.0f); - sprintf(dwde, "%4.4f", (float)int32_t( (cmd_buf[8] & 0xffff0000) | ((cmd_buf[10] >> 16) & 0xffff)) / 65536.0f); - sprintf(dsdy, "%4.4f", (float)int32_t( ((cmd_buf[9] >> 32) & 0xffff0000) | ((cmd_buf[11] >> 48) & 0xffff)) / 65536.0f); - sprintf(dtdy, "%4.4f", (float)int32_t((((cmd_buf[9] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[11] >> 32) & 0xffff)) / 65536.0f); - sprintf(dwdy, "%4.4f", (float)int32_t( (cmd_buf[9] & 0xffff0000) | ((cmd_buf[11] >> 16) & 0xffff)) / 65536.0f); - - buffer+=sprintf(buffer, "Tri_TexShade %d, XL: %s, XM: %s, XH: %s, YL: %s, YM: %s, YH: %s\n", lft, xl,xm,xh,yl,ym,yh); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " R: %s, G: %s, B: %s, A: %s\n", rt, gt, bt, at); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DRDX: %s, DGDX: %s, DBDX: %s, DADX: %s\n", drdx, dgdx, dbdx, dadx); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DRDE: %s, DGDE: %s, DBDE: %s, DADE: %s\n", drde, dgde, dbde, dade); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DRDY: %s, DGDY: %s, DBDY: %s, DADY: %s\n", drdy, dgdy, dbdy, dady); - - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " S: %s, T: %s, W: %s\n", s, t, w); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DSDX: %s, DTDX: %s, DWDX: %s\n", dsdx, dtdx, dwdx); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DSDE: %s, DTDE: %s, DWDE: %s\n", dsde, dtde, dwde); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DSDY: %s, DTDY: %s, DWDY: %s\n", dsdy, dtdy, dwdy); - break; - } - case 0x0f: // Tri_TexShadeZ - { - const int32_t lft = (cmd_buf[0] >> 23) & 0x1; - - sprintf(yl, "%4.4f", (float)((cmd_buf[0] >> 32) & 0x1fff) / 4.0f); - sprintf(ym, "%4.4f", (float)((cmd_buf[0] >> 16) & 0x1fff) / 4.0f); - sprintf(yh, "%4.4f", (float)((cmd_buf[0] >> 0) & 0x1fff) / 4.0f); - sprintf(xl, "%4.4f", (float)int32_t(cmd_buf[1] >> 32) / 65536.0f); - sprintf(dxldy, "%4.4f", (float)int32_t(cmd_buf[1]) / 65536.0f); - sprintf(xh, "%4.4f", (float)int32_t(cmd_buf[2] >> 32) / 65536.0f); - sprintf(dxhdy, "%4.4f", (float)int32_t(cmd_buf[2]) / 65536.0f); - sprintf(xm, "%4.4f", (float)int32_t(cmd_buf[3] >> 32) / 65536.0f); - sprintf(dxmdy, "%4.4f", (float)int32_t(cmd_buf[3]) / 65536.0f); - - sprintf(rt, "%4.4f", (float)int32_t( ((cmd_buf[4] >> 32) & 0xffff0000) | ((cmd_buf[ 6] >> 48) & 0xffff)) / 65536.0f); - sprintf(gt, "%4.4f", (float)int32_t((((cmd_buf[4] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 6] >> 32) & 0xffff)) / 65536.0f); - sprintf(bt, "%4.4f", (float)int32_t( (cmd_buf[4] & 0xffff0000) | ((cmd_buf[ 6] >> 16) & 0xffff)) / 65536.0f); - sprintf(at, "%4.4f", (float)int32_t( ((cmd_buf[4] & 0x0000ffff) << 16) | ( cmd_buf[ 6] & 0xffff)) / 65536.0f); - sprintf(drdx, "%4.4f", (float)int32_t( ((cmd_buf[5] >> 32) & 0xffff0000) | ((cmd_buf[ 7] >> 48) & 0xffff)) / 65536.0f); - sprintf(dgdx, "%4.4f", (float)int32_t((((cmd_buf[5] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 7] >> 32) & 0xffff)) / 65536.0f); - sprintf(dbdx, "%4.4f", (float)int32_t( (cmd_buf[5] & 0xffff0000) | ((cmd_buf[ 7] >> 16) & 0xffff)) / 65536.0f); - sprintf(dadx, "%4.4f", (float)int32_t( ((cmd_buf[5] & 0x0000ffff) << 16) | ( cmd_buf[ 7] & 0xffff)) / 65536.0f); - sprintf(drde, "%4.4f", (float)int32_t( ((cmd_buf[8] >> 32) & 0xffff0000) | ((cmd_buf[10] >> 48) & 0xffff)) / 65536.0f); - sprintf(dgde, "%4.4f", (float)int32_t((((cmd_buf[8] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[10] >> 32) & 0xffff)) / 65536.0f); - sprintf(dbde, "%4.4f", (float)int32_t( (cmd_buf[8] & 0xffff0000) | ((cmd_buf[10] >> 16) & 0xffff)) / 65536.0f); - sprintf(dade, "%4.4f", (float)int32_t( ((cmd_buf[8] & 0x0000ffff) << 16) | ( cmd_buf[10] & 0xffff)) / 65536.0f); - sprintf(drdy, "%4.4f", (float)int32_t( ((cmd_buf[9] >> 32) & 0xffff0000) | ((cmd_buf[11] >> 48) & 0xffff)) / 65536.0f); - sprintf(dgdy, "%4.4f", (float)int32_t((((cmd_buf[9] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[11] >> 32) & 0xffff)) / 65536.0f); - sprintf(dbdy, "%4.4f", (float)int32_t( (cmd_buf[9] & 0xffff0000) | ((cmd_buf[11] >> 16) & 0xffff)) / 65536.0f); - sprintf(dady, "%4.4f", (float)int32_t( ((cmd_buf[9] & 0x0000ffff) << 16) | ( cmd_buf[11] & 0xffff)) / 65536.0f); - - sprintf(s, "%4.4f", (float)int32_t( ((cmd_buf[4] >> 32) & 0xffff0000) | ((cmd_buf[ 6] >> 48) & 0xffff)) / 65536.0f); - sprintf(t, "%4.4f", (float)int32_t((((cmd_buf[4] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 6] >> 32) & 0xffff)) / 65536.0f); - sprintf(w, "%4.4f", (float)int32_t( (cmd_buf[4] & 0xffff0000) | ((cmd_buf[ 6] >> 16) & 0xffff)) / 65536.0f); - sprintf(dsdx, "%4.4f", (float)int32_t( ((cmd_buf[5] >> 32) & 0xffff0000) | ((cmd_buf[ 7] >> 48) & 0xffff)) / 65536.0f); - sprintf(dtdx, "%4.4f", (float)int32_t((((cmd_buf[5] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[ 7] >> 32) & 0xffff)) / 65536.0f); - sprintf(dwdx, "%4.4f", (float)int32_t( (cmd_buf[5] & 0xffff0000) | ((cmd_buf[ 7] >> 16) & 0xffff)) / 65536.0f); - sprintf(dsde, "%4.4f", (float)int32_t( ((cmd_buf[8] >> 32) & 0xffff0000) | ((cmd_buf[10] >> 48) & 0xffff)) / 65536.0f); - sprintf(dtde, "%4.4f", (float)int32_t((((cmd_buf[8] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[10] >> 32) & 0xffff)) / 65536.0f); - sprintf(dwde, "%4.4f", (float)int32_t( (cmd_buf[8] & 0xffff0000) | ((cmd_buf[10] >> 16) & 0xffff)) / 65536.0f); - sprintf(dsdy, "%4.4f", (float)int32_t( ((cmd_buf[9] >> 32) & 0xffff0000) | ((cmd_buf[11] >> 48) & 0xffff)) / 65536.0f); - sprintf(dtdy, "%4.4f", (float)int32_t((((cmd_buf[9] >> 32) & 0x0000ffff) << 16) | ((cmd_buf[11] >> 32) & 0xffff)) / 65536.0f); - sprintf(dwdy, "%4.4f", (float)int32_t( (cmd_buf[9] & 0xffff0000) | ((cmd_buf[11] >> 16) & 0xffff)) / 65536.0f); - - buffer+=sprintf(buffer, "Tri_TexShadeZ %d, XL: %s, XM: %s, XH: %s, YL: %s, YM: %s, YH: %s\n", lft, xl,xm,xh,yl,ym,yh); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " R: %s, G: %s, B: %s, A: %s\n", rt, gt, bt, at); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DRDX: %s, DGDX: %s, DBDX: %s, DADX: %s\n", drdx, dgdx, dbdx, dadx); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DRDE: %s, DGDE: %s, DBDE: %s, DADE: %s\n", drde, dgde, dbde, dade); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DRDY: %s, DGDY: %s, DBDY: %s, DADY: %s\n", drdy, dgdy, dbdy, dady); - - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " S: %s, T: %s, W: %s\n", s, t, w); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DSDX: %s, DTDX: %s, DWDX: %s\n", dsdx, dtdx, dwdx); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DSDE: %s, DTDE: %s, DWDE: %s\n", dsde, dtde, dwde); - buffer+=sprintf(buffer, " "); - buffer+=sprintf(buffer, " DSDY: %s, DTDY: %s, DWDY: %s\n", dsdy, dtdy, dwdy); - break; - } - case 0x24: - case 0x25: - { - sprintf(s, "%4.4f", (float)int16_t((cmd_buf[1] >> 48) & 0xffff) / 32.0f); - sprintf(t, "%4.4f", (float)int16_t((cmd_buf[1] >> 32) & 0xffff) / 32.0f); - sprintf(dsdx, "%4.4f", (float)int16_t((cmd_buf[1] >> 16) & 0xffff) / 1024.0f); - sprintf(dtdy, "%4.4f", (float)int16_t((cmd_buf[1] >> 0) & 0xffff) / 1024.0f); - - if (command == 0x24) - sprintf(buffer, "Texture_Rectangle %d, %s, %s, %s, %s, %s, %s, %s, %s", tile, sh, th, sl, tl, s, t, dsdx, dtdy); - else - sprintf(buffer, "Texture_Rectangle_Flip %d, %s, %s, %s, %s, %s, %s, %s, %s", tile, sh, th, sl, tl, s, t, dsdx, dtdy); - - break; - } - case 0x26: sprintf(buffer, "Sync_Load"); break; - case 0x27: sprintf(buffer, "Sync_Pipe"); break; - case 0x28: sprintf(buffer, "Sync_Tile"); break; - case 0x29: sprintf(buffer, "Sync_Full"); break; - case 0x2d: sprintf(buffer, "Set_Scissor %s, %s, %s, %s", sl, tl, sh, th); break; - case 0x2e: sprintf(buffer, "Set_Prim_Depth %04X, %04X", uint32_t(cmd_buf[0] >> 16) & 0xffff, (uint32_t)cmd_buf[0] & 0xffff); break; - case 0x2f: sprintf(buffer, "Set_Other_Modes %08X %08X", uint32_t(cmd_buf[0] >> 32), (uint32_t)cmd_buf[0]); break; - case 0x30: sprintf(buffer, "Load_TLUT %d, %s, %s, %s, %s", tile, sl, tl, sh, th); break; - case 0x32: sprintf(buffer, "Set_Tile_Size %d, %s, %s, %s, %s", tile, sl, tl, sh, th); break; - case 0x33: sprintf(buffer, "Load_Block %d, %03X, %03X, %03X, %03X", tile, uint32_t(cmd_buf[0] >> 44) & 0xfff, uint32_t(cmd_buf[0] >> 32) & 0xfff, uint32_t(cmd_buf[0] >> 12) & 0xfff, uint32_t(cmd_buf[0]) & 0xfff); break; - case 0x34: sprintf(buffer, "Load_Tile %d, %s, %s, %s, %s", tile, sl, tl, sh, th); break; - case 0x35: sprintf(buffer, "Set_Tile %d, %s, %s, %d, %04X", tile, format, size, (uint32_t(cmd_buf[0] >> 41) & 0x1ff) * 8, (uint32_t(cmd_buf[0] >> 32) & 0x1ff) * 8); break; - case 0x36: sprintf(buffer, "Fill_Rectangle %s, %s, %s, %s", sh, th, sl, tl); break; - case 0x37: sprintf(buffer, "Set_Fill_Color R: %d, G: %d, B: %d, A: %d", r, g, b, a); break; - case 0x38: sprintf(buffer, "Set_Fog_Color R: %d, G: %d, B: %d, A: %d", r, g, b, a); break; - case 0x39: sprintf(buffer, "Set_Blend_Color R: %d, G: %d, B: %d, A: %d", r, g, b, a); break; - case 0x3a: sprintf(buffer, "Set_Prim_Color %d, %d, R: %d, G: %d, B: %d, A: %d", uint32_t(cmd_buf[0] >> 40) & 0x1f, uint32_t(cmd_buf[0] >> 32) & 0xff, r, g, b, a); break; - case 0x3b: sprintf(buffer, "Set_Env_Color R: %d, G: %d, B: %d, A: %d", r, g, b, a); break; - case 0x3c: sprintf(buffer, "Set_Combine %08X %08X", uint32_t(cmd_buf[0] >> 32), (uint32_t)cmd_buf[0]); break; - case 0x3d: sprintf(buffer, "Set_Texture_Image %s, %s, %d, %08X", format, size, (uint32_t(cmd_buf[0] >> 32) & 0x1ff) + 1, (uint32_t)cmd_buf[0]); break; - case 0x3e: sprintf(buffer, "Set_Mask_Image %08X", (uint32_t)cmd_buf[0]); break; - case 0x3f: sprintf(buffer, "Set_Color_Image %s, %s, %d, %08X", format, size, (uint32_t(cmd_buf[0] >> 32) & 0x1ff) + 1, (uint32_t)cmd_buf[0]); break; - default: sprintf(buffer, "Unknown (%08X %08X)", uint32_t(cmd_buf[0] >> 32), (uint32_t)cmd_buf[0]); break; - } -} - -/*****************************************************************************/ - -static uint32_t rightcvghex(uint32_t x, uint32_t fmask) -{ - uint32_t stickybit = ((x >> 1) & 0x1fff) > 0; - uint32_t covered = ((x >> 14) & 3) + stickybit; - covered = (0xf0 >> covered) & 0xf; - return (covered & fmask); -} - -static uint32_t leftcvghex(uint32_t x, uint32_t fmask) -{ - uint32_t stickybit = ((x >> 1) & 0x1fff) > 0; - uint32_t covered = ((x >> 14) & 3) + stickybit; - covered = 0xf >> covered; - return (covered & fmask); -} - -static int32_t CLIP(int32_t value,int32_t min,int32_t max) -{ - if (value < min) - { - return min; - } - else if (value > max) - { - return max; - } - else - { - return value; - } -} - -void n64_rdp::compute_cvg_noflip(extent_t* spans, int32_t* majorx, int32_t* minorx, int32_t* majorxint, int32_t* minorxint, int32_t scanline, int32_t yh, int32_t yl, int32_t base) -{ - int32_t purgestart = 0xfff; - int32_t purgeend = 0; - const bool writablescanline = !(scanline & ~0x3ff); - const int32_t scanlinespx = scanline << 2; - - if (!writablescanline) return; - - for(int32_t i = 0; i < 4; i++) - { - if (minorxint[i] < purgestart) - { - purgestart = minorxint[i]; - } - if (majorxint[i] > purgeend) - { - purgeend = majorxint[i]; - } - } - - purgestart = CLIP(purgestart, 0, 1023); - purgeend = CLIP(purgeend, 0, 1023); - int32_t length = purgeend - purgestart; - - if (length < 0) return; - - rdp_span_aux* userdata = (rdp_span_aux*)spans[scanline - base].userdata; - memset(&userdata->m_cvg[purgestart], 0, (length + 1) << 1); - - for(int32_t i = 0; i < 4; i++) - { - int32_t minorcur = minorx[i]; - int32_t majorcur = majorx[i]; - int32_t minorcurint = minorxint[i]; - int32_t majorcurint = majorxint[i]; - length = majorcurint - minorcurint; - - int32_t fmask = (i & 1) ? 5 : 0xa; - int32_t maskshift = (i ^ 3) << 2; - int32_t fmaskshifted = fmask << maskshift; - int32_t fleft = CLIP(minorcurint + 1, 0, 647); - int32_t fright = CLIP(majorcurint - 1, 0, 647); - bool valid_y = ((scanlinespx + i) >= yh && (scanlinespx + i) < yl); - if (valid_y && length >= 0) - { - if (minorcurint != majorcurint) - { - if (!(minorcurint & ~0x3ff)) - { - userdata->m_cvg[minorcurint] |= (leftcvghex(minorcur, fmask) << maskshift); - } - if (!(majorcurint & ~0x3ff)) - { - userdata->m_cvg[majorcurint] |= (rightcvghex(majorcur, fmask) << maskshift); - } - } - else - { - if (!(majorcurint & ~0x3ff)) - { - int32_t samecvg = leftcvghex(minorcur, fmask) & rightcvghex(majorcur, fmask); - userdata->m_cvg[majorcurint] |= (samecvg << maskshift); - } - } - for (; fleft <= fright; fleft++) - { - userdata->m_cvg[fleft] |= fmaskshifted; - } - } - } -} - -void n64_rdp::compute_cvg_flip(extent_t* spans, int32_t* majorx, int32_t* minorx, int32_t* majorxint, int32_t* minorxint, int32_t scanline, int32_t yh, int32_t yl, int32_t base) -{ - int32_t purgestart = 0xfff; - int32_t purgeend = 0; - const bool writablescanline = !(scanline & ~0x3ff); - const int32_t scanlinespx = scanline << 2; - - if(!writablescanline) return; - - for(int32_t i = 0; i < 4; i++) - { - if (majorxint[i] < purgestart) - { - purgestart = majorxint[i]; - } - if (minorxint[i] > purgeend) - { - purgeend = minorxint[i]; - } - } - - purgestart = CLIP(purgestart, 0, 1023); - purgeend = CLIP(purgeend, 0, 1023); - - int32_t length = purgeend - purgestart; - - if (length < 0) return; - - rdp_span_aux* userdata = (rdp_span_aux*)spans[scanline - base].userdata; - memset(&userdata->m_cvg[purgestart], 0, (length + 1) << 1); - - for(int32_t i = 0; i < 4; i++) - { - int32_t minorcur = minorx[i]; - int32_t majorcur = majorx[i]; - int32_t minorcurint = minorxint[i]; - int32_t majorcurint = majorxint[i]; - length = minorcurint - majorcurint; - - int32_t fmask = (i & 1) ? 5 : 0xa; - int32_t maskshift = (i ^ 3) << 2; - int32_t fmaskshifted = fmask << maskshift; - int32_t fleft = CLIP(majorcurint + 1, 0, 647); - int32_t fright = CLIP(minorcurint - 1, 0, 647); - bool valid_y = ((scanlinespx + i) >= yh && (scanlinespx + i) < yl); - if (valid_y && length >= 0) - { - if (minorcurint != majorcurint) - { - if (!(minorcurint & ~0x3ff)) - { - userdata->m_cvg[minorcurint] |= (rightcvghex(minorcur, fmask) << maskshift); - } - if (!(majorcurint & ~0x3ff)) - { - userdata->m_cvg[majorcurint] |= (leftcvghex(majorcur, fmask) << maskshift); - } - } - else - { - if (!(majorcurint & ~0x3ff)) - { - int32_t samecvg = rightcvghex(minorcur, fmask) & leftcvghex(majorcur, fmask); - userdata->m_cvg[majorcurint] |= (samecvg << maskshift); - } - } - for (; fleft <= fright; fleft++) - { - userdata->m_cvg[fleft] |= fmaskshifted; - } - } - } -} - -#define SIGN(x, numb) (((x) & ((1 << numb) - 1)) | -((x) & (1 << (numb - 1)))) - -void n64_rdp::draw_triangle(uint64_t *cmd_buf, bool shade, bool texture, bool zbuffer, bool rect) -{ - const uint64_t* cmd_data = rect ? m_temp_rect_data : cmd_buf; - const uint64_t w1 = cmd_data[0]; - - int32_t flip = int32_t(w1 >> 55) & 1; - m_misc_state.m_max_level = uint32_t(w1 >> 51) & 7; - int32_t tilenum = int32_t(w1 >> 48) & 0x7; - - int32_t dsdiff = 0, dtdiff = 0, dwdiff = 0, drdiff = 0, dgdiff = 0, dbdiff = 0, dadiff = 0, dzdiff = 0; - int32_t dsdeh = 0, dtdeh = 0, dwdeh = 0, drdeh = 0, dgdeh = 0, dbdeh = 0, dadeh = 0, dzdeh = 0; - int32_t dsdxh = 0, dtdxh = 0, dwdxh = 0, drdxh = 0, dgdxh = 0, dbdxh = 0, dadxh = 0, dzdxh = 0; - int32_t dsdyh = 0, dtdyh = 0, dwdyh = 0, drdyh = 0, dgdyh = 0, dbdyh = 0, dadyh = 0, dzdyh = 0; - - int32_t maxxmx = 0; // maxxmx / minxhx very opaque names, consider re-naming - int32_t minxmx = 0; - int32_t maxxhx = 0; - int32_t minxhx = 0; - - int32_t shade_base = 4; - int32_t texture_base = 4; - int32_t zbuffer_base = 4; - if(shade) - { - texture_base += 8; - zbuffer_base += 8; - } - if(texture) - { - zbuffer_base += 8; - } - - uint64_t w2 = cmd_data[1]; - uint64_t w3 = cmd_data[2]; - uint64_t w4 = cmd_data[3]; - - int32_t yl = int32_t(w1 >> 32) & 0x3fff; - int32_t ym = int32_t(w1 >> 16) & 0x3fff; - int32_t yh = int32_t(w1 >> 0) & 0x3fff; - int32_t xl = (int32_t)(w2 >> 32) & 0x3fffffff; - int32_t xh = (int32_t)(w3 >> 32) & 0x3fffffff; - int32_t xm = (int32_t)(w4 >> 32) & 0x3fffffff; - // Inverse slopes in 16.16 format - int32_t dxldy = (int32_t)w2; - int32_t dxhdy = (int32_t)w3; - int32_t dxmdy = (int32_t)w4; - - if (yl & 0x2000) yl |= 0xffffc000; - if (ym & 0x2000) ym |= 0xffffc000; - if (yh & 0x2000) yh |= 0xffffc000; - - if (xl & 0x20000000) xl |= 0xc0000000; - if (xm & 0x20000000) xm |= 0xc0000000; - if (xh & 0x20000000) xh |= 0xc0000000; - - int32_t r = int32_t(((cmd_data[shade_base] >> 32) & 0xffff0000) | ((cmd_data[shade_base + 2] >> 48) & 0x0000ffff)); - int32_t g = int32_t(((cmd_data[shade_base] >> 16) & 0xffff0000) | ((cmd_data[shade_base + 2] >> 32) & 0x0000ffff)); - int32_t b = int32_t( (cmd_data[shade_base] & 0xffff0000) | ((cmd_data[shade_base + 2] >> 16) & 0x0000ffff)); - int32_t a = int32_t(((cmd_data[shade_base] << 16) & 0xffff0000) | (cmd_data[shade_base + 2] & 0x0000ffff)); - const int32_t drdx = int32_t(((cmd_data[shade_base + 1] >> 32) & 0xffff0000) | ((cmd_data[shade_base + 3] >> 48) & 0x0000ffff)); - const int32_t dgdx = int32_t(((cmd_data[shade_base + 1] >> 16) & 0xffff0000) | ((cmd_data[shade_base + 3] >> 32) & 0x0000ffff)); - const int32_t dbdx = int32_t( (cmd_data[shade_base + 1] & 0xffff0000) | ((cmd_data[shade_base + 3] >> 16) & 0x0000ffff)); - const int32_t dadx = int32_t(((cmd_data[shade_base + 1] << 16) & 0xffff0000) | (cmd_data[shade_base + 3] & 0x0000ffff)); - const int32_t drde = int32_t(((cmd_data[shade_base + 4] >> 32) & 0xffff0000) | ((cmd_data[shade_base + 6] >> 48) & 0x0000ffff)); - const int32_t dgde = int32_t(((cmd_data[shade_base + 4] >> 16) & 0xffff0000) | ((cmd_data[shade_base + 6] >> 32) & 0x0000ffff)); - const int32_t dbde = int32_t( (cmd_data[shade_base + 4] & 0xffff0000) | ((cmd_data[shade_base + 6] >> 16) & 0x0000ffff)); - const int32_t dade = int32_t(((cmd_data[shade_base + 4] << 16) & 0xffff0000) | (cmd_data[shade_base + 6] & 0x0000ffff)); - const int32_t drdy = int32_t(((cmd_data[shade_base + 5] >> 32) & 0xffff0000) | ((cmd_data[shade_base + 7] >> 48) & 0x0000ffff)); - const int32_t dgdy = int32_t(((cmd_data[shade_base + 5] >> 16) & 0xffff0000) | ((cmd_data[shade_base + 7] >> 32) & 0x0000ffff)); - const int32_t dbdy = int32_t( (cmd_data[shade_base + 5] & 0xffff0000) | ((cmd_data[shade_base + 7] >> 16) & 0x0000ffff)); - const int32_t dady = int32_t(((cmd_data[shade_base + 5] << 16) & 0xffff0000) | (cmd_data[shade_base + 7] & 0x0000ffff)); - - int32_t s = int32_t(((cmd_data[texture_base] >> 32) & 0xffff0000) | ((cmd_data[texture_base+ 2 ] >> 48) & 0x0000ffff)); - int32_t t = int32_t(((cmd_data[texture_base] >> 16) & 0xffff0000) | ((cmd_data[texture_base+ 2 ] >> 32) & 0x0000ffff)); - int32_t w = int32_t( (cmd_data[texture_base] & 0xffff0000) | ((cmd_data[texture_base+ 2 ] >> 16) & 0x0000ffff)); - const int32_t dsdx = int32_t(((cmd_data[texture_base + 1] >> 32) & 0xffff0000) | ((cmd_data[texture_base + 3] >> 48) & 0x0000ffff)); - const int32_t dtdx = int32_t(((cmd_data[texture_base + 1] >> 16) & 0xffff0000) | ((cmd_data[texture_base + 3] >> 32) & 0x0000ffff)); - const int32_t dwdx = int32_t( (cmd_data[texture_base + 1] & 0xffff0000) | ((cmd_data[texture_base + 3] >> 16) & 0x0000ffff)); - const int32_t dsde = int32_t(((cmd_data[texture_base + 4] >> 32) & 0xffff0000) | ((cmd_data[texture_base + 6] >> 48) & 0x0000ffff)); - const int32_t dtde = int32_t(((cmd_data[texture_base + 4] >> 16) & 0xffff0000) | ((cmd_data[texture_base + 6] >> 32) & 0x0000ffff)); - const int32_t dwde = int32_t( (cmd_data[texture_base + 4] & 0xffff0000) | ((cmd_data[texture_base + 6] >> 16) & 0x0000ffff)); - const int32_t dsdy = int32_t(((cmd_data[texture_base + 5] >> 32) & 0xffff0000) | ((cmd_data[texture_base + 7] >> 48) & 0x0000ffff)); - const int32_t dtdy = int32_t(((cmd_data[texture_base + 5] >> 16) & 0xffff0000) | ((cmd_data[texture_base + 7] >> 32) & 0x0000ffff)); - const int32_t dwdy = int32_t( (cmd_data[texture_base + 5] & 0xffff0000) | ((cmd_data[texture_base + 7] >> 16) & 0x0000ffff)); - - int32_t z = int32_t(cmd_data[zbuffer_base] >> 32); - const int32_t dzdx = int32_t(cmd_data[zbuffer_base]); - const int32_t dzde = int32_t(cmd_data[zbuffer_base+1] >> 32); - const int32_t dzdy = int32_t(cmd_data[zbuffer_base+1]); - - const int32_t dzdy_dz = (dzdy >> 16) & 0xffff; - const int32_t dzdx_dz = (dzdx >> 16) & 0xffff; - - extent_t spans[2048]; -#ifdef MAME_DEBUG - memset(spans, 0xcc, sizeof(spans)); -#endif - - m_span_base.m_span_drdy = drdy; - m_span_base.m_span_dgdy = dgdy; - m_span_base.m_span_dbdy = dbdy; - m_span_base.m_span_dady = dady; - m_span_base.m_span_dzdy = m_other_modes.z_source_sel ? 0 : dzdy; - - uint32_t temp_dzpix = ((dzdy_dz & 0x8000) ? ((~dzdy_dz) & 0x7fff) : dzdy_dz) + ((dzdx_dz & 0x8000) ? ((~dzdx_dz) & 0x7fff) : dzdx_dz); - m_span_base.m_span_dr = drdx & ~0x1f; - m_span_base.m_span_dg = dgdx & ~0x1f; - m_span_base.m_span_db = dbdx & ~0x1f; - m_span_base.m_span_da = dadx & ~0x1f; - m_span_base.m_span_ds = dsdx; - m_span_base.m_span_dt = dtdx; - m_span_base.m_span_dw = dwdx; - m_span_base.m_span_dz = m_other_modes.z_source_sel ? 0 : dzdx; - m_span_base.m_span_dymax = 0; - m_span_base.m_span_dzpix = m_dzpix_normalize[temp_dzpix & 0xffff]; - - int32_t xleft_inc = (dxmdy >> 2) & ~1; - int32_t xright_inc = (dxhdy >> 2) & ~1; - - int32_t xright = xh & ~1; - int32_t xleft = xm & ~1; - - const int32_t sign_dxhdy = (dxhdy & 0x80000000) ? 1 : 0; - const int32_t do_offset = !(sign_dxhdy ^ (flip)); - - if (do_offset) - { - dsdeh = dsde >> 9; dsdyh = dsdy >> 9; - dtdeh = dtde >> 9; dtdyh = dtdy >> 9; - dwdeh = dwde >> 9; dwdyh = dwdy >> 9; - drdeh = drde >> 9; drdyh = drdy >> 9; - dgdeh = dgde >> 9; dgdyh = dgdy >> 9; - dbdeh = dbde >> 9; dbdyh = dbdy >> 9; - dadeh = dade >> 9; dadyh = dady >> 9; - dzdeh = dzde >> 9; dzdyh = dzdy >> 9; - - dsdiff = (dsdeh << 8) + (dsdeh << 7) - (dsdyh << 8) - (dsdyh << 7); - dtdiff = (dtdeh << 8) + (dtdeh << 7) - (dtdyh << 8) - (dtdyh << 7); - dwdiff = (dwdeh << 8) + (dwdeh << 7) - (dwdyh << 8) - (dwdyh << 7); - drdiff = (drdeh << 8) + (drdeh << 7) - (drdyh << 8) - (drdyh << 7); - dgdiff = (dgdeh << 8) + (dgdeh << 7) - (dgdyh << 8) - (dgdyh << 7); - dbdiff = (dbdeh << 8) + (dbdeh << 7) - (dbdyh << 8) - (dbdyh << 7); - dadiff = (dadeh << 8) + (dadeh << 7) - (dadyh << 8) - (dadyh << 7); - dzdiff = (dzdeh << 8) + (dzdeh << 7) - (dzdyh << 8) - (dzdyh << 7); - } - else - { - dsdiff = dtdiff = dwdiff = drdiff = dgdiff = dbdiff = dadiff = dzdiff = 0; - } - - dsdxh = dsdx >> 8; - dtdxh = dtdx >> 8; - dwdxh = dwdx >> 8; - drdxh = drdx >> 8; - dgdxh = dgdx >> 8; - dbdxh = dbdx >> 8; - dadxh = dadx >> 8; - dzdxh = dzdx >> 8; - - const int32_t ycur = yh & ~3; - const int32_t ylfar = yl | 3; - const int32_t ldflag = (sign_dxhdy ^ flip) ? 0 : 3; - int32_t majorx[4]; - int32_t minorx[4]; - int32_t majorxint[4]; - int32_t minorxint[4]; - - int32_t xfrac = ((xright >> 8) & 0xff); - - const int32_t clipy1 = m_scissor.m_yh; - const int32_t clipy2 = m_scissor.m_yl; - - // Trivial reject - if((ycur >> 2) >= clipy2 && (ylfar >> 2) >= clipy2) - { - return; - } - if((ycur >> 2) < clipy1 && (ylfar >> 2) < clipy1) - { - return; - } - - bool new_object = true; - rdp_poly_state* object = nullptr; - bool valid = false; - - int32_t* minx = flip ? &minxhx : &minxmx; - int32_t* maxx = flip ? &maxxmx : &maxxhx; - int32_t* startx = flip ? maxx : minx; - int32_t* endx = flip ? minx : maxx; - - for (int32_t k = ycur; k <= ylfar; k++) - { - if (k == ym) - { - xleft = xl & ~1; - xleft_inc = (dxldy >> 2) & ~1; - } - - const int32_t xstart = xleft >> 16; - const int32_t xend = xright >> 16; - const int32_t j = k >> 2; - const int32_t spanidx = (k - ycur) >> 2; - const int32_t spix = k & 3; - bool valid_y = !(k < yh || k >= yl); - - if (spanidx >= 0 && spanidx < 2048) - { - majorxint[spix] = xend; - minorxint[spix] = xstart; - majorx[spix] = xright; - minorx[spix] = xleft; - - if (spix == 0) - { - *maxx = 0; - *minx = 0xfff; - } - - if (valid_y) - { - if (flip) - { - *maxx = std::max(xstart, *maxx); - *minx = std::min(xend, *minx); - } - else - { - *minx = std::min(xstart, *minx); - *maxx = std::max(xend, *maxx); - } - } - - if (spix == 0) - { - if(new_object) - { - object = &object_data().next(); - memcpy(object->m_tmem, m_tmem.get(), 0x1000); - new_object = false; - } - - spans[spanidx].userdata = (void*)((uint8_t*)m_aux_buf.get() + m_aux_buf_ptr); - valid = true; - m_aux_buf_ptr += sizeof(rdp_span_aux); - - if(m_aux_buf_ptr >= EXTENT_AUX_COUNT) - { - fatalerror("n64_rdp::draw_triangle: span aux buffer overflow\n"); - } - - rdp_span_aux* userdata = (rdp_span_aux*)spans[spanidx].userdata; - memcpy(&userdata->m_combine, &m_combine, sizeof(combine_modes_t)); - userdata->m_tmem = object->m_tmem; - - userdata->m_blend_color = m_blend_color; - userdata->m_prim_color = m_prim_color; - userdata->m_env_color = m_env_color; - userdata->m_fog_color = m_fog_color; - userdata->m_prim_alpha = m_prim_alpha; - userdata->m_env_alpha = m_env_alpha; - userdata->m_key_scale = m_key_scale; - userdata->m_lod_fraction = m_lod_fraction; - userdata->m_prim_lod_fraction = m_prim_lod_fraction; - userdata->m_k4 = m_k4; - userdata->m_k5 = m_k5; - - // Setup blender data for this scanline - set_blender_input(0, 0, &userdata->m_color_inputs.blender1a_rgb[0], &userdata->m_color_inputs.blender1b_a[0], m_other_modes.blend_m1a_0, m_other_modes.blend_m1b_0, userdata); - set_blender_input(0, 1, &userdata->m_color_inputs.blender2a_rgb[0], &userdata->m_color_inputs.blender2b_a[0], m_other_modes.blend_m2a_0, m_other_modes.blend_m2b_0, userdata); - set_blender_input(1, 0, &userdata->m_color_inputs.blender1a_rgb[1], &userdata->m_color_inputs.blender1b_a[1], m_other_modes.blend_m1a_1, m_other_modes.blend_m1b_1, userdata); - set_blender_input(1, 1, &userdata->m_color_inputs.blender2a_rgb[1], &userdata->m_color_inputs.blender2b_a[1], m_other_modes.blend_m2a_1, m_other_modes.blend_m2b_1, userdata); - - // Setup color combiner data for this scanline - set_suba_input_rgb(&userdata->m_color_inputs.combiner_rgbsub_a[0], m_combine.sub_a_rgb0, userdata); - set_subb_input_rgb(&userdata->m_color_inputs.combiner_rgbsub_b[0], m_combine.sub_b_rgb0, userdata); - set_mul_input_rgb(&userdata->m_color_inputs.combiner_rgbmul[0], m_combine.mul_rgb0, userdata); - set_add_input_rgb(&userdata->m_color_inputs.combiner_rgbadd[0], m_combine.add_rgb0, userdata); - set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphasub_a[0], m_combine.sub_a_a0, userdata); - set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphasub_b[0], m_combine.sub_b_a0, userdata); - set_mul_input_alpha(&userdata->m_color_inputs.combiner_alphamul[0], m_combine.mul_a0, userdata); - set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphaadd[0], m_combine.add_a0, userdata); - - set_suba_input_rgb(&userdata->m_color_inputs.combiner_rgbsub_a[1], m_combine.sub_a_rgb1, userdata); - set_subb_input_rgb(&userdata->m_color_inputs.combiner_rgbsub_b[1], m_combine.sub_b_rgb1, userdata); - set_mul_input_rgb(&userdata->m_color_inputs.combiner_rgbmul[1], m_combine.mul_rgb1, userdata); - set_add_input_rgb(&userdata->m_color_inputs.combiner_rgbadd[1], m_combine.add_rgb1, userdata); - set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphasub_a[1], m_combine.sub_a_a1, userdata); - set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphasub_b[1], m_combine.sub_b_a1, userdata); - set_mul_input_alpha(&userdata->m_color_inputs.combiner_alphamul[1], m_combine.mul_a1, userdata); - set_sub_input_alpha(&userdata->m_color_inputs.combiner_alphaadd[1], m_combine.add_a1, userdata); - } - - if (spix == 3) - { - spans[spanidx].startx = *startx; - spans[spanidx].stopx = *endx; - ((this)->*(m_compute_cvg[flip]))(spans, majorx, minorx, majorxint, minorxint, j, yh, yl, ycur >> 2); - } - - if (spix == ldflag) - { - ((rdp_span_aux*)spans[spanidx].userdata)->m_unscissored_rx = xend; - xfrac = ((xright >> 8) & 0xff); - spans[spanidx].param[SPAN_R].start = ((r >> 9) << 9) + drdiff - (xfrac * drdxh); - spans[spanidx].param[SPAN_G].start = ((g >> 9) << 9) + dgdiff - (xfrac * dgdxh); - spans[spanidx].param[SPAN_B].start = ((b >> 9) << 9) + dbdiff - (xfrac * dbdxh); - spans[spanidx].param[SPAN_A].start = ((a >> 9) << 9) + dadiff - (xfrac * dadxh); - spans[spanidx].param[SPAN_S].start = (((s >> 9) << 9) + dsdiff - (xfrac * dsdxh)) & ~0x1f; - spans[spanidx].param[SPAN_T].start = (((t >> 9) << 9) + dtdiff - (xfrac * dtdxh)) & ~0x1f; - spans[spanidx].param[SPAN_W].start = (((w >> 9) << 9) + dwdiff - (xfrac * dwdxh)) & ~0x1f; - spans[spanidx].param[SPAN_Z].start = ((z >> 9) << 9) + dzdiff - (xfrac * dzdxh); - } - } - - if (spix == 3) - { - r += drde; - g += dgde; - b += dbde; - a += dade; - s += dsde; - t += dtde; - w += dwde; - z += dzde; - } - xleft += xleft_inc; - xright += xright_inc; - } - - if(!new_object && valid) - { - render_spans(yh >> 2, yl >> 2, tilenum, flip ? true : false, spans, rect, object); - } - m_aux_buf_ptr = 0; // Spans can be reused once render completes - //wait("draw_triangle"); -} - -/*****************************************************************************/ - -//////////////////////// -// RDP COMMANDS -//////////////////////// - -void n64_rdp::triangle(uint64_t *cmd_buf, bool shade, bool texture, bool zbuffer) -{ - draw_triangle(cmd_buf, shade, texture, zbuffer, false); - m_pipe_clean = false; -} - -void n64_rdp::cmd_tex_rect(uint64_t *cmd_buf) -{ - const uint64_t w1 = cmd_buf[0]; - const uint64_t w2 = cmd_buf[1]; - - const uint64_t tilenum = (w1 >> 24) & 0x7; - const uint64_t xh = (w1 >> 12) & 0xfff; - const uint64_t xl = (w1 >> 44) & 0xfff; - const uint64_t yh = (w1 >> 0) & 0xfff; - uint64_t yl = (w1 >> 32) & 0xfff; - - const uint64_t s = (w2 >> 48) & 0xffff; - const uint64_t t = (w2 >> 32) & 0xffff; - const uint64_t dsdx = SIGN16((w2 >> 16) & 0xffff); - const uint64_t dtdy = SIGN16((w2 >> 0) & 0xffff); - - if (m_other_modes.cycle_type == CYCLE_TYPE_FILL || m_other_modes.cycle_type == CYCLE_TYPE_COPY) - { - yl |= 3; - } - - const uint64_t xlint = (xl >> 2) & 0x3ff; - const uint64_t xhint = (xh >> 2) & 0x3ff; - - uint64_t* ewdata = m_temp_rect_data; - ewdata[0] = ((uint64_t)0x24 << 56) | ((0x80L | tilenum) << 48) | (yl << 32) | (yl << 16) | yh; // command, flipped, tile, yl - ewdata[1] = (xlint << 48) | ((xl & 3) << 46); // xl, xl frac, dxldy (0), dxldy frac (0) - ewdata[2] = (xhint << 48) | ((xh & 3) << 46); // xh, xh frac, dxhdy (0), dxhdy frac (0) - ewdata[3] = (xlint << 48) | ((xl & 3) << 46); // xm, xm frac, dxmdy (0), dxmdy frac (0) - memset(&ewdata[4], 0, 8 * sizeof(uint64_t)); // shade - ewdata[12] = (s << 48) | (t << 32); // s, t, w (0) - ewdata[13] = (dsdx >> 5) << 48; // dsdx, dtdx, dwdx (0) - ewdata[14] = 0; // s frac (0), t frac (0), w frac (0) - ewdata[15] = (dsdx & 0x1f) << 59; // dsdx frac, dtdx frac, dwdx frac (0) - ewdata[16] = ((dtdy >> 5) & 0xffff) << 32; // dsde, dtde, dwde (0) - ewdata[17] = ((dtdy >> 5) & 0xffff) << 32; // dsdy, dtdy, dwdy (0) - ewdata[18] = ((dtdy & 0x1f) << 11) << 32; // dsde frac, dtde frac, dwde frac (0) - ewdata[19] = ((dtdy & 0x1f) << 11) << 32; // dsdy frac, dtdy frac, dwdy frac (0) - // ewdata[40-43] = 0; // depth - - draw_triangle(cmd_buf, true, true, false, true); -} - -void n64_rdp::cmd_tex_rect_flip(uint64_t *cmd_buf) -{ - const uint64_t w1 = cmd_buf[0]; - const uint64_t w2 = cmd_buf[1]; - - const uint64_t tilenum = (w1 >> 24) & 0x7; - const uint64_t xh = (w1 >> 12) & 0xfff; - const uint64_t xl = (w1 >> 44) & 0xfff; - const uint64_t yh = (w1 >> 0) & 0xfff; - uint64_t yl = (w1 >> 32) & 0xfff; - - const uint64_t s = (w2 >> 48) & 0xffff; - const uint64_t t = (w2 >> 32) & 0xffff; - const uint64_t dsdx = SIGN16((w2 >> 16) & 0xffff); - const uint64_t dtdy = SIGN16((w2 >> 0) & 0xffff); - - if (m_other_modes.cycle_type == CYCLE_TYPE_FILL || m_other_modes.cycle_type == CYCLE_TYPE_COPY) - { - yl |= 3; - } - - const uint64_t xlint = (xl >> 2) & 0x3ff; - const uint64_t xhint = (xh >> 2) & 0x3ff; - - uint64_t* ewdata = m_temp_rect_data; - ewdata[0] = ((uint64_t)0x25 << 56) | ((0x80L | tilenum) << 48) | (yl << 32) | (yl << 16) | yh; // command, flipped, tile, yl - ewdata[1] = (xlint << 48) | ((xl & 3) << 46); // xl, xl frac, dxldy (0), dxldy frac (0) - ewdata[2] = (xhint << 48) | ((xh & 3) << 46); // xh, xh frac, dxhdy (0), dxhdy frac (0) - ewdata[3] = (xlint << 48) | ((xl & 3) << 46); // xm, xm frac, dxmdy (0), dxmdy frac (0) - memset(&ewdata[4], 0, 8 * sizeof(uint64_t)); // shade - ewdata[12] = (s << 48) | (t << 32); // s, t, w (0) - ewdata[13] = ((dtdy >> 5) & 0xffff) << 32; // dsdx, dtdx, dwdx (0) - ewdata[14] = 0; // s frac (0), t frac (0), w frac (0) - ewdata[15] = ((dtdy & 0x1f) << 43); // dsdx frac, dtdx frac, dwdx frac (0) - ewdata[16] = (dsdx >> 5) << 48; // dsde, dtde, dwde (0) - ewdata[17] = (dsdx >> 5) << 48; // dsdy, dtdy, dwdy (0) - ewdata[18] = (dsdx & 0x1f) << 59; // dsde frac, dtde frac, dwde frac (0) - ewdata[19] = (dsdx & 0x1f) << 59; // dsdy frac, dtdy frac, dwdy frac (0) - - draw_triangle(cmd_buf, true, true, false, true); -} - -void n64_rdp::cmd_sync_load(uint64_t *cmd_buf) -{ - //wait("SyncLoad"); -} - -void n64_rdp::cmd_sync_pipe(uint64_t *cmd_buf) -{ - //wait("SyncPipe"); -} - -void n64_rdp::cmd_sync_tile(uint64_t *cmd_buf) -{ - //wait("SyncTile"); -} - -void n64_rdp::cmd_sync_full(uint64_t *cmd_buf) -{ - //wait("SyncFull"); - m_n64_periphs->dp_full_sync(); -} - -void n64_rdp::cmd_set_key_gb(uint64_t *cmd_buf) -{ - m_key_scale.set_b(uint32_t(cmd_buf[0] >> 0) & 0xff); - m_key_scale.set_g(uint32_t(cmd_buf[0] >> 16) & 0xff); -} - -void n64_rdp::cmd_set_key_r(uint64_t *cmd_buf) -{ - m_key_scale.set_r(uint32_t(cmd_buf[0] & 0xff)); -} - -void n64_rdp::cmd_set_fill_color32(uint64_t *cmd_buf) -{ - //wait("SetFillColor"); - m_fill_color = (uint32_t)cmd_buf[0]; -} - -void n64_rdp::cmd_set_convert(uint64_t *cmd_buf) -{ - const uint64_t w1 = cmd_buf[0]; - - if(!m_pipe_clean) { m_pipe_clean = true; wait("SetConvert"); } - int32_t k0 = int32_t(w1 >> 45) & 0x1ff; - int32_t k1 = int32_t(w1 >> 36) & 0x1ff; - int32_t k2 = int32_t(w1 >> 27) & 0x1ff; - int32_t k3 = int32_t(w1 >> 18) & 0x1ff; - int32_t k4 = int32_t(w1 >> 9) & 0x1ff; - int32_t k5 = int32_t(w1 >> 0) & 0x1ff; - - k0 = (SIGN9(k0) << 1) + 1; - k1 = (SIGN9(k1) << 1) + 1; - k2 = (SIGN9(k2) << 1) + 1; - k3 = (SIGN9(k3) << 1) + 1; - - set_yuv_factors(rgbaint_t(0, k0, k2, 0), rgbaint_t(0, 0, k1, k3), rgbaint_t(k4, k4, k4, k4), rgbaint_t(k5, k5, k5, k5)); -} - -void n64_rdp::cmd_set_scissor(uint64_t *cmd_buf) -{ - const uint64_t w1 = cmd_buf[0]; - - m_scissor.m_xh = ((w1 >> 44) & 0xfff) >> 2; - m_scissor.m_yh = ((w1 >> 32) & 0xfff) >> 2; - m_scissor.m_xl = ((w1 >> 12) & 0xfff) >> 2; - m_scissor.m_yl = ((w1 >> 0) & 0xfff) >> 2; - - // TODO: handle f & o? -} - -void n64_rdp::cmd_set_prim_depth(uint64_t *cmd_buf) -{ - const uint64_t w1 = cmd_buf[0]; - m_misc_state.m_primitive_z = (uint16_t)(w1 >> 16) & 0x7fff; - m_misc_state.m_primitive_dz = (uint16_t)(w1 >> 32); -} - -void n64_rdp::cmd_set_other_modes(uint64_t *cmd_buf) -{ - const uint64_t w1 = cmd_buf[0]; - //wait("SetOtherModes"); - m_other_modes.cycle_type = (w1 >> 52) & 0x3; // 01 - m_other_modes.persp_tex_en = (w1 >> 51) & 1; // 1 - m_other_modes.detail_tex_en = (w1 >> 50) & 1; // 0 - m_other_modes.sharpen_tex_en = (w1 >> 49) & 1; // 0 - m_other_modes.tex_lod_en = (w1 >> 48) & 1; // 0 - m_other_modes.en_tlut = (w1 >> 47) & 1; // 0 - m_other_modes.tlut_type = (w1 >> 46) & 1; // 0 - m_other_modes.sample_type = (w1 >> 45) & 1; // 1 - m_other_modes.mid_texel = (w1 >> 44) & 1; // 0 - m_other_modes.bi_lerp0 = (w1 >> 43) & 1; // 1 - m_other_modes.bi_lerp1 = (w1 >> 42) & 1; // 1 - m_other_modes.convert_one = (w1 >> 41) & 1; // 0 - m_other_modes.key_en = (w1 >> 40) & 1; // 0 - m_other_modes.rgb_dither_sel = (w1 >> 38) & 0x3; // 00 - m_other_modes.alpha_dither_sel = (w1 >> 36) & 0x3; // 01 - m_other_modes.blend_m1a_0 = (w1 >> 30) & 0x3; // 11 - m_other_modes.blend_m1a_1 = (w1 >> 28) & 0x3; // 00 - m_other_modes.blend_m1b_0 = (w1 >> 26) & 0x3; // 10 - m_other_modes.blend_m1b_1 = (w1 >> 24) & 0x3; // 00 - m_other_modes.blend_m2a_0 = (w1 >> 22) & 0x3; // 00 - m_other_modes.blend_m2a_1 = (w1 >> 20) & 0x3; // 01 - m_other_modes.blend_m2b_0 = (w1 >> 18) & 0x3; // 00 - m_other_modes.blend_m2b_1 = (w1 >> 16) & 0x3; // 01 - m_other_modes.force_blend = (w1 >> 14) & 1; // 0 - m_other_modes.blend_shift = m_other_modes.force_blend ? 5 : 2; - m_other_modes.alpha_cvg_select = (w1 >> 13) & 1; // 1 - m_other_modes.cvg_times_alpha = (w1 >> 12) & 1; // 0 - m_other_modes.z_mode = (w1 >> 10) & 0x3; // 00 - m_other_modes.cvg_dest = (w1 >> 8) & 0x3; // 00 - m_other_modes.color_on_cvg = (w1 >> 7) & 1; // 0 - m_other_modes.image_read_en = (w1 >> 6) & 1; // 1 - m_other_modes.z_update_en = (w1 >> 5) & 1; // 1 - m_other_modes.z_compare_en = (w1 >> 4) & 1; // 1 - m_other_modes.antialias_en = (w1 >> 3) & 1; // 1 - m_other_modes.z_source_sel = (w1 >> 2) & 1; // 0 - m_other_modes.dither_alpha_en = (w1 >> 1) & 1; // 0 - m_other_modes.alpha_compare_en = (w1 >> 0) & 1; // 0 - m_other_modes.alpha_dither_mode = (m_other_modes.alpha_compare_en << 1) | m_other_modes.dither_alpha_en; -} - -void n64_rdp::cmd_load_tlut(uint64_t *cmd_buf) -{ - //wait("LoadTLUT"); - n64_tile_t* tile = m_tiles; - const uint64_t w1 = cmd_buf[0]; - - const int32_t tilenum = (w1 >> 24) & 0x7; - const int32_t sl = tile[tilenum].sl = int32_t(w1 >> 44) & 0xfff; - const int32_t tl = tile[tilenum].tl = int32_t(w1 >> 32) & 0xfff; - const int32_t sh = tile[tilenum].sh = int32_t(w1 >> 12) & 0xfff; - const int32_t th = tile[tilenum].th = int32_t(w1 >> 0) & 0xfff; - - if (tl != th) - { - fatalerror("Load tlut: tl=%d, th=%d\n",tl,th); - } - - m_capture.data_begin(); - - const int32_t count = ((sh >> 2) - (sl >> 2) + 1) << 2; - - switch (m_misc_state.m_ti_size) - { - case PIXEL_SIZE_16BIT: - { - if (tile[tilenum].tmem < 256) - { - fatalerror("rdp_load_tlut: loading tlut into low half at %d qwords\n",tile[tilenum].tmem); - } - int32_t srcstart = (m_misc_state.m_ti_address + (tl >> 2) * (m_misc_state.m_ti_width << 1) + (sl >> 1)) >> 1; - int32_t dststart = tile[tilenum].tmem << 2; - uint16_t* dst = get_tmem16(); - - for (int32_t i = 0; i < count; i += 4) - { - if (dststart < 2048) - { - dst[dststart] = U_RREADIDX16(srcstart); - m_capture.data_block()->put16(dst[dststart]); - dst[dststart + 1] = dst[dststart]; - dst[dststart + 2] = dst[dststart]; - dst[dststart + 3] = dst[dststart]; - dststart += 4; - srcstart += 1; - } - } - break; - } - default: fatalerror("RDP: load_tlut: size = %d\n", m_misc_state.m_ti_size); - } - - m_capture.data_end(); - - m_tiles[tilenum].sth = rgbaint_t(m_tiles[tilenum].sh, m_tiles[tilenum].sh, m_tiles[tilenum].th, m_tiles[tilenum].th); - m_tiles[tilenum].stl = rgbaint_t(m_tiles[tilenum].sl, m_tiles[tilenum].sl, m_tiles[tilenum].tl, m_tiles[tilenum].tl); -} - -void n64_rdp::cmd_set_tile_size(uint64_t *cmd_buf) -{ - //wait("SetTileSize"); - const uint64_t w1 = cmd_buf[0]; - const int32_t tilenum = int32_t(w1 >> 24) & 0x7; - - m_tiles[tilenum].sl = int32_t(w1 >> 44) & 0xfff; - m_tiles[tilenum].tl = int32_t(w1 >> 32) & 0xfff; - m_tiles[tilenum].sh = int32_t(w1 >> 12) & 0xfff; - m_tiles[tilenum].th = int32_t(w1 >> 0) & 0xfff; - - m_tiles[tilenum].sth = rgbaint_t(m_tiles[tilenum].sh, m_tiles[tilenum].sh, m_tiles[tilenum].th, m_tiles[tilenum].th); - m_tiles[tilenum].stl = rgbaint_t(m_tiles[tilenum].sl, m_tiles[tilenum].sl, m_tiles[tilenum].tl, m_tiles[tilenum].tl); -} - -void n64_rdp::cmd_load_block(uint64_t *cmd_buf) -{ - //wait("LoadBlock"); - n64_tile_t* tile = m_tiles; - const uint64_t w1 = cmd_buf[0]; - - const uint8_t tilenum = uint8_t(w1 >> 24) & 0x7; - uint16_t* tc = get_tmem16(); - - int32_t sl, tl, sh, dxt; - tile[tilenum].sl = sl = int32_t((w1 >> 44) & 0xfff); - tile[tilenum].tl = tl = int32_t((w1 >> 32) & 0xfff); - tile[tilenum].sh = sh = int32_t((w1 >> 12) & 0xfff); - tile[tilenum].th = dxt = int32_t((w1 >> 0) & 0xfff); - - /*uint16_t tl_masked = tl & 0x3ff; - - int32_t load_edge_walker_data[10] = { - ((cmd_buf[0] >> 32) & 0xff000000) | (0x10 << 19) | (tilenum << 16) | ((tl_masked << 2) | 3), - (((tl_masked << 2) | 3) << 16) | (tl_masked << 2), - sh << 16, - sl << 16, - sh << 16, - ((sl << 3) << 16) | (tl << 3), - (dxt & 0xff) << 8, - ((0x80 >> wstate->ti_size) << 16) | (dxt >> 8), - 0x20, - 0x20 - }; - - do_load_edge_walker(load_edge_walker_data);*/ - - int32_t width = (sh - sl) + 1; - - width = (width << m_misc_state.m_ti_size) >> 1; - if (width & 7) - { - width = (width & ~7) + 8; - } - width >>= 3; - - const int32_t tb = tile[tilenum].tmem << 2; - - const int32_t tiwinwords = (m_misc_state.m_ti_width << m_misc_state.m_ti_size) >> 2; - const int32_t slinwords = (sl << m_misc_state.m_ti_size) >> 2; - - const uint32_t src = (m_misc_state.m_ti_address >> 1) + (tl * tiwinwords) + slinwords; - - m_capture.data_begin(); - - if (dxt != 0) - { - int32_t j = 0; - int32_t t = 0; - int32_t oldt = 0; - - if (tile[tilenum].size != PIXEL_SIZE_32BIT && tile[tilenum].format != FORMAT_YUV) - { - for (int32_t i = 0; i < width; i ++) - { - oldt = t; - t = ((j >> 11) & 1) ? WORD_XOR_DWORD_SWAP : WORD_ADDR_XOR; - if (t != oldt) - { - i += tile[tilenum].line; - } - - int32_t ptr = tb + (i << 2); - int32_t srcptr = src + (i << 2); - - tc[(ptr ^ t) & 0x7ff] = U_RREADIDX16(srcptr); - tc[((ptr + 1) ^ t) & 0x7ff] = U_RREADIDX16(srcptr + 1); - tc[((ptr + 2) ^ t) & 0x7ff] = U_RREADIDX16(srcptr + 2); - tc[((ptr + 3) ^ t) & 0x7ff] = U_RREADIDX16(srcptr + 3); - - m_capture.data_block()->put16(U_RREADIDX16(srcptr)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+1)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+2)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+3)); - - j += dxt; - } - } - else if (tile[tilenum].format == FORMAT_YUV) - { - for (int32_t i = 0; i < width; i ++) - { - oldt = t; - t = ((j >> 11) & 1) ? WORD_XOR_DWORD_SWAP : WORD_ADDR_XOR; - if (t != oldt) - { - i += tile[tilenum].line; - } - - int32_t ptr = ((tb + (i << 1)) ^ t) & 0x3ff; - int32_t srcptr = src + (i << 2); - - int32_t first = U_RREADIDX16(srcptr); - int32_t sec = U_RREADIDX16(srcptr + 1); - tc[ptr] = ((first >> 8) << 8) | (sec >> 8); - tc[ptr | 0x400] = ((first & 0xff) << 8) | (sec & 0xff); - - ptr = ((tb + (i << 1) + 1) ^ t) & 0x3ff; - first = U_RREADIDX16(srcptr + 2); - sec = U_RREADIDX16(srcptr + 3); - tc[ptr] = ((first >> 8) << 8) | (sec >> 8); - tc[ptr | 0x400] = ((first & 0xff) << 8) | (sec & 0xff); - - m_capture.data_block()->put16(U_RREADIDX16(srcptr)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+1)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+2)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+3)); - j += dxt; - } - } - else - { - for (int32_t i = 0; i < width; i ++) - { - oldt = t; - t = ((j >> 11) & 1) ? WORD_XOR_DWORD_SWAP : WORD_ADDR_XOR; - if (t != oldt) - i += tile[tilenum].line; - - int32_t ptr = ((tb + (i << 1)) ^ t) & 0x3ff; - int32_t srcptr = src + (i << 2); - tc[ptr] = U_RREADIDX16(srcptr); - tc[ptr | 0x400] = U_RREADIDX16(srcptr + 1); - - ptr = ((tb + (i << 1) + 1) ^ t) & 0x3ff; - tc[ptr] = U_RREADIDX16(srcptr + 2); - tc[ptr | 0x400] = U_RREADIDX16(srcptr + 3); - - m_capture.data_block()->put16(U_RREADIDX16(srcptr)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+1)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+2)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+3)); - - j += dxt; - } - } - tile[tilenum].th = tl + (j >> 11); - } - else - { - if (tile[tilenum].size != PIXEL_SIZE_32BIT && tile[tilenum].format != FORMAT_YUV) - { - for (int32_t i = 0; i < width; i ++) - { - int32_t ptr = tb + (i << 2); - int32_t srcptr = src + (i << 2); - tc[(ptr ^ WORD_ADDR_XOR) & 0x7ff] = U_RREADIDX16(srcptr); - tc[((ptr + 1) ^ WORD_ADDR_XOR) & 0x7ff] = U_RREADIDX16(srcptr + 1); - tc[((ptr + 2) ^ WORD_ADDR_XOR) & 0x7ff] = U_RREADIDX16(srcptr + 2); - tc[((ptr + 3) ^ WORD_ADDR_XOR) & 0x7ff] = U_RREADIDX16(srcptr + 3); - - m_capture.data_block()->put16(U_RREADIDX16(srcptr)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+1)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+2)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+3)); - } - } - else if (tile[tilenum].format == FORMAT_YUV) - { - for (int32_t i = 0; i < width; i ++) - { - int32_t ptr = ((tb + (i << 1)) ^ WORD_ADDR_XOR) & 0x3ff; - int32_t srcptr = src + (i << 2); - int32_t first = U_RREADIDX16(srcptr); - int32_t sec = U_RREADIDX16(srcptr + 1); - tc[ptr] = ((first >> 8) << 8) | (sec >> 8);//UV pair - tc[ptr | 0x400] = ((first & 0xff) << 8) | (sec & 0xff); - - ptr = ((tb + (i << 1) + 1) ^ WORD_ADDR_XOR) & 0x3ff; - first = U_RREADIDX16(srcptr + 2); - sec = U_RREADIDX16(srcptr + 3); - tc[ptr] = ((first >> 8) << 8) | (sec >> 8); - tc[ptr | 0x400] = ((first & 0xff) << 8) | (sec & 0xff); - - m_capture.data_block()->put16(U_RREADIDX16(srcptr)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+1)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+2)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+3)); - } - } - else - { - for (int32_t i = 0; i < width; i ++) - { - int32_t ptr = ((tb + (i << 1)) ^ WORD_ADDR_XOR) & 0x3ff; - int32_t srcptr = src + (i << 2); - tc[ptr] = U_RREADIDX16(srcptr); - tc[ptr | 0x400] = U_RREADIDX16(srcptr + 1); - - ptr = ((tb + (i << 1) + 1) ^ WORD_ADDR_XOR) & 0x3ff; - tc[ptr] = U_RREADIDX16(srcptr + 2); - tc[ptr | 0x400] = U_RREADIDX16(srcptr + 3); - - m_capture.data_block()->put16(U_RREADIDX16(srcptr)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+1)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+2)); - m_capture.data_block()->put16(U_RREADIDX16(srcptr+3)); - } - } - tile[tilenum].th = tl; - } - - m_capture.data_end(); - - m_tiles[tilenum].sth = rgbaint_t(m_tiles[tilenum].sh, m_tiles[tilenum].sh, m_tiles[tilenum].th, m_tiles[tilenum].th); - m_tiles[tilenum].stl = rgbaint_t(m_tiles[tilenum].sl, m_tiles[tilenum].sl, m_tiles[tilenum].tl, m_tiles[tilenum].tl); -} - -void n64_rdp::cmd_load_tile(uint64_t *cmd_buf) -{ - //wait("LoadTile"); - n64_tile_t* tile = m_tiles; - const uint64_t w1 = cmd_buf[0]; - const int32_t tilenum = int32_t(w1 >> 24) & 0x7; - - tile[tilenum].sl = int32_t(w1 >> 44) & 0xfff; - tile[tilenum].tl = int32_t(w1 >> 32) & 0xfff; - tile[tilenum].sh = int32_t(w1 >> 12) & 0xfff; - tile[tilenum].th = int32_t(w1 >> 0) & 0xfff; - - const int32_t sl = tile[tilenum].sl >> 2; - const int32_t tl = tile[tilenum].tl >> 2; - const int32_t sh = tile[tilenum].sh >> 2; - const int32_t th = tile[tilenum].th >> 2; - - const int32_t width = (sh - sl) + 1; - const int32_t height = (th - tl) + 1; -/* - int32_t topad; - if (m_misc_state.m_ti_size < 3) - { - topad = (width * m_misc_state.m_ti_size) & 0x7; - } - else - { - topad = (width << 2) & 0x7; - } - topad = 0; // ???? -*/ - - m_capture.data_begin(); - - switch (m_misc_state.m_ti_size) - { - case PIXEL_SIZE_8BIT: - { - const uint32_t src = m_misc_state.m_ti_address; - const int32_t tb = tile[tilenum].tmem << 3; - uint8_t* tc = get_tmem8(); - - for (int32_t j = 0; j < height; j++) - { - const int32_t tline = tb + ((tile[tilenum].line << 3) * j); - const int32_t s = ((j + tl) * m_misc_state.m_ti_width) + sl; - const int32_t xorval8 = ((j & 1) ? BYTE_XOR_DWORD_SWAP : BYTE_ADDR_XOR); - - for (int32_t i = 0; i < width; i++) - { - const uint8_t data = U_RREADADDR8(src + s + i); - m_capture.data_block()->put8(data); - tc[((tline + i) ^ xorval8) & 0xfff] = data; - } - } - break; - } - case PIXEL_SIZE_16BIT: - { - const uint32_t src = m_misc_state.m_ti_address >> 1; - uint16_t* tc = get_tmem16(); - - if (tile[tilenum].format != FORMAT_YUV) - { - for (int32_t j = 0; j < height; j++) - { - const int32_t tb = tile[tilenum].tmem << 2; - const int32_t tline = tb + ((tile[tilenum].line << 2) * j); - const int32_t s = ((j + tl) * m_misc_state.m_ti_width) + sl; - const int32_t xorval16 = (j & 1) ? WORD_XOR_DWORD_SWAP : WORD_ADDR_XOR; - - for (int32_t i = 0; i < width; i++) - { - const uint32_t taddr = (tline + i) ^ xorval16; - const uint16_t data = U_RREADIDX16(src + s + i); - m_capture.data_block()->put16(data); - tc[taddr & 0x7ff] = data; - } - } - } - else - { - for (int32_t j = 0; j < height; j++) - { - const int32_t tb = tile[tilenum].tmem << 3; - const int32_t tline = tb + ((tile[tilenum].line << 3) * j); - const int32_t s = ((j + tl) * m_misc_state.m_ti_width) + sl; - const int32_t xorval8 = (j & 1) ? BYTE_XOR_DWORD_SWAP : BYTE_ADDR_XOR; - - for (int32_t i = 0; i < width; i++) - { - uint32_t taddr = ((tline + i) ^ xorval8) & 0x7ff; - uint16_t yuvword = U_RREADIDX16(src + s + i); - m_capture.data_block()->put16(yuvword); - get_tmem8()[taddr] = yuvword >> 8; - get_tmem8()[taddr | 0x800] = yuvword & 0xff; - } - } - } - break; - } - case PIXEL_SIZE_32BIT: - { - const uint32_t src = m_misc_state.m_ti_address >> 2; - const int32_t tb = (tile[tilenum].tmem << 2); - uint16_t* tc16 = get_tmem16(); - - for (int32_t j = 0; j < height; j++) - { - const int32_t tline = tb + ((tile[tilenum].line << 2) * j); - - const int32_t s = ((j + tl) * m_misc_state.m_ti_width) + sl; - const int32_t xorval32cur = (j & 1) ? WORD_XOR_DWORD_SWAP : WORD_ADDR_XOR; - for (int32_t i = 0; i < width; i++) - { - uint32_t c = U_RREADIDX32(src + s + i); - m_capture.data_block()->put32(c); - uint32_t ptr = ((tline + i) ^ xorval32cur) & 0x3ff; - tc16[ptr] = c >> 16; - tc16[ptr | 0x400] = c & 0xffff; - } - } - break; - } - - default: fatalerror("RDP: load_tile: size = %d\n", m_misc_state.m_ti_size); - } - - m_capture.data_end(); - - m_tiles[tilenum].sth = rgbaint_t(m_tiles[tilenum].sh, m_tiles[tilenum].sh, m_tiles[tilenum].th, m_tiles[tilenum].th); - m_tiles[tilenum].stl = rgbaint_t(m_tiles[tilenum].sl, m_tiles[tilenum].sl, m_tiles[tilenum].tl, m_tiles[tilenum].tl); -} - -void n64_rdp::cmd_set_tile(uint64_t *cmd_buf) -{ - //wait("SetTile"); - const uint64_t w1 = cmd_buf[0]; - const int32_t tilenum = int32_t(w1 >> 24) & 0x7; - n64_tile_t* tex_tile = &m_tiles[tilenum]; - - tex_tile->format = int32_t(w1 >> 53) & 0x7; - tex_tile->size = int32_t(w1 >> 51) & 0x3; - tex_tile->line = int32_t(w1 >> 41) & 0x1ff; - tex_tile->tmem = int32_t(w1 >> 32) & 0x1ff; - tex_tile->palette = int32_t(w1 >> 20) & 0xf; - tex_tile->ct = int32_t(w1 >> 19) & 0x1; - tex_tile->mt = int32_t(w1 >> 18) & 0x1; - tex_tile->mask_t = int32_t(w1 >> 14) & 0xf; - tex_tile->shift_t = int32_t(w1 >> 10) & 0xf; - tex_tile->cs = int32_t(w1 >> 9) & 0x1; - tex_tile->ms = int32_t(w1 >> 8) & 0x1; - tex_tile->mask_s = int32_t(w1 >> 4) & 0xf; - tex_tile->shift_s = int32_t(w1 >> 0) & 0xf; - - tex_tile->lshift_s = (tex_tile->shift_s >= 11) ? (16 - tex_tile->shift_s) : 0; - tex_tile->rshift_s = (tex_tile->shift_s < 11) ? tex_tile->shift_s : 0; - tex_tile->lshift_t = (tex_tile->shift_t >= 11) ? (16 - tex_tile->shift_t) : 0; - tex_tile->rshift_t = (tex_tile->shift_t < 11) ? tex_tile->shift_t : 0; - tex_tile->wrapped_mask_s = (tex_tile->mask_s > 10 ? 10 : tex_tile->mask_s); - tex_tile->wrapped_mask_t = (tex_tile->mask_t > 10 ? 10 : tex_tile->mask_t); - tex_tile->wrapped_mask = rgbaint_t(tex_tile->wrapped_mask_s, tex_tile->wrapped_mask_s, tex_tile->wrapped_mask_t, tex_tile->wrapped_mask_t); - tex_tile->clamp_s = tex_tile->cs || !tex_tile->mask_s; - tex_tile->clamp_t = tex_tile->ct || !tex_tile->mask_t; - tex_tile->mm = rgbaint_t(tex_tile->ms ? ~0 : 0, tex_tile->ms ? ~0 : 0, tex_tile->mt ? ~0 : 0, tex_tile->mt ? ~0 : 0); - tex_tile->invmm = rgbaint_t(tex_tile->ms ? 0 : ~0, tex_tile->ms ? 0 : ~0, tex_tile->mt ? 0 : ~0, tex_tile->mt ? 0 : ~0); - tex_tile->mask = rgbaint_t(tex_tile->mask_s ? ~0 : 0, tex_tile->mask_s ? ~0 : 0, tex_tile->mask_t ? ~0 : 0, tex_tile->mask_t ? ~0 : 0); - tex_tile->invmask = rgbaint_t(tex_tile->mask_s ? 0 : ~0, tex_tile->mask_s ? 0 : ~0, tex_tile->mask_t ? 0 : ~0, tex_tile->mask_t ? 0 : ~0); - tex_tile->lshift = rgbaint_t(tex_tile->lshift_s, tex_tile->lshift_s, tex_tile->lshift_t, tex_tile->lshift_t); - tex_tile->rshift = rgbaint_t(tex_tile->rshift_s, tex_tile->rshift_s, tex_tile->rshift_t, tex_tile->rshift_t); - tex_tile->clamp_st = rgbaint_t(tex_tile->clamp_s ? ~0 : 0, tex_tile->clamp_s ? ~0 : 0, tex_tile->clamp_t ? ~0 : 0, tex_tile->clamp_t ? ~0 : 0); - - if (tex_tile->format == FORMAT_I && tex_tile->size > PIXEL_SIZE_8BIT) - { - tex_tile->format = FORMAT_RGBA; // Used by Supercross 2000 (in-game) - } - if (tex_tile->format == FORMAT_CI && tex_tile->size > PIXEL_SIZE_8BIT) - { - tex_tile->format = FORMAT_RGBA; // Used by Clay Fighter - Sculptor's Cut - } - - if (tex_tile->format == FORMAT_RGBA && tex_tile->size < PIXEL_SIZE_16BIT) - { - tex_tile->format = FORMAT_CI; // Used by Exterem-G2, Madden Football 64, and Rat Attack - } - - //m_pending_mode_block = true; -} - -void n64_rdp::cmd_fill_rect(uint64_t *cmd_buf) -{ - const uint64_t w1 = cmd_buf[0]; - //if(m_pending_mode_block) { wait("Block on pending mode-change"); m_pending_mode_block = false; } - const uint64_t xh = (w1 >> 12) & 0xfff; - const uint64_t xl = (w1 >> 44) & 0xfff; - const uint64_t yh = (w1 >> 0) & 0xfff; - uint64_t yl = (w1 >> 32) & 0xfff; - - if (m_other_modes.cycle_type == CYCLE_TYPE_FILL || m_other_modes.cycle_type == CYCLE_TYPE_COPY) - { - yl |= 3; - } - - const uint64_t xlint = (xl >> 2) & 0x3ff; - const uint64_t xhint = (xh >> 2) & 0x3ff; - - uint64_t* ewdata = m_temp_rect_data; - ewdata[0] = ((uint64_t)0x3680 << 48) | (yl << 32) | (yl << 16) | yh; // command, flipped, tile, yl, ym, yh - ewdata[1] = (xlint << 48) | ((xl & 3) << 46); // xl, xl frac, dxldy (0), dxldy frac (0) - ewdata[2] = (xhint << 48) | ((xh & 3) << 46); // xh, xh frac, dxhdy (0), dxhdy frac (0) - ewdata[3] = (xlint << 48) | ((xl & 3) << 46); // xm, xm frac, dxmdy (0), dxmdy frac (0) - memset(&ewdata[4], 0, 18 * sizeof(uint64_t));//shade, texture, depth - - draw_triangle(cmd_buf, false, false, false, true); -} - -void n64_rdp::cmd_set_fog_color(uint64_t *cmd_buf) -{ - const uint64_t w1 = cmd_buf[0]; - m_fog_color.set(uint8_t(w1), uint8_t(w1 >> 24), uint8_t(w1 >> 16), uint8_t(w1 >> 8)); -} - -void n64_rdp::cmd_set_blend_color(uint64_t *cmd_buf) -{ - const uint64_t w1 = cmd_buf[0]; - m_blend_color.set(uint8_t(w1), uint8_t(w1 >> 24), uint8_t(w1 >> 16), uint8_t(w1 >> 8)); -} - -void n64_rdp::cmd_set_prim_color(uint64_t *cmd_buf) -{ - const uint64_t w1 = cmd_buf[0]; - m_misc_state.m_min_level = uint32_t(w1 >> 40) & 0x1f; - const uint8_t prim_lod_fraction(w1 >> 32); - m_prim_lod_fraction.set(prim_lod_fraction, prim_lod_fraction, prim_lod_fraction, prim_lod_fraction); - - const uint8_t alpha(w1); - m_prim_color.set(alpha, uint8_t(w1 >> 24), uint8_t(w1 >> 16), uint8_t(w1 >> 8)); - m_prim_alpha.set(alpha, alpha, alpha, alpha); -} - -void n64_rdp::cmd_set_env_color(uint64_t *cmd_buf) -{ - const uint64_t w1 = cmd_buf[0]; - const uint8_t alpha(w1); - m_env_color.set(alpha, uint8_t(w1 >> 24), uint8_t(w1 >> 16), uint8_t(w1 >> 8)); - m_env_alpha.set(alpha, alpha, alpha, alpha); -} - -void n64_rdp::cmd_set_combine(uint64_t *cmd_buf) -{ - const uint64_t w1 = cmd_buf[0]; - m_combine.sub_a_rgb0 = uint32_t(w1 >> 52) & 0xf; - m_combine.mul_rgb0 = uint32_t(w1 >> 47) & 0x1f; - m_combine.sub_a_a0 = uint32_t(w1 >> 44) & 0x7; - m_combine.mul_a0 = uint32_t(w1 >> 41) & 0x7; - m_combine.sub_a_rgb1 = uint32_t(w1 >> 37) & 0xf; - m_combine.mul_rgb1 = uint32_t(w1 >> 32) & 0x1f; - - m_combine.sub_b_rgb0 = uint32_t(w1 >> 28) & 0xf; - m_combine.sub_b_rgb1 = uint32_t(w1 >> 24) & 0xf; - m_combine.sub_a_a1 = uint32_t(w1 >> 21) & 0x7; - m_combine.mul_a1 = uint32_t(w1 >> 18) & 0x7; - m_combine.add_rgb0 = uint32_t(w1 >> 15) & 0x7; - m_combine.sub_b_a0 = uint32_t(w1 >> 12) & 0x7; - m_combine.add_a0 = uint32_t(w1 >> 9) & 0x7; - m_combine.add_rgb1 = uint32_t(w1 >> 6) & 0x7; - m_combine.sub_b_a1 = uint32_t(w1 >> 3) & 0x7; - m_combine.add_a1 = uint32_t(w1 >> 0) & 0x7; - - /*static const char *s_suba_rgb[16] = { "Combined", "TEX0C", "TEX1C", "PRIMC", "SHADEC", "ENVC", "ONE", "NOISE", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO" }; - static const char *s_subb_rgb[16] = { "Combined", "TEX0C", "TEX1C", "PRIMC", "SHADEC", "ENVC", "KEYC", "K4", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO" }; - static const char *s_mul_rgb[32] = { "Combined", "TEX0C", "TEX1C", "PRIMC", "SHADEC", "ENVC", "KEYS", "CombinedA", "TEX0A", "TEX1A", "PRIMA", "SHADEA", "ENVA", "LODF", "PLODF", "K5", - "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO" }; - static const char *s_add_rgb[8] = { "Combined", "TEX0C", "TEX1C", "PRIMC", "SHADEC", "ENVC", "ONE", "ZERO" }; - static const char *s_sub_a[16] = { "CombinedA", "TEX0A", "TEX1A", "PRIMA", "SHADEA", "ENVA", "ONE", "ZERO" }; - static const char *s_mul_a[16] = { "LODF", "TEX0A", "TEX1A", "PRIMA", "SHADEA", "ENVA", "PLODF", "ZERO" }; - printf("Cycle 0, Color: (%s - %s) * %s + %s\n", s_suba_rgb[m_combine.sub_a_rgb0], s_subb_rgb[m_combine.sub_b_rgb0], s_mul_rgb[m_combine.mul_rgb0], s_add_rgb[m_combine.add_rgb0]); - printf("Cycle 0, Alpha: (%s - %s) * %s + %s\n", s_sub_a[m_combine.sub_a_a0], s_sub_a[m_combine.sub_b_a0], s_mul_a[m_combine.mul_a0], s_add_rgb[m_combine.add_a0]); - printf("Cycle 1, Color: (%s - %s) * %s + %s\n", s_suba_rgb[m_combine.sub_a_rgb1], s_subb_rgb[m_combine.sub_b_rgb1], s_mul_rgb[m_combine.mul_rgb1], s_add_rgb[m_combine.add_rgb1]); - printf("Cycle 1, Alpha: (%s - %s) * %s + %s\n\n", s_sub_a[m_combine.sub_a_a1], s_sub_a[m_combine.sub_b_a1], s_mul_a[m_combine.mul_a1], s_add_rgb[m_combine.add_a1]);*/ -} - -void n64_rdp::cmd_set_texture_image(uint64_t *cmd_buf) -{ - const uint64_t w1 = cmd_buf[0]; - m_misc_state.m_ti_format = uint32_t(w1 >> 53) & 0x7; - m_misc_state.m_ti_size = uint32_t(w1 >> 51) & 0x3; - m_misc_state.m_ti_width = (uint32_t(w1 >> 32) & 0x3ff) + 1; - m_misc_state.m_ti_address = uint32_t(w1) & 0x01ffffff; -} - -void n64_rdp::cmd_set_mask_image(uint64_t *cmd_buf) -{ - //wait("SetMaskImage"); - const uint64_t w1 = cmd_buf[0]; - m_misc_state.m_zb_address = uint32_t(w1) & 0x01ffffff; -} - -void n64_rdp::cmd_set_color_image(uint64_t *cmd_buf) -{ - //wait("SetColorImage"); - const uint64_t w1 = cmd_buf[0]; - m_misc_state.m_fb_format = uint32_t(w1 >> 53) & 0x7; - m_misc_state.m_fb_size = uint32_t(w1 >> 51) & 0x3; - m_misc_state.m_fb_width = (uint32_t(w1 >> 32) & 0x3ff) + 1; - m_misc_state.m_fb_address = uint32_t(w1) & 0x01ffffff; -} - -/*****************************************************************************/ - -void n64_rdp::cmd_noop(uint64_t *cmd_buf) -{ - // Do nothing -} - - -void n64_rdp::process_command_list() -{ - int32_t length = m_end - m_current; - - if (length <= 0) - { - m_current = m_end; - return; - } - - //printf("length: %08x\n", (uint32_t)length); fflush(stdout); - - set_status(get_status() &~ DP_STATUS_FREEZE); - - uint64_t curr_cmd_buf[176]; - - while (m_current < m_end) - { - uint32_t start = m_current; - uint32_t buf_index = 0; - curr_cmd_buf[buf_index++] = read_data(m_current & 0x1fffffff); - uint8_t cmd = (curr_cmd_buf[0] >> 56) & 0x3f; - - if ((m_end - m_current) < s_rdp_command_length[cmd]) - { - // Not enough data, continue waiting. - break; - } - m_current += 8; - - while ((buf_index << 3) < s_rdp_command_length[cmd]) - { - curr_cmd_buf[buf_index++] = read_data(m_current & 0x1fffffff); - m_current += 8; - } - - m_capture.command(&curr_cmd_buf[0], s_rdp_command_length[cmd] / 8); - - if (LOG_RDP_EXECUTION) - { - char string[4000]; - disassemble(curr_cmd_buf, string); - - fprintf(rdp_exec, "%08X: %08X%08X %s\n", start, (uint32_t)(curr_cmd_buf[0] >> 32), (uint32_t)curr_cmd_buf[0], string); - fflush(rdp_exec); - } - - // execute the command - switch(cmd) - { - case 0x00: cmd_noop(curr_cmd_buf); break; - - case 0x08: triangle(curr_cmd_buf, false, false, false); break; - case 0x09: triangle(curr_cmd_buf, false, false, true); break; - case 0x0a: triangle(curr_cmd_buf, false, true, false); break; - case 0x0b: triangle(curr_cmd_buf, false, true, true); break; - case 0x0c: triangle(curr_cmd_buf, true, false, false); break; - case 0x0d: triangle(curr_cmd_buf, true, false, true); break; - case 0x0e: triangle(curr_cmd_buf, true, true, false); break; - case 0x0f: triangle(curr_cmd_buf, true, true, true); break; - - case 0x24: cmd_tex_rect(curr_cmd_buf); break; - case 0x25: cmd_tex_rect_flip(curr_cmd_buf); break; - - case 0x26: cmd_sync_load(curr_cmd_buf); break; - case 0x27: cmd_sync_pipe(curr_cmd_buf); break; - case 0x28: cmd_sync_tile(curr_cmd_buf); break; - case 0x29: cmd_sync_full(curr_cmd_buf); break; - - case 0x2a: cmd_set_key_gb(curr_cmd_buf); break; - case 0x2b: cmd_set_key_r(curr_cmd_buf); break; - - case 0x2c: cmd_set_convert(curr_cmd_buf); break; - case 0x3c: cmd_set_combine(curr_cmd_buf); break; - case 0x2d: cmd_set_scissor(curr_cmd_buf); break; - case 0x2e: cmd_set_prim_depth(curr_cmd_buf); break; - case 0x2f: cmd_set_other_modes(curr_cmd_buf);break; - - case 0x30: cmd_load_tlut(curr_cmd_buf); break; - case 0x33: cmd_load_block(curr_cmd_buf); break; - case 0x34: cmd_load_tile(curr_cmd_buf); break; - - case 0x32: cmd_set_tile_size(curr_cmd_buf); break; - case 0x35: cmd_set_tile(curr_cmd_buf); break; - - case 0x36: cmd_fill_rect(curr_cmd_buf); break; - - case 0x37: cmd_set_fill_color32(curr_cmd_buf); break; - case 0x38: cmd_set_fog_color(curr_cmd_buf); break; - case 0x39: cmd_set_blend_color(curr_cmd_buf);break; - case 0x3a: cmd_set_prim_color(curr_cmd_buf); break; - case 0x3b: cmd_set_env_color(curr_cmd_buf); break; - - case 0x3d: cmd_set_texture_image(curr_cmd_buf); break; - case 0x3e: cmd_set_mask_image(curr_cmd_buf); break; - case 0x3f: cmd_set_color_image(curr_cmd_buf); break; - } - }; -} - -/*****************************************************************************/ - -n64_rdp::n64_rdp(n64_state &state, uint32_t* rdram, uint32_t* dmem) : poly_manager(state.machine()) -{ - ignore = false; - dolog = false; - - m_rdram = rdram; - m_dmem = dmem; - - m_aux_buf_ptr = 0; - m_aux_buf = nullptr; - m_pipe_clean = true; - - m_pending_mode_block = false; - - m_start = 0; - m_end = 0; - m_current = 0; - m_status = 0x88; - - m_one.set(0xff, 0xff, 0xff, 0xff); - m_zero.set(0, 0, 0, 0); - - m_tmem = nullptr; - - m_machine = nullptr; - m_n64_periphs = nullptr; - - //memset(m_hidden_bits, 3, 8388608); - - m_prim_lod_fraction.set(0, 0, 0, 0); - z_build_com_table(); - - memset(m_temp_rect_data, 0, sizeof(uint32_t) * 0x1000); - - for (int32_t i = 0; i < 0x4000; i++) - { - uint32_t exponent = (i >> 11) & 7; - uint32_t mantissa = i & 0x7ff; - m_z_complete_dec_table[i] = ((mantissa << m_z_dec_table[exponent].shift) + m_z_dec_table[exponent].add) & 0x3fffff; - } - - precalc_cvmask_derivatives(); - - for(int32_t i = 0; i < 0x200; i++) - { - switch((i >> 7) & 3) - { - case 0: - case 1: - s_special_9bit_clamptable[i] = i & 0xff; - break; - case 2: - s_special_9bit_clamptable[i] = 0xff; - break; - case 3: - s_special_9bit_clamptable[i] = 0; - break; - } - } - - for(int32_t i = 0; i < 32; i++) - { - m_replicated_rgba[i] = (i << 3) | ((i >> 2) & 7); - } - - for(int32_t i = 0; i < 0x10000; i++) - { - m_dzpix_normalize[i] = (uint16_t)normalize_dzpix(i & 0xffff); - } - - m_compute_cvg[0] = &n64_rdp::compute_cvg_noflip; - m_compute_cvg[1] = &n64_rdp::compute_cvg_flip; - - m_write_pixel[0] = &n64_rdp::write_pixel4; - m_write_pixel[1] = &n64_rdp::write_pixel8; - m_write_pixel[2] = &n64_rdp::write_pixel16; - m_write_pixel[3] = &n64_rdp::write_pixel32; - - m_read_pixel[0] = &n64_rdp::read_pixel4; - m_read_pixel[1] = &n64_rdp::read_pixel8; - m_read_pixel[2] = &n64_rdp::read_pixel16; - m_read_pixel[3] = &n64_rdp::read_pixel32; - - m_copy_pixel[0] = &n64_rdp::copy_pixel4; - m_copy_pixel[1] = &n64_rdp::copy_pixel8; - m_copy_pixel[2] = &n64_rdp::copy_pixel16; - m_copy_pixel[3] = &n64_rdp::copy_pixel32; - - m_fill_pixel[0] = &n64_rdp::fill_pixel4; - m_fill_pixel[1] = &n64_rdp::fill_pixel8; - m_fill_pixel[2] = &n64_rdp::fill_pixel16; - m_fill_pixel[3] = &n64_rdp::fill_pixel32; -} - -void n64_rdp::render_spans(int32_t start, int32_t end, int32_t tilenum, bool flip, extent_t* spans, bool rect, rdp_poly_state* object) -{ - const int32_t clipy1 = m_scissor.m_yh; - const int32_t clipy2 = m_scissor.m_yl; - const rectangle clip(m_scissor.m_xh, m_scissor.m_xl, m_scissor.m_yh, m_scissor.m_yl); - - int32_t offset = 0; - - if (clipy2 <= 0) - { - return; - } - - if (start < clipy1) - { - offset = clipy1 - start; - start = clipy1; - } - if (start >= clipy2) - { - offset = start - (clipy2 - 1); - start = clipy2 - 1; - } - if (end < clipy1) - { - end = clipy1; - } - if (end >= clipy2) - { - end = clipy2 - 1; - } - - object->m_rdp = this; - memcpy(&object->m_misc_state, &m_misc_state, sizeof(misc_state_t)); - memcpy(&object->m_other_modes, &m_other_modes, sizeof(other_modes_t)); - memcpy(&object->m_span_base, &m_span_base, sizeof(span_base_t)); - memcpy(&object->m_scissor, &m_scissor, sizeof(rectangle_t)); - memcpy(&object->m_tiles, &m_tiles, 8 * sizeof(n64_tile_t)); - object->tilenum = tilenum; - object->flip = flip; - object->m_fill_color = m_fill_color; - object->rect = rect; - - switch(m_other_modes.cycle_type) - { - case CYCLE_TYPE_1: - render_extents<8>(clip, render_delegate(&n64_rdp::span_draw_1cycle, this), start, (end - start) + 1, spans + offset); - break; - - case CYCLE_TYPE_2: - render_extents<8>(clip, render_delegate(&n64_rdp::span_draw_2cycle, this), start, (end - start) + 1, spans + offset); - break; - - case CYCLE_TYPE_COPY: - render_extents<8>(clip, render_delegate(&n64_rdp::span_draw_copy, this), start, (end - start) + 1, spans + offset); - break; - - case CYCLE_TYPE_FILL: - render_extents<8>(clip, render_delegate(&n64_rdp::span_draw_fill, this), start, (end - start) + 1, spans + offset); - break; - } - wait("render spans"); -} - -void n64_rdp::rgbaz_clip(int32_t sr, int32_t sg, int32_t sb, int32_t sa, int32_t* sz, rdp_span_aux* userdata) -{ - userdata->m_shade_color.set(sa, sr, sg, sb); - userdata->m_shade_color.clamp_and_clear(0xfffffe00); - uint32_t a = userdata->m_shade_color.get_a(); - userdata->m_shade_alpha.set(a, a, a, a); - - int32_t zanded = (*sz) & 0x60000; - - zanded >>= 17; - switch(zanded) - { - case 0: *sz &= 0x3ffff; break; - case 1: *sz &= 0x3ffff; break; - case 2: *sz = 0x3ffff; break; - case 3: *sz = 0x3ffff; break; - } -} - -void n64_rdp::rgbaz_correct_triangle(int32_t offx, int32_t offy, int32_t* r, int32_t* g, int32_t* b, int32_t* a, int32_t* z, rdp_span_aux* userdata, const rdp_poly_state &object) -{ - if (userdata->m_current_pix_cvg == 8) - { - *r >>= 2; - *g >>= 2; - *b >>= 2; - *a >>= 2; - *z = (*z >> 3) & 0x7ffff; - } - else - { - int32_t summand_xr = offx * SIGN13(object.m_span_base.m_span_dr >> 14); - int32_t summand_yr = offy * SIGN13(object.m_span_base.m_span_drdy >> 14); - int32_t summand_xb = offx * SIGN13(object.m_span_base.m_span_db >> 14); - int32_t summand_yb = offy * SIGN13(object.m_span_base.m_span_dbdy >> 14); - int32_t summand_xg = offx * SIGN13(object.m_span_base.m_span_dg >> 14); - int32_t summand_yg = offy * SIGN13(object.m_span_base.m_span_dgdy >> 14); - int32_t summand_xa = offx * SIGN13(object.m_span_base.m_span_da >> 14); - int32_t summand_ya = offy * SIGN13(object.m_span_base.m_span_dady >> 14); - - int32_t summand_xz = offx * SIGN22(object.m_span_base.m_span_dz >> 10); - int32_t summand_yz = offy * SIGN22(object.m_span_base.m_span_dzdy >> 10); - - *r = ((*r << 2) + summand_xr + summand_yr) >> 4; - *g = ((*g << 2) + summand_xg + summand_yg) >> 4; - *b = ((*b << 2) + summand_xb + summand_yb) >> 4; - *a = ((*a << 2) + summand_xa + summand_ya) >> 4; - *z = (((*z << 2) + summand_xz + summand_yz) >> 5) & 0x7ffff; - } -} - -void n64_rdp::write_pixel4(uint32_t curpixel, color_t& color, rdp_span_aux* userdata, const rdp_poly_state &object) -{ - // Not yet implemented -#if DEBUG_RDP_PIXEL - if (s_debug_drawing) - { - uint32_t y = curpixel / object.m_misc_state.m_fb_width; - uint32_t x = curpixel % object.m_misc_state.m_fb_width; - if (x == 157 && y == 89) - { - printf("Writing 4-bit final color: %08x\n", (uint32_t)color.to_rgba()); - } - } -#endif -} - -void n64_rdp::write_pixel8(uint32_t curpixel, color_t& color, rdp_span_aux* userdata, const rdp_poly_state &object) -{ - const uint8_t c = (color.get_r() & 0xf8) | ((color.get_g() & 0xf8) >> 5); - if (c != 0) - RWRITEADDR8(object.m_misc_state.m_fb_address + curpixel, c); - -#if DEBUG_RDP_PIXEL - if (s_debug_drawing) - { - uint32_t y = curpixel / object.m_misc_state.m_fb_width; - uint32_t x = curpixel % object.m_misc_state.m_fb_width; - if (x == 157 && y == 89) - { - printf("Writing 8-bit final color: %08x\n", (uint32_t)color.to_rgba()); - } - } -#endif -} - -void n64_rdp::write_pixel16(uint32_t curpixel, color_t& color, rdp_span_aux* userdata, const rdp_poly_state &object) -{ - const uint32_t fb = (object.m_misc_state.m_fb_address >> 1) + curpixel; - - uint16_t finalcolor; - if (object.m_other_modes.color_on_cvg && !userdata->m_pre_wrap) - { - finalcolor = RREADIDX16(fb) & 0xfffe; - } - else - { - color.shr_imm(3); - finalcolor = (color.get_r() << 11) | (color.get_g() << 6) | (color.get_b() << 1); - } - -#if DEBUG_RDP_PIXEL - if (s_debug_drawing) - { - uint32_t y = curpixel / object.m_misc_state.m_fb_width; - uint32_t x = curpixel % object.m_misc_state.m_fb_width; - if (x == 157 && y == 89) - { - printf("Writing 16-bit final color: %04x\n", finalcolor); - } - } -#endif - - switch (object.m_other_modes.cvg_dest) - { - case 0: - if (userdata->m_blend_enable) - { - uint32_t finalcvg = userdata->m_current_pix_cvg + userdata->m_current_mem_cvg; - if (finalcvg & 8) - { - finalcvg = 7; - } - RWRITEIDX16(fb, finalcolor | (finalcvg >> 2)); - HWRITEADDR8(fb, finalcvg & 3); - } - else - { - const uint32_t finalcvg = (userdata->m_current_pix_cvg - 1) & 7; - RWRITEIDX16(fb, finalcolor | (finalcvg >> 2)); - HWRITEADDR8(fb, finalcvg & 3); - } - break; - case 1: - { - const uint32_t finalcvg = (userdata->m_current_pix_cvg + userdata->m_current_mem_cvg) & 7; - RWRITEIDX16(fb, finalcolor | (finalcvg >> 2)); - HWRITEADDR8(fb, finalcvg & 3); - break; - } - case 2: - RWRITEIDX16(fb, finalcolor | 1); - HWRITEADDR8(fb, 3); - break; - case 3: - RWRITEIDX16(fb, finalcolor | (userdata->m_current_mem_cvg >> 2)); - HWRITEADDR8(fb, userdata->m_current_mem_cvg & 3); - break; - } -} - -void n64_rdp::write_pixel32(uint32_t curpixel, color_t& color, rdp_span_aux* userdata, const rdp_poly_state &object) -{ - const uint32_t fb = (object.m_misc_state.m_fb_address >> 2) + curpixel; - - uint32_t finalcolor; - if (object.m_other_modes.color_on_cvg && !userdata->m_pre_wrap) - { - finalcolor = RREADIDX32(fb) & 0xffffff00; - } - else - { - finalcolor = (color.get_r() << 24) | (color.get_g() << 16) | (color.get_b() << 8); - } - -#if DEBUG_RDP_PIXEL - if (s_debug_drawing) - { - uint32_t y = curpixel / object.m_misc_state.m_fb_width; - uint32_t x = curpixel % object.m_misc_state.m_fb_width; - if (x == 157 && y == 89) - { - printf("Writing 32-bit final color: %08x\n", finalcolor); - } - } -#endif - - switch (object.m_other_modes.cvg_dest) - { - case 0: - if (userdata->m_blend_enable) - { - uint32_t finalcvg = userdata->m_current_pix_cvg + userdata->m_current_mem_cvg; - if (finalcvg & 8) - { - finalcvg = 7; - } - - RWRITEIDX32(fb, finalcolor | (finalcvg << 5)); - } - else - { - RWRITEIDX32(fb, finalcolor | (((userdata->m_current_pix_cvg - 1) & 7) << 5)); - } - break; - case 1: - RWRITEIDX32(fb, finalcolor | (((userdata->m_current_pix_cvg + userdata->m_current_mem_cvg) & 7) << 5)); - break; - case 2: - RWRITEIDX32(fb, finalcolor | 0xE0); - break; - case 3: - RWRITEIDX32(fb, finalcolor | (userdata->m_current_mem_cvg << 5)); - break; - } -} - -void n64_rdp::read_pixel4(uint32_t curpixel, rdp_span_aux* userdata, const rdp_poly_state &object) -{ - userdata->m_memory_color.set(0, 0, 0, 0); - userdata->m_current_mem_cvg = 7; -} - -void n64_rdp::read_pixel8(uint32_t curpixel, rdp_span_aux* userdata, const rdp_poly_state &object) -{ - const uint8_t fbyte = RREADADDR8(object.m_misc_state.m_fb_address + curpixel); - const uint8_t r8 = (fbyte & 0xf8) | (fbyte >> 5); - uint8_t g8 = (fbyte & 0x07); - g8 |= g8 << 3; - g8 |= g8 << 6; - userdata->m_memory_color.set(0, r8, g8, 0); - userdata->m_memory_color.set_a(0xff); - userdata->m_current_mem_cvg = 7; -} - -void n64_rdp::read_pixel16(uint32_t curpixel, rdp_span_aux* userdata, const rdp_poly_state &object) -{ - const uint16_t fword = RREADIDX16((object.m_misc_state.m_fb_address >> 1) + curpixel); - - userdata->m_memory_color.set(0, GETHICOL(fword), GETMEDCOL(fword), GETLOWCOL(fword)); - if (object.m_other_modes.image_read_en) - { - uint8_t hbyte = HREADADDR8((object.m_misc_state.m_fb_address >> 1) + curpixel); - userdata->m_memory_color.set_a(userdata->m_current_mem_cvg << 5); - userdata->m_current_mem_cvg = ((fword & 1) << 2) | (hbyte & 3); - } - else - { - userdata->m_memory_color.set_a(0xff); - userdata->m_current_mem_cvg = 7; - } -} - -void n64_rdp::read_pixel32(uint32_t curpixel, rdp_span_aux* userdata, const rdp_poly_state &object) -{ - const uint32_t mem = RREADIDX32((object.m_misc_state.m_fb_address >> 2) + curpixel); - userdata->m_memory_color.set(0, (mem >> 24) & 0xff, (mem >> 16) & 0xff, (mem >> 8) & 0xff); - if (object.m_other_modes.image_read_en) - { - userdata->m_memory_color.set_a(mem & 0xff); - userdata->m_current_mem_cvg = (mem >> 5) & 7; - } - else - { - userdata->m_memory_color.set_a(0xff); - userdata->m_current_mem_cvg = 7; - } -} - -void n64_rdp::copy_pixel4(uint32_t curpixel, color_t& color, const rdp_poly_state &object) -{ - // Not yet implemented -} - -void n64_rdp::copy_pixel8(uint32_t curpixel, color_t& color, const rdp_poly_state &object) -{ - const uint8_t c = (color.get_r() & 0xf8) | ((color.get_g() & 0xf8) >> 5); - if (c != 0) - RWRITEADDR8(object.m_misc_state.m_fb_address + curpixel, c); -} - -void n64_rdp::copy_pixel16(uint32_t curpixel, color_t& color, const rdp_poly_state &object) -{ - const uint32_t current_pix_cvg = color.get_a() ? 7 : 0; - const uint8_t r = color.get_r(); // Vectorize me - const uint8_t g = color.get_g(); - const uint8_t b = color.get_b(); - RWRITEIDX16((object.m_misc_state.m_fb_address >> 1) + curpixel, ((r >> 3) << 11) | ((g >> 3) << 6) | ((b >> 3) << 1) | ((current_pix_cvg >> 2) & 1)); - HWRITEADDR8((object.m_misc_state.m_fb_address >> 1) + curpixel, current_pix_cvg & 3); -} - -void n64_rdp::copy_pixel32(uint32_t curpixel, color_t& color, const rdp_poly_state &object) -{ - const uint32_t current_pix_cvg = color.get_a() ? 7 : 0; - const uint8_t r = color.get_r(); // Vectorize me - const uint8_t g = color.get_g(); - const uint8_t b = color.get_b(); - RWRITEIDX32((object.m_misc_state.m_fb_address >> 2) + curpixel, (r << 24) | (g << 16) | (b << 8) | (current_pix_cvg << 5)); -} - -void n64_rdp::fill_pixel4(uint32_t curpixel, const rdp_poly_state &object) -{ - // Not yet implemented -} - -void n64_rdp::fill_pixel8(uint32_t curpixel, const rdp_poly_state &object) -{ - const uint8_t byte_shift = ((curpixel & 3) ^ BYTE_ADDR_XOR) << 3; - RWRITEADDR8(object.m_misc_state.m_fb_address + curpixel, (uint8_t)(object.m_fill_color >> byte_shift)); -} - -void n64_rdp::fill_pixel16(uint32_t curpixel, const rdp_poly_state &object) -{ - uint16_t val; - if (curpixel & 1) - { - val = object.m_fill_color & 0xffff; - } - else - { - val = (object.m_fill_color >> 16) & 0xffff; - } - RWRITEIDX16((object.m_misc_state.m_fb_address >> 1) + curpixel, val); - HWRITEADDR8((object.m_misc_state.m_fb_address >> 1) + curpixel, ((val & 1) << 1) | (val & 1)); -} - -void n64_rdp::fill_pixel32(uint32_t curpixel, const rdp_poly_state &object) -{ - RWRITEIDX32((object.m_misc_state.m_fb_address >> 2) + curpixel, object.m_fill_color); - HWRITEADDR8((object.m_misc_state.m_fb_address >> 1) + (curpixel << 1), (object.m_fill_color & 0x10000) ? 3 : 0); - HWRITEADDR8((object.m_misc_state.m_fb_address >> 1) + (curpixel << 1) + 1, (object.m_fill_color & 0x1) ? 3 : 0); -} - -void n64_rdp::span_draw_1cycle(int32_t scanline, const extent_t &extent, const rdp_poly_state &object, int32_t threadid) -{ - assert(object.m_misc_state.m_fb_size < 4); - - const int32_t clipx1 = object.m_scissor.m_xh; - const int32_t clipx2 = object.m_scissor.m_xl; - const int32_t tilenum = object.tilenum; - const bool flip = object.flip; - - span_param_t r; r.w = extent.param[SPAN_R].start; - span_param_t g; g.w = extent.param[SPAN_G].start; - span_param_t b; b.w = extent.param[SPAN_B].start; - span_param_t a; a.w = extent.param[SPAN_A].start; - span_param_t z; z.w = extent.param[SPAN_Z].start; - span_param_t s; s.w = extent.param[SPAN_S].start; - span_param_t t; t.w = extent.param[SPAN_T].start; - span_param_t w; w.w = extent.param[SPAN_W].start; - - const uint32_t zb = object.m_misc_state.m_zb_address >> 1; - const uint32_t zhb = object.m_misc_state.m_zb_address; - -#ifdef PTR64 - assert(extent.userdata != (const void *)0xcccccccccccccccc); -#else - assert(extent.userdata != (const void *)0xcccccccc); -#endif - rdp_span_aux* userdata = (rdp_span_aux*)extent.userdata; - - m_tex_pipe.calculate_clamp_diffs(tilenum, userdata, object); - - const bool partialreject = (userdata->m_color_inputs.blender2b_a[0] == &userdata->m_inv_pixel_color && userdata->m_color_inputs.blender1b_a[0] == &userdata->m_pixel_color); - const int32_t sel0 = (userdata->m_color_inputs.blender2b_a[0] == &userdata->m_memory_color) ? 1 : 0; - - int32_t drinc, dginc, dbinc, dainc; - int32_t dzinc, dzpix; - int32_t dsinc, dtinc, dwinc; - int32_t xinc; - - if (!flip) - { - drinc = -object.m_span_base.m_span_dr; - dginc = -object.m_span_base.m_span_dg; - dbinc = -object.m_span_base.m_span_db; - dainc = -object.m_span_base.m_span_da; - dzinc = -object.m_span_base.m_span_dz; - dsinc = -object.m_span_base.m_span_ds; - dtinc = -object.m_span_base.m_span_dt; - dwinc = -object.m_span_base.m_span_dw; - xinc = -1; - } - else - { - drinc = object.m_span_base.m_span_dr; - dginc = object.m_span_base.m_span_dg; - dbinc = object.m_span_base.m_span_db; - dainc = object.m_span_base.m_span_da; - dzinc = object.m_span_base.m_span_dz; - dsinc = object.m_span_base.m_span_ds; - dtinc = object.m_span_base.m_span_dt; - dwinc = object.m_span_base.m_span_dw; - xinc = 1; - } - - const int32_t fb_index = object.m_misc_state.m_fb_width * scanline; - - const int32_t xstart = extent.startx; - const int32_t xend = userdata->m_unscissored_rx; - const int32_t xend_scissored = extent.stopx; - - int32_t x = xend; - - const int32_t length = flip ? (xstart - xend) : (xend - xstart); - - if(object.m_other_modes.z_source_sel) - { - z.w = (uint32_t)object.m_misc_state.m_primitive_z << 16; - dzpix = object.m_misc_state.m_primitive_dz; - dzinc = 0; - } - else - { - dzpix = object.m_span_base.m_span_dzpix; - } - - if (object.m_misc_state.m_fb_size > 4) - fatalerror("unsupported m_fb_size %d\n", object.m_misc_state.m_fb_size); - - const int32_t blend_index = (object.m_other_modes.alpha_cvg_select ? 2 : 0) | ((object.m_other_modes.rgb_dither_sel < 3) ? 1 : 0); - const int32_t cycle0 = ((object.m_other_modes.sample_type & 1) << 1) | (object.m_other_modes.bi_lerp0 & 1); - - int32_t sss = 0; - int32_t sst = 0; - - if (object.m_other_modes.persp_tex_en) - { - tc_div(s.w >> 16, t.w >> 16, w.w >> 16, &sss, &sst); - } - else - { - tc_div_no_perspective(s.w >> 16, t.w >> 16, w.w >> 16, &sss, &sst); - } - - userdata->m_start_span = true; - for (int32_t j = 0; j <= length; j++) - { - int32_t sr = r.w >> 14; - int32_t sg = g.w >> 14; - int32_t sb = b.w >> 14; - int32_t sa = a.w >> 14; - int32_t sz = (z.w >> 10) & 0x3fffff; - const bool valid_x = (flip) ? (x >= xend_scissored) : (x <= xend_scissored); - - if (x >= clipx1 && x < clipx2 && valid_x) - { - uint8_t offx, offy; - lookup_cvmask_derivatives(userdata->m_cvg[x], &offx, &offy, userdata); - - m_tex_pipe.lod_1cycle(&sss, &sst, s.w, t.w, w.w, dsinc, dtinc, dwinc, userdata, object); - - rgbaz_correct_triangle(offx, offy, &sr, &sg, &sb, &sa, &sz, userdata, object); - rgbaz_clip(sr, sg, sb, sa, &sz, userdata); - - ((m_tex_pipe).*(m_tex_pipe.m_cycle[cycle0]))(&userdata->m_texel0_color, &userdata->m_texel0_color, sss, sst, tilenum, 0, userdata, object/*, false*/); - uint32_t t0a = userdata->m_texel0_color.get_a(); - userdata->m_texel0_alpha.set(t0a, t0a, t0a, t0a); - userdata->m_texel1_color = userdata->m_texel0_color; - userdata->m_texel1_alpha = userdata->m_texel0_alpha; - - const uint8_t noise = machine().rand() << 3; // Not accurate - userdata->m_noise_color.set(0, noise, noise, noise); - - rgbaint_t rgbsub_a(*userdata->m_color_inputs.combiner_rgbsub_a[1]); - rgbaint_t rgbsub_b(*userdata->m_color_inputs.combiner_rgbsub_b[1]); - rgbaint_t rgbmul(*userdata->m_color_inputs.combiner_rgbmul[1]); - rgbaint_t rgbadd(*userdata->m_color_inputs.combiner_rgbadd[1]); - - rgbsub_a.merge_alpha(*userdata->m_color_inputs.combiner_alphasub_a[1]); - rgbsub_b.merge_alpha(*userdata->m_color_inputs.combiner_alphasub_b[1]); - rgbmul.merge_alpha(*userdata->m_color_inputs.combiner_alphamul[1]); - rgbadd.merge_alpha(*userdata->m_color_inputs.combiner_alphaadd[1]); - - rgbsub_a.sign_extend(0x180, 0xfffffe00); - rgbsub_b.sign_extend(0x180, 0xfffffe00); - rgbadd.sign_extend(0x180, 0xfffffe00); - - rgbadd.shl_imm(8); - rgbsub_a.sub(rgbsub_b); - rgbsub_a.mul(rgbmul); - rgbsub_a.add(rgbadd); - rgbsub_a.add_imm(0x0080); - rgbsub_a.sra_imm(8); - rgbsub_a.clamp_and_clear(0xfffffe00); - - userdata->m_pixel_color = rgbsub_a; - - //Alpha coverage combiner - userdata->m_pixel_color.set_a(get_alpha_cvg(userdata->m_pixel_color.get_a(), userdata, object)); - - const uint32_t curpixel = fb_index + x; - const uint32_t zbcur = zb + curpixel; - const uint32_t zhbcur = zhb + curpixel; - - ((this)->*(m_read_pixel[object.m_misc_state.m_fb_size]))(curpixel, userdata, object); - -#if DEBUG_RDP_PIXEL - if (s_debug_drawing) - { - //uint32_t x = curpixel % m_n64_periphs->vi_width; - //uint32_t y = curpixel / m_n64_periphs->vi_width; - //printf("%d, %d ", x, scanline); - if (x == 157 && scanline == 89) - { - if (true)//finalcolor == 0) - { - static const char *s_fb_format[4] = { "I", "IA", "CI", "RGBA" }; - static const char *s_blend1a_c0[4] = { "PIXC", "MEMC", "BLENDC", "FOGC" }; - static const char *s_blend1b_c0[4] = { "PIXA", "FOGA", "SHADEA", "ZERO" }; - static const char *s_blend2a_c0[4] = { "PIXC", "MEMC", "BLENDC", "FOGC" }; - static const char *s_blend2b_c0[4] = { "INVPIXA", "MEMA", "ONE", "ZERO" }; - static const char *s_blend1a_c1[4] = { "BPIXC", "MEMC", "BLENDC", "FOGC" }; - static const char *s_blend1b_c1[4] = { "PIXA", "FOGA", "SHADEA", "ZERO" }; - static const char *s_blend2a_c1[4] = { "BPIXC", "MEMC", "BLENDC", "FOGC" }; - static const char *s_blend2b_c1[4] = { "INVPIXA", "MEMA", "ONE", "ZERO" }; - static const char *s_suba_rgb[16] = { "Combined", "TEX0C", "TEX1C", "PRIMC", "SHADEC", "ENVC", "ONE", "NOISE", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO" }; - static const char *s_subb_rgb[16] = { "Combined", "TEX0C", "TEX1C", "PRIMC", "SHADEC", "ENVC", "KEYC", "K4", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO" }; - static const char *s_mul_rgb[32] = { "Combined", "TEX0C", "TEX1C", "PRIMC", "SHADEC", "ENVC", "KEYS", "CombinedA", "TEX0A", "TEX1A", "PRIMA", "SHADEA", "ENVA", "LODF", "PLODF", "K5", - "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO" }; - static const char *s_add_rgb[8] = { "Combined", "TEX0C", "TEX1C", "PRIMC", "SHADEC", "ENVC", "ONE", "ZERO" }; - static const char *s_sub_a[16] = { "CombinedA", "TEX0A", "TEX1A", "PRIMA", "SHADEA", "ENVA", "ONE", "ZERO" }; - static const char *s_mul_a[16] = { "LODF", "TEX0A", "TEX1A", "PRIMA", "SHADEA", "ENVA", "PLODF", "ZERO" }; - - printf("Write to %08x: %d, %d\n", curpixel, x, scanline); - printf("m_fb_size: %d\n", 4 << object.m_misc_state.m_fb_size); - printf("m_fb_format: %s\n", s_fb_format[object.m_misc_state.m_fb_format]); - printf("blend enable: %d\n", userdata->m_blend_enable); - printf("other modes:\n"); - printf(" cycle_type: %d\n", object.m_other_modes.cycle_type); - printf(" persp_tex_en: %d\n", object.m_other_modes.persp_tex_en); - printf(" detail_tex_en: %d\n", object.m_other_modes.detail_tex_en); - printf(" sharpen_tex_en: %d\n", object.m_other_modes.sharpen_tex_en); - printf(" tex_lod_en: %d\n", object.m_other_modes.tex_lod_en); - printf(" en_tlut: %d\n", object.m_other_modes.en_tlut); - printf(" tlut_type: %d\n", object.m_other_modes.tlut_type); - printf(" sample_type: %d\n", object.m_other_modes.sample_type); - printf(" mid_texel: %d\n", object.m_other_modes.mid_texel); - printf(" bi_lerp0: %d\n", object.m_other_modes.bi_lerp0); - printf(" bi_lerp1: %d\n", object.m_other_modes.bi_lerp1); - printf(" convert_one: %d\n", object.m_other_modes.convert_one); - printf(" key_en: %d\n", object.m_other_modes.key_en); - printf(" rgb_dither_sel: %d\n", object.m_other_modes.rgb_dither_sel); - printf(" alpha_dither_sel: %d\n", object.m_other_modes.alpha_dither_sel); - printf(" blend_m1a_0 (A Cycle 0, 1): %s\n", s_blend1a_c0[object.m_other_modes.blend_m1a_0]); - printf(" blend_m1a_1 (A Cycle 1, 1): %s\n", s_blend1a_c1[object.m_other_modes.blend_m1a_1]); - printf(" blend_m1b_0 (B Cycle 0, 1): %s\n", s_blend1b_c0[object.m_other_modes.blend_m1b_0]); - printf(" blend_m1b_1 (B Cycle 1, 1): %s\n", s_blend1b_c1[object.m_other_modes.blend_m1b_1]); - printf(" blend_m2a_0 (A Cycle 0, 2): %s\n", s_blend2a_c0[object.m_other_modes.blend_m2a_0]); - printf(" blend_m2a_1 (A Cycle 1, 2): %s\n", s_blend2a_c1[object.m_other_modes.blend_m2a_1]); - printf(" blend_m2b_0 (B Cycle 0, 2): %s\n", s_blend2b_c0[object.m_other_modes.blend_m2b_0]); - printf(" blend_m2b_1 (B Cycle 1, 2): %s\n", s_blend2b_c1[object.m_other_modes.blend_m2b_1]); - printf(" tex_edge: %d\n", object.m_other_modes.tex_edge); - printf(" force_blend: %d\n", object.m_other_modes.force_blend); - printf(" blend_shift: %d\n", object.m_other_modes.blend_shift); - printf(" alpha_cvg_select: %d\n", object.m_other_modes.alpha_cvg_select); - printf(" cvg_times_alpha: %d\n", object.m_other_modes.cvg_times_alpha); - printf(" z_mode: %d\n", object.m_other_modes.z_mode); - printf(" cvg_dest: %d\n", object.m_other_modes.cvg_dest); - printf(" color_on_cvg: %d\n", object.m_other_modes.color_on_cvg); - printf(" image_read_en: %d\n", object.m_other_modes.image_read_en); - printf(" z_update_en: %d\n", object.m_other_modes.z_update_en); - printf(" z_compare_en: %d\n", object.m_other_modes.z_compare_en); - printf(" antialias_en: %d\n", object.m_other_modes.antialias_en); - printf(" z_source_sel: %d\n", object.m_other_modes.z_source_sel); - printf(" dither_alpha_en: %d\n", object.m_other_modes.dither_alpha_en); - printf(" alpha_compare_en: %d\n", object.m_other_modes.alpha_compare_en); - printf(" alpha_dither_mode: %d\n", object.m_other_modes.alpha_dither_mode); - printf("combine:\n"); - printf(" RGB sub A, cycle 0: %s\n", s_suba_rgb[m_combine.sub_a_rgb0]); - printf(" RGB sub B, cycle 0: %s\n", s_subb_rgb[m_combine.sub_b_rgb0]); - printf(" RGB mul, cycle 0: %s\n", s_mul_rgb[m_combine.mul_rgb0]); - printf(" RGB add, cycle 0: %s\n", s_add_rgb[m_combine.add_rgb0]); - printf(" Alpha sub A, cycle 0: %s\n", s_sub_a[m_combine.sub_a_a0]); - printf(" Alpha sub B, cycle 0: %s\n", s_sub_a[m_combine.sub_b_a0]); - printf(" Alpha mul, cycle 0: %s\n", s_mul_a[m_combine.mul_a0]); - printf(" Alpha add, cycle 0: %s\n\n", s_add_rgb[m_combine.add_a0]); - printf(" RGB sub A, cycle 1: %s\n", s_suba_rgb[m_combine.sub_a_rgb1]); - printf(" RGB sub B, cycle 1: %s\n", s_subb_rgb[m_combine.sub_b_rgb1]); - printf(" RGB mul, cycle 1: %s\n", s_mul_rgb[m_combine.mul_rgb1]); - printf(" RGB add, cycle 1: %s\n", s_add_rgb[m_combine.add_rgb1]); - printf(" Alpha sub A, cycle 1: %s\n", s_sub_a[m_combine.sub_a_a1]); - printf(" Alpha sub B, cycle 1: %s\n", s_sub_a[m_combine.sub_b_a1]); - printf(" Alpha mul, cycle 1: %s\n", s_mul_a[m_combine.mul_a1]); - printf(" Alpha add, cycle 1: %s\n\n", s_add_rgb[m_combine.add_a1]); - printf("Texel 0: %08x\n", (uint32_t)userdata->m_texel0_color.to_rgba()); - printf("Texel 1: %08x\n", (uint32_t)userdata->m_texel1_color.to_rgba()); - printf("Env: %08x\n", (uint32_t)userdata->m_env_color.to_rgba()); - printf("Prim: %08x\n", (uint32_t)userdata->m_prim_color.to_rgba()); - printf("Mem: %08x\n", (uint32_t)userdata->m_memory_color.to_rgba()); - printf("Shade: %08x\n", (uint32_t)userdata->m_shade_color.to_rgba()); - printf("sargb: %08x, %08x, %08x, %08x\n", (uint32_t)sa, (uint32_t)sr, (uint32_t)sg, (uint32_t)sb); - - printf("Blend index: %d\n", (userdata->m_blend_enable << 2) | blend_index); - int32_t cdith = 0; - int32_t adith = 0; - get_dither_values(scanline, j, &cdith, &adith, object); - color_t reblended_pixel; - ((&m_blender)->*(m_blender.blend1[(userdata->m_blend_enable << 2) | blend_index]))(reblended_pixel, cdith, adith, partialreject, sel0, userdata, object/*, true*/); - - //((m_tex_pipe).*(m_tex_pipe.m_cycle[cycle0]))(&userdata->m_texel0_color, &userdata->m_texel0_color, sss, sst, tilenum, 0, userdata, object/*, true*/); - } - } - } -#endif - - if (z_compare(zbcur, zhbcur, sz, dzpix, userdata, object)) - { - int32_t cdith = 0; - int32_t adith = 0; - get_dither_values(scanline, j, &cdith, &adith, object); - - color_t blended_pixel; - bool rendered = ((&m_blender)->*(m_blender.blend1[(userdata->m_blend_enable << 2) | blend_index]))(blended_pixel, cdith, adith, partialreject, sel0, userdata, object/*, false*/); - - if (rendered) - { -#if DEBUG_RDP_PIXEL - if (x == 157 && scanline == 89 && s_debug_drawing) - { - printf("WRITE1: %08x\n", (uint32_t)blended_pixel.to_rgba()); - } -#endif - ((this)->*(m_write_pixel[object.m_misc_state.m_fb_size]))(curpixel, blended_pixel, userdata, object); - if (object.m_other_modes.z_update_en) - { - z_store(object, zbcur, zhbcur, sz, userdata->m_dzpix_enc); - } - } - } - - sss = userdata->m_precomp_s; - sst = userdata->m_precomp_t; - } - - r.w += drinc; - g.w += dginc; - b.w += dbinc; - a.w += dainc; - s.w += dsinc; - t.w += dtinc; - w.w += dwinc; - z.w += dzinc; - - x += xinc; - } -} - -void n64_rdp::span_draw_2cycle(int32_t scanline, const extent_t &extent, const rdp_poly_state &object, int32_t threadid) -{ - assert(object.m_misc_state.m_fb_size < 4); - - const int32_t clipx1 = object.m_scissor.m_xh; - const int32_t clipx2 = object.m_scissor.m_xl; - const int32_t tilenum = object.tilenum; - const bool flip = object.flip; - - span_param_t r; r.w = extent.param[SPAN_R].start; - span_param_t g; g.w = extent.param[SPAN_G].start; - span_param_t b; b.w = extent.param[SPAN_B].start; - span_param_t a; a.w = extent.param[SPAN_A].start; - span_param_t z; z.w = extent.param[SPAN_Z].start; - span_param_t s; s.w = extent.param[SPAN_S].start; - span_param_t t; t.w = extent.param[SPAN_T].start; - span_param_t w; w.w = extent.param[SPAN_W].start; - - const uint32_t zb = object.m_misc_state.m_zb_address >> 1; - const uint32_t zhb = object.m_misc_state.m_zb_address; - - int32_t tile2 = (tilenum + 1) & 7; - int32_t tile1 = tilenum; - const uint32_t prim_tile = tilenum; - - int32_t newtile1 = tile1; - int32_t news = 0; - int32_t newt = 0; - -#ifdef PTR64 - assert(extent.userdata != (const void *)0xcccccccccccccccc); -#else - assert(extent.userdata != (const void *)0xcccccccc); -#endif - rdp_span_aux* userdata = (rdp_span_aux*)extent.userdata; - - m_tex_pipe.calculate_clamp_diffs(tile1, userdata, object); - - bool partialreject = (userdata->m_color_inputs.blender2b_a[1] == &userdata->m_inv_pixel_color && userdata->m_color_inputs.blender1b_a[1] == &userdata->m_pixel_color); - int32_t sel0 = (userdata->m_color_inputs.blender2b_a[0] == &userdata->m_memory_color) ? 1 : 0; - int32_t sel1 = (userdata->m_color_inputs.blender2b_a[1] == &userdata->m_memory_color) ? 1 : 0; - - int32_t drinc, dginc, dbinc, dainc; - int32_t dzinc, dzpix; - int32_t dsinc, dtinc, dwinc; - int32_t xinc; - - if (!flip) - { - drinc = -object.m_span_base.m_span_dr; - dginc = -object.m_span_base.m_span_dg; - dbinc = -object.m_span_base.m_span_db; - dainc = -object.m_span_base.m_span_da; - dzinc = -object.m_span_base.m_span_dz; - dsinc = -object.m_span_base.m_span_ds; - dtinc = -object.m_span_base.m_span_dt; - dwinc = -object.m_span_base.m_span_dw; - xinc = -1; - } - else - { - drinc = object.m_span_base.m_span_dr; - dginc = object.m_span_base.m_span_dg; - dbinc = object.m_span_base.m_span_db; - dainc = object.m_span_base.m_span_da; - dzinc = object.m_span_base.m_span_dz; - dsinc = object.m_span_base.m_span_ds; - dtinc = object.m_span_base.m_span_dt; - dwinc = object.m_span_base.m_span_dw; - xinc = 1; - } - - const int32_t fb_index = object.m_misc_state.m_fb_width * scanline; - - int32_t cdith = 0; - int32_t adith = 0; - - const int32_t xstart = extent.startx; - const int32_t xend = userdata->m_unscissored_rx; - const int32_t xend_scissored = extent.stopx; - - int32_t x = xend; - - const int32_t length = flip ? (xstart - xend) : (xend - xstart); - - if(object.m_other_modes.z_source_sel) - { - z.w = (uint32_t)object.m_misc_state.m_primitive_z << 16; - dzpix = object.m_misc_state.m_primitive_dz; - dzinc = 0; - } - else - { - dzpix = object.m_span_base.m_span_dzpix; - } - - if (object.m_misc_state.m_fb_size > 4) - fatalerror("unsupported m_fb_size %d\n", object.m_misc_state.m_fb_size); - - const int32_t blend_index = (object.m_other_modes.alpha_cvg_select ? 2 : 0) | ((object.m_other_modes.rgb_dither_sel < 3) ? 1 : 0); - const int32_t cycle0 = ((object.m_other_modes.sample_type & 1) << 1) | (object.m_other_modes.bi_lerp0 & 1); - const int32_t cycle1 = ((object.m_other_modes.sample_type & 1) << 1) | (object.m_other_modes.bi_lerp1 & 1); - - int32_t sss = 0; - int32_t sst = 0; - - if (object.m_other_modes.persp_tex_en) - { - tc_div(s.w >> 16, t.w >> 16, w.w >> 16, &sss, &sst); - } - else - { - tc_div_no_perspective(s.w >> 16, t.w >> 16, w.w >> 16, &sss, &sst); - } - - userdata->m_start_span = true; - for (int32_t j = 0; j <= length; j++) - { - int32_t sr = r.w >> 14; - int32_t sg = g.w >> 14; - int32_t sb = b.w >> 14; - int32_t sa = a.w >> 14; - int32_t sz = (z.w >> 10) & 0x3fffff; - - const bool valid_x = (flip) ? (x >= xend_scissored) : (x <= xend_scissored); - - if (x >= clipx1 && x < clipx2 && valid_x) - { - const uint32_t compidx = m_compressed_cvmasks[userdata->m_cvg[x]]; - userdata->m_current_pix_cvg = cvarray[compidx].cvg; - userdata->m_current_cvg_bit = cvarray[compidx].cvbit; - const uint8_t offx = cvarray[compidx].xoff; - const uint8_t offy = cvarray[compidx].yoff; - //lookup_cvmask_derivatives(userdata->m_cvg[x], &offx, &offy, userdata); - - m_tex_pipe.lod_2cycle(&sss, &sst, s.w, t.w, w.w, dsinc, dtinc, dwinc, prim_tile, &tile1, &tile2, userdata, object); - - news = userdata->m_precomp_s; - newt = userdata->m_precomp_t; - m_tex_pipe.lod_2cycle_limited(&news, &newt, s.w + dsinc, t.w + dtinc, w.w + dwinc, dsinc, dtinc, dwinc, prim_tile, &newtile1, object); - - rgbaz_correct_triangle(offx, offy, &sr, &sg, &sb, &sa, &sz, userdata, object); - rgbaz_clip(sr, sg, sb, sa, &sz, userdata); - - ((m_tex_pipe).*(m_tex_pipe.m_cycle[cycle0]))(&userdata->m_texel0_color, &userdata->m_texel0_color, sss, sst, tile1, 0, userdata, object/*, false*/); - ((m_tex_pipe).*(m_tex_pipe.m_cycle[cycle1]))(&userdata->m_texel1_color, &userdata->m_texel0_color, sss, sst, tile2, 1, userdata, object/*, false*/); - - uint32_t t0a = userdata->m_texel0_color.get_a(); - uint32_t t1a = userdata->m_texel1_color.get_a(); - uint32_t tna = userdata->m_next_texel_color.get_a(); - userdata->m_texel0_alpha.set(t0a, t0a, t0a, t0a); - userdata->m_texel1_alpha.set(t1a, t1a, t1a, t1a); - userdata->m_next_texel_alpha.set(tna, tna, tna, tna); - - const uint8_t noise = machine().rand() << 3; // Not accurate - userdata->m_noise_color.set(0, noise, noise, noise); - - rgbaint_t rgbsub_a(*userdata->m_color_inputs.combiner_rgbsub_a[0]); - rgbaint_t rgbsub_b(*userdata->m_color_inputs.combiner_rgbsub_b[0]); - rgbaint_t rgbmul(*userdata->m_color_inputs.combiner_rgbmul[0]); - rgbaint_t rgbadd(*userdata->m_color_inputs.combiner_rgbadd[0]); - - rgbsub_a.merge_alpha(*userdata->m_color_inputs.combiner_alphasub_a[0]); - rgbsub_b.merge_alpha(*userdata->m_color_inputs.combiner_alphasub_b[0]); - rgbmul.merge_alpha(*userdata->m_color_inputs.combiner_alphamul[0]); - rgbadd.merge_alpha(*userdata->m_color_inputs.combiner_alphaadd[0]); - - rgbsub_a.sign_extend(0x180, 0xfffffe00); - rgbsub_b.sign_extend(0x180, 0xfffffe00); - rgbadd.sign_extend(0x180, 0xfffffe00); - - rgbadd.shl_imm(8); - rgbsub_a.sub(rgbsub_b); - rgbsub_a.mul(rgbmul); - - rgbsub_a.add(rgbadd); - rgbsub_a.add_imm(0x0080); - rgbsub_a.sra_imm(8); - rgbsub_a.clamp_and_clear(0xfffffe00); - - userdata->m_combined_color.set(rgbsub_a); - - rgbaint_t temp_color(userdata->m_texel0_color); - userdata->m_texel0_color = userdata->m_texel1_color; - userdata->m_texel1_color = temp_color; - - uint32_t ca = userdata->m_combined_color.get_a(); - userdata->m_combined_alpha.set(ca, ca, ca, ca); - userdata->m_texel0_alpha.set(userdata->m_texel1_alpha); - userdata->m_texel1_alpha.set(userdata->m_next_texel_alpha); - - rgbsub_a.set(*userdata->m_color_inputs.combiner_rgbsub_a[1]); - rgbsub_b.set(*userdata->m_color_inputs.combiner_rgbsub_b[1]); - rgbmul.set(*userdata->m_color_inputs.combiner_rgbmul[1]); - rgbadd.set(*userdata->m_color_inputs.combiner_rgbadd[1]); - - rgbsub_a.merge_alpha(*userdata->m_color_inputs.combiner_alphasub_a[1]); - rgbsub_b.merge_alpha(*userdata->m_color_inputs.combiner_alphasub_b[1]); - rgbmul.merge_alpha(*userdata->m_color_inputs.combiner_alphamul[1]); - rgbadd.merge_alpha(*userdata->m_color_inputs.combiner_alphaadd[1]); - - rgbsub_a.sign_extend(0x180, 0xfffffe00); - rgbsub_b.sign_extend(0x180, 0xfffffe00); - rgbadd.sign_extend(0x180, 0xfffffe00); - - rgbadd.shl_imm(8); - rgbsub_a.sub(rgbsub_b); - rgbsub_a.mul(rgbmul); - rgbsub_a.add(rgbadd); - rgbsub_a.add_imm(0x0080); - rgbsub_a.sra_imm(8); - rgbsub_a.clamp_and_clear(0xfffffe00); - - userdata->m_pixel_color.set(rgbsub_a); - - //Alpha coverage combiner - userdata->m_pixel_color.set_a(get_alpha_cvg(userdata->m_pixel_color.get_a(), userdata, object)); - - const uint32_t curpixel = fb_index + x; - const uint32_t zbcur = zb + curpixel; - const uint32_t zhbcur = zhb + curpixel; - - ((this)->*(m_read_pixel[object.m_misc_state.m_fb_size]))(curpixel, userdata, object); - -#if DEBUG_RDP_PIXEL - if (s_debug_drawing) - { - //uint32_t x = curpixel % m_n64_periphs->vi_width; - //uint32_t y = curpixel / m_n64_periphs->vi_width; - //printf("%d, %d ", x, scanline); - if (x == 157 && scanline == 89) - { - if (true)//finalcolor == 0) - { - static const char *s_fb_format[4] = { "I", "IA", "CI", "RGBA" }; - static const char *s_blend1a_c0[4] = { "PIXC", "MEMC", "BLENDC", "FOGC" }; - static const char *s_blend1b_c0[4] = { "PIXA", "FOGA", "SHADEA", "ZERO" }; - static const char *s_blend2a_c0[4] = { "PIXC", "MEMC", "BLENDC", "FOGC" }; - static const char *s_blend2b_c0[4] = { "INVPIXA", "MEMA", "ONE", "ZERO" }; - static const char *s_blend1a_c1[4] = { "BPIXC", "MEMC", "BLENDC", "FOGC" }; - static const char *s_blend1b_c1[4] = { "PIXA", "FOGA", "SHADEA", "ZERO" }; - static const char *s_blend2a_c1[4] = { "BPIXC", "MEMC", "BLENDC", "FOGC" }; - static const char *s_blend2b_c1[4] = { "INVPIXA", "MEMA", "ONE", "ZERO" }; - static const char *s_suba_rgb[16] = { "Combined", "TEX0C", "TEX1C", "PRIMC", "SHADEC", "ENVC", "ONE", "NOISE", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO" }; - static const char *s_subb_rgb[16] = { "Combined", "TEX0C", "TEX1C", "PRIMC", "SHADEC", "ENVC", "KEYC", "K4", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO" }; - static const char *s_mul_rgb[32] = { "Combined", "TEX0C", "TEX1C", "PRIMC", "SHADEC", "ENVC", "KEYS", "CombinedA", "TEX0A", "TEX1A", "PRIMA", "SHADEA", "ENVA", "LODF", "PLODF", "K5", - "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO", "ZERO" }; - static const char *s_add_rgb[8] = { "Combined", "TEX0C", "TEX1C", "PRIMC", "SHADEC", "ENVC", "ONE", "ZERO" }; - static const char *s_sub_a[16] = { "CombinedA", "TEX0A", "TEX1A", "PRIMA", "SHADEA", "ENVA", "ONE", "ZERO" }; - static const char *s_mul_a[16] = { "LODF", "TEX0A", "TEX1A", "PRIMA", "SHADEA", "ENVA", "PLODF", "ZERO" }; - - printf("Write to %08x: %d, %d\n", curpixel, x, scanline); - printf("m_fb_size: %d\n", 4 << object.m_misc_state.m_fb_size); - printf("m_fb_format: %s\n", s_fb_format[object.m_misc_state.m_fb_format]); - printf("blend enable: %d\n", userdata->m_blend_enable); - printf("other modes:\n"); - printf(" cycle_type: %d\n", object.m_other_modes.cycle_type); - printf(" persp_tex_en: %d\n", object.m_other_modes.persp_tex_en); - printf(" detail_tex_en: %d\n", object.m_other_modes.detail_tex_en); - printf(" sharpen_tex_en: %d\n", object.m_other_modes.sharpen_tex_en); - printf(" tex_lod_en: %d\n", object.m_other_modes.tex_lod_en); - printf(" en_tlut: %d\n", object.m_other_modes.en_tlut); - printf(" tlut_type: %d\n", object.m_other_modes.tlut_type); - printf(" sample_type: %d\n", object.m_other_modes.sample_type); - printf(" mid_texel: %d\n", object.m_other_modes.mid_texel); - printf(" bi_lerp0: %d\n", object.m_other_modes.bi_lerp0); - printf(" bi_lerp1: %d\n", object.m_other_modes.bi_lerp1); - printf(" convert_one: %d\n", object.m_other_modes.convert_one); - printf(" key_en: %d\n", object.m_other_modes.key_en); - printf(" rgb_dither_sel: %d\n", object.m_other_modes.rgb_dither_sel); - printf(" alpha_dither_sel: %d\n", object.m_other_modes.alpha_dither_sel); - printf(" blend_m1a_0 (A Cycle 0, 1): %s\n", s_blend1a_c0[object.m_other_modes.blend_m1a_0]); - printf(" blend_m1a_1 (A Cycle 1, 1): %s\n", s_blend1a_c1[object.m_other_modes.blend_m1a_1]); - printf(" blend_m1b_0 (B Cycle 0, 1): %s\n", s_blend1b_c0[object.m_other_modes.blend_m1b_0]); - printf(" blend_m1b_1 (B Cycle 1, 1): %s\n", s_blend1b_c1[object.m_other_modes.blend_m1b_1]); - printf(" blend_m2a_0 (A Cycle 0, 2): %s\n", s_blend2a_c0[object.m_other_modes.blend_m2a_0]); - printf(" blend_m2a_1 (A Cycle 1, 2): %s\n", s_blend2a_c1[object.m_other_modes.blend_m2a_1]); - printf(" blend_m2b_0 (B Cycle 0, 2): %s\n", s_blend2b_c0[object.m_other_modes.blend_m2b_0]); - printf(" blend_m2b_1 (B Cycle 1, 2): %s\n", s_blend2b_c1[object.m_other_modes.blend_m2b_1]); - printf(" tex_edge: %d\n", object.m_other_modes.tex_edge); - printf(" force_blend: %d\n", object.m_other_modes.force_blend); - printf(" blend_shift: %d\n", object.m_other_modes.blend_shift); - printf(" alpha_cvg_select: %d\n", object.m_other_modes.alpha_cvg_select); - printf(" cvg_times_alpha: %d\n", object.m_other_modes.cvg_times_alpha); - printf(" z_mode: %d\n", object.m_other_modes.z_mode); - printf(" cvg_dest: %d\n", object.m_other_modes.cvg_dest); - printf(" color_on_cvg: %d\n", object.m_other_modes.color_on_cvg); - printf(" image_read_en: %d\n", object.m_other_modes.image_read_en); - printf(" z_update_en: %d\n", object.m_other_modes.z_update_en); - printf(" z_compare_en: %d\n", object.m_other_modes.z_compare_en); - printf(" antialias_en: %d\n", object.m_other_modes.antialias_en); - printf(" z_source_sel: %d\n", object.m_other_modes.z_source_sel); - printf(" dither_alpha_en: %d\n", object.m_other_modes.dither_alpha_en); - printf(" alpha_compare_en: %d\n", object.m_other_modes.alpha_compare_en); - printf(" alpha_dither_mode: %d\n", object.m_other_modes.alpha_dither_mode); - printf("combine:\n"); - printf(" RGB sub A, cycle 0: %s\n", s_suba_rgb[m_combine.sub_a_rgb0]); - printf(" RGB sub B, cycle 0: %s\n", s_subb_rgb[m_combine.sub_b_rgb0]); - printf(" RGB mul, cycle 0: %s\n", s_mul_rgb[m_combine.mul_rgb0]); - printf(" RGB add, cycle 0: %s\n", s_add_rgb[m_combine.add_rgb0]); - printf(" Alpha sub A, cycle 0: %s\n", s_sub_a[m_combine.sub_a_a0]); - printf(" Alpha sub B, cycle 0: %s\n", s_sub_a[m_combine.sub_b_a0]); - printf(" Alpha mul, cycle 0: %s\n", s_mul_a[m_combine.mul_a0]); - printf(" Alpha add, cycle 0: %s\n\n", s_add_rgb[m_combine.add_a0]); - printf(" RGB sub A, cycle 1: %s\n", s_suba_rgb[m_combine.sub_a_rgb1]); - printf(" RGB sub B, cycle 1: %s\n", s_subb_rgb[m_combine.sub_b_rgb1]); - printf(" RGB mul, cycle 1: %s\n", s_mul_rgb[m_combine.mul_rgb1]); - printf(" RGB add, cycle 1: %s\n", s_add_rgb[m_combine.add_rgb1]); - printf(" Alpha sub A, cycle 1: %s\n", s_sub_a[m_combine.sub_a_a1]); - printf(" Alpha sub B, cycle 1: %s\n", s_sub_a[m_combine.sub_b_a1]); - printf(" Alpha mul, cycle 1: %s\n", s_mul_a[m_combine.mul_a1]); - printf(" Alpha add, cycle 1: %s\n\n", s_add_rgb[m_combine.add_a1]); - printf("Texel 0: %08x\n", (uint32_t)userdata->m_texel0_color.to_rgba()); - printf("Texel 1: %08x\n", (uint32_t)userdata->m_texel1_color.to_rgba()); - printf("Env: %08x\n", (uint32_t)userdata->m_env_color.to_rgba()); - printf("Prim: %08x\n", (uint32_t)userdata->m_prim_color.to_rgba()); - printf("Mem: %08x\n", (uint32_t)userdata->m_memory_color.to_rgba()); - printf("Shade: %08x\n", (uint32_t)userdata->m_shade_color.to_rgba()); - printf("sargb: %08x, %08x, %08x, %08x\n", (uint32_t)sa, (uint32_t)sr, (uint32_t)sg, (uint32_t)sb); - - printf("Blend index: %d\n", (userdata->m_blend_enable << 2) | blend_index); - int32_t cdith = 0; - int32_t adith = 0; - get_dither_values(scanline, j, &cdith, &adith, object); - color_t reblended_pixel; - ((&m_blender)->*(m_blender.blend2[(userdata->m_blend_enable << 2) | blend_index]))(reblended_pixel, cdith, adith, partialreject, sel0, sel1, userdata, object/*, true*/); - - //((m_tex_pipe).*(m_tex_pipe.m_cycle[cycle0]))(&userdata->m_texel0_color, &userdata->m_texel0_color, sss, sst, tilenum, 0, userdata, object/*, true*/); - } - } - } -#endif - - if(z_compare(zbcur, zhbcur, sz, dzpix, userdata, object)) - { - get_dither_values(scanline, j, &cdith, &adith, object); - - color_t blended_pixel; - bool rendered = ((&m_blender)->*(m_blender.blend2[(userdata->m_blend_enable << 2) | blend_index]))(blended_pixel, cdith, adith, partialreject, sel0, sel1, userdata, object/*, false*/); - - if (rendered) - { -#if DEBUG_RDP_PIXEL - if (x == 157 && scanline == 89 && s_debug_drawing) - { - printf("WRITE2: %08x\n", (uint32_t)blended_pixel.to_rgba()); - } -#endif - ((this)->*(m_write_pixel[object.m_misc_state.m_fb_size]))(curpixel, blended_pixel, userdata, object); - if (object.m_other_modes.z_update_en) - { - z_store(object, zbcur, zhbcur, sz, userdata->m_dzpix_enc); - } - } - } - sss = userdata->m_precomp_s; - sst = userdata->m_precomp_t; - } - - r.w += drinc; - g.w += dginc; - b.w += dbinc; - a.w += dainc; - s.w += dsinc; - t.w += dtinc; - w.w += dwinc; - z.w += dzinc; - - x += xinc; - } -} - -void n64_rdp::span_draw_copy(int32_t scanline, const extent_t &extent, const rdp_poly_state &object, int32_t threadid) -{ - const int32_t clipx1 = object.m_scissor.m_xh; - const int32_t clipx2 = object.m_scissor.m_xl; - const int32_t tilenum = object.tilenum; - const bool flip = object.flip; - - rdp_span_aux* userdata = (rdp_span_aux*)extent.userdata; - const int32_t xstart = extent.startx; - const int32_t xend = userdata->m_unscissored_rx; - const int32_t xend_scissored = extent.stopx; - const int32_t xinc = flip ? 1 : -1; - const int32_t length = flip ? (xstart - xend) : (xend - xstart); - - span_param_t s; s.w = extent.param[SPAN_S].start; - span_param_t t; t.w = extent.param[SPAN_T].start; - - const int32_t ds = object.m_span_base.m_span_ds / 4; - const int32_t dt = object.m_span_base.m_span_dt / 4; - const int32_t dsinc = flip ? (ds) : -ds; - const int32_t dtinc = flip ? (dt) : -dt; - - const int32_t fb_index = object.m_misc_state.m_fb_width * scanline; - - int32_t x = xend; - - for (int32_t j = 0; j <= length; j++) - { - const bool valid_x = (flip) ? (x >= xend_scissored) : (x <= xend_scissored); - - if (x >= clipx1 && x < clipx2 && valid_x) - { - int32_t sss = s.h.h; - int32_t sst = t.h.h; - m_tex_pipe.copy(&userdata->m_texel0_color, sss, sst, tilenum, object, userdata); - - uint32_t curpixel = fb_index + x; - if (userdata->m_texel0_color.get_a() != 0 || !object.m_other_modes.alpha_compare_en || object.m_misc_state.m_fb_size == 1) - { - ((this)->*(m_copy_pixel[object.m_misc_state.m_fb_size]))(curpixel, userdata->m_texel0_color, object); - } - } - - s.w += dsinc; - t.w += dtinc; - x += xinc; - } -} - -void n64_rdp::span_draw_fill(int32_t scanline, const extent_t &extent, const rdp_poly_state &object, int32_t threadid) -{ - assert(object.m_misc_state.m_fb_size < 4); - - const bool flip = object.flip; - - const int32_t clipx1 = object.m_scissor.m_xh; - const int32_t clipx2 = object.m_scissor.m_xl; - - const int32_t xinc = flip ? 1 : -1; - - const int32_t fb_index = object.m_misc_state.m_fb_width * scanline; - - const int32_t xstart = extent.startx; - const int32_t xend_scissored = extent.stopx; - - int32_t x = xend_scissored; - - const int32_t length = flip ? (xstart - xend_scissored) : (xend_scissored - xstart); - - for (int32_t j = 0; j <= length; j++) - { - if (x >= clipx1 && x < clipx2) - { - ((this)->*(m_fill_pixel[object.m_misc_state.m_fb_size]))(fb_index + x, object); - } - - x += xinc; - } -} diff --git a/waterbox/ares64/ares/thirdparty/mame/mame/video/n64.h b/waterbox/ares64/ares/thirdparty/mame/mame/video/n64.h deleted file mode 100644 index 764219c964..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/mame/video/n64.h +++ /dev/null @@ -1,426 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz -#ifndef _VIDEO_N64_H_ -#define _VIDEO_N64_H_ - -#include "video/poly.h" -#include "pin64.h" - -/*****************************************************************************/ - -#define PIXEL_SIZE_4BIT 0 -#define PIXEL_SIZE_8BIT 1 -#define PIXEL_SIZE_16BIT 2 -#define PIXEL_SIZE_32BIT 3 - -#define CYCLE_TYPE_1 0 -#define CYCLE_TYPE_2 1 -#define CYCLE_TYPE_COPY 2 -#define CYCLE_TYPE_FILL 3 - -#define SAMPLE_TYPE_1x1 0 -#define SAMPLE_TYPE_2x2 1 - -#define BYTE_ADDR_XOR BYTE4_XOR_BE(0) -#define WORD_ADDR_XOR (WORD_XOR_BE(0) >> 1) - -#define XOR_SWAP_BYTE_SHIFT 2 -#define XOR_SWAP_WORD_SHIFT 1 -#define XOR_SWAP_DWORD_SHIFT 0 - -#define XOR_SWAP_BYTE 4 -#define XOR_SWAP_WORD 2 -#define XOR_SWAP_DWORD 1 - -#define FORMAT_RGBA 0 -#define FORMAT_YUV 1 -#define FORMAT_CI 2 -#define FORMAT_IA 3 -#define FORMAT_I 4 - -#ifdef LSB_FIRST -#define BYTE_XOR_DWORD_SWAP 7 -#define WORD_XOR_DWORD_SWAP 3 -#else -#define BYTE_XOR_DWORD_SWAP 4 -#define WORD_XOR_DWORD_SWAP 2 -#endif -#define DWORD_XOR_DWORD_SWAP 1 - -#define GET_LOW_RGBA16_TMEM(x) (m_rdp->m_replicated_rgba[((x) >> 1) & 0x1f]) -#define GET_MED_RGBA16_TMEM(x) (m_rdp->m_replicated_rgba[((x) >> 6) & 0x1f]) -#define GET_HI_RGBA16_TMEM(x) (m_rdp->m_replicated_rgba[((x) >> 11) & 0x1f]) - -#define MEM8_LIMIT 0x7fffff -#define MEM16_LIMIT 0x3fffff -#define MEM32_LIMIT 0x1fffff - -#define RDP_RANGE_CHECK (0) - -#if RDP_RANGE_CHECK -#define CHECK8(in) if(rdp_range_check((in))) { printf("Check8: Address %08x out of range!\n", (in)); fflush(stdout); fatalerror("Address %08x out of range!\n", (in)); } -#define CHECK16(in) if(rdp_range_check((in) << 1)) { printf("Check16: Address %08x out of range!\n", (in) << 1); fflush(stdout); fatalerror("Address %08x out of range!\n", (in) << 1); } -#define CHECK32(in) if(rdp_range_check((in) << 2)) { printf("Check32: Address %08x out of range!\n", (in) << 2); fflush(stdout); fatalerror("Address %08x out of range!\n", (in) << 2); } -#else -#define CHECK8(in) { } -#define CHECK16(in) { } -#define CHECK32(in) { } -#endif - -#if RDP_RANGE_CHECK -#define RREADADDR8(in) ((rdp_range_check((in))) ? 0 : (((uint8_t*)m_rdram)[(in) ^ BYTE_ADDR_XOR])) -#define RREADIDX16(in) ((rdp_range_check((in) << 1)) ? 0 : (((uint16_t*)m_rdram)[(in) ^ WORD_ADDR_XOR])) -#define RREADIDX32(in) ((rdp_range_check((in) << 2)) ? 0 : m_rdram[(in)]) - -#define RWRITEADDR8(in, val) if(rdp_range_check((in))) { printf("Write8: Address %08x out of range!\n", (in)); fflush(stdout); fatalerror("Address %08x out of range!\n", (in)); } else { ((uint8_t*)m_rdram)[(in) ^ BYTE_ADDR_XOR] = val;} -#define RWRITEIDX16(in, val) if(rdp_range_check((in) << 1)) { printf("Write16: Address %08x out of range!\n", ((object.m_misc_state.m_fb_address >> 1) + curpixel) << 1); fflush(stdout); fatalerror("Address out of range\n"); } else { ((uint16_t*)m_rdram)[(in) ^ WORD_ADDR_XOR] = val;} -#define RWRITEIDX32(in, val) if(rdp_range_check((in) << 2)) { printf("Write32: Address %08x out of range!\n", (in) << 2); fflush(stdout); fatalerror("Address %08x out of range!\n", (in) << 2); } else { m_rdram[(in)] = val;} -#else -#define RREADADDR8(in) (((uint8_t*)m_rdram)[(in) ^ BYTE_ADDR_XOR]) -#define RREADIDX16(in) (((uint16_t*)m_rdram)[(in) ^ WORD_ADDR_XOR]) -#define RREADIDX32(in) (m_rdram[(in)]) - -#define RWRITEADDR8(in, val) ((uint8_t*)m_rdram)[(in) ^ BYTE_ADDR_XOR] = val; -#define RWRITEIDX16(in, val) ((uint16_t*)m_rdram)[(in) ^ WORD_ADDR_XOR] = val; -#define RWRITEIDX32(in, val) m_rdram[(in)] = val -#endif - -#define U_RREADADDR8(in) (((uint8_t*)m_rdram)[(in) ^ BYTE_ADDR_XOR]) -#define U_RREADIDX16(in) (((uint16_t*)m_rdram)[(in) ^ WORD_ADDR_XOR]) -#define U_RREADIDX32(in) (m_rdram[(in)]) - -#define GETLOWCOL(x) (((x) & 0x3e) << 2) -#define GETMEDCOL(x) (((x) & 0x7c0) >> 3) -#define GETHICOL(x) (((x) & 0xf800) >> 8) - -#define HREADADDR8(in) /*(((in) <= MEM8_LIMIT) ? */(m_hidden_bits[(in) ^ BYTE_ADDR_XOR])/* : 0)*/ -#define HWRITEADDR8(in, val) /*{if ((in) <= MEM8_LIMIT) */m_hidden_bits[(in) ^ BYTE_ADDR_XOR] = val;/*}*/ - -//sign-extension macros -#define SIGN22(x) (((x & 0x00200000) * 0x7ff) | (x & 0x1fffff)) -#define SIGN17(x) (((x & 0x00010000) * 0xffff) | (x & 0xffff)) -#define SIGN16(x) (((x & 0x00008000) * 0x1ffff) | (x & 0x7fff)) -#define SIGN13(x) (((x & 0x00001000) * 0xfffff) | (x & 0xfff)) -#define SIGN11(x) (((x & 0x00000400) * 0x3fffff) | (x & 0x3ff)) -#define SIGN9(x) (((x & 0x00000100) * 0xffffff) | (x & 0xff)) -#define SIGN8(x) (((x & 0x00000080) * 0x1ffffff) | (x & 0x7f)) - -#define KURT_AKELEY_SIGN9(x) ((((x) & 0x180) == 0x180) ? ((x) | ~0x1ff) : ((x) & 0x1ff)) - -#define SPAN_R (0) -#define SPAN_G (1) -#define SPAN_B (2) -#define SPAN_A (3) -#define SPAN_S (4) -#define SPAN_T (5) -#define SPAN_W (6) -#define SPAN_Z (7) - -#define EXTENT_AUX_COUNT (sizeof(rdp_span_aux)*(480*192)) // Screen coverage *192, more or less - -/*****************************************************************************/ - -class n64_periphs; -class n64_rdp; - -#include "video/n64types.h" -#include "video/rdpblend.h" -#include "video/rdptpipe.h" - -class n64_state; - -class n64_rdp : public poly_manager -{ -public: - n64_rdp(n64_state &state, uint32_t* rdram, uint32_t* dmem); - - running_machine &machine() const { assert(m_machine != nullptr); return *m_machine; } - - void init_internal_state() - { - m_tmem = std::make_unique(0x1000); - memset(m_tmem.get(), 0, 0x1000); - -#if !defined(MAME_RDP) - uint8_t* normpoint = machine().root_device().memregion("normpoint")->base(); - uint8_t* normslope = machine().root_device().memregion("normslope")->base(); - - for(int32_t i = 0; i < 64; i++) - { - m_norm_point_rom[i] = (normpoint[(i << 1) + 1] << 8) | normpoint[i << 1]; - m_norm_slope_rom[i] = (normslope[(i << 1) + 1] << 8) | normslope[i << 1]; - } -#endif - - memset(m_tiles, 0, 8 * sizeof(n64_tile_t)); - memset(m_cmd_data, 0, sizeof(m_cmd_data)); - - for (int32_t i = 0; i < 8; i++) - { - m_tiles[i].num = i; - m_tiles[i].invmm = rgbaint_t(~0, ~0, ~0, ~0); - m_tiles[i].invmask = rgbaint_t(~0, ~0, ~0, ~0); - } - } - - void process_command_list(); - uint64_t read_data(uint32_t address); - void disassemble(uint64_t *cmd_buf, char* buffer); - - void set_machine(running_machine& machine) { m_machine = &machine; } - void set_n64_periphs(n64_periphs* periphs) { m_n64_periphs = periphs; } - - // CPU-visible registers - void set_start(uint32_t val) { m_start = val; } - uint32_t get_start() const { return m_start; } - - void set_end(uint32_t val) { m_end = val; } - uint32_t get_end() const { return m_end; } - - void set_current(uint32_t val) { m_current = val; } - uint32_t get_current() const { return m_current; } - - void set_status(uint32_t val) { m_status = val; } - uint32_t get_status() const { return m_status; } - - // Color Combiner - int32_t color_combiner_equation(int32_t a, int32_t b, int32_t c, int32_t d); - int32_t alpha_combiner_equation(int32_t a, int32_t b, int32_t c, int32_t d); - void set_suba_input_rgb(color_t** input, int32_t code, rdp_span_aux* userdata); - void set_subb_input_rgb(color_t** input, int32_t code, rdp_span_aux* userdata); - void set_mul_input_rgb(color_t** input, int32_t code, rdp_span_aux* userdata); - void set_add_input_rgb(color_t** input, int32_t code, rdp_span_aux* userdata); - void set_sub_input_alpha(color_t** input, int32_t code, rdp_span_aux* userdata); - void set_mul_input_alpha(color_t** input, int32_t code, rdp_span_aux* userdata); - - // Texture memory - uint8_t* get_tmem8() { return m_tmem.get(); } - uint16_t* get_tmem16() { return (uint16_t*)m_tmem.get(); } - - // YUV Factors - void set_yuv_factors(color_t k02, color_t k13, color_t k4, color_t k5) { m_k02 = k02; m_k13 = k13; m_k4 = k4; m_k5 = k5; } - color_t& get_k02() { return m_k02; } - color_t& get_k13() { return m_k13; } - - // Blender-related (move into RDP::Blender) - void set_blender_input(int32_t cycle, int32_t which, color_t** input_rgb, color_t** input_a, int32_t a, int32_t b, rdp_span_aux* userdata); - - // Span rasterization - void span_draw_1cycle(int32_t scanline, const extent_t &extent, const rdp_poly_state &object, int32_t threadid); - void span_draw_2cycle(int32_t scanline, const extent_t &extent, const rdp_poly_state &object, int32_t threadid); - void span_draw_copy(int32_t scanline, const extent_t &extent, const rdp_poly_state &object, int32_t threadid); - void span_draw_fill(int32_t scanline, const extent_t &extent, const rdp_poly_state &object, int32_t threadid); - - // Render-related (move into eventual drawing-related classes?) - void tc_div(int32_t ss, int32_t st, int32_t sw, int32_t* sss, int32_t* sst); - void tc_div_no_perspective(int32_t ss, int32_t st, int32_t sw, int32_t* sss, int32_t* sst); - uint32_t get_log2(uint32_t lod_clamp); - void render_spans(int32_t start, int32_t end, int32_t tilenum, bool flip, extent_t* spans, bool rect, rdp_poly_state* object); - int32_t get_alpha_cvg(int32_t comb_alpha, rdp_span_aux* userdata, const rdp_poly_state &object); - - void z_store(const rdp_poly_state &object, uint32_t zcurpixel, uint32_t dzcurpixel, uint32_t z, uint32_t enc); - uint32_t z_decompress(uint32_t zcurpixel); - uint32_t dz_decompress(uint32_t zcurpixel, uint32_t dzcurpixel); - uint32_t dz_compress(uint32_t value); - int32_t normalize_dzpix(int32_t sum); - bool z_compare(uint32_t zcurpixel, uint32_t dzcurpixel, uint32_t sz, uint16_t dzpix, rdp_span_aux* userdata, const rdp_poly_state &object); - - // Commands - void cmd_noop(uint64_t *cmd_buf); - void cmd_tex_rect(uint64_t *cmd_buf); - void cmd_tex_rect_flip(uint64_t *cmd_buf); - void cmd_sync_load(uint64_t *cmd_buf); - void cmd_sync_pipe(uint64_t *cmd_buf); - void cmd_sync_tile(uint64_t *cmd_buf); - void cmd_sync_full(uint64_t *cmd_buf); - void cmd_set_key_gb(uint64_t *cmd_buf); - void cmd_set_key_r(uint64_t *cmd_buf); - void cmd_set_fill_color32(uint64_t *cmd_buf); - void cmd_set_convert(uint64_t *cmd_buf); - void cmd_set_scissor(uint64_t *cmd_buf); - void cmd_set_prim_depth(uint64_t *cmd_buf); - void cmd_set_other_modes(uint64_t *cmd_buf); - void cmd_load_tlut(uint64_t *cmd_buf); - void cmd_set_tile_size(uint64_t *cmd_buf); - void cmd_load_block(uint64_t *cmd_buf); - void cmd_load_tile(uint64_t *cmd_buf); - void cmd_fill_rect(uint64_t *cmd_buf); - void cmd_set_tile(uint64_t *cmd_buf); - void cmd_set_fog_color(uint64_t *cmd_buf); - void cmd_set_blend_color(uint64_t *cmd_buf); - void cmd_set_prim_color(uint64_t *cmd_buf); - void cmd_set_env_color(uint64_t *cmd_buf); - void cmd_set_combine(uint64_t *cmd_buf); - void cmd_set_texture_image(uint64_t *cmd_buf); - void cmd_set_mask_image(uint64_t *cmd_buf); - void cmd_set_color_image(uint64_t *cmd_buf); - - void rgbaz_clip(int32_t sr, int32_t sg, int32_t sb, int32_t sa, int32_t* sz, rdp_span_aux* userdata); - void rgbaz_correct_triangle(int32_t offx, int32_t offy, int32_t* r, int32_t* g, int32_t* b, int32_t* a, int32_t* z, rdp_span_aux* userdata, const rdp_poly_state &object); - - void triangle(uint64_t *cmd_buf, bool shade, bool texture, bool zbuffer); - - void get_dither_values(int32_t x, int32_t y, int32_t* cdith, int32_t* adith, const rdp_poly_state &object); - - uint16_t decompress_cvmask_frombyte(uint8_t x); - void lookup_cvmask_derivatives(uint32_t mask, uint8_t* offx, uint8_t* offy, rdp_span_aux* userdata); - - void mark_frame() { m_capture.mark_frame(*m_machine); } - - misc_state_t m_misc_state; - - // Color constants - color_t m_blend_color; /* constant blend color */ - color_t m_prim_color; /* flat primitive color */ - color_t m_prim_alpha; /* flat primitive alpha */ - color_t m_env_color; /* generic color constant ('environment') */ - color_t m_env_alpha; /* generic alpha constant ('environment') */ - color_t m_fog_color; /* generic color constant ('fog') */ - color_t m_key_scale; /* color-keying constant */ - color_t m_lod_fraction; /* Z-based LOD fraction for this poly */ - color_t m_prim_lod_fraction; /* fixed LOD fraction for this poly */ - - color_t m_one; - color_t m_zero; - - uint32_t m_fill_color; - - other_modes_t m_other_modes; - - n64_blender_t m_blender; - - n64_texture_pipe_t m_tex_pipe; - - uint8_t m_hidden_bits[0x800000]; - - uint8_t m_replicated_rgba[32]; - - uint16_t m_dzpix_normalize[0x10000]; - - rectangle_t m_scissor; - span_base_t m_span_base; - - void draw_triangle(uint64_t *cmd_buf, bool shade, bool texture, bool zbuffer, bool rect); - - std::unique_ptr m_aux_buf; - uint32_t m_aux_buf_ptr; - uint32_t m_aux_buf_index; - - bool rdp_range_check(uint32_t addr); - - n64_tile_t m_tiles[8]; - -private: - void compute_cvg_noflip(extent_t* spans, int32_t* majorx, int32_t* minorx, int32_t* majorxint, int32_t* minorxint, int32_t scanline, int32_t yh, int32_t yl, int32_t base); - void compute_cvg_flip(extent_t* spans, int32_t* majorx, int32_t* minorx, int32_t* majorxint, int32_t* minorxint, int32_t scanline, int32_t yh, int32_t yl, int32_t base); - - void write_pixel4(uint32_t curpixel, color_t& color, rdp_span_aux* userdata, const rdp_poly_state &object); - void write_pixel8(uint32_t curpixel, color_t& color, rdp_span_aux* userdata, const rdp_poly_state &object); - void write_pixel16(uint32_t curpixel, color_t& color, rdp_span_aux* userdata, const rdp_poly_state &object); - void write_pixel32(uint32_t curpixel, color_t& color, rdp_span_aux* userdata, const rdp_poly_state &object); - void read_pixel4(uint32_t curpixel, rdp_span_aux* userdata, const rdp_poly_state &object); - void read_pixel8(uint32_t curpixel, rdp_span_aux* userdata, const rdp_poly_state &object); - void read_pixel16(uint32_t curpixel, rdp_span_aux* userdata, const rdp_poly_state &object); - void read_pixel32(uint32_t curpixel, rdp_span_aux* userdata, const rdp_poly_state &object); - void copy_pixel4(uint32_t curpixel, color_t& color, const rdp_poly_state &object); - void copy_pixel8(uint32_t curpixel, color_t& color, const rdp_poly_state &object); - void copy_pixel16(uint32_t curpixel, color_t& color, const rdp_poly_state &object); - void copy_pixel32(uint32_t curpixel, color_t& color, const rdp_poly_state &object); - void fill_pixel4(uint32_t curpixel, const rdp_poly_state &object); - void fill_pixel8(uint32_t curpixel, const rdp_poly_state &object); - void fill_pixel16(uint32_t curpixel, const rdp_poly_state &object); - void fill_pixel32(uint32_t curpixel, const rdp_poly_state &object); - - void precalc_cvmask_derivatives(void); - void z_build_com_table(void); - - typedef void (n64_rdp::*compute_cvg_t) (extent_t* spans, int32_t* majorx, int32_t* minorx, int32_t* majorxint, int32_t* minorxint, int32_t scanline, int32_t yh, int32_t yl, int32_t base); - compute_cvg_t m_compute_cvg[2]; - - typedef void (n64_rdp::*write_pixel_t) (uint32_t curpixel, color_t& color, rdp_span_aux* userdata, const rdp_poly_state &object); - typedef void (n64_rdp::*read_pixel_t) (uint32_t curpixel, rdp_span_aux* userdata, const rdp_poly_state &object); - typedef void (n64_rdp::*copy_pixel_t) (uint32_t curpixel, color_t& color, const rdp_poly_state &object); - typedef void (n64_rdp::*fill_pixel_t) (uint32_t curpixel, const rdp_poly_state &object); - - write_pixel_t m_write_pixel[4]; - read_pixel_t m_read_pixel[4]; - copy_pixel_t m_copy_pixel[4]; - fill_pixel_t m_fill_pixel[4]; - - running_machine* m_machine; - uint32_t* m_rdram; - uint32_t* m_dmem; - n64_periphs* m_n64_periphs; - - combine_modes_t m_combine; - bool m_pending_mode_block; - bool m_pipe_clean; - - cv_mask_derivative_t cvarray[(1 << 8)]; - - uint16_t m_z_com_table[0x40000]; //precalced table of compressed z values, 18b: 512 KB array! - uint32_t m_z_complete_dec_table[0x4000]; //the same for decompressed z values, 14b - uint8_t m_compressed_cvmasks[0x10000]; //16bit cvmask -> to byte - - uint64_t m_cmd_data[0x800]; - uint64_t m_temp_rect_data[0x800]; - - uint32_t m_start; - uint32_t m_end; - uint32_t m_current; - uint32_t m_status; - - std::unique_ptr m_tmem; - - // YUV factors - color_t m_k02; - color_t m_k13; - color_t m_k4; - color_t m_k5; - - // Texture perspective division -#if !defined(MAME_RDP) - int32_t m_norm_point_rom[64]; - int32_t m_norm_slope_rom[64]; -#else - int32_t m_norm_point_rom[64] = - { - 0x4000, 0x3f04, 0x3e10, 0x3d22, 0x3c3c, 0x3b5d, 0x3a83, 0x39b1, - 0x38e4, 0x381c, 0x375a, 0x369d, 0x35e5, 0x3532, 0x3483, 0x33d9, - 0x3333, 0x3291, 0x31f4, 0x3159, 0x30c3, 0x3030, 0x2fa1, 0x2f15, - 0x2e8c, 0x2e06, 0x2d83, 0x2d03, 0x2c86, 0x2c0b, 0x2b93, 0x2b1e, - 0x2aab, 0x2a3a, 0x29cc, 0x2960, 0x28f6, 0x288e, 0x2828, 0x27c4, - 0x2762, 0x2702, 0x26a4, 0x2648, 0x25ed, 0x2594, 0x253d, 0x24e7, - 0x2492, 0x243f, 0x23ee, 0x239e, 0x234f, 0x2302, 0x22b6, 0x226c, - 0x2222, 0x21da, 0x2193, 0x214d, 0x2108, 0x20c5, 0x2082, 0x2041, - }; - int32_t m_norm_slope_rom[64] = - { - 0xfc, 0xf4, 0xee, 0xe6, 0xdf, 0xda, 0xd2, 0xcd, - 0xc8, 0xc2, 0xbd, 0xb8, 0xb3, 0xaf, 0xaa, 0xa6, - 0xa2, 0x9d, 0x9b, 0x96, 0x93, 0x8f, 0x8c, 0x89, - 0x86, 0x83, 0x80, 0x7d, 0x7b, 0x78, 0x75, 0x73, - 0x71, 0x6e, 0x6c, 0x6a, 0x68, 0x66, 0x64, 0x62, - 0x60, 0x5e, 0x5c, 0x5b, 0x59, 0x57, 0x56, 0x55, - 0x53, 0x51, 0x50, 0x4f, 0x4d, 0x4c, 0x4a, 0x4a, - 0x48, 0x47, 0x46, 0x45, 0x43, 0x43, 0x41, 0x41, - }; -#endif - - pin64_t m_capture; - - static uint32_t s_special_9bit_clamptable[512]; - static z_decompress_entry_t const m_z_dec_table[8]; - - static uint8_t const s_bayer_matrix[16]; - static uint8_t const s_magic_matrix[16]; - static int32_t const s_rdp_command_length[]; - static char const *const s_image_format[]; - static char const *const s_image_size[]; - -public: - bool ignore; - bool dolog; -}; - -#endif // _VIDEO_N64_H_ diff --git a/waterbox/ares64/ares/thirdparty/mame/mame/video/n64types.h b/waterbox/ares64/ares/thirdparty/mame/mame/video/n64types.h deleted file mode 100644 index 4fd845593f..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/mame/video/n64types.h +++ /dev/null @@ -1,340 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz - -#ifndef _VIDEO_N64TYPES_H_ -#define _VIDEO_N64TYPES_H_ - -#include "video/rgbutil.h" - -struct misc_state_t -{ - misc_state_t() - { - m_max_level = 0; - m_min_level = 0; - } - - int32_t m_fb_format; // Framebuffer pixel format index (0 - I, 1 - IA, 2 - CI, 3 - RGBA) - int32_t m_fb_size; // Framebuffer pixel size index (0 - 4bpp, 1 - 8bpp, 2 - 16bpp, 3 - 32bpp) - int32_t m_fb_width; // Framebuffer width, in pixels - int32_t m_fb_height; // Framebuffer height, in pixels - uint32_t m_fb_address; // Framebuffer source address offset (in bytes) from start of RDRAM - - uint32_t m_zb_address; // Z-buffer source address offset (in bytes) from start of RDRAM - - int32_t m_ti_format; // Format for Texture Interface (TI) transfers - int32_t m_ti_size; // Size (in bytes) of TI transfers - int32_t m_ti_width; // Width (in pixels) of TI transfers - uint32_t m_ti_address; // Destination address for TI transfers - - uint32_t m_max_level; // Maximum LOD level for texture filtering - uint32_t m_min_level; // Minimum LOD level for texture filtering - - uint16_t m_primitive_z; // Forced Z value for current primitive, if applicable - uint16_t m_primitive_dz; // Forced Delta-Z value for current primitive, if applicable -}; - -#if 0 -class color_t -{ - public: - color_t() - { - c = 0; - } - - color_t(uint32_t color) - { - set(color); - } - - color_t(uint8_t a, uint8_t r, uint8_t g, uint8_t b) - { - set(a, r, g, b); - } - - inline void set(color_t& other) - { - c = other.c; - } - - inline void set(uint32_t color) - { - i.a = (color >> 24) & 0xff; - i.r = (color >> 16) & 0xff; - i.g = (color >> 8) & 0xff; - i.b = color & 0xff; - } - - void set(uint8_t a, uint8_t r, uint8_t g, uint8_t b) - { - i.a = a; - i.r = r; - i.g = g; - i.b = b; - } - - inline void set_direct(uint32_t color) - { - c = color; - } - - uint32_t get() - { - return i.a << 24 | i.r << 16 | i.g << 8 | i.b; - } - - union - { - uint32_t c; -#ifdef LSB_FIRST - struct { uint8_t a, b, g, r; } i; -#else - struct { uint8_t r, g, b, a; } i; -#endif - }; -}; -#else -#define color_t rgbaint_t -#endif - -enum -{ - BIT_DEPTH_32 = 0, - BIT_DEPTH_16, - - BIT_DEPTH_COUNT -}; - -struct n64_tile_t -{ - int32_t format; // Image data format: RGBA, YUV, CI, IA, I - int32_t size; // Size of texel element: 4b, 8b, 16b, 32b - int32_t line; // Size of tile line in bytes - int32_t tmem; // Starting tmem address for this tile in bytes - int32_t palette; // Palette number for 4b CI texels - int32_t ct, mt, cs, ms; // Clamp / mirror enable bits for S / T direction - int32_t mask_t, shift_t, mask_s, shift_s; // Mask values / LOD shifts - int32_t lshift_s, rshift_s, lshift_t, rshift_t; - int32_t wrapped_mask_s, wrapped_mask_t; - bool clamp_s, clamp_t; - rgbaint_t mm, invmm; - rgbaint_t wrapped_mask; - rgbaint_t mask; - rgbaint_t invmask; - rgbaint_t lshift; - rgbaint_t rshift; - rgbaint_t sth; - rgbaint_t stl; - rgbaint_t clamp_st; - uint16_t sl, tl, sh, th; // 10.2 fixed-point, starting and ending texel row / column - int32_t num; -}; - -struct span_base_t -{ - int32_t m_span_dr; - int32_t m_span_dg; - int32_t m_span_db; - int32_t m_span_da; - int32_t m_span_ds; - int32_t m_span_dt; - int32_t m_span_dw; - int32_t m_span_dz; - int32_t m_span_dymax; - int32_t m_span_dzpix; - int32_t m_span_drdy; - int32_t m_span_dgdy; - int32_t m_span_dbdy; - int32_t m_span_dady; - int32_t m_span_dzdy; -}; - -struct combine_modes_t -{ - int32_t sub_a_rgb0; - int32_t sub_b_rgb0; - int32_t mul_rgb0; - int32_t add_rgb0; - int32_t sub_a_a0; - int32_t sub_b_a0; - int32_t mul_a0; - int32_t add_a0; - - int32_t sub_a_rgb1; - int32_t sub_b_rgb1; - int32_t mul_rgb1; - int32_t add_rgb1; - int32_t sub_a_a1; - int32_t sub_b_a1; - int32_t mul_a1; - int32_t add_a1; -}; - -struct color_inputs_t -{ - // combiner inputs - color_t* combiner_rgbsub_a[2]; - color_t* combiner_rgbsub_b[2]; - color_t* combiner_rgbmul[2]; - color_t* combiner_rgbadd[2]; - - color_t* combiner_alphasub_a[2]; - color_t* combiner_alphasub_b[2]; - color_t* combiner_alphamul[2]; - color_t* combiner_alphaadd[2]; - - // blender input - color_t* blender1a_rgb[2]; - color_t* blender1b_a[2]; - color_t* blender2a_rgb[2]; - color_t* blender2b_a[2]; -}; - -struct other_modes_t -{ - int32_t cycle_type; - bool persp_tex_en; - bool detail_tex_en; - bool sharpen_tex_en; - bool tex_lod_en; - bool en_tlut; - bool tlut_type; - bool sample_type; - bool mid_texel; - bool bi_lerp0; - bool bi_lerp1; - bool convert_one; - bool key_en; - int32_t rgb_dither_sel; - int32_t alpha_dither_sel; - int32_t blend_m1a_0; - int32_t blend_m1a_1; - int32_t blend_m1b_0; - int32_t blend_m1b_1; - int32_t blend_m2a_0; - int32_t blend_m2a_1; - int32_t blend_m2b_0; - int32_t blend_m2b_1; - int32_t tex_edge; - int32_t force_blend; - int32_t blend_shift; - bool alpha_cvg_select; - bool cvg_times_alpha; - int32_t z_mode; - int32_t cvg_dest; - bool color_on_cvg; - uint8_t image_read_en; - bool z_update_en; - bool z_compare_en; - bool antialias_en; - bool z_source_sel; - int32_t dither_alpha_en; - int32_t alpha_compare_en; - int32_t alpha_dither_mode; -}; - -struct rectangle_t -{ - uint16_t m_xl; // 10.2 fixed-point - uint16_t m_yl; // 10.2 fixed-point - uint16_t m_xh; // 10.2 fixed-point - uint16_t m_yh; // 10.2 fixed-point -}; - -struct rdp_poly_state -{ - n64_rdp* m_rdp; /* pointer back to the RDP state */ - - misc_state_t m_misc_state; /* miscellaneous rasterizer bits */ - other_modes_t m_other_modes; /* miscellaneous rasterizer bits (2) */ - span_base_t m_span_base; /* span initial values for triangle rasterization */ - rectangle_t m_scissor; /* screen-space scissor bounds */ - uint32_t m_fill_color; /* poly fill color */ - n64_tile_t m_tiles[8]; /* texture tile state */ - uint8_t m_tmem[0x1000]; /* texture cache */ - int32_t tilenum; /* texture tile index */ - bool flip; /* left-major / right-major flip */ - bool rect; /* primitive is rectangle (vs. triangle) */ -}; - -#define RDP_CVG_SPAN_MAX (1024) - -// This is enormous and horrible -struct rdp_span_aux -{ - uint32_t m_unscissored_rx; - uint16_t m_cvg[RDP_CVG_SPAN_MAX]; - color_t m_memory_color; - color_t m_pixel_color; - color_t m_inv_pixel_color; - color_t m_blended_pixel_color; - - color_t m_combined_color; - color_t m_combined_alpha; - color_t m_texel0_color; - color_t m_texel0_alpha; - color_t m_texel1_color; - color_t m_texel1_alpha; - color_t m_next_texel_color; - color_t m_next_texel_alpha; - color_t m_blend_color; /* constant blend color */ - color_t m_prim_color; /* flat primitive color */ - color_t m_prim_alpha; /* flat primitive alpha */ - color_t m_env_color; /* generic color constant ('environment') */ - color_t m_env_alpha; /* generic alpha constant ('environment') */ - color_t m_fog_color; /* generic color constant ('fog') */ - color_t m_shade_color; /* gouraud-shaded color */ - color_t m_shade_alpha; /* gouraud-shaded alpha */ - color_t m_key_scale; /* color-keying constant */ - color_t m_noise_color; /* noise */ - color_t m_lod_fraction; /* Z-based LOD fraction for this poly */ - color_t m_prim_lod_fraction; /* fixed LOD fraction for this poly */ - color_t m_k4; - color_t m_k5; - color_inputs_t m_color_inputs; - uint32_t m_current_pix_cvg; - uint32_t m_current_mem_cvg; - uint32_t m_current_cvg_bit; - int32_t m_shift_a; - int32_t m_shift_b; - int32_t m_precomp_s; - int32_t m_precomp_t; - int32_t m_blend_enable; - bool m_pre_wrap; - int32_t m_dzpix_enc; - uint8_t* m_tmem; /* pointer to texture cache for this polygon */ - bool m_start_span; - rgbaint_t m_clamp_diff[8]; - combine_modes_t m_combine; -}; - -struct z_decompress_entry_t -{ - uint32_t shift; - uint32_t add; -}; - -struct cv_mask_derivative_t -{ - uint8_t cvg; - uint8_t cvbit; - uint8_t xoff; - uint8_t yoff; -}; - -class span_param_t -{ - public: - union - { - uint32_t w; -#ifdef LSB_FIRST - struct { uint16_t l; int16_t h; } h; -#else - struct { int16_t h; uint16_t l; } h; -#endif - }; -}; - -#endif // _VIDEO_N64TYPES_H_ diff --git a/waterbox/ares64/ares/thirdparty/mame/mame/video/pin64.cpp b/waterbox/ares64/ares/thirdparty/mame/mame/video/pin64.cpp deleted file mode 100644 index ba9b217d4f..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/mame/video/pin64.cpp +++ /dev/null @@ -1,511 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz - -#include "emu.h" -#include "pin64.h" - -#define CAP_NAME "pin64_%d.cap" - -// pin64_fileutil_t members - -void pin64_fileutil_t::write(FILE* file, uint32_t data) { - if (!file) - return; - - uint8_t temp(data >> 24); - fwrite(&temp, 1, 1, file); - - temp = (uint8_t)(data >> 16); - fwrite(&temp, 1, 1, file); - - temp = (uint8_t)(data >> 8); - fwrite(&temp, 1, 1, file); - - temp = (uint8_t)data; - fwrite(&temp, 1, 1, file); -} - -void pin64_fileutil_t::write(FILE* file, const uint8_t* data, uint32_t size) { - if (!file) - return; - - fwrite(data, 1, size, file); -} - - - -// pin64_data_t members - -void pin64_data_t::put8(uint8_t data) { - m_data.push_back(data); - m_offset++; -} - -void pin64_data_t::put16(uint16_t data) { - put8((uint8_t)(data >> 8)); - put8((uint8_t)data); -} - -void pin64_data_t::put32(uint32_t data) { - put16((uint16_t)(data >> 16)); - put16((uint16_t)data); -} - -void pin64_data_t::put64(uint64_t data) { - put32((uint32_t)(data >> 32)); - put32((uint32_t)data); -} - -uint8_t pin64_data_t::get8() { - if (m_offset >= m_data.size()) - fatalerror("PIN64: Call to pin64_data_t::get8() at end of block (requested offset %x, size %x)\n", m_offset, (uint32_t)m_data.size()); - - uint8_t ret = m_data[m_offset]; - m_offset++; - - return ret; -} - -uint16_t pin64_data_t::get16() { - uint16_t ret = (uint16_t)get8() << 8; - return ret | get8(); -} - -uint32_t pin64_data_t::get32() { - uint32_t ret = (uint32_t)get16() << 16; - return ret | get16(); -} - -uint64_t pin64_data_t::get64() { - uint64_t ret = (uint64_t)get32() << 32; - return ret | get32(); -} - -uint8_t pin64_data_t::get8(uint32_t offset, bool temp_access) { - update_offset(offset, temp_access); - - uint8_t ret = get8(); - m_offset = m_old_offset; - return ret; -} - -uint16_t pin64_data_t::get16(uint32_t offset, bool temp_access) { - update_offset(offset, temp_access); - - uint16_t ret = get16(); - m_offset = m_old_offset; - return ret; -} - -uint32_t pin64_data_t::get32(uint32_t offset, bool temp_access) { - update_offset(offset, temp_access); - - uint32_t ret = get32(); - m_offset = m_old_offset; - return ret; -} - -uint64_t pin64_data_t::get64(uint32_t offset, bool temp_access) { - update_offset(offset, temp_access); - - uint32_t ret = get64(); - m_offset = m_old_offset; - return ret; -} - -void pin64_data_t::reset() { - m_old_offset = 0; - m_offset = 0; -} - -void pin64_data_t::clear() { - reset(); - m_data.clear(); -} - -void pin64_data_t::update_offset(uint32_t offset, bool update_current) { - m_old_offset = (update_current ? offset : m_offset); - m_offset = offset; -} - - - -// pin64_printer_t members - -void pin64_printer_t::print_data(pin64_block_t* block) { - pin64_data_t* data = block->data(); - - printf(" CRC32: %08x\n", (uint32_t)block->crc32()); fflush(stdout); - printf(" Data Size: %08x\n", (uint32_t)data->size()); fflush(stdout); - printf(" Data: "); fflush(stdout); - - const uint32_t data_size = data->size(); - const uint32_t row_count = (data_size + 31) / 32; - const uint8_t* bytes = data->bytes(); - for (uint32_t row = 0; row < row_count; row++) { - const uint32_t row_index = row * 32; - const uint32_t data_remaining = data_size - row_index; - const uint32_t col_count = (data_remaining > 32 ? 32 : data_remaining); - for (uint32_t col = 0; col < col_count; col++) { - printf("%02x ", bytes[row_index + col]); fflush(stdout); - } - - if (row == (row_count - 1)) { - printf("\n"); fflush(stdout); - } else { - printf("\n "); fflush(stdout); - } - } - - printf("\n"); fflush(stdout); -} - -void pin64_printer_t::print_command(int cmd_start, int cmd, std::unordered_map& blocks, std::vector& commands) { - pin64_block_t* block = blocks[commands[cmd]]; - pin64_data_t* data = block->data(); - - printf(" Command %d:\n", cmd - cmd_start); fflush(stdout); - const uint32_t cmd_size(data->get32()); - printf(" CRC32: %08x\n", (uint32_t)commands[cmd]); fflush(stdout); - printf(" Packet Data Size: %d words\n", cmd_size); fflush(stdout); - printf(" Packet Data: "); fflush(stdout); - - bool load_command = false; - for (int i = 0; i < cmd_size; i++) { - const uint64_t cmd_entry(data->get64()); - if (i == 0) { - const uint8_t top_byte = uint8_t(cmd_entry >> 56) & 0x3f; - if (top_byte == 0x30 || top_byte == 0x33 || top_byte == 0x34) - load_command = true; - } - printf("%08x%08x\n", uint32_t(cmd_entry >> 32), (uint32_t)cmd_entry); fflush(stdout); - - if (i < (cmd_size - 1)) { - printf(" "); fflush(stdout); - } - } - - printf(" Data Block Present: %s\n", load_command ? "Yes" : "No"); fflush(stdout); - - if (load_command) { - printf(" Data Block CRC32: %08x\n", data->get32()); fflush(stdout); - } - - data->reset(); -}; - - - -// pin64_block_t members - -void pin64_block_t::finalize() { -#if !defined(MAME_RDP) - if (m_data.size() > 0) - m_crc32 = util::crc32_creator::simple(m_data.bytes(), m_data.size()); - else -#endif - m_crc32 = ~0; - m_data.reset(); -} - -void pin64_block_t::clear() { - m_crc32 = 0; - m_data.clear(); -} - -void pin64_block_t::write(FILE* file) { - pin64_fileutil_t::write(file, m_crc32); - pin64_fileutil_t::write(file, m_data.size()); - if (m_data.size() > 0) - pin64_fileutil_t::write(file, m_data.bytes(), m_data.size()); -} - -uint32_t pin64_block_t::size() { - return sizeof(uint32_t) // data CRC32 - + sizeof(uint32_t) // data size - + m_data.size(); // data -} - - - -// pin64_t members - -const uint8_t pin64_t::CAP_ID[8] = { 'P', 'I', 'N', '6', '4', 'C', 'A', 'P' }; - -pin64_t::~pin64_t() { - if (m_capture_file) - finish(); - - clear(); -} - -void pin64_t::start(int frames) -{ - if (m_capture_index == ~0) - init_capture_index(); - - if (m_capture_file) - fatalerror("PIN64: Call to start() while already capturing\n"); - - char name_buf[256]; - sprintf(name_buf, CAP_NAME, m_capture_index); - m_capture_index++; - - m_capture_file = fopen(name_buf, "wb"); - - m_capture_frames = frames; - - m_frames.push_back(0); -} - -void pin64_t::finish() { - if (!m_capture_file) - return; - - finalize(); - print(); - - write(m_capture_file); - fclose(m_capture_file); - m_capture_file = nullptr; - - clear(); -} - -void pin64_t::finalize() { - finish_command(); - data_end(); -} - -void pin64_t::play(int index) { -} - -void pin64_t::mark_frame(running_machine& machine) { - if (m_capture_file) { - if (m_frames.size() == m_capture_frames && m_capture_frames > 0) { - printf("\n"); - finish(); -#if !defined(MAME_RDP) - machine.popmessage("Done recording."); -#endif - } else { - printf("%d ", (uint32_t)m_commands.size()); - m_frames.push_back((uint32_t)m_commands.size()); - } - } - -#if PIN64_ENABLE_CAPTURE - if (machine.input().code_pressed_once(KEYCODE_N) && !m_capture_file) { - start(1); - machine.popmessage("Capturing PIN64 snapshot to pin64_%d.cap", m_capture_index - 1); - } else if (machine.input().code_pressed_once(KEYCODE_M)) { - if (m_capture_file) { - finish(); - machine.popmessage("Done recording."); - } else { - start(); - machine.popmessage("Recording PIN64 movie to pin64_%d.cap", m_capture_index - 1); - } - } -#endif -} - -void pin64_t::command(uint64_t* cmd_data, uint32_t size) { - if (!capturing()) - return; - - finish_command(); - - m_current_command = new pin64_block_t(); - m_current_command->data()->put32(size); - - for (uint32_t i = 0 ; i < size; i++) - m_current_command->data()->put64(cmd_data[i]); -} - -void pin64_t::finish_command() { - if (!m_current_command) - return; - - m_current_command->finalize(); - if (m_blocks.find(m_current_command->crc32()) == m_blocks.end()) - m_blocks[m_current_command->crc32()] = m_current_command; - - m_commands.push_back(m_current_command->crc32()); -} - -void pin64_t::data_begin() { - if (!capturing()) - return; - - if (m_current_data) - data_end(); - - m_current_data = new pin64_block_t(); -} - -pin64_data_t* pin64_t::data_block() { - if (!capturing() || !m_current_data) - return &m_dummy_data; - - return m_current_data->data(); -} - -void pin64_t::data_end() { - if (!capturing() || !m_current_data) - return; - - m_current_data->finalize(); - m_current_command->data()->put32(m_current_data->crc32()); - finish_command(); - - if (m_blocks.find(m_current_data->crc32()) == m_blocks.end()) - m_blocks[m_current_data->crc32()] = m_current_data; - - m_current_data = nullptr; -} - -size_t pin64_t::size() { - return header_size() + block_directory_size() + cmdlist_directory_size() + cmdlist_size(); -} - -size_t pin64_t::header_size() { - return sizeof(uint8_t) * 8 // "PIN64CAP" - + sizeof(uint32_t) // total file size - + sizeof(uint32_t) // start of block directory data - + sizeof(uint32_t) // start of command-list directory data - + sizeof(uint32_t) // start of blocks - + sizeof(uint32_t); // start of commands -} - -size_t pin64_t::block_directory_size() { - return (m_blocks.size() + 1) * sizeof(uint32_t); -} - -size_t pin64_t::cmdlist_directory_size() { - return (m_frames.size() + 1) * sizeof(uint16_t); -} - -size_t pin64_t::blocks_size() { - size_t block_size = 0; - for (std::pair block_pair : m_blocks) - block_size += (block_pair.second)->size(); - - return block_size; -} - -size_t pin64_t::cmdlist_size() { - return (m_commands.size() + 1) * sizeof(uint32_t); -} - -void pin64_t::print() -{ - printf("Total Size: %9x bytes\n", (uint32_t)size()); fflush(stdout); - printf("Header Size: %9x bytes\n", (uint32_t)header_size()); fflush(stdout); - printf("Block Dir Size: %9x bytes\n", (uint32_t)block_directory_size()); fflush(stdout); - printf("Cmdlist Dir Size: %9x bytes\n", (uint32_t)cmdlist_directory_size()); fflush(stdout); - printf("Blocks Size: %9x bytes\n", (uint32_t)blocks_size()); fflush(stdout); - printf("Cmdlist Size: %9x bytes\n", (uint32_t)cmdlist_size()); fflush(stdout); - - printf("Command-List Count: %d\n", (uint32_t)m_frames.size()); fflush(stdout); - for (int i = 0; i < m_frames.size(); i++) { - printf(" List %d:\n", i); fflush(stdout); - - const int next_start = ((i == (m_frames.size() - 1)) ? m_commands.size() : m_frames[i+1]); - for (int cmd = m_frames[i]; cmd < next_start; cmd++) { - pin64_printer_t::print_command(m_frames[i], cmd, m_blocks, m_commands); - } - if (i == (m_frames.size() - 1)) { - printf("\n"); fflush(stdout); - } - } - - printf("\nData Block Count: %d\n", (uint32_t)m_blocks.size()); fflush(stdout); - int i = 0; - for (std::pair block_pair : m_blocks) { - printf(" Block %d:\n", i); fflush(stdout); - - pin64_printer_t::print_data((block_pair.second)); - if (i == (m_blocks.size() - 1)) { - printf("\n"); fflush(stdout); - } - i++; - } -} - -void pin64_t::write(FILE* file) { - const uint32_t size_total = size(); - const uint32_t size_header = header_size(); - const uint32_t size_block_dir = block_directory_size(); - const uint32_t size_cmdlist_dir = cmdlist_directory_size(); - const uint32_t size_blocks_dir = blocks_size(); - - pin64_fileutil_t::write(file, CAP_ID, 8); - pin64_fileutil_t::write(file, size_total); - pin64_fileutil_t::write(file, size_header); - pin64_fileutil_t::write(file, size_header + size_block_dir); - pin64_fileutil_t::write(file, size_header + size_block_dir + size_cmdlist_dir); - pin64_fileutil_t::write(file, size_header + size_block_dir + size_cmdlist_dir + size_blocks_dir); - - write_data_directory(file); - write_cmdlist_directory(file); - - for (std::pair block_pair : m_blocks) - (block_pair.second)->write(file); - - pin64_fileutil_t::write(file, m_commands.size()); - for (util::crc32_t crc : m_commands) - pin64_fileutil_t::write(file, crc); -} - -void pin64_t::write_data_directory(FILE* file) { - pin64_fileutil_t::write(file, m_blocks.size()); - size_t offset(header_size()); - for (std::pair block_pair : m_blocks) { - pin64_fileutil_t::write(file, offset); - offset += (block_pair.second)->size(); - } -} - -void pin64_t::write_cmdlist_directory(FILE* file) { - pin64_fileutil_t::write(file, m_frames.size()); - for (uint32_t frame : m_frames) - pin64_fileutil_t::write(file, frame); -} - -void pin64_t::clear() { - if (m_capture_file != nullptr) { - fclose(m_capture_file); - m_capture_file = nullptr; - } - - for (std::pair block_pair : m_blocks) - delete block_pair.second; - - m_blocks.clear(); - m_commands.clear(); - m_frames.clear(); - - m_current_data = nullptr; - m_current_command = nullptr; -} - -void pin64_t::init_capture_index() -{ - char name_buf[256]; - bool found = true; - - m_capture_index = 0; - - do { - sprintf(name_buf, CAP_NAME, m_capture_index); - - FILE* temp = fopen(name_buf, "rb"); - if (temp == nullptr) { - break; - } else { - fclose(temp); - m_capture_index++; - } - } while(found); -} diff --git a/waterbox/ares64/ares/thirdparty/mame/mame/video/pin64.h b/waterbox/ares64/ares/thirdparty/mame/mame/video/pin64.h deleted file mode 100644 index 31b836f7ed..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/mame/video/pin64.h +++ /dev/null @@ -1,180 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz -#ifndef MAME_VIDEO_PIN64_H -#define MAME_VIDEO_PIN64_H - -#pragma once - -#include -#include -#include - - -#define PIN64_ENABLE_CAPTURE (0) - - -class pin64_fileutil_t { -public: - static void write(FILE* file, uint32_t data); - static void write(FILE* file, const uint8_t* data, uint32_t size); -}; - -class pin64_command_t { -public: - std::vector data; -}; - -class pin64_data_t { -public: - pin64_data_t() - : m_offset(0) - , m_old_offset(0) { } - - void reset(); - void clear(); - - // setters - virtual void put8(uint8_t data); - virtual void put16(uint16_t data); - virtual void put32(uint32_t data); - virtual void put64(uint64_t data); - - // getters - virtual uint8_t get8(); - virtual uint8_t get8(uint32_t offset, bool temp_access = false); - virtual uint16_t get16(); - virtual uint16_t get16(uint32_t offset, bool temp_access = false); - virtual uint32_t get32(); - virtual uint32_t get32(uint32_t offset, bool temp_access = false); - virtual uint64_t get64(); - virtual uint64_t get64(uint32_t offset, bool temp_access = false); - virtual uint32_t offset() { return m_offset; } - uint8_t* bytes() { return (m_data.size() > 0) ? &m_data[0] : nullptr; } - uint32_t size() { return m_data.size(); } - -private: - void update_offset(uint32_t offset, bool temp_access = false); - -protected: - std::vector m_data; - - uint32_t m_offset; - uint32_t m_old_offset; -}; - -class pin64_dummy_data_t : public pin64_data_t { -public: - void put8(uint8_t data) override { } - void put16(uint16_t data) override { } - void put32(uint32_t data) override { } - void put64(uint64_t data) override { } - - uint8_t get8() override { return 0; } - uint8_t get8(uint32_t offset, bool update_current = true) override { return 0; } - uint16_t get16() override { return 0; } - uint16_t get16(uint32_t offset, bool update_current = true) override { return 0; } - uint32_t get32() override { return 0; } - uint32_t get32(uint32_t offset, bool update_current = true) override { return 0; } - uint64_t get64() override { return 0; } - uint64_t get64(uint32_t offset, bool update_current = true) override { return 0; } - - uint32_t offset() override { return 0; } -}; - -class pin64_block_t { -public: - pin64_block_t() - : m_crc32{0} { } - virtual ~pin64_block_t() { } - - void finalize(); - void clear(); - - void write(FILE* file); - - // getters - uint32_t size(); - pin64_data_t* data() { return &m_data; } - util::crc32_t crc32() const { return m_crc32; } - -protected: - util::crc32_t m_crc32; - pin64_data_t m_data; -}; - -class pin64_printer_t { -public: - static void print_data(pin64_block_t* block); - static void print_command(int cmd_start, int cmd, std::unordered_map& blocks, std::vector& commands); -}; - -class pin64_t -{ -public: - pin64_t() - : m_capture_file(nullptr) - , m_capture_index(~0) - , m_capture_frames(0) - , m_current_data(nullptr) - , m_current_command(nullptr) - , m_playing(false) - { } - ~pin64_t(); - - void start(int frames = 0); - void finish(); - void clear(); - void print(); - - void mark_frame(running_machine& machine); - void play(int index); - - void command(uint64_t* cmd_data, uint32_t size); - - void data_begin(); - pin64_data_t* data_block(); - pin64_block_t& block() { return *m_current_data; } - void data_end(); - - bool capturing() const { return m_capture_file != nullptr; } - bool playing() const { return m_playing; } - - size_t size(); - -private: - void start_command_block(); - - void write(FILE* file); - - size_t header_size(); - size_t block_directory_size(); - size_t cmdlist_directory_size(); - size_t blocks_size(); - size_t cmdlist_size(); - - void finish_command(); - - void write_data_directory(FILE* file); - void write_cmdlist_directory(FILE* file); - void init_capture_index(); - - void finalize(); - - FILE *m_capture_file; - int32_t m_capture_index; - int m_capture_frames; - - pin64_block_t* m_current_data; - pin64_block_t* m_current_command; - std::unordered_map m_blocks; - - std::vector m_commands; - std::vector m_frames; - - bool m_playing; - - pin64_dummy_data_t m_dummy_data; - static const uint8_t CAP_ID[8]; -}; - -#endif // MAME_VIDEO_PIN64_H diff --git a/waterbox/ares64/ares/thirdparty/mame/mame/video/rdpblend.cpp b/waterbox/ares64/ares/thirdparty/mame/mame/video/rdpblend.cpp deleted file mode 100644 index 7e20b68aa6..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/mame/video/rdpblend.cpp +++ /dev/null @@ -1,461 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz -/****************************************************************************** - - - SGI/Nintendo Reality Display Processor Blend Unit (BL) - ------------------- - - by Ryan Holtz - based on initial C code by Ville Linde - contains additional improvements from angrylion, Ziggy, Gonetz and Orkin - - -******************************************************************************/ - -#include "emu.h" -#include "includes/n64.h" -#include "video/n64.h" - -n64_blender_t::n64_blender_t() -{ - blend1[0] = &n64_blender_t::cycle1_noblend_noacvg_nodither; - blend1[1] = &n64_blender_t::cycle1_noblend_noacvg_dither; - blend1[2] = &n64_blender_t::cycle1_noblend_acvg_nodither; - blend1[3] = &n64_blender_t::cycle1_noblend_acvg_dither; - blend1[4] = &n64_blender_t::cycle1_blend_noacvg_nodither; - blend1[5] = &n64_blender_t::cycle1_blend_noacvg_dither; - blend1[6] = &n64_blender_t::cycle1_blend_acvg_nodither; - blend1[7] = &n64_blender_t::cycle1_blend_acvg_dither; - - blend2[0] = &n64_blender_t::cycle2_noblend_noacvg_nodither; - blend2[1] = &n64_blender_t::cycle2_noblend_noacvg_dither; - blend2[2] = &n64_blender_t::cycle2_noblend_acvg_nodither; - blend2[3] = &n64_blender_t::cycle2_noblend_acvg_dither; - blend2[4] = &n64_blender_t::cycle2_blend_noacvg_nodither; - blend2[5] = &n64_blender_t::cycle2_blend_noacvg_dither; - blend2[6] = &n64_blender_t::cycle2_blend_acvg_nodither; - blend2[7] = &n64_blender_t::cycle2_blend_acvg_dither; - - for (int value = 0; value < 256; value++) - { - for (int dither = 0; dither < 8; dither++) - { - m_color_dither[(value << 3) | dither] = (uint8_t)dither_color(value, dither); - m_alpha_dither[(value << 3) | dither] = (uint8_t)dither_alpha(value, dither); - } - } -} - -int32_t n64_blender_t::dither_alpha(int32_t alpha, int32_t dither) -{ - return min(alpha + dither, 0xff); -} - -int32_t n64_blender_t::dither_color(int32_t color, int32_t dither) -{ - if ((color & 7) > dither) - { - color = (color & 0xf8) + 8; - if (color > 247) - { - color = 255; - } - } - return color; -} - -bool n64_blender_t::test_for_reject(rdp_span_aux* userdata, const rdp_poly_state& object) -{ - if (alpha_reject(userdata, object)) - { - return true; - } - if (object.m_other_modes.antialias_en ? !userdata->m_current_pix_cvg : !userdata->m_current_cvg_bit) - { - return true; - } - return false; -} - -bool n64_blender_t::alpha_reject(rdp_span_aux* userdata, const rdp_poly_state& object) -{ - switch (object.m_other_modes.alpha_dither_mode) - { - case 0: - case 1: - return false; - - case 2: - return userdata->m_pixel_color.get_a() < userdata->m_blend_color.get_a(); - - case 3: - return userdata->m_pixel_color.get_a() < (machine().rand() & 0xff); - - default: - return false; - } -} - -bool n64_blender_t::cycle1_noblend_noacvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_pixel_color.set_a(m_alpha_dither[((uint8_t)userdata->m_pixel_color.get_a() << 3) | adseed]); - userdata->m_shade_color.set_a(m_alpha_dither[((uint8_t)userdata->m_shade_color.get_a() << 3) | adseed]); - if (test_for_reject(userdata, object)) - { - return false; - } - blended_pixel.set(*userdata->m_color_inputs.blender1a_rgb[0]); - - return true; -} - -bool n64_blender_t::cycle1_noblend_noacvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_pixel_color.set_a(m_alpha_dither[((uint8_t)userdata->m_pixel_color.get_a() << 3) | adseed]); - userdata->m_shade_color.set_a(m_alpha_dither[((uint8_t)userdata->m_shade_color.get_a() << 3) | adseed]); - if (test_for_reject(userdata, object)) - { - return false; - } - - rgbaint_t index(*userdata->m_color_inputs.blender1a_rgb[0]); - index.shl_imm(3); - index.or_imm(dith); - index.and_imm(0x7ff); - blended_pixel.set(0, m_color_dither[index.get_r32()], m_color_dither[index.get_g32()], m_color_dither[index.get_b32()]); - - return true; -} - -bool n64_blender_t::cycle1_noblend_acvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_shade_color.set_a(m_alpha_dither[((uint8_t)userdata->m_shade_color.get_a() << 3) | adseed]); - - if (test_for_reject(userdata, object)) - { - return false; - } - blended_pixel.set(*userdata->m_color_inputs.blender1a_rgb[0]); - - return true; -} - -bool n64_blender_t::cycle1_noblend_acvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_shade_color.set_a(m_alpha_dither[((uint8_t)userdata->m_shade_color.get_a() << 3) | adseed]); - - if (test_for_reject(userdata, object)) - { - return false; - } - - rgbaint_t index(*userdata->m_color_inputs.blender1a_rgb[0]); - index.shl_imm(3); - index.or_imm(dith); - index.and_imm(0x7ff); - blended_pixel.set(0, m_color_dither[index.get_r32()], m_color_dither[index.get_g32()], m_color_dither[index.get_b32()]); - - return true; -} - -bool n64_blender_t::cycle1_blend_noacvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_pixel_color.set_a(m_alpha_dither[((uint8_t)userdata->m_pixel_color.get_a() << 3) | adseed]); - userdata->m_shade_color.set_a(m_alpha_dither[((uint8_t)userdata->m_shade_color.get_a() << 3) | adseed]); - - if (test_for_reject(userdata, object)) - { - return false; - } - - blend_with_partial_reject(blended_pixel, 0, partialreject, sel0, userdata, object); - - return true; -} - -bool n64_blender_t::cycle1_blend_noacvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_pixel_color.set_a(m_alpha_dither[((uint8_t)userdata->m_pixel_color.get_a() << 3) | adseed]); - userdata->m_shade_color.set_a(m_alpha_dither[((uint8_t)userdata->m_shade_color.get_a() << 3) | adseed]); - - if (test_for_reject(userdata, object)) - { - return false; - } - - color_t rgb; - blend_with_partial_reject(rgb, 0, partialreject, sel0, userdata, object); - - rgb.shl_imm(3); - rgb.or_imm(dith); - rgb.and_imm(0x7ff); - blended_pixel.set(0, m_color_dither[rgb.get_r32()], m_color_dither[rgb.get_g32()], m_color_dither[rgb.get_b32()]); - - return true; -} - -bool n64_blender_t::cycle1_blend_acvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_shade_color.set_a(m_alpha_dither[((uint8_t)userdata->m_shade_color.get_a() << 3) | adseed]); - - if (test_for_reject(userdata, object)) - { - return false; - } - - blend_with_partial_reject(blended_pixel, 0, partialreject, sel0, userdata, object); - - return true; -} - -bool n64_blender_t::cycle1_blend_acvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_shade_color.set_a(m_alpha_dither[((uint8_t)userdata->m_shade_color.get_a() << 3) | adseed]); - - if (test_for_reject(userdata, object)) - { - return false; - } - - color_t rgb; - blend_with_partial_reject(rgb, 0, partialreject, sel0, userdata, object); - - rgb.shl_imm(3); - rgb.or_imm(dith); - rgb.and_imm(0x7ff); - blended_pixel.set(0, m_color_dither[rgb.get_r32()], m_color_dither[rgb.get_g32()], m_color_dither[rgb.get_b32()]); - - return true; -} - -bool n64_blender_t::cycle2_noblend_noacvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_pixel_color.set_a(m_alpha_dither[((uint8_t)userdata->m_pixel_color.get_a() << 3) | adseed]); - userdata->m_shade_color.set_a(m_alpha_dither[((uint8_t)userdata->m_shade_color.get_a() << 3) | adseed]); - - if (test_for_reject(userdata, object)) - { - return false; - } - - userdata->m_inv_pixel_color.set_a(0xff - userdata->m_color_inputs.blender1b_a[0]->get_a()); - blend_pipe(0, sel0, userdata->m_blended_pixel_color, userdata, object); - userdata->m_blended_pixel_color.set_a(userdata->m_pixel_color.get_a()); - - blended_pixel.set(*userdata->m_color_inputs.blender1a_rgb[1]); - - return true; -} - -bool n64_blender_t::cycle2_noblend_noacvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_pixel_color.set_a(m_alpha_dither[((uint8_t)userdata->m_pixel_color.get_a() << 3) | adseed]); - userdata->m_shade_color.set_a(m_alpha_dither[((uint8_t)userdata->m_shade_color.get_a() << 3) | adseed]); - - if (test_for_reject(userdata, object)) - { - return false; - } - - userdata->m_inv_pixel_color.set_a(0xff - (uint8_t)userdata->m_color_inputs.blender1b_a[0]->get_a()); - blend_pipe(0, sel0, userdata->m_blended_pixel_color, userdata, object); - userdata->m_blended_pixel_color.set_a(userdata->m_pixel_color.get_a()); - - rgbaint_t index(*userdata->m_color_inputs.blender1a_rgb[1]); - index.shl_imm(3); - index.or_imm(dith); - index.and_imm(0x7ff); - blended_pixel.set(0, m_color_dither[index.get_r32()], m_color_dither[index.get_g32()], m_color_dither[index.get_b32()]); - - return true; -} - -bool n64_blender_t::cycle2_noblend_acvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_shade_color.set_a(m_alpha_dither[((uint8_t)userdata->m_shade_color.get_a() << 3) | adseed]); - - if (test_for_reject(userdata, object)) - { - return false; - } - - userdata->m_inv_pixel_color.set_a(0xff - userdata->m_color_inputs.blender1b_a[0]->get_a()); - blend_pipe(0, sel0, userdata->m_blended_pixel_color, userdata, object); - userdata->m_blended_pixel_color.set_a(userdata->m_pixel_color.get_a()); - - blended_pixel.set(*userdata->m_color_inputs.blender1a_rgb[1]); - - return true; -} - -bool n64_blender_t::cycle2_noblend_acvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_shade_color.set_a(m_alpha_dither[((uint8_t)userdata->m_shade_color.get_a() << 3) | adseed]); - - if (test_for_reject(userdata, object)) - { - return false; - } - - userdata->m_inv_pixel_color.set_a(0xff - userdata->m_color_inputs.blender1b_a[0]->get_a()); - blend_pipe(0, sel0, userdata->m_blended_pixel_color, userdata, object); - userdata->m_blended_pixel_color.set_a(userdata->m_pixel_color.get_a()); - - rgbaint_t index(*userdata->m_color_inputs.blender1a_rgb[1]); - index.shl_imm(3); - index.or_imm(dith); - index.and_imm(0x7ff); - blended_pixel.set(0, m_color_dither[index.get_r32()], m_color_dither[index.get_g32()], m_color_dither[index.get_b32()]); - - return true; -} - -bool n64_blender_t::cycle2_blend_noacvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_pixel_color.set_a(m_alpha_dither[((uint8_t)userdata->m_pixel_color.get_a() << 3) | adseed]); - userdata->m_shade_color.set_a(m_alpha_dither[((uint8_t)userdata->m_shade_color.get_a() << 3) | adseed]); - - if (test_for_reject(userdata, object)) - { - return false; - } - - userdata->m_inv_pixel_color.set_a(0xff - userdata->m_color_inputs.blender1b_a[0]->get_a()); - blend_pipe(0, sel0, userdata->m_blended_pixel_color, userdata, object); - userdata->m_blended_pixel_color.set_a(userdata->m_pixel_color.get_a()); - - blend_with_partial_reject(blended_pixel, 1, partialreject, sel1, userdata, object); - - return true; -} - -bool n64_blender_t::cycle2_blend_noacvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_pixel_color.set_a(m_alpha_dither[(userdata->m_pixel_color.get_a() << 3) | adseed]); - userdata->m_shade_color.set_a(m_alpha_dither[(userdata->m_shade_color.get_a() << 3) | adseed]); - - if (test_for_reject(userdata, object)) - { - return false; - } - - userdata->m_inv_pixel_color.set_a(0xff - userdata->m_color_inputs.blender1b_a[0]->get_a()); - blend_pipe(0, sel0, userdata->m_blended_pixel_color, userdata, object); - userdata->m_blended_pixel_color.set_a(userdata->m_pixel_color.get_a()); - - color_t rgb; - blend_with_partial_reject(rgb, 1, partialreject, sel1, userdata, object); - - rgb.shl_imm(3); - rgb.or_imm(dith); - rgb.and_imm(0x7ff); - blended_pixel.set(0, m_color_dither[rgb.get_r32()], m_color_dither[rgb.get_g32()], m_color_dither[rgb.get_b32()]); - - return true; -} - -bool n64_blender_t::cycle2_blend_acvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_shade_color.set_a(m_alpha_dither[(userdata->m_shade_color.get_a() << 3) | adseed]); - - if (test_for_reject(userdata, object)) - { - return false; - } - - userdata->m_inv_pixel_color.set_a(0xff - userdata->m_color_inputs.blender1b_a[0]->get_a()); - blend_pipe(0, sel0, userdata->m_blended_pixel_color, userdata, object); - userdata->m_blended_pixel_color.set_a(userdata->m_pixel_color.get_a()); - - blend_with_partial_reject(blended_pixel, 1, partialreject, sel1, userdata, object); - - return true; -} - -bool n64_blender_t::cycle2_blend_acvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - userdata->m_shade_color.set_a(m_alpha_dither[(userdata->m_shade_color.get_a() << 3) | adseed]); - - if (test_for_reject(userdata, object)) - { - return false; - } - - userdata->m_inv_pixel_color.set_a(0xff - userdata->m_color_inputs.blender1b_a[0]->get_a()); - blend_pipe(0, sel0, userdata->m_blended_pixel_color, userdata, object); - userdata->m_blended_pixel_color.set_a(userdata->m_pixel_color.get_a()); - - color_t rgb; - blend_with_partial_reject(rgb, 1, partialreject, sel1, userdata, object); - - rgb.shl_imm(3); - rgb.or_imm(dith); - rgb.and_imm(0x7ff); - blended_pixel.set(0, m_color_dither[rgb.get_r32()], m_color_dither[rgb.get_g32()], m_color_dither[rgb.get_b32()]); - - return true; -} - -void n64_blender_t::blend_with_partial_reject(color_t& out, int32_t cycle, int32_t partialreject, int32_t select, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - if (partialreject && userdata->m_pixel_color.get_a() >= 0xff) - { - out.set(*userdata->m_color_inputs.blender1a_rgb[cycle]); - } - else - { - userdata->m_inv_pixel_color.set_a(0xff - userdata->m_color_inputs.blender1b_a[cycle]->get_a()); - blend_pipe(cycle, select, out, userdata, object); - } -} - -void n64_blender_t::blend_pipe(const int cycle, const int special, color_t& out, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - const int32_t mask = 0xff &~ (0x73 * special); - const int32_t shift_a = 3 + userdata->m_shift_a * special; - const int32_t shift_b = 3 + userdata->m_shift_b * special; - const int32_t blend1a = (userdata->m_color_inputs.blender1b_a[cycle]->get_a() >> shift_a) & mask; - const int32_t blend2a = (userdata->m_color_inputs.blender2b_a[cycle]->get_a() >> shift_b) & mask; - const int32_t special_shift = special << 1; - - rgbaint_t temp(*userdata->m_color_inputs.blender1a_rgb[cycle]); - temp.mul_imm(blend1a); - - rgbaint_t secondary(*userdata->m_color_inputs.blender2a_rgb[cycle]); - rgbaint_t other(*userdata->m_color_inputs.blender2a_rgb[cycle]); - other.mul_imm(blend2a); - - temp.add(other); - secondary.shl_imm(special_shift); - temp.add(secondary); - temp.shr_imm(object.m_other_modes.blend_shift); - - int32_t factor_sum = 0; - if (!object.m_other_modes.force_blend) - { - factor_sum = ((blend1a >> 2) + (blend2a >> 2) + 1) & 0xf; - if (factor_sum) - { - temp.set_r(temp.get_r32() / factor_sum); - temp.set_g(temp.get_g32() / factor_sum); - temp.set_b(temp.get_b32() / factor_sum); - } - else - { - temp.set(0, 0xff, 0xff, 0xff); - } - } - - temp.min(255); - out.set(temp); -} - -inline int32_t n64_blender_t::min(const int32_t x, const int32_t min) -{ - if (x < min) - { - return x; - } - return min; -} diff --git a/waterbox/ares64/ares/thirdparty/mame/mame/video/rdpblend.h b/waterbox/ares64/ares/thirdparty/mame/mame/video/rdpblend.h deleted file mode 100644 index b81e817e2b..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/mame/video/rdpblend.h +++ /dev/null @@ -1,72 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz -/****************************************************************************** - - - SGI/Nintendo Reality Display Processor Blend Unit (BL) - ------------------- - - by Ryan Holtz - based on initial C code by Ville Linde - contains additional improvements from angrylion, Ziggy, Gonetz and Orkin - - -******************************************************************************/ - -#ifndef _VIDEO_RDPBLEND_H_ -#define _VIDEO_RDPBLEND_H_ - -#include "video/n64.h" - -class n64_blender_t -{ - public: - typedef bool (n64_blender_t::*blender1)(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); - typedef bool (n64_blender_t::*blender2)(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); - - n64_blender_t(); - - blender1 blend1[8]; - blender2 blend2[8]; - - void set_machine(running_machine& machine) { m_machine = &machine; } - void set_processor(n64_rdp* rdp) { m_rdp = rdp; } - - running_machine &machine() const { assert(m_machine != nullptr); return *m_machine; } - - private: - running_machine* m_machine; - n64_rdp* m_rdp; - - int32_t min(const int32_t x, const int32_t min); - bool alpha_reject(rdp_span_aux* userdata, const rdp_poly_state& object); - bool test_for_reject(rdp_span_aux* userdata, const rdp_poly_state& object); - void blend_pipe(const int cycle, const int special, color_t& out, rdp_span_aux* userdata, const rdp_poly_state& object); - void blend_with_partial_reject(color_t& out, int32_t cycle, int32_t partialreject, int32_t select, rdp_span_aux* userdata, const rdp_poly_state& object); - - bool cycle1_noblend_noacvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); - bool cycle1_noblend_noacvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); - bool cycle1_noblend_acvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); - bool cycle1_noblend_acvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); - bool cycle1_blend_noacvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); - bool cycle1_blend_noacvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); - bool cycle1_blend_acvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); - bool cycle1_blend_acvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, rdp_span_aux* userdata, const rdp_poly_state& object); - - bool cycle2_noblend_noacvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); - bool cycle2_noblend_noacvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); - bool cycle2_noblend_acvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); - bool cycle2_noblend_acvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); - bool cycle2_blend_noacvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); - bool cycle2_blend_noacvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); - bool cycle2_blend_acvg_nodither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); - bool cycle2_blend_acvg_dither(color_t& blended_pixel, int dith, int adseed, int partialreject, int sel0, int sel1, rdp_span_aux* userdata, const rdp_poly_state& object); - - int32_t dither_alpha(int32_t alpha, int32_t dither); - int32_t dither_color(int32_t color, int32_t dither); - - uint8_t m_color_dither[256 * 8]; - uint8_t m_alpha_dither[256 * 8]; -}; - -#endif // _VIDEO_RDPBLEND_H_ diff --git a/waterbox/ares64/ares/thirdparty/mame/mame/video/rdpfiltr.hxx b/waterbox/ares64/ares/thirdparty/mame/mame/video/rdpfiltr.hxx deleted file mode 100644 index ff8fbfb371..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/mame/video/rdpfiltr.hxx +++ /dev/null @@ -1,617 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz -#if 0 -static inline void video_filter16(int *out_r, int *out_g, int *out_b, uint16_t* vbuff, uint8_t* hbuff, const uint32_t hres); -static inline void divot_filter16(uint8_t* r, uint8_t* g, uint8_t* b, uint16_t* fbuff, uint32_t fbuff_index); -static inline void restore_filter16(int32_t* r, int32_t* g, int32_t* b, uint16_t* fbuff, uint32_t fbuff_index, uint32_t hres); -static inline void divot_filter16_buffer(int32_t* r, int32_t* g, int32_t* b, color_t* vibuffer); -static inline void restore_filter16_buffer(int32_t* r, int32_t* g, int32_t* b, color_t* vibuff, uint32_t hres); -static inline void restore_two(color_t* filtered, color_t* neighbour); -static inline void video_max(uint32_t* Pixels, uint8_t* max, uint32_t* enb); -static inline uint32_t ge_two(uint32_t enb); - -static inline void video_filter16(int *out_r, int *out_g, int *out_b, uint16_t* vbuff, uint8_t* hbuff, const uint32_t hres) -{ - color_t penumax, penumin, max, min; - uint16_t pix = *vbuff; - const uint8_t centercvg = (*hbuff & 3) + ((pix & 1) << 2) + 1; - uint32_t numoffull = 1; - uint32_t cvg; - uint32_t backr[7], backg[7], backb[7]; - uint32_t invr[7], invg[7], invb[7]; - int32_t coeff; - int32_t leftup = -hres - 2; - int32_t leftdown = hres - 2; - int32_t toleft = -2; - uint32_t colr, colg, colb; - uint32_t enb; - uint32_t r = ((pix >> 8) & 0xf8) | (pix >> 13); - uint32_t g = ((pix >> 3) & 0xf8) | ((pix >> 8) & 0x07); - uint32_t b = ((pix << 2) & 0xf8) | ((pix >> 3) & 0x07); - - *out_r = *out_g = *out_b = 0; - - backr[0] = r; - backg[0] = g; - backb[0] = b; - invr[0] = ~r; - invg[0] = ~g; - invb[0] = ~b; - - if (centercvg == 8) - { - *out_r = r; - *out_g = g; - *out_b = b; - return; - } - - for(int i = 0; i < 5; i++) - { - pix = vbuff[leftup ^ WORD_ADDR_XOR]; - cvg = hbuff[leftup ^ BYTE_ADDR_XOR] & 3; - if(i & 1) - { - if (cvg == 3 && (pix & 1)) - { - backr[numoffull] = ((pix >> 8) & 0xf8) | (pix >> 13); - backg[numoffull] = ((pix >> 3) & 0xf8) | ((pix >> 8) & 0x07); - backb[numoffull] = ((pix << 2) & 0xf8) | ((pix >> 3) & 0x07); - invr[numoffull] = ~backr[numoffull]; - invg[numoffull] = ~backg[numoffull]; - invb[numoffull] = ~backb[numoffull]; - } - else - { - backr[numoffull] = invr[numoffull] = 0; - backg[numoffull] = invg[numoffull] = 0; - backb[numoffull] = invb[numoffull] = 0; - } - numoffull++; - } - leftup++; - } - - for(int i = 0; i < 5; i++) - { - pix = vbuff[leftdown ^ WORD_ADDR_XOR]; - cvg = hbuff[leftdown ^ BYTE_ADDR_XOR] & 3; - if (i&1) - { - if (cvg == 3 && (pix & 1)) - { - backr[numoffull] = ((pix >> 8) & 0xf8) | (pix >> 13); - backg[numoffull] = ((pix >> 3) & 0xf8) | ((pix >> 8) & 0x07); - backb[numoffull] = ((pix << 2) & 0xf8) | ((pix >> 3) & 0x07); - invr[numoffull] = ~backr[numoffull]; - invg[numoffull] = ~backg[numoffull]; - invb[numoffull] = ~backb[numoffull]; - } - else - { - backr[numoffull] = invr[numoffull] = 0; - backg[numoffull] = invg[numoffull] = 0; - backb[numoffull] = invb[numoffull] = 0; - } - numoffull++; - } - leftdown++; - } - - for(int i = 0; i < 5; i++) - { - pix = vbuff[toleft ^ WORD_ADDR_XOR]; - cvg = hbuff[toleft ^ BYTE_ADDR_XOR] & 3; - if (!(i&3)) - { - if (cvg == 3 && (pix & 1)) - { - backr[numoffull] = ((pix >> 8) & 0xf8) | (pix >> 13); - backg[numoffull] = ((pix >> 3) & 0xf8) | ((pix >> 8) & 0x07); - backb[numoffull] = ((pix << 2) & 0xf8) | ((pix >> 3) & 0x07); - invr[numoffull] = ~backr[numoffull]; - invg[numoffull] = ~backg[numoffull]; - invb[numoffull] = ~backb[numoffull]; - } - else - { - backr[numoffull] = invr[numoffull] = 0; - backg[numoffull] = invg[numoffull] = 0; - backb[numoffull] = invb[numoffull] = 0; - } - numoffull++; - } - toleft++; - } - - video_max(&backr[0], &max.i.r, &enb); - for(int i = 1; i < 7; i++) - { - if (!((enb >> i) & 1)) - { - backr[i] = 0; - } - } - video_max(&backg[0], &max.i.g, &enb); - for (int i = 1; i < 7; i++) - { - if (!((enb >> i) & 1)) - { - backg[i] = 0; - } - } - video_max(&backb[0], &max.i.b, &enb); - for (int i = 1; i < 7; i++) - { - if (!((enb >> i) & 1)) - { - backb[i] = 0; - } - } - video_max(&invr[0], &min.i.r, &enb); - for (int i = 1; i < 7; i++) - { - if (!((enb >> i) & 1)) - { - backr[i] = 0; - } - } - video_max(&invg[0], &min.i.g, &enb); - for (int i = 1; i < 7; i++) - { - if (!((enb >> i) & 1)) - { - backg[i] = 0; - } - } - video_max(&invb[0], &min.i.b, &enb); - for (int i = 1; i < 7; i++) - { - if (!((enb >> i) & 1)) - { - backb[i] = 0; - } - } - - video_max(&backr[0], &penumax.i.r, &enb); - penumax.i.r = ge_two(enb) ? max.i.r : penumax.i.r; - - video_max(&backg[0], &penumax.i.g, &enb); - penumax.i.g = ge_two(enb) ? max.i.g : penumax.i.g; - - video_max(&backb[0], &penumax.i.b, &enb); - penumax.i.b = ge_two(enb) ? max.i.b : penumax.i.b; - - video_max(&invr[0], &penumin.i.r, &enb); - penumin.i.r = ge_two(enb) ? min.i.r : penumin.i.r; - - video_max(&invg[0], &penumin.i.g, &enb); - penumin.i.g = ge_two(enb) ? min.i.g : penumin.i.g; - - video_max(&invb[0], &penumin.i.b, &enb); - penumin.i.b = ge_two(enb) ? min.i.b : penumin.i.b; - - penumin.i.r = ~penumin.i.r; - penumin.i.g = ~penumin.i.g; - penumin.i.b = ~penumin.i.b; - - colr = (uint32_t)penumin.i.r + (uint32_t)penumax.i.r - (r << 1); - colg = (uint32_t)penumin.i.g + (uint32_t)penumax.i.g - (g << 1); - colb = (uint32_t)penumin.i.b + (uint32_t)penumax.i.b - (b << 1); - coeff = 8 - centercvg; - colr = (((colr * coeff) + 4) >> 3) + r; - colg = (((colg * coeff) + 4) >> 3) + g; - colb = (((colb * coeff) + 4) >> 3) + b; - - *out_r = colr & 0xff; - *out_g = colg & 0xff; - *out_b = colb & 0xff; - return; -} - -// This needs to be fixed for endianness. -static inline void divot_filter16(uint8_t* r, uint8_t* g, uint8_t* b, uint16_t* fbuff, uint32_t fbuff_index) -{ - uint8_t leftr, leftg, leftb, rightr, rightg, rightb; - uint16_t leftpix, rightpix; - uint16_t* next, *prev; - uint32_t Lsw = fbuff_index & 1; - next = (Lsw) ? (uint16_t*)(fbuff - 1) : (uint16_t*)(fbuff + 3); - prev = (Lsw) ? (uint16_t*)(fbuff - 3) : (uint16_t*)(fbuff + 1); - leftpix = *prev; - rightpix = *next; - - //leftpix = *(fbuff - 1); //for BE targets - //rightpix = *(fbuff + 1); - - leftr = ((leftpix >> 8) & 0xf8) | (leftpix >> 13); - leftg = ((leftpix >> 3) & 0xf8) | ((leftpix >> 8) & 0x07); - leftb = ((leftpix << 2) & 0xf8) | ((leftpix >> 3) & 0x07); - rightr = ((rightpix >> 8) & 0xf8) | (rightpix >> 13); - rightg = ((rightpix >> 3) & 0xf8) | ((rightpix >> 8) & 0x07); - rightb = ((rightpix << 2) & 0xf8) | ((rightpix >> 3) & 0x07); - if ((leftr >= *r && rightr >= leftr) || (leftr >= rightr && *r >= leftr)) - { - *r = leftr; //left = median value - } - if ((rightr >= *r && leftr >= rightr) || (rightr >= leftr && *r >= rightr)) - { - *r = rightr; //right = median, else *r itself is median - } - if ((leftg >= *g && rightg >= leftg) || (leftg >= rightg && *g >= leftg)) - { - *g = leftg; - } - if ((rightg >= *g && leftg >= rightg) || (rightg >= leftg && *g >= rightg)) - { - *g = rightg; - } - if ((leftb >= *b && rightb >= leftb) || (leftb >= rightb && *b >= leftb)) - { - *b = leftb; - } - if ((rightb >= *b && leftb >= rightb) || (rightb >= leftb && *b >= rightb)) - { - *b = rightb; - } -} - -static inline void divot_filter16_buffer(int* r, int* g, int* b, color_t* vibuffer) -{ - color_t leftpix = vibuffer[-1]; - color_t rightpix = vibuffer[1]; - color_t filtered = *vibuffer; - - *r = filtered.i.r; - *g = filtered.i.g; - *b = filtered.i.b; - uint32_t leftr = leftpix.i.r; - uint32_t leftg = leftpix.i.g; - uint32_t leftb = leftpix.i.b; - uint32_t rightr = rightpix.i.r; - uint32_t rightg = rightpix.i.g; - uint32_t rightb = rightpix.i.b; - - if ((leftr >= *r && rightr >= leftr) || (leftr >= rightr && *r >= leftr)) - { - *r = leftr; //left = median value - } - if ((rightr >= *r && leftr >= rightr) || (rightr >= leftr && *r >= rightr)) - { - *r = rightr; //right = median, else *r itself is median - } - if ((leftg >= *g && rightg >= leftg) || (leftg >= rightg && *g >= leftg)) - { - *g = leftg; - } - if ((rightg >= *g && leftg >= rightg) || (rightg >= leftg && *g >= rightg)) - { - *g = rightg; - } - if ((leftb >= *b && rightb >= leftb) || (leftb >= rightb && *b >= leftb)) - { - *b = leftb; - } - if ((rightb >= *b && leftb >= rightb) || (rightb >= leftb && *b >= rightb)) - { - *b = rightb; - } - - filtered.i.r = *r; - filtered.i.g = *g; - filtered.i.b = *b; -} - -// Fix me. -static inline void restore_filter16(int* r, int* g, int* b, uint16_t* fbuff, uint32_t fbuff_index, uint32_t hres) -{ - int32_t leftuppix = -hres - 1; - int32_t leftdownpix = hres - 1; - int32_t toleftpix = -1; - uint8_t tempr, tempg, tempb; - uint16_t pix; - int i; - - uint8_t r5 = *r; - uint8_t g5 = *g; - uint8_t b5 = *b; - r5 &= ~7; - g5 &= ~7; - b5 &= ~7; - - for (i = 0; i < 3; i++) - { - pix = fbuff[leftuppix ^ 1]; - tempr = ((pix >> 8) & 0xf8) | (pix >> 13); - tempg = ((pix >> 3) & 0xf8) | ((pix >> 8) & 0x07); - tempb = ((pix << 2) & 0xf8) | ((pix >> 3) & 0x07); - tempr &= ~7; - tempg &= ~7; - tempb &= ~7; - if (tempr > r5) - { - *r += 1; - } - if (tempr < r5) - { - *r -= 1; - } - if (tempg > g5) - { - *g += 1; - } - if (tempg < g5) - { - *g -= 1; - } - if (tempb > b5) - { - *b += 1; - } - if (tempb < b5) - { - *b -= 1; - } - leftuppix++; - } - - for (i = 0; i < 3; i++) - { - pix = fbuff[leftdownpix ^ 1]; - tempr = ((pix >> 8) & 0xf8) | (pix >> 13); - tempg = ((pix >> 3) & 0xf8) | ((pix >> 8) & 0x07); - tempb = ((pix << 2) & 0xf8) | ((pix >> 3) & 0x07); - tempr &= ~7; - tempg &= ~7; - tempb &= ~7; - if (tempr > r5) - { - *r += 1; - } - if (tempr < r5) - { - *r -= 1; - } - if (tempg > g5) - { - *g += 1; - } - if (tempg < g5) - { - *g -= 1; - } - if (tempb > b5) - { - *b += 1; - } - if (tempb < b5) - { - *b -= 1; - } - leftdownpix++; - } - for(i = 0; i < 3; i++) - { - if (!(i & 1)) - { - pix = fbuff[toleftpix ^ 1]; - tempr = ((pix >> 8) & 0xf8) | (pix >> 13); - tempg = ((pix >> 3) & 0xf8) | ((pix >> 8) & 0x07); - tempb = ((pix << 2) & 0xf8) | ((pix >> 3) & 0x07); - tempr &= ~7; - tempg &= ~7; - tempb &= ~7; - if (tempr > r5) - { - *r += 1; - } - if (tempr < r5) - { - *r -= 1; - } - if (tempg > g5) - { - *g += 1; - } - if (tempg < g5) - { - *g -= 1; - } - if (tempb > b5) - { - *b += 1; - } - if (tempb < b5) - { - *b -= 1; - } - } - toleftpix++; - } -} - -static inline void restore_filter16_buffer(int32_t* r, int32_t* g, int32_t* b, color_t* vibuff, uint32_t hres) -{ - color_t filtered; - color_t leftuppix, leftdownpix, leftpix; - color_t rightuppix, rightdownpix, rightpix; - color_t uppix, downpix; - int32_t ihres = (int32_t)hres; //can't apply unary minus to unsigned - - leftuppix = vibuff[-ihres - 1]; - leftdownpix = vibuff[ihres - 1]; - leftpix = vibuff[-1]; - - rightuppix = vibuff[-ihres + 1]; - rightdownpix = vibuff[ihres + 1]; - rightpix = vibuff[1]; - - uppix = vibuff[-ihres]; - downpix = vibuff[ihres]; - filtered = *vibuff; - - restore_two(&filtered, &leftuppix); - restore_two(&filtered, &uppix); - restore_two(&filtered, &rightuppix); - - restore_two(&filtered, &leftpix); - restore_two(&filtered, &rightpix); - - restore_two(&filtered, &leftdownpix); - restore_two(&filtered, &downpix); - restore_two(&filtered, &rightdownpix); - - *r = filtered.i.r; - *g = filtered.i.g; - *b = filtered.i.b; - - if(*r < 0) *r = 0; - else if(*r > 255) *r = 255; - if(*g < 0) *g = 0; - else if(*g > 255) *g = 255; - if(*b < 0) *b = 0; - else if(*b > 255) *b = 255; -} - -// This is wrong, only the 5 upper bits are compared. -static inline void restore_two(color_t* filtered, color_t* neighbour) -{ - if (neighbour->i.r > filtered->i.r) - { - filtered->i.r += 1; - } - if (neighbour->i.r < filtered->i.r) - { - filtered->i.r -= 1; - } - if (neighbour->i.g > filtered->i.g) - { - filtered->i.g += 1; - } - if (neighbour->i.g < filtered->i.g) - { - filtered->i.g -= 1; - } - if (neighbour->i.b > filtered->i.b) - { - filtered->i.b += 1; - } - if (neighbour->i.b < filtered->i.b) - { - filtered->i.b -= 1; - } -} - -static inline void video_max(uint32_t* Pixels, uint8_t* max, uint32_t* enb) -{ - int i; - int pos = 0; - *enb = 0; - for(i = 0; i < 7; i++) - { - if (Pixels[i] > Pixels[pos]) - { - *enb += (1 << i); - pos = i; - } - else if (Pixels[i] < Pixels[pos]) - { - *enb += (1 << i); - } - else - { - pos = i; - } - } - *max = Pixels[pos]; -} - -static inline uint32_t ge_two(uint32_t enb) -{ - if(enb & 1) - { - if(enb & 2) - return 1; - if(enb & 4) - return 1; - if(enb & 8) - return 1; - if(enb & 16) - return 1; - if(enb & 32) - return 1; - if(enb & 64) - return 1; - if(enb & 128) - return 1; - return 0; - } - else if(enb & 2) - { - if(enb & 4) - return 1; - if(enb & 8) - return 1; - if(enb & 16) - return 1; - if(enb & 32) - return 1; - if(enb & 64) - return 1; - if(enb & 128) - return 1; - return 0; - } - else if(enb & 4) - { - if(enb & 8) - return 1; - if(enb & 16) - return 1; - if(enb & 32) - return 1; - if(enb & 64) - return 1; - if(enb & 128) - return 1; - return 0; - } - else if(enb & 8) - { - if(enb & 16) - return 1; - if(enb & 32) - return 1; - if(enb & 64) - return 1; - if(enb & 128) - return 1; - return 0; - } - else if(enb & 16) - { - if(enb & 32) - return 1; - if(enb & 64) - return 1; - if(enb & 128) - return 1; - return 0; - } - else if(enb & 32) - { - if(enb & 64) - return 1; - if(enb & 128) - return 1; - return 0; - } - else if(enb & 64) - { - if(enb & 128) - return 1; - return 0; - } - return 0; -} -#endif diff --git a/waterbox/ares64/ares/thirdparty/mame/mame/video/rdptpipe.cpp b/waterbox/ares64/ares/thirdparty/mame/mame/video/rdptpipe.cpp deleted file mode 100644 index 4cb556eb1c..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/mame/video/rdptpipe.cpp +++ /dev/null @@ -1,1023 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz -/****************************************************************************** - - - SGI/Nintendo Reality Display Texture Fetch Unit (TF) - ------------------- - - by Ryan Holtz - based on initial C code by Ville Linde - contains additional improvements from angrylion, Ziggy, Gonetz and Orkin - - -******************************************************************************/ - -#include "emu.h" -#include "includes/n64.h" -#include "video/rdptpipe.h" -#include "video/n64.h" -#include "video/rgbutil.h" - -#define RELATIVE(x, y) ((((x) >> 3) - (y)) << 3) | (x & 7); - -void n64_texture_pipe_t::set_machine(running_machine &machine) -{ - n64_state* state = machine.driver_data(); - - m_rdp = state->rdp(); - - for(int32_t i = 0; i < 0x10000; i++) - { - m_expand_16to32_table[i] = color_t((i & 1) ? 0xff : 0x00, m_rdp->m_replicated_rgba[(i >> 11) & 0x1f], m_rdp->m_replicated_rgba[(i >> 6) & 0x1f], m_rdp->m_replicated_rgba[(i >> 1) & 0x1f]); - } - - for(uint32_t i = 0; i < 0x80000; i++) - { - if (i & 0x40000) - { - m_lod_lookup[i] = 0x7fff; - } - else if (i & 0x20000) - { - m_lod_lookup[i] = 0x8000; - } - else - { - if ((i & 0x18000) == 0x8000) - { - m_lod_lookup[i] = 0x7fff; - } - else if ((i & 0x18000) == 0x10000) - { - m_lod_lookup[i] = 0x8000; - } - else - { - m_lod_lookup[i] = i & 0xffff; - } - } - } - - m_st2_add.set(1, 0, 1, 0); - m_v1.set(1, 1, 1, 1); -} - -void n64_texture_pipe_t::mask(rgbaint_t& sstt, const n64_tile_t& tile) -{ - uint32_t s_mask_bits = m_maskbits_table[tile.mask_s]; - uint32_t t_mask_bits = m_maskbits_table[tile.mask_t]; - rgbaint_t maskbits(s_mask_bits, s_mask_bits, t_mask_bits, t_mask_bits); - - rgbaint_t do_wrap(sstt); - do_wrap.sra(tile.wrapped_mask); - do_wrap.and_reg(m_v1); - do_wrap.cmpeq(m_v1); - do_wrap.and_reg(tile.mm); - - rgbaint_t wrapped(sstt); - wrapped.xor_reg(do_wrap); - wrapped.and_reg(maskbits); - wrapped.and_reg(tile.mask); - sstt.and_reg(tile.invmask); - sstt.or_reg(wrapped); -} - -rgbaint_t n64_texture_pipe_t::shift_cycle(rgbaint_t& st, const n64_tile_t& tile) -{ - st.sign_extend(0x00008000, 0xffff8000); - st.sra(tile.rshift); - st.shl(tile.lshift); - - rgbaint_t maxst(st); - maxst.sra_imm(3); - rgbaint_t maxst_eq(maxst); - maxst.cmpgt(tile.sth); - maxst_eq.cmpeq(tile.sth); - maxst.or_reg(maxst_eq); - - rgbaint_t stlsb(st); - stlsb.and_imm(7); - - st.sra_imm(3); - st.sub(tile.stl); - st.shl_imm(3); - st.or_reg(stlsb); - - return maxst; -} - -inline void n64_texture_pipe_t::shift_copy(rgbaint_t& st, const n64_tile_t& tile) -{ - st.shr(tile.rshift); - st.shl(tile.lshift); -} - -void n64_texture_pipe_t::clamp_cycle(rgbaint_t& st, rgbaint_t& stfrac, rgbaint_t& maxst, const int32_t tilenum, const n64_tile_t& tile, rdp_span_aux* userdata) -{ - rgbaint_t not_clamp(tile.clamp_st); - not_clamp.xor_imm(0xffffffff); - - rgbaint_t highbit_mask(0x10000, 0x10000, 0x10000, 0x10000); - rgbaint_t highbit(st); - highbit.and_reg(highbit_mask); - highbit.cmpeq(highbit_mask); - - rgbaint_t not_highbit(highbit); - not_highbit.xor_imm(0xffffffff); - - rgbaint_t not_maxst(maxst); - not_maxst.xor_imm(0xffffffff); - not_maxst.and_reg(not_highbit); - not_maxst.or_reg(not_clamp); - - rgbaint_t shifted_st(st); - shifted_st.sign_extend(0x00010000, 0xffff0000); - shifted_st.shr_imm(5); - shifted_st.and_imm(0x1fff); - shifted_st.and_reg(not_maxst); - stfrac.and_reg(not_maxst); - - rgbaint_t clamp_diff(userdata->m_clamp_diff[tilenum]); - clamp_diff.and_reg(tile.clamp_st); - clamp_diff.and_reg(maxst); - - st.set(shifted_st); - st.or_reg(clamp_diff); -} - -void n64_texture_pipe_t::clamp_cycle_light(rgbaint_t& st, rgbaint_t& maxst, const int32_t tilenum, const n64_tile_t& tile, rdp_span_aux* userdata) -{ - rgbaint_t not_clamp(tile.clamp_st); - not_clamp.xor_imm(0xffffffff); - - rgbaint_t highbit_mask(0x10000, 0x10000, 0x10000, 0x10000); - rgbaint_t highbit(st); - highbit.and_reg(highbit_mask); - highbit.cmpeq(highbit_mask); - - rgbaint_t not_highbit(highbit); - not_highbit.xor_imm(0xffffffff); - - rgbaint_t not_maxst(maxst); - not_maxst.xor_imm(0xffffffff); - not_maxst.and_reg(not_highbit); - not_maxst.or_reg(not_clamp); - - rgbaint_t shifted_st(st); - shifted_st.sign_extend(0x00010000, 0xffff0000); - shifted_st.shr_imm(5); - shifted_st.and_imm(0x1fff); - shifted_st.and_reg(not_maxst); - - rgbaint_t clamp_diff(userdata->m_clamp_diff[tilenum]); - clamp_diff.and_reg(tile.clamp_st); - clamp_diff.and_reg(maxst); - - st.set(shifted_st); - st.or_reg(clamp_diff); -} - -void n64_texture_pipe_t::cycle_nearest(color_t* TEX, color_t* prev, int32_t SSS, int32_t SST, uint32_t tilenum, uint32_t cycle, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - const n64_tile_t& tile = object.m_tiles[tilenum]; - const uint32_t index = (tile.format << 4) | (tile.size << 2) | ((uint32_t) object.m_other_modes.en_tlut << 1) | (uint32_t) object.m_other_modes.tlut_type; - - rgbaint_t st(0, SSS, 0, SST); - rgbaint_t maxst = shift_cycle(st, tile); - clamp_cycle_light(st, maxst, tilenum, tile, userdata); - mask(st, tile); - - uint32_t tbase = tile.tmem + ((tile.line * st.get_b32()) & 0x1ff); - - rgbaint_t t0; - ((this)->*(m_texel_fetch[index]))(t0, st.get_r32(), st.get_b32(), tbase, tile.palette, userdata); - if (object.m_other_modes.convert_one && cycle) - { - t0.set(*prev); - } - - t0.sign_extend(0x00000100, 0xffffff00); - - rgbaint_t k13r(m_rdp->get_k13()); - k13r.mul_imm(t0.get_r32()); - - TEX->set(m_rdp->get_k02()); - TEX->mul_imm(t0.get_g32()); - TEX->add(k13r); - TEX->add_imm(0x80); - TEX->shr_imm(8); - TEX->add_imm(t0.get_b32()); - TEX->and_imm(0x1ff); -} - -void n64_texture_pipe_t::cycle_nearest_lerp(color_t* TEX, color_t* prev, int32_t SSS, int32_t SST, uint32_t tilenum, uint32_t cycle, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - const n64_tile_t& tile = object.m_tiles[tilenum]; - const uint32_t index = (tile.format << 4) | (tile.size << 2) | ((uint32_t) object.m_other_modes.en_tlut << 1) | (uint32_t) object.m_other_modes.tlut_type; - - rgbaint_t st(0, SSS, 0, SST); - rgbaint_t maxst = shift_cycle(st, tile); - clamp_cycle_light(st, maxst, tilenum, tile, userdata); - mask(st, tile); - - uint32_t tbase = tile.tmem + ((tile.line * st.get_b32()) & 0x1ff); - - ((this)->*(m_texel_fetch[index]))(*TEX, st.get_r32(), st.get_b32(), tbase, tile.palette, userdata); -} - -void n64_texture_pipe_t::cycle_linear(color_t* TEX, color_t* prev, int32_t SSS, int32_t SST, uint32_t tilenum, uint32_t cycle, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - const n64_tile_t& tile = object.m_tiles[tilenum]; - const uint32_t index = (tile.format << 4) | (tile.size << 2) | ((uint32_t) object.m_other_modes.en_tlut << 1) | (uint32_t) object.m_other_modes.tlut_type; - - rgbaint_t st(0, SSS, 0, SST); - rgbaint_t maxst = shift_cycle(st, tile); - - clamp_cycle_light(st, maxst, tilenum, tile, userdata); - - mask(st, tile); - - const uint32_t tbase = tile.tmem + ((tile.line * st.get_b32()) & 0x1ff); - - rgbaint_t t0; - ((this)->*(m_texel_fetch[index]))(t0, st.get_r32(), st.get_b32(), tbase, tile.palette, userdata); - if (object.m_other_modes.convert_one && cycle) - { - t0.set(*prev); - } - - t0.sign_extend(0x00000100, 0xffffff00); - - rgbaint_t k13r(m_rdp->get_k13()); - k13r.mul_imm(t0.get_r32()); - - TEX->set(m_rdp->get_k02()); - TEX->mul_imm(t0.get_g32()); - TEX->add(k13r); - TEX->add_imm(0x80); - TEX->shr_imm(8); - TEX->add_imm(t0.get_b32()); - TEX->and_imm(0x1ff); -} - -void n64_texture_pipe_t::cycle_linear_lerp(color_t* TEX, color_t* prev, int32_t SSS, int32_t SST, uint32_t tilenum, uint32_t cycle, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - const n64_tile_t& tile = object.m_tiles[tilenum]; - - uint32_t tpal = tile.palette; - uint32_t index = (tile.format << 4) | (tile.size << 2) | ((uint32_t) object.m_other_modes.en_tlut << 1) | (uint32_t) object.m_other_modes.tlut_type; - - rgbaint_t sstt(SSS, SSS, SST, SST); - rgbaint_t maxst = shift_cycle(sstt, tile); - rgbaint_t stfrac = sstt; - stfrac.and_imm(0x1f); - - clamp_cycle(sstt, stfrac, maxst, tilenum, tile, userdata); - - sstt.add(m_st2_add); - - mask(sstt, tile); - - const uint32_t tbase1 = tile.tmem + ((tile.line * sstt.get_b32()) & 0x1ff); - const uint32_t tbase2 = tile.tmem + ((tile.line * sstt.get_g32()) & 0x1ff); - - bool upper = ((stfrac.get_r32() + stfrac.get_b32()) >= 0x20); - - rgbaint_t invstf(stfrac); - if (upper) - { - invstf.subr_imm(0x20); - invstf.shl_imm(3); - } - - stfrac.shl_imm(3); - - bool center = (stfrac.get_r32() == 0x10) && (stfrac.get_b32() == 0x10) && object.m_other_modes.mid_texel; - - rgbaint_t t2; - ((this)->*(m_texel_fetch[index]))(*TEX, sstt.get_a32(), sstt.get_b32(), tbase1, tpal, userdata); - ((this)->*(m_texel_fetch[index]))(t2, sstt.get_r32(), sstt.get_g32(), tbase2, tpal, userdata); - - if (!center) - { - if (upper) - { - rgbaint_t t3; - ((this)->*(m_texel_fetch[index]))(t3, sstt.get_a32(), sstt.get_g32(), tbase2, tpal, userdata); - - TEX->sub(t3); - t2.sub(t3); - - TEX->mul_imm(invstf.get_b32()); - t2.mul_imm(invstf.get_r32()); - - TEX->add(t2); - TEX->add_imm(0x0080); - TEX->sra_imm(8); - TEX->add(t3); - } - else - { - rgbaint_t t0; - ((this)->*(m_texel_fetch[index]))(t0, sstt.get_r32(), sstt.get_b32(), tbase1, tpal, userdata); - - TEX->sub(t0); - t2.sub(t0); - - TEX->mul_imm(stfrac.get_r32()); - t2.mul_imm(stfrac.get_b32()); - - TEX->add(t2); - TEX->add_imm(0x80); - TEX->sra_imm(8); - TEX->add(t0); - } - } - else - { - rgbaint_t t0, t3; - ((this)->*(m_texel_fetch[index]))(t0, sstt.get_r32(), sstt.get_b32(), tbase1, tpal, userdata); - ((this)->*(m_texel_fetch[index]))(t3, sstt.get_a32(), sstt.get_g32(), tbase2, tpal, userdata); - TEX->add(t0); - TEX->add(t2); - TEX->add(t3); - TEX->sra_imm(2); - } -} - -void n64_texture_pipe_t::copy(color_t* TEX, int32_t SSS, int32_t SST, uint32_t tilenum, const rdp_poly_state& object, rdp_span_aux* userdata) -{ - const n64_tile_t* tiles = object.m_tiles; - const n64_tile_t& tile = tiles[tilenum]; - - rgbaint_t st(0, SSS, 0, SST); - shift_copy(st, tile); - rgbaint_t stlsb(st); - stlsb.and_imm(7); - st.shr_imm(3); - st.sub(rgbaint_t(0, tile.sl, 0, tile.tl)); - st.shl_imm(3); - st.add(stlsb); - st.sign_extend(0x00010000, 0xffff0000); - st.shr_imm(5); - st.and_imm(0x1fff); - mask(st, tile); - - const uint32_t index = (tile.format << 4) | (tile.size << 2) | ((uint32_t) object.m_other_modes.en_tlut << 1) | (uint32_t) object.m_other_modes.tlut_type; - const uint32_t tbase = tile.tmem + ((tile.line * st.get_b32()) & 0x1ff); - ((this)->*(m_texel_fetch[index]))(*TEX, st.get_r32(), st.get_b32(), tbase, tile.palette, userdata); -} - -void n64_texture_pipe_t::lod_1cycle(int32_t* sss, int32_t* sst, const int32_t s, const int32_t t, const int32_t w, const int32_t dsinc, const int32_t dtinc, const int32_t dwinc, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - const int32_t nextsw = (w + dwinc) >> 16; - int32_t nexts = (s + dsinc) >> 16; - int32_t nextt = (t + dtinc) >> 16; - - if (object.m_other_modes.persp_tex_en) - { - m_rdp->tc_div(nexts, nextt, nextsw, &nexts, &nextt); - } - else - { - m_rdp->tc_div_no_perspective(nexts, nextt, nextsw, &nexts, &nextt); - } - - userdata->m_start_span = false; - userdata->m_precomp_s = nexts; - userdata->m_precomp_t = nextt; - - const int32_t lodclamp = (((*sst & 0x60000) > 0) | ((nextt & 0x60000) > 0)) || (((*sss & 0x60000) > 0) | ((nexts & 0x60000) > 0)); - - int32_t horstep = SIGN17(nexts & 0x1ffff) - SIGN17(*sss & 0x1ffff); - int32_t vertstep = SIGN17(nextt & 0x1ffff) - SIGN17(*sst & 0x1ffff); - if (horstep & 0x20000) - { - horstep = ~horstep & 0x1ffff; - } - if (vertstep & 0x20000) - { - vertstep = ~vertstep & 0x1ffff; - } - - int32_t lod = (horstep >= vertstep) ? horstep : vertstep; - - *sss = m_lod_lookup[*sss & 0x7ffff]; - *sst = m_lod_lookup[*sst & 0x7ffff]; - - if ((lod & 0x4000) || lodclamp) - { - lod = 0x7fff; - } - else if (lod < object.m_misc_state.m_min_level) - { - lod = object.m_misc_state.m_min_level; - } - - int32_t l_tile = m_rdp->get_log2((lod >> 5) & 0xff); - const bool magnify = (lod < 32); - const bool distant = ((lod & 0x6000) || (l_tile >= object.m_misc_state.m_max_level)); - - uint8_t lod_fraction = ((lod << 3) >> l_tile) & 0xff; - - if(!object.m_other_modes.sharpen_tex_en && !object.m_other_modes.detail_tex_en) - { - if (distant) - { - lod_fraction = 0xff; - } - else if (magnify) - { - lod_fraction = 0; - } - } - - userdata->m_lod_fraction.set(lod_fraction, lod_fraction, lod_fraction, lod_fraction); - /* FIXME: ??? - if(object.m_other_modes.sharpen_tex_en && magnify) - { - userdata->m_lod_fraction |= 0x100; - } - */ -} - -void n64_texture_pipe_t::lod_2cycle(int32_t* sss, int32_t* sst, const int32_t s, const int32_t t, const int32_t w, const int32_t dsinc, const int32_t dtinc, const int32_t dwinc, const int32_t prim_tile, int32_t* t1, int32_t* t2, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - const int32_t nextsw = (w + dwinc) >> 16; - int32_t nexts = (s + dsinc) >> 16; - int32_t nextt = (t + dtinc) >> 16; - - if (object.m_other_modes.persp_tex_en) - { - m_rdp->tc_div(nexts, nextt, nextsw, &nexts, &nextt); - } - else - { - m_rdp->tc_div_no_perspective(nexts, nextt, nextsw, &nexts, &nextt); - } - - userdata->m_start_span = false; - userdata->m_precomp_s = nexts; - userdata->m_precomp_t = nextt; - - const int32_t lodclamp = (((*sst & 0x60000) > 0) | ((nextt & 0x60000) > 0)) || (((*sss & 0x60000) > 0) | ((nexts & 0x60000) > 0)); - - int32_t horstep = SIGN17(nexts & 0x1ffff) - SIGN17(*sss & 0x1ffff); - int32_t vertstep = SIGN17(nextt & 0x1ffff) - SIGN17(*sst & 0x1ffff); - if (horstep & 0x20000) - { - horstep = ~horstep & 0x1ffff; - } - if (vertstep & 0x20000) - { - vertstep = ~vertstep & 0x1ffff; - } - - int32_t lod = (horstep >= vertstep) ? horstep : vertstep; - - *sss = m_lod_lookup[*sss & 0x7ffff]; - *sst = m_lod_lookup[*sst & 0x7ffff]; - - if ((lod & 0x4000) || lodclamp) - { - lod = 0x7fff; - } - else if (lod < object.m_misc_state.m_min_level) - { - lod = object.m_misc_state.m_min_level; - } - - int32_t l_tile = m_rdp->get_log2((lod >> 5) & 0xff); - const bool magnify = (lod < 32); - const bool distant = ((lod & 0x6000) || (l_tile >= object.m_misc_state.m_max_level)); - - uint8_t lod_fraction = ((lod << 3) >> l_tile) & 0xff; - - if(!object.m_other_modes.sharpen_tex_en && !object.m_other_modes.detail_tex_en) - { - if (distant) - { - lod_fraction = 0xff; - } - else if (magnify) - { - lod_fraction = 0; - } - } - - userdata->m_lod_fraction.set(lod_fraction, lod_fraction, lod_fraction, lod_fraction); - - /* FIXME: ??? - if(object.m_other_modes.sharpen_tex_en && magnify) - { - userdata->m_lod_fraction |= 0x100; - }*/ - - if (object.m_other_modes.tex_lod_en) - { - if (distant) - { - l_tile = object.m_misc_state.m_max_level; - } - if (!object.m_other_modes.detail_tex_en) - { - *t1 = (prim_tile + l_tile) & 7; - if (!(distant || (!object.m_other_modes.sharpen_tex_en && magnify))) - { - *t2 = (*t1 + 1) & 7; - } - else - { - *t2 = *t1; // World Driver Championship, Stunt Race 64, Beetle Adventure Racing - } - } - else // Beetle Adventure Racing, World Driver Championship (ingame_, NFL Blitz 2001, Pilotwings - { - if (!magnify) - { - *t1 = (prim_tile + l_tile + 1); - } - else - { - *t1 = (prim_tile + l_tile); - } - *t1 &= 7; - if (!distant && !magnify) - { - *t2 = (prim_tile + l_tile + 2) & 7; - } - else - { - *t2 = (prim_tile + l_tile + 1) & 7; - } - } - } -} - -void n64_texture_pipe_t::lod_2cycle_limited(int32_t* sss, int32_t* sst, const int32_t s, const int32_t t, const int32_t w, const int32_t dsinc, const int32_t dtinc, const int32_t dwinc, const int32_t prim_tile, int32_t* t1, const rdp_poly_state& object) -{ - const int32_t nextsw = (w + dwinc) >> 16; - int32_t nexts = (s + dsinc) >> 16; - int32_t nextt = (t + dtinc) >> 16; - - if (object.m_other_modes.persp_tex_en) - { - m_rdp->tc_div(nexts, nextt, nextsw, &nexts, &nextt); - } - else - { - m_rdp->tc_div_no_perspective(nexts, nextt, nextsw, &nexts, &nextt); - } - - const int32_t lodclamp = (((*sst & 0x60000) > 0) | ((nextt & 0x60000) > 0)) || (((*sss & 0x60000) > 0) | ((nexts & 0x60000) > 0)); - - int32_t horstep = SIGN17(nexts & 0x1ffff) - SIGN17(*sss & 0x1ffff); - int32_t vertstep = SIGN17(nextt & 0x1ffff) - SIGN17(*sst & 0x1ffff); - if (horstep & 0x20000) - { - horstep = ~horstep & 0x1ffff; - } - if (vertstep & 0x20000) - { - vertstep = ~vertstep & 0x1ffff; - } - - int32_t lod = (horstep >= vertstep) ? horstep : vertstep; - - *sss = m_lod_lookup[*sss & 0x7ffff]; - *sst = m_lod_lookup[*sst & 0x7ffff]; - - if ((lod & 0x4000) || lodclamp) - { - lod = 0x7fff; - } - else if (lod < object.m_misc_state.m_min_level) - { - lod = object.m_misc_state.m_min_level; - } - - int32_t l_tile = m_rdp->get_log2((lod >> 5) & 0xff); - const bool magnify = (lod < 32); - const bool distant = (lod & 0x6000) || (l_tile >= object.m_misc_state.m_max_level); - - if (object.m_other_modes.tex_lod_en) - { - if (distant) - { - l_tile = object.m_misc_state.m_max_level; - } - if (!object.m_other_modes.detail_tex_en) - { - *t1 = (prim_tile + l_tile) & 7; - } - else - { - if (!magnify) - { - *t1 = (prim_tile + l_tile + 1); - } - else - { - *t1 = (prim_tile + l_tile); - } - *t1 &= 7; - } - } -} - -void n64_texture_pipe_t::calculate_clamp_diffs(uint32_t prim_tile, rdp_span_aux* userdata, const rdp_poly_state& object) -{ - const n64_tile_t* tiles = object.m_tiles; - if (object.m_other_modes.cycle_type == CYCLE_TYPE_2) - { - if (object.m_other_modes.tex_lod_en) - { - for (int32_t start = 0; start <= 7; start++) - { - userdata->m_clamp_diff[start].set((tiles[start].sh >> 2) - (tiles[start].sl >> 2), (tiles[start].sh >> 2) - (tiles[start].sl >> 2), (tiles[start].th >> 2) - (tiles[start].tl >> 2), (tiles[start].th >> 2) - (tiles[start].tl >> 2)); - } - } - else - { - const int32_t start = prim_tile; - const int32_t end = (prim_tile + 1) & 7; - userdata->m_clamp_diff[start].set((tiles[start].sh >> 2) - (tiles[start].sl >> 2), (tiles[start].sh >> 2) - (tiles[start].sl >> 2), (tiles[start].th >> 2) - (tiles[start].tl >> 2), (tiles[start].th >> 2) - (tiles[start].tl >> 2)); - userdata->m_clamp_diff[end].set((tiles[end].sh >> 2) - (tiles[end].sl >> 2), (tiles[end].sh >> 2) - (tiles[end].sl >> 2), (tiles[end].th >> 2) - (tiles[end].tl >> 2), (tiles[end].th >> 2) - (tiles[end].tl >> 2)); - } - } - else//1-cycle or copy - { - userdata->m_clamp_diff[prim_tile].set((tiles[prim_tile].sh >> 2) - (tiles[prim_tile].sl >> 2), (tiles[prim_tile].sh >> 2) - (tiles[prim_tile].sl >> 2), (tiles[prim_tile].th >> 2) - (tiles[prim_tile].tl >> 2), (tiles[prim_tile].th >> 2) - (tiles[prim_tile].tl >> 2)); - } -} - -#define USE_64K_LUT (1) - -static int32_t sTexAddrSwap16[2] = { WORD_ADDR_XOR, WORD_XOR_DWORD_SWAP }; -static int32_t sTexAddrSwap8[2] = { BYTE_ADDR_XOR, BYTE_XOR_DWORD_SWAP }; - -void n64_texture_pipe_t::fetch_rgba16_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - int32_t taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x7ff; - - uint16_t c = ((uint16_t*)userdata->m_tmem)[taddr]; - c = ((uint16_t*)(userdata->m_tmem + 0x800))[(c >> 8) << 2]; - -#if USE_64K_LUT - out.set(m_expand_16to32_table[c]); -#else - out.set((c & 1) * 0xff, GET_HI_RGBA16_TMEM(c), GET_MED_RGBA16_TMEM(c), GET_LOW_RGBA16_TMEM(c)); -#endif -} - -void n64_texture_pipe_t::fetch_rgba16_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const int32_t taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x7ff; - - uint16_t c = ((uint16_t*)userdata->m_tmem)[taddr]; - c = ((uint16_t*)(userdata->m_tmem + 0x800))[(c >> 8) << 2]; - - const uint8_t k = (c >> 8) & 0xff; - out.set(c & 0xff, k, k, k); -} - -void n64_texture_pipe_t::fetch_rgba16_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const int32_t taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x7ff; - - const uint16_t c = ((uint16_t*)userdata->m_tmem)[taddr]; - -#if USE_64K_LUT - out.set(m_expand_16to32_table[c]); -#else - out.set((c & 1) * 0xff, GET_HI_RGBA16_TMEM(c), GET_MED_RGBA16_TMEM(c), GET_LOW_RGBA16_TMEM(c)); -#endif -} - -void n64_texture_pipe_t::fetch_rgba32_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint32_t *tc = ((uint32_t*)userdata->m_tmem); - const int32_t taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x3ff; - - uint32_t c = tc[taddr]; - c = ((uint16_t*)(userdata->m_tmem + 0x800))[(c >> 24) << 2]; - -#if USE_64K_LUT - out.set(m_expand_16to32_table[c]); -#else - out.set((c & 1) * 0xff, GET_HI_RGBA16_TMEM(c), GET_MED_RGBA16_TMEM(c), GET_LOW_RGBA16_TMEM(c)); -#endif -} - -void n64_texture_pipe_t::fetch_rgba32_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint32_t *tc = ((uint32_t*)userdata->m_tmem); - const int32_t taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x3ff; - - uint32_t c = tc[taddr]; - c = ((uint16_t*)(userdata->m_tmem + 0x800))[(c >> 24) << 2]; - - const uint8_t k = (c >> 8) & 0xff; - out.set(c & 0xff, k, k, k); -} - -void n64_texture_pipe_t::fetch_rgba32_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const int32_t taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x3ff; - - const uint16_t cl = ((uint16_t*)userdata->m_tmem)[taddr]; - const uint16_t ch = ((uint16_t*)userdata->m_tmem)[taddr | 0x400]; - - out.set(ch & 0xff, cl >> 8, cl & 0xff, ch >> 8); -} - -void n64_texture_pipe_t::fetch_nop(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) { } - -void n64_texture_pipe_t::fetch_yuv(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint16_t *tc = ((uint16_t*)userdata->m_tmem); - - const int32_t taddr = (tbase << 3) + s; - const int32_t taddrhi = (taddr ^ sTexAddrSwap8[t & 1]) & 0x7ff; - const int32_t taddrlow = ((taddr >> 1) ^ sTexAddrSwap16[t & 1]) & 0x3ff; - - const uint16_t c = tc[taddrlow]; - - int32_t y = userdata->m_tmem[taddrhi | 0x800]; - int32_t u = c >> 8; - int32_t v = c & 0xff; - - v ^= 0x80; u ^= 0x80; - u |= ((u & 0x80) << 1); - v |= ((v & 0x80) << 1); - - out.set(y, u, v, y); -} - -void n64_texture_pipe_t::fetch_ci4_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - - const uint8_t p = (s & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); - const uint16_t c = ((uint16_t*)(userdata->m_tmem + 0x800))[((tpal << 4) | p) << 2]; - -#if USE_64K_LUT - out.set(m_expand_16to32_table[c]); -#else - out.set((c & 1) * 0xff, GET_HI_RGBA16_TMEM(c), GET_MED_RGBA16_TMEM(c), GET_LOW_RGBA16_TMEM(c)); -#endif -} - -void n64_texture_pipe_t::fetch_ci4_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - int32_t taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - - const uint8_t p = (s & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); - const uint16_t c = ((uint16_t*)(userdata->m_tmem + 0x800))[((tpal << 4) | p) << 2]; - - const uint8_t k = (c >> 8) & 0xff; - out.set(c & 0xff, k, k, k); -} - -void n64_texture_pipe_t::fetch_ci4_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0xfff; - - uint8_t p = (s & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); - p = (tpal << 4) | p; - - out.set(p, p, p, p); -} - -void n64_texture_pipe_t::fetch_ci8_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - - const uint8_t p = tc[taddr]; - const uint16_t c = ((uint16_t*)(userdata->m_tmem + 0x800))[p << 2]; - -#if USE_64K_LUT - out.set(m_expand_16to32_table[c]); -#else - out.set((c & 1) * 0xff, GET_HI_RGBA16_TMEM(c), GET_MED_RGBA16_TMEM(c), GET_LOW_RGBA16_TMEM(c)); -#endif -} - -void n64_texture_pipe_t::fetch_ci8_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - - const uint8_t p = tc[taddr]; - const uint16_t c = ((uint16_t*)(userdata->m_tmem + 0x800))[p << 2]; - - const uint8_t k = (c >> 8) & 0xff; - out.set(c & 0xff, k, k, k); -} - -void n64_texture_pipe_t::fetch_ci8_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0xfff; - - const uint8_t p = tc[taddr]; - out.set(p, p, p, p); -} - -void n64_texture_pipe_t::fetch_ia4_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - - const uint8_t p = ((s) & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); - const uint16_t c = ((uint16_t*)(userdata->m_tmem + 0x800))[((tpal << 4) | p) << 2]; - -#if USE_64K_LUT - out.set(m_expand_16to32_table[c]); -#else - out.set((c & 1) * 0xff, GET_HI_RGBA16_TMEM(c), GET_MED_RGBA16_TMEM(c), GET_LOW_RGBA16_TMEM(c)); -#endif -} - -void n64_texture_pipe_t::fetch_ia4_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - - const uint8_t p = ((s) & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); - const uint16_t c = ((uint16_t*)(userdata->m_tmem + 0x800))[((tpal << 4) | p) << 2]; - - const uint8_t k = (c >> 8) & 0xff; - out.set(c & 0xff, k, k, k); -} - -void n64_texture_pipe_t::fetch_ia4_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0xfff; - - const uint8_t p = ((s) & 1) ? (tc[taddr] & 0xf) : (tc[taddr] >> 4); - uint8_t i = p & 0xe; - i = (i << 4) | (i << 1) | (i >> 2); - - out.set((p & 1) * 0xff, i, i, i); -} - -void n64_texture_pipe_t::fetch_ia8_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - - const uint8_t p = tc[taddr]; - const uint16_t c = ((uint16_t*)(userdata->m_tmem + 0x800))[p << 2]; - -#if USE_64K_LUT - out.set(m_expand_16to32_table[c]); -#else - out.set((c & 1) * 0xff, GET_HI_RGBA16_TMEM(c), GET_MED_RGBA16_TMEM(c), GET_LOW_RGBA16_TMEM(c)); -#endif -} - -void n64_texture_pipe_t::fetch_ia8_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - - const uint8_t p = tc[taddr]; - const uint16_t c = ((uint16_t*)(userdata->m_tmem + 0x800))[p << 2]; - - const uint8_t k = (c >> 8) & 0xff; - out.set(c & 0xff, k, k, k); -} - -void n64_texture_pipe_t::fetch_ia8_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0xfff; - - const uint8_t p = tc[taddr]; - uint8_t i = p & 0xf0; - i |= (i >> 4); - - out.set(((p << 4) | (p & 0xf)) & 0xff, i, i, i); -} - -void n64_texture_pipe_t::fetch_ia16_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint16_t *tc = ((uint16_t*)userdata->m_tmem); - const int32_t taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x3ff; - - uint16_t c = tc[taddr]; - c = ((uint16_t*)(userdata->m_tmem + 0x800))[(c >> 8) << 2]; - -#if USE_64K_LUT - out.set(m_expand_16to32_table[c]); -#else - out.set((c & 1) * 0xff, GET_HI_RGBA16_TMEM(c), GET_MED_RGBA16_TMEM(c), GET_LOW_RGBA16_TMEM(c)); -#endif -} - -void n64_texture_pipe_t::fetch_ia16_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint16_t *tc = ((uint16_t*)userdata->m_tmem); - const int32_t taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x3ff; - - uint16_t c = tc[taddr]; - c = ((uint16_t*)(userdata->m_tmem + 0x800))[(c >> 8) << 2]; - - const uint8_t k = (c >> 8) & 0xff; - out.set(c & 0xff, k, k, k); -} - -void n64_texture_pipe_t::fetch_ia16_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint16_t *tc = ((uint16_t*)userdata->m_tmem); - const int32_t taddr = (((tbase << 2) + s) ^ sTexAddrSwap16[t & 1]) & 0x7ff; - - const uint16_t c = tc[taddr]; - const uint8_t i = (c >> 8); - out.set(c & 0xff, i, i, i); -} - -void n64_texture_pipe_t::fetch_i4_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - - const uint8_t byteval = tc[taddr]; - const uint8_t c = ((s & 1)) ? (byteval & 0xf) : ((byteval >> 4) & 0xf); - -#if USE_64K_LUT - const uint16_t k = ((uint16_t*)(userdata->m_tmem + 0x800))[((tpal << 4) | c) << 2]; - out.set(m_expand_16to32_table[k]); -#else - out.set((c & 1) * 0xff, GET_HI_RGBA16_TMEM(c), GET_MED_RGBA16_TMEM(c), GET_LOW_RGBA16_TMEM(c)); -#endif -} - -void n64_texture_pipe_t::fetch_i4_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - - const uint8_t byteval = tc[taddr]; - const uint8_t c = ((s & 1)) ? (byteval & 0xf) : ((byteval >> 4) & 0xf); - const uint16_t k = ((uint16_t*)(userdata->m_tmem + 0x800))[((tpal << 4) | c) << 2]; - - const uint8_t i = (k >> 8) & 0xff; - out.set(k & 0xff, i, i, i); -} - -void n64_texture_pipe_t::fetch_i4_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = ((((tbase << 4) + s) >> 1) ^ sTexAddrSwap8[t & 1]) & 0xfff; - - const uint8_t byteval = tc[taddr]; - uint8_t c = ((s & 1)) ? (byteval & 0xf) : ((byteval >> 4) & 0xf); - c |= (c << 4); - - out.set(c, c, c, c); -} - -void n64_texture_pipe_t::fetch_i8_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - - const uint8_t c = tc[taddr]; - -#if USE_64K_LUT - const uint16_t k = ((uint16_t*)(userdata->m_tmem + 0x800))[c << 2]; - out.set(m_expand_16to32_table[k]); -#else - out.set((c & 1) * 0xff, GET_HI_RGBA16_TMEM(c), GET_MED_RGBA16_TMEM(c), GET_LOW_RGBA16_TMEM(c)); -#endif -} - -void n64_texture_pipe_t::fetch_i8_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0x7ff; - - const uint8_t c = tc[taddr]; - const uint16_t k = ((uint16_t*)(userdata->m_tmem + 0x800))[c << 2]; - - const uint8_t i = (k >> 8) & 0xff; - out.set(k & 0xff, i, i, i); -} - -void n64_texture_pipe_t::fetch_i8_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata) -{ - const uint8_t *tc = userdata->m_tmem; - const int32_t taddr = (((tbase << 3) + s) ^ sTexAddrSwap8[t & 1]) & 0xfff; - - const uint8_t c = tc[taddr]; - - out.set(c, c, c, c); -} diff --git a/waterbox/ares64/ares/thirdparty/mame/mame/video/rdptpipe.h b/waterbox/ares64/ares/thirdparty/mame/mame/video/rdptpipe.h deleted file mode 100644 index b9c80e1535..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/mame/video/rdptpipe.h +++ /dev/null @@ -1,165 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz -/****************************************************************************** - - - SGI/Nintendo Reality Display Texture Fetch Unit (TF) - ------------------- - - by Ryan Holtz - based on initial C code by Ville Linde - contains additional improvements from angrylion, Ziggy, Gonetz and Orkin - - -******************************************************************************/ - -#ifndef _VIDEO_RDPTEXPIPE_H_ -#define _VIDEO_RDPTEXPIPE_H_ - -#include "video/n64types.h" - -class n64_texture_pipe_t -{ - public: - typedef void (n64_texture_pipe_t::*texel_fetcher_t) (rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - typedef void (n64_texture_pipe_t::*texel_cycler_t) (color_t* TEX, color_t* prev, int32_t SSS, int32_t SST, uint32_t tilenum, uint32_t cycle, rdp_span_aux* userdata, const rdp_poly_state& object); - - n64_texture_pipe_t() - { - m_maskbits_table[0] = 0xffff; - for(int i = 1; i < 16; i++) - { - m_maskbits_table[i] = ((uint16_t)(0xffff) >> (16 - i)) & 0x3ff; - } - m_start_span = false; - - for (auto & elem : m_texel_fetch) - { - elem = &n64_texture_pipe_t::fetch_nop; - } - - m_texel_fetch[ 8] = &n64_texture_pipe_t::fetch_rgba16_raw; - m_texel_fetch[ 9] = &n64_texture_pipe_t::fetch_rgba16_raw; - m_texel_fetch[10] = &n64_texture_pipe_t::fetch_rgba16_tlut0; - m_texel_fetch[11] = &n64_texture_pipe_t::fetch_rgba16_tlut1; - m_texel_fetch[12] = &n64_texture_pipe_t::fetch_rgba32_raw; - m_texel_fetch[13] = &n64_texture_pipe_t::fetch_rgba32_raw; - m_texel_fetch[14] = &n64_texture_pipe_t::fetch_rgba32_tlut0; - m_texel_fetch[15] = &n64_texture_pipe_t::fetch_rgba32_tlut1; - - m_texel_fetch[24] = &n64_texture_pipe_t::fetch_yuv; - m_texel_fetch[25] = &n64_texture_pipe_t::fetch_yuv; - m_texel_fetch[26] = &n64_texture_pipe_t::fetch_yuv; - m_texel_fetch[27] = &n64_texture_pipe_t::fetch_yuv; - - m_texel_fetch[32] = &n64_texture_pipe_t::fetch_ci4_raw; - m_texel_fetch[33] = &n64_texture_pipe_t::fetch_ci4_raw; - m_texel_fetch[34] = &n64_texture_pipe_t::fetch_ci4_tlut0; - m_texel_fetch[35] = &n64_texture_pipe_t::fetch_ci4_tlut1; - m_texel_fetch[36] = &n64_texture_pipe_t::fetch_ci8_raw; - m_texel_fetch[37] = &n64_texture_pipe_t::fetch_ci8_raw; - m_texel_fetch[38] = &n64_texture_pipe_t::fetch_ci8_tlut0; - m_texel_fetch[39] = &n64_texture_pipe_t::fetch_ci8_tlut1; - - m_texel_fetch[48] = &n64_texture_pipe_t::fetch_ia4_raw; - m_texel_fetch[49] = &n64_texture_pipe_t::fetch_ia4_raw; - m_texel_fetch[50] = &n64_texture_pipe_t::fetch_ia4_tlut0; - m_texel_fetch[51] = &n64_texture_pipe_t::fetch_ia4_tlut1; - m_texel_fetch[52] = &n64_texture_pipe_t::fetch_ia8_raw; - m_texel_fetch[53] = &n64_texture_pipe_t::fetch_ia8_raw; - m_texel_fetch[54] = &n64_texture_pipe_t::fetch_ia8_tlut0; - m_texel_fetch[55] = &n64_texture_pipe_t::fetch_ia8_tlut1; - m_texel_fetch[56] = &n64_texture_pipe_t::fetch_ia16_raw; - m_texel_fetch[57] = &n64_texture_pipe_t::fetch_ia16_raw; - m_texel_fetch[58] = &n64_texture_pipe_t::fetch_ia16_tlut0; - m_texel_fetch[59] = &n64_texture_pipe_t::fetch_ia16_tlut1; - - m_texel_fetch[64] = &n64_texture_pipe_t::fetch_i4_raw; - m_texel_fetch[65] = &n64_texture_pipe_t::fetch_i4_raw; - m_texel_fetch[66] = &n64_texture_pipe_t::fetch_i4_tlut0; - m_texel_fetch[67] = &n64_texture_pipe_t::fetch_i4_tlut1; - m_texel_fetch[68] = &n64_texture_pipe_t::fetch_i8_raw; - m_texel_fetch[69] = &n64_texture_pipe_t::fetch_i8_raw; - m_texel_fetch[70] = &n64_texture_pipe_t::fetch_i8_tlut0; - m_texel_fetch[71] = &n64_texture_pipe_t::fetch_i8_tlut1; - - m_cycle[0] = &n64_texture_pipe_t::cycle_nearest; - m_cycle[1] = &n64_texture_pipe_t::cycle_nearest_lerp; - m_cycle[2] = &n64_texture_pipe_t::cycle_linear; - m_cycle[3] = &n64_texture_pipe_t::cycle_linear_lerp; - } - - void cycle_nearest(color_t* TEX, color_t* prev, int32_t SSS, int32_t SST, uint32_t tilenum, uint32_t cycle, rdp_span_aux* userdata, const rdp_poly_state& object); - void cycle_nearest_lerp(color_t* TEX, color_t* prev, int32_t SSS, int32_t SST, uint32_t tilenum, uint32_t cycle, rdp_span_aux* userdata, const rdp_poly_state& object); - void cycle_linear(color_t* TEX, color_t* prev, int32_t SSS, int32_t SST, uint32_t tilenum, uint32_t cycle, rdp_span_aux* userdata, const rdp_poly_state& object); - void cycle_linear_lerp(color_t* TEX, color_t* prev, int32_t SSS, int32_t SST, uint32_t tilenum, uint32_t cycle, rdp_span_aux* userdata, const rdp_poly_state& object); - - texel_cycler_t m_cycle[4]; - - void copy(color_t* TEX, int32_t SSS, int32_t SST, uint32_t tilenum, const rdp_poly_state& object, rdp_span_aux* userdata); - void calculate_clamp_diffs(uint32_t prim_tile, rdp_span_aux* userdata, const rdp_poly_state& object); - void lod_1cycle(int32_t* sss, int32_t* sst, const int32_t s, const int32_t t, const int32_t w, const int32_t dsinc, const int32_t dtinc, const int32_t dwinc, rdp_span_aux* userdata, const rdp_poly_state& object); - void lod_2cycle(int32_t* sss, int32_t* sst, const int32_t s, const int32_t t, const int32_t w, const int32_t dsinc, const int32_t dtinc, const int32_t dwinc, const int32_t prim_tile, int32_t* t1, int32_t* t2, rdp_span_aux* userdata, const rdp_poly_state& object); - void lod_2cycle_limited(int32_t* sss, int32_t* sst, const int32_t s, const int32_t t, int32_t w, const int32_t dsinc, const int32_t dtinc, const int32_t dwinc, const int32_t prim_tile, int32_t* t1, const rdp_poly_state& object); - - void set_machine(running_machine& machine); - - bool m_start_span; - - private: - void mask(rgbaint_t& sstt, const n64_tile_t& tile); - - rgbaint_t shift_cycle(rgbaint_t& st, const n64_tile_t& tile); - void shift_copy(rgbaint_t& st, const n64_tile_t& tile); - - void clamp_cycle(rgbaint_t& st, rgbaint_t& stfrac, rgbaint_t& maxst, const int32_t tilenum, const n64_tile_t& tile, rdp_span_aux* userdata); - void clamp_cycle_light(rgbaint_t& st, rgbaint_t& maxst, const int32_t tilenum, const n64_tile_t& tile, rdp_span_aux* userdata); - - void fetch_nop(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - - void fetch_rgba16_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_rgba16_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_rgba16_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_rgba32_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_rgba32_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_rgba32_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - - void fetch_yuv(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - - void fetch_ci4_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_ci4_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_ci4_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_ci8_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_ci8_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_ci8_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - - void fetch_ia4_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_ia4_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_ia4_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_ia8_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_ia8_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_ia8_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_ia16_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_ia16_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_ia16_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - - void fetch_i4_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_i4_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_i4_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_i8_tlut0(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_i8_tlut1(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - void fetch_i8_raw(rgbaint_t& out, int32_t s, int32_t t, int32_t tbase, int32_t tpal, rdp_span_aux* userdata); - - texel_fetcher_t m_texel_fetch[16*5]; - - n64_rdp* m_rdp; - - int32_t m_maskbits_table[16]; - color_t m_expand_16to32_table[0x10000]; - uint16_t m_lod_lookup[0x80000]; - - rgbaint_t m_st2_add; - rgbaint_t m_v1; -}; - -#endif // _VIDEO_RDPTEXPIPE_H_ diff --git a/waterbox/ares64/ares/thirdparty/mame/osd/eigcc.h b/waterbox/ares64/ares/thirdparty/mame/osd/eigcc.h deleted file mode 100644 index 2c5bf34ba7..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/osd/eigcc.h +++ /dev/null @@ -1,148 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Vas Crabb -/*************************************************************************** - - eigccppc.h - - Inline implementations for GCC compilers. This code is automatically - included if appropriate by eminline.h. - -***************************************************************************/ - -#ifndef MAME_OSD_EIGCC_H -#define MAME_OSD_EIGCC_H - -#include - - -/*************************************************************************** - INLINE MATH FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - addu_32x32_co - perform an unsigned 32 bit + 32 - bit addition and return the result with carry - out --------------------------------------------------*/ - -#ifndef addu_32x32_co -#define addu_32x32_co _addu_32x32_co -inline bool _addu_32x32_co(uint32_t a, uint32_t b, uint32_t &sum) -{ - return __builtin_add_overflow(a, b, &sum); -} -#endif - - -/*------------------------------------------------- - addu_64x64_co - perform an unsigned 64 bit + 64 - bit addition and return the result with carry - out --------------------------------------------------*/ - -#ifndef addu_64x64_co -#define addu_64x64_co _addu_64x64_co -inline bool _addu_64x64_co(uint64_t a, uint64_t b, uint64_t &sum) -{ - return __builtin_add_overflow(a, b, &sum); -} -#endif - - - -/*************************************************************************** - INLINE BIT MANIPULATION FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - count_leading_zeros_32 - return the number of - leading zero bits in a 32-bit value --------------------------------------------------*/ - -#ifndef count_leading_zeros_32 -#define count_leading_zeros_32 _count_leading_zeros_32 -inline uint8_t _count_leading_zeros_32(uint32_t val) -{ - // uses CPU feature if available, otherwise falls back to runtime library call - static_assert(sizeof(val) == sizeof(unsigned), "expected 32-bit unsigned int"); - return uint8_t(unsigned(val ? __builtin_clz(val) : 32)); -} -#endif - - -/*------------------------------------------------- - count_leading_ones_32 - return the number of - leading one bits in a 32-bit value --------------------------------------------------*/ - -#ifndef count_leading_ones_32 -#define count_leading_ones_32 _count_leading_ones_32 -inline uint8_t _count_leading_ones_32(uint32_t val) -{ - return count_leading_zeros_32(~val); -} -#endif - - -/*------------------------------------------------- - count_leading_zeros_64 - return the number of - leading zero bits in a 64-bit value --------------------------------------------------*/ - -#ifndef count_leading_zeros_64 -#define count_leading_zeros_64 _count_leading_zeros_64 -inline uint8_t _count_leading_zeros_64(uint64_t val) -{ - // uses CPU feature if available, otherwise falls back to runtime library call - static_assert(sizeof(val) == sizeof(unsigned long long), "expected 64-bit unsigned long long int"); - return uint8_t(unsigned(val ? __builtin_clzll(val) : 64)); -} -#endif - - -/*------------------------------------------------- - count_leading_ones_64 - return the number of - leading one bits in a 64-bit value --------------------------------------------------*/ - -#ifndef count_leading_ones_64 -#define count_leading_ones_64 _count_leading_ones_64 -inline uint8_t _count_leading_ones_64(uint64_t val) -{ - return count_leading_zeros_64(~val); -} -#endif - - -/*------------------------------------------------- - population_count_32 - return the number of - one bits in a 32-bit value --------------------------------------------------*/ - -#ifndef population_count_32 -#define population_count_32 _population_count_32 -inline unsigned _population_count_32(uint32_t val) -{ - // uses CPU feature if available, otherwise falls back to implementation similar to eminline.h - static_assert(sizeof(val) == sizeof(unsigned), "expected 32-bit unsigned int"); - return unsigned(__builtin_popcount(static_cast(val))); -} -#endif - - -/*------------------------------------------------- - population_count_64 - return the number of - one bits in a 64-bit value --------------------------------------------------*/ - -#ifndef population_count_64 -#define population_count_64 _population_count_64 -inline unsigned _population_count_64(uint64_t val) -{ - // uses CPU feature if available, otherwise falls back to implementation similar to eminline.h - static_assert(sizeof(val) == sizeof(unsigned long long), "expected 64-bit unsigned long long int"); - return unsigned(__builtin_popcountll(static_cast(val))); -} -#endif - -#endif // MAME_OSD_EIGCC_H diff --git a/waterbox/ares64/ares/thirdparty/mame/osd/eigccarm.h b/waterbox/ares64/ares/thirdparty/mame/osd/eigccarm.h deleted file mode 100644 index 90004daf9d..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/osd/eigccarm.h +++ /dev/null @@ -1,332 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Vas Crabb -/*************************************************************************** - - eigccarm.h - - ARM/AArch64 inline implementations for GCC compilers. This code is - automatically included if appropriate by eminline.h. - -***************************************************************************/ - -#ifndef MAME_OSD_EIGCCARM_H -#define MAME_OSD_EIGCCARM_H - - -/*************************************************************************** - INLINE MATH FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - mul_32x32 - perform a signed 32 bit x 32 bit - multiply and return the full 64 bit result --------------------------------------------------*/ - -// GCC can do a good job of this. - - -/*------------------------------------------------- - mulu_32x32 - perform an unsigned 32 bit x - 32 bit multiply and return the full 64 bit - result --------------------------------------------------*/ - -// GCC can do a good job of this - - -/*------------------------------------------------- - mul_32x32_hi - perform a signed 32 bit x 32 bit - multiply and return the upper 32 bits of the - result --------------------------------------------------*/ - -// GCC can do a good job of this - - -/*------------------------------------------------- - mulu_32x32_hi - perform an unsigned 32 bit x - 32 bit multiply and return the upper 32 bits - of the result --------------------------------------------------*/ - -// GCC can do a good job of this - - -/*------------------------------------------------- - mul_32x32_shift - perform a signed 32 bit x - 32 bit multiply and shift the result by the - given number of bits before truncating the - result to 32 bits --------------------------------------------------*/ - -#if !defined(__aarch64__) -#define mul_32x32_shift _mul_32x32_shift -inline int32_t ATTR_CONST ATTR_FORCE_INLINE -_mul_32x32_shift(int32_t val1, int32_t val2, uint8_t shift) -{ - uint32_t l, h; - - __asm__ ( - " smull %[l], %[h], %[val1], %[val2] \n" - : [l] "=r" (l) - , [h] "=r" (h) - : [val1] "%r" (val1) - , [val2] "r" (val2) - ); - - // Valid for (0 <= shift <= 31) - return int32_t((l >> shift) | (h << (32 - shift))); -} -#endif - - -/*------------------------------------------------- - mulu_32x32_shift - perform an unsigned 32 bit x - 32 bit multiply and shift the result by the - given number of bits before truncating the - result to 32 bits --------------------------------------------------*/ - -#if !defined(__aarch64__) -#define mulu_32x32_shift _mulu_32x32_shift -inline uint32_t ATTR_CONST ATTR_FORCE_INLINE -_mulu_32x32_shift(uint32_t val1, uint32_t val2, uint8_t shift) -{ - uint32_t l, h; - - __asm__ ( - " umull %[l], %[h], %[val1], %[val2] \n" - : [l] "=r" (l) - , [h] "=r" (h) - : [val1] "%r" (val1) - , [val2] "r" (val2) - ); - - // Valid for (0 <= shift <= 31) - return (l >> shift) | (h << (32 - shift)); -} -#endif - - -/*------------------------------------------------- - div_64x32 - perform a signed 64 bit x 32 bit - divide and return the 32 bit quotient --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - divu_64x32 - perform an unsigned 64 bit x 32 bit - divide and return the 32 bit quotient --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - div_64x32_rem - perform a signed 64 bit x 32 - bit divide and return the 32 bit quotient and - 32 bit remainder --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - divu_64x32_rem - perform an unsigned 64 bit x - 32 bit divide and return the 32 bit quotient - and 32 bit remainder --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - div_32x32_shift - perform a signed divide of - two 32 bit values, shifting the first before - division, and returning the 32 bit quotient --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - divu_32x32_shift - perform an unsigned divide of - two 32 bit values, shifting the first before - division, and returning the 32 bit quotient --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - mod_64x32 - perform a signed 64 bit x 32 bit - divide and return the 32 bit remainder --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - modu_64x32 - perform an unsigned 64 bit x 32 bit - divide and return the 32 bit remainder --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - recip_approx - compute an approximate floating - point reciprocal --------------------------------------------------*/ - -#if defined(__aarch64__) -#define recip_approx _recip_approx -inline float ATTR_CONST ATTR_FORCE_INLINE -_recip_approx(float value) -{ - float result; - - __asm__ ( - " frecpe %s[result], %s[value] \n" - : [result] "=w" (result) - : [value] "w" (value) - ); - - return result; -} -#endif - - -/*------------------------------------------------- - mul_64x64 - perform a signed 64 bit x 64 bit - multiply and return the full 128 bit result --------------------------------------------------*/ - -#if defined(__aarch64__) -#define mul_64x64 _mul_64x64 -inline int64_t ATTR_FORCE_INLINE -_mul_64x64(int64_t a, int64_t b, int64_t &hi) -{ - __int128 const r(__int128(a) * b); - hi = int64_t(uint64_t((unsigned __int128)r >> 64)); - return int64_t(uint64_t((unsigned __int128)r)); -} -#endif - - -/*------------------------------------------------- - mulu_64x64 - perform an unsigned 64 bit x 64 - bit multiply and return the full 128 bit result --------------------------------------------------*/ - -#if defined(__aarch64__) -#define mulu_64x64 _mulu_64x64 -inline uint64_t ATTR_FORCE_INLINE -_mulu_64x64(uint64_t a, uint64_t b, uint64_t &hi) -{ - unsigned __int128 const r((unsigned __int128)a * b); - hi = uint64_t(r >> 64); - return uint64_t(r); -} -#endif - - - -/*************************************************************************** - INLINE BIT MANIPULATION FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - count_leading_zeros_32 - return the number of - leading zero bits in a 32-bit value --------------------------------------------------*/ - -#if defined(__aarch64__) -#define count_leading_zeros_32 _count_leading_zeros_32 -inline uint8_t ATTR_CONST ATTR_FORCE_INLINE -_count_leading_zeros_32(uint32_t value) -{ - uint32_t result; - - __asm__ ( - " clz %w[result], %w[value] \n" - : [result] "=r" (result) - : [value] "r" (value) - ); - - return uint8_t(result); -} -#endif - - -/*------------------------------------------------- - count_leading_ones_32 - return the number of - leading one bits in a 32-bit value --------------------------------------------------*/ - -#if defined(__aarch64__) -#define count_leading_ones_32 _count_leading_ones_32 -inline uint8_t ATTR_CONST ATTR_FORCE_INLINE -_count_leading_ones_32(uint32_t value) -{ - uint32_t result; - - __asm__ ( - " clz %w[result], %w[value] \n" - : [result] "=r" (result) - : [value] "r" (~value) - ); - - return uint8_t(result); -} -#endif - - -/*------------------------------------------------- - count_leading_zeros_64 - return the number of - leading zero bits in a 64-bit value --------------------------------------------------*/ - -#if defined(__aarch64__) -#define count_leading_zeros_64 _count_leading_zeros_64 -inline uint8_t ATTR_CONST ATTR_FORCE_INLINE -_count_leading_zeros_64(uint64_t value) -{ - uint64_t result; - - __asm__ ( - " clz %[result], %[value] \n" - : [result] "=r" (result) - : [value] "r" (value) - ); - - return uint8_t(result); -} -#endif - - -/*------------------------------------------------- - count_leading_ones_64 - return the number of - leading one bits in a 64-bit value --------------------------------------------------*/ - -#if defined(__aarch64__) -#define count_leading_ones_64 _count_leading_ones_64 -inline uint8_t ATTR_CONST ATTR_FORCE_INLINE -_count_leading_ones_64(uint64_t value) -{ - uint64_t result; - - __asm__ ( - " clz %[result], %[value] \n" - : [result] "=r" (result) - : [value] "r" (~value) - ); - - return uint8_t(result); -} -#endif - -#endif // MAME_OSD_EIGCCARM_H diff --git a/waterbox/ares64/ares/thirdparty/mame/osd/eigccppc.h b/waterbox/ares64/ares/thirdparty/mame/osd/eigccppc.h deleted file mode 100644 index b1f0fc638a..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/osd/eigccppc.h +++ /dev/null @@ -1,328 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Vas Crabb -/*************************************************************************** - - eigccppc.h - - PowerPC (32 and 64-bit) inline implementations for GCC compilers. This - code is automatically included if appropriate by eminline.h. - -***************************************************************************/ - -#ifndef MAME_OSD_EIGCCPPC_H -#define MAME_OSD_EIGCCPPC_H - - -/*************************************************************************** - INLINE MATH FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - mul_32x32 - perform a signed 32 bit x 32 bit - multiply and return the full 64 bit result --------------------------------------------------*/ - -// GCC can do a good job of this. - - -/*------------------------------------------------- - mulu_32x32 - perform an unsigned 32 bit x - 32 bit multiply and return the full 64 bit - result --------------------------------------------------*/ - -// GCC can do a good job of this - - -/*------------------------------------------------- - mul_32x32_hi - perform a signed 32 bit x 32 bit - multiply and return the upper 32 bits of the - result --------------------------------------------------*/ - -// GCC can do a good job of this - - -/*------------------------------------------------- - mulu_32x32_hi - perform an unsigned 32 bit x - 32 bit multiply and return the upper 32 bits - of the result --------------------------------------------------*/ - -// GCC can do a good job of this - - -/*------------------------------------------------- - mul_32x32_shift - perform a signed 32 bit x - 32 bit multiply and shift the result by the - given number of bits before truncating the - result to 32 bits --------------------------------------------------*/ - -#if !defined(__ppc64__) && !defined(__PPC64__) && !defined(_ARCH_PPC64) -#define mul_32x32_shift _mul_32x32_shift -inline int32_t ATTR_CONST ATTR_FORCE_INLINE -_mul_32x32_shift(int32_t val1, int32_t val2, uint8_t shift) -{ - uint32_t l, h; - - __asm__ ( - " mullw %[l], %[val1], %[val2] \n" - " mulhw %[h], %[val1], %[val2] \n" - : [l] "=&r" (l) - , [h] "=r" (h) - : [val1] "%r" (val1) - , [val2] "r" (val2) - ); - - // Valid for (0 <= shift <= 31) - return int32_t((l >> shift) | (h << (32 - shift))); -} -#endif - - -/*------------------------------------------------- - mulu_32x32_shift - perform an unsigned 32 bit x - 32 bit multiply and shift the result by the - given number of bits before truncating the - result to 32 bits --------------------------------------------------*/ - -#if !defined(__ppc64__) && !defined(__PPC64__) && !defined(_ARCH_PPC64) -#define mulu_32x32_shift _mulu_32x32_shift -inline uint32_t ATTR_CONST ATTR_FORCE_INLINE -_mulu_32x32_shift(uint32_t val1, uint32_t val2, uint8_t shift) -{ - uint32_t l, h; - - __asm__ ( - " mullw %[l], %[val1], %[val2] \n" - " mulhwu %[h], %[val1], %[val2] \n" - : [l] "=&r" (l) - , [h] "=r" (h) - : [val1] "%r" (val1) - , [val2] "r" (val2) - ); - - // Valid for (0 <= shift <= 31) - return (l >> shift) | (h << (32 - shift)); -} -#endif - - -/*------------------------------------------------- - div_64x32 - perform a signed 64 bit x 32 bit - divide and return the 32 bit quotient --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - divu_64x32 - perform an unsigned 64 bit x 32 bit - divide and return the 32 bit quotient --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - div_64x32_rem - perform a signed 64 bit x 32 - bit divide and return the 32 bit quotient and - 32 bit remainder --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - divu_64x32_rem - perform an unsigned 64 bit x - 32 bit divide and return the 32 bit quotient - and 32 bit remainder --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - div_32x32_shift - perform a signed divide of - two 32 bit values, shifting the first before - division, and returning the 32 bit quotient --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - divu_32x32_shift - perform an unsigned divide of - two 32 bit values, shifting the first before - division, and returning the 32 bit quotient --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - mod_64x32 - perform a signed 64 bit x 32 bit - divide and return the 32 bit remainder --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - modu_64x32 - perform an unsigned 64 bit x 32 bit - divide and return the 32 bit remainder --------------------------------------------------*/ - -// TBD - - -/*------------------------------------------------- - recip_approx - compute an approximate floating - point reciprocal --------------------------------------------------*/ - -#define recip_approx _recip_approx -inline float ATTR_CONST ATTR_FORCE_INLINE -_recip_approx(float value) -{ - float result; - - __asm__ ( - " fres %[result], %[value] \n" - : [result] "=f" (result) - : [value] "f" (value) - ); - - return result; -} - - -/*------------------------------------------------- - mul_64x64 - perform a signed 64 bit x 64 bit - multiply and return the full 128 bit result --------------------------------------------------*/ - -#if defined(__ppc64__) || defined(__PPC64___) || defined(_ARCH_PPC64) -#define mul_64x64 _mul_64x64 -inline int64_t ATTR_FORCE_INLINE -_mul_64x64(int64_t a, int64_t b, int64_t &hi) -{ - __int128 const r(__int128(a) * b); - hi = int64_t(uint64_t((unsigned __int128)r >> 64)); - return int64_t(uint64_t((unsigned __int128)r)); -} -#endif - - -/*------------------------------------------------- - mulu_64x64 - perform an unsigned 64 bit x 64 - bit multiply and return the full 128 bit result --------------------------------------------------*/ - -#if defined(__ppc64__) || defined(__PPC64___) || defined(_ARCH_PPC64) -#define mulu_64x64 _mulu_64x64 -inline uint64_t ATTR_FORCE_INLINE -_mulu_64x64(uint64_t a, uint64_t b, uint64_t &hi) -{ - unsigned __int128 const r((unsigned __int128)a * b); - hi = uint64_t(r >> 64); - return uint64_t(r); -} -#endif - - - -/*************************************************************************** - INLINE BIT MANIPULATION FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - count_leading_zeros_32 - return the number of - leading zero bits in a 32-bit value --------------------------------------------------*/ - -#define count_leading_zeros_32 _count_leading_zeros_32 -inline uint8_t ATTR_CONST ATTR_FORCE_INLINE -_count_leading_zeros_32(uint32_t value) -{ - uint32_t result; - - __asm__ ( - " cntlzw %[result], %[value] \n" - : [result] "=r" (result) - : [value] "r" (value) - ); - - return uint8_t(result); -} - - -/*------------------------------------------------- - count_leading_ones_32 - return the number of - leading one bits in a 32-bit value --------------------------------------------------*/ - -#define count_leading_ones_32 _count_leading_ones_32 -inline uint8_t ATTR_CONST ATTR_FORCE_INLINE -_count_leading_ones_32(uint32_t value) -{ - uint32_t result; - - __asm__ ( - " cntlzw %[result], %[value] \n" - : [result] "=r" (result) - : [value] "r" (~value) - ); - - return uint8_t(result); -} - - -/*------------------------------------------------- - count_leading_zeros_64 - return the number of - leading zero bits in a 64-bit value --------------------------------------------------*/ - -#if defined(__ppc64__) || defined(__PPC64___) || defined(_ARCH_PPC64) -#define count_leading_zeros_64 _count_leading_zeros_64 -inline uint8_t ATTR_CONST ATTR_FORCE_INLINE -_count_leading_zeros_64(uint64_t value) -{ - uint64_t result; - - __asm__ ( - " cntlzd %[result], %[value] \n" - : [result] "=r" (result) - : [value] "r" (value) - ); - - return uint8_t(result); -} -#endif - - -/*------------------------------------------------- - count_leading_ones_64 - return the number of - leading one bits in a 64-bit value --------------------------------------------------*/ - -#if defined(__ppc64__) || defined(__PPC64___) || defined(_ARCH_PPC64) -#define count_leading_ones_64 _count_leading_ones_64 -inline uint8_t ATTR_CONST ATTR_FORCE_INLINE -_count_leading_ones_64(uint64_t value) -{ - uint64_t result; - - __asm__ ( - " cntlzd %[result], %[value] \n" - : [result] "=r" (result) - : [value] "r" (~value) - ); - - return uint8_t(result); -} -#endif - -#endif // MAME_OSD_EIGCCPPC_H diff --git a/waterbox/ares64/ares/thirdparty/mame/osd/eigccx86.h b/waterbox/ares64/ares/thirdparty/mame/osd/eigccx86.h deleted file mode 100644 index 35f02e12f5..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/osd/eigccx86.h +++ /dev/null @@ -1,526 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Vas Crabb -/*************************************************************************** - - eigccx86.h - - x86 (32 and 64-bit) inline implementations for GCC compilers. This - code is automatically included if appropriate by eminline.h. - -***************************************************************************/ - -#ifndef MAME_OSD_EIGCCX86_H -#define MAME_OSD_EIGCCX86_H - -// Include MMX/SSE intrinsics headers - -#ifdef __SSE2__ -#include -#include // MMX -#include // SSE -#include // SSE2 -#endif - - -/*************************************************************************** - INLINE MATH FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - mul_32x32 - perform a signed 32 bit x 32 bit - multiply and return the full 64 bit result --------------------------------------------------*/ - -// GCC can do a good job of this. - - -/*------------------------------------------------- - mulu_32x32 - perform an unsigned 32 bit x - 32 bit multiply and return the full 64 bit - result --------------------------------------------------*/ - -// GCC can do a good job of this. - - -/*------------------------------------------------- - mul_32x32_hi - perform a signed 32 bit x 32 bit - multiply and return the upper 32 bits of the - result --------------------------------------------------*/ - -// GCC can do a good job of this. - - -/*------------------------------------------------- - mulu_32x32_hi - perform an unsigned 32 bit x - 32 bit multiply and return the upper 32 bits - of the result --------------------------------------------------*/ - -// GCC can do a good job of this. - - -/*------------------------------------------------- - mul_32x32_shift - perform a signed 32 bit x - 32 bit multiply and shift the result by the - given number of bits before truncating the - result to 32 bits --------------------------------------------------*/ - -#ifndef __x86_64__ -#define mul_32x32_shift _mul_32x32_shift -inline int32_t ATTR_CONST ATTR_FORCE_INLINE -_mul_32x32_shift(int32_t a, int32_t b, uint8_t shift) -{ - int32_t result; - - // Valid for (0 <= shift <= 31) - __asm__ ( - " imull %[b] ;" - " shrdl %[shift], %%edx, %[result] ;" - : [result] "=a" (result) // result ends up in eax - : [a] "%0" (a) // 'a' should also be in eax on entry - , [b] "rm" (b) // 'b' can be memory or register - , [shift] "Ic" (shift) // 'shift' must be constant in 0-31 range or in cl - : "%edx", "cc" // clobbers edx and condition codes - ); - - return result; -} -#endif - - -/*------------------------------------------------- - mulu_32x32_shift - perform an unsigned 32 bit x - 32 bit multiply and shift the result by the - given number of bits before truncating the - result to 32 bits --------------------------------------------------*/ - -#ifndef __x86_64__ -#define mulu_32x32_shift _mulu_32x32_shift -inline uint32_t ATTR_CONST ATTR_FORCE_INLINE -_mulu_32x32_shift(uint32_t a, uint32_t b, uint8_t shift) -{ - uint32_t result; - - // Valid for (0 <= shift <= 31) - __asm__ ( - " mull %[b] ;" - " shrdl %[shift], %%edx, %[result] ;" - : [result] "=a" (result) // result ends up in eax - : [a] "%0" (a) // 'a' should also be in eax on entry - , [b] "rm" (b) // 'b' can be memory or register - , [shift] "Ic" (shift) // 'shift' must be constant in 0-31 range or in cl - : "%edx", "cc" // clobbers edx and condition codes - ); - - return result; -} -#endif - - -/*------------------------------------------------- - div_64x32 - perform a signed 64 bit x 32 bit - divide and return the 32 bit quotient --------------------------------------------------*/ - -#ifndef __x86_64__ -#define div_64x32 _div_64x32 -inline int32_t ATTR_CONST ATTR_FORCE_INLINE -_div_64x32(int64_t a, int32_t b) -{ - int32_t result, temp; - - // Throws arithmetic exception if result doesn't fit in 32 bits - __asm__ ( - " idivl %[b] ;" - : [result] "=a" (result) // result ends up in eax - , [temp] "=d" (temp) // this is effectively a clobber - : [a] "A" (a) // 'a' in edx:eax - , [b] "rm" (b) // 'b' in register or memory - : "cc" // clobbers condition codes - ); - - return result; -} -#endif - - -/*------------------------------------------------- - divu_64x32 - perform an unsigned 64 bit x 32 bit - divide and return the 32 bit quotient --------------------------------------------------*/ - -#ifndef __x86_64__ -#define divu_64x32 _divu_64x32 -inline uint32_t ATTR_CONST ATTR_FORCE_INLINE -_divu_64x32(uint64_t a, uint32_t b) -{ - uint32_t result, temp; - - // Throws arithmetic exception if result doesn't fit in 32 bits - __asm__ ( - " divl %[b] ;" - : [result] "=a" (result) // result ends up in eax - , [temp] "=d" (temp) // this is effectively a clobber - : [a] "A" (a) // 'a' in edx:eax - , [b] "rm" (b) // 'b' in register or memory - : "cc" // clobbers condition codes - ); - - return result; -} -#endif - - -/*------------------------------------------------- - div_64x32_rem - perform a signed 64 bit x 32 - bit divide and return the 32 bit quotient and - 32 bit remainder --------------------------------------------------*/ - -#define div_64x32_rem _div_64x32_rem -inline int32_t ATTR_FORCE_INLINE -_div_64x32_rem(int64_t dividend, int32_t divisor, int32_t &remainder) -{ - int32_t quotient; -#ifndef __x86_64__ - // Throws arithmetic exception if result doesn't fit in 32 bits - __asm__ ( - " idivl %[divisor] ;" - : [result] "=a" (quotient) // quotient ends up in eax - , [remainder] "=d" (remainder) // remainder ends up in edx - : [dividend] "A" (dividend) // 'dividend' in edx:eax - , [divisor] "rm" (divisor) // 'divisor' in register or memory - : "cc" // clobbers condition codes - ); -#else - int32_t const divh{ int32_t(uint32_t(uint64_t(dividend) >> 32)) }; - int32_t const divl{ int32_t(uint32_t(uint64_t(dividend))) }; - - // Throws arithmetic exception if result doesn't fit in 32 bits - __asm__ ( - " idivl %[divisor] ;" - : [result] "=a" (quotient) // quotient ends up in eax - , [remainder] "=d" (remainder) // remainder ends up in edx - : [divl] "a" (divl) // 'dividend' in edx:eax - , [divh] "d" (divh) - , [divisor] "rm" (divisor) // 'divisor' in register or memory - : "cc" // clobbers condition codes - ); -#endif - return quotient; -} - - -/*------------------------------------------------- - divu_64x32_rem - perform an unsigned 64 bit x - 32 bit divide and return the 32 bit quotient - and 32 bit remainder --------------------------------------------------*/ - -#define divu_64x32_rem _divu_64x32_rem -inline uint32_t ATTR_FORCE_INLINE -_divu_64x32_rem(uint64_t dividend, uint32_t divisor, uint32_t &remainder) -{ - uint32_t quotient; -#ifndef __x86_64__ - // Throws arithmetic exception if result doesn't fit in 32 bits - __asm__ ( - " divl %[divisor] ;" - : [result] "=a" (quotient) // quotient ends up in eax - , [remainder] "=d" (remainder) // remainder ends up in edx - : [dividend] "A" (dividend) // 'dividend' in edx:eax - , [divisor] "rm" (divisor) // 'divisor' in register or memory - : "cc" // clobbers condition codes - ); -#else - uint32_t const divh{ uint32_t(dividend >> 32) }; - uint32_t const divl{ uint32_t(dividend) }; - - // Throws arithmetic exception if result doesn't fit in 32 bits - __asm__ ( - " divl %[divisor] ;" - : [result] "=a" (quotient) // quotient ends up in eax - , [remainder] "=d" (remainder) // remainder ends up in edx - : [divl] "a" (divl) // 'dividend' in edx:eax - , [divh] "d" (divh) - , [divisor] "rm" (divisor) // 'divisor' in register or memory - : "cc" // clobbers condition codes - ); - -#endif - return quotient; -} - - -/*------------------------------------------------- - div_32x32_shift - perform a signed divide of - two 32 bit values, shifting the first before - division, and returning the 32 bit quotient --------------------------------------------------*/ - -#ifndef __x86_64__ -#define div_32x32_shift _div_32x32_shift -inline int32_t ATTR_CONST ATTR_FORCE_INLINE -_div_32x32_shift(int32_t a, int32_t b, uint8_t shift) -{ - int32_t result; - - // Valid for (0 <= shift <= 31) - // Throws arithmetic exception if result doesn't fit in 32 bits - __asm__ ( - " cdq ;" - " shldl %[shift], %[a], %%edx ;" - " shll %[shift], %[a] ;" - " idivl %[b] ;" - : [result] "=&a" (result) // result ends up in eax - : [a] "0" (a) // 'a' should also be in eax on entry - , [b] "rm" (b) // 'b' can be memory or register - , [shift] "Ic" (shift) // 'shift' must be constant in 0-31 range or in cl - : "%edx", "cc" // clobbers edx and condition codes - ); - - return result; -} -#endif - - -/*------------------------------------------------- - divu_32x32_shift - perform an unsigned divide of - two 32 bit values, shifting the first before - division, and returning the 32 bit quotient --------------------------------------------------*/ - -#ifndef __x86_64__ -#define divu_32x32_shift _divu_32x32_shift -inline uint32_t ATTR_CONST ATTR_FORCE_INLINE -_divu_32x32_shift(uint32_t a, uint32_t b, uint8_t shift) -{ - int32_t result; - - // Valid for (0 <= shift <= 31) - // Throws arithmetic exception if result doesn't fit in 32 bits - __asm__ ( - " clr %%edx ;" - " shldl %[shift], %[a], %%edx ;" - " shll %[shift], %[a] ;" - " divl %[b] ;" - : [result] "=&a" (result) // result ends up in eax - : [a] "0" (a) // 'a' should also be in eax on entry - , [b] "rm" (b) // 'b' can be memory or register - , [shift] "Ic" (shift) // 'shift' must be constant in 0-31 range or in cl - : "%edx", "cc" // clobbers edx and condition codes - ); - - return result; -} -#endif - - -/*------------------------------------------------- - mod_64x32 - perform a signed 64 bit x 32 bit - divide and return the 32 bit remainder --------------------------------------------------*/ - -#ifndef __x86_64__ -#define mod_64x32 _mod_64x32 -inline int32_t ATTR_CONST ATTR_FORCE_INLINE -_mod_64x32(int64_t a, int32_t b) -{ - int32_t result, temp; - - // Throws arithmetic exception if quotient doesn't fit in 32 bits - __asm__ ( - " idivl %[b] ;" - : [result] "=d" (result) // Result ends up in edx - , [temp] "=a" (temp) // This is effectively a clobber - : [a] "A" (a) // 'a' in edx:eax - , [b] "rm" (b) // 'b' in register or memory - : "cc" // Clobbers condition codes - ); - - return result; -} -#endif - - -/*------------------------------------------------- - modu_64x32 - perform an unsigned 64 bit x 32 bit - divide and return the 32 bit remainder --------------------------------------------------*/ - -#ifndef __x86_64__ -#define modu_64x32 _modu_64x32 -inline uint32_t ATTR_CONST ATTR_FORCE_INLINE -_modu_64x32(uint64_t a, uint32_t b) -{ - uint32_t result, temp; - - // Throws arithmetic exception if quotient doesn't fit in 32 bits - __asm__ ( - " divl %[b] ;" - : [result] "=d" (result) // Result ends up in edx - , [temp] "=a" (temp) // This is effectively a clobber - : [a] "A" (a) // 'a' in edx:eax - , [b] "rm" (b) // 'b' in register or memory - : "cc" // Clobbers condition codes - ); - - return result; -} -#endif - - -/*------------------------------------------------- - recip_approx - compute an approximate floating - point reciprocal --------------------------------------------------*/ - -#ifdef __SSE2__ -#define recip_approx _recip_approx -inline float ATTR_CONST ATTR_FORCE_INLINE -_recip_approx(float value) -{ - __m128 const value_xmm(_mm_set_ss(value)); - __m128 const result_xmm(_mm_rcp_ss(value_xmm)); - float result; - _mm_store_ss(&result, result_xmm); - return result; -} -#endif - - -/*------------------------------------------------- - mul_64x64 - perform a signed 64 bit x 64 bit - multiply and return the full 128 bit result --------------------------------------------------*/ - -#ifdef __x86_64__ -#define mul_64x64 _mul_64x64 -inline int64_t ATTR_FORCE_INLINE -_mul_64x64(int64_t a, int64_t b, int64_t &hi) -{ - __int128 const r(__int128(a) * b); - hi = int64_t(uint64_t((unsigned __int128)r >> 64)); - return int64_t(uint64_t((unsigned __int128)r)); -} -#endif - - -/*------------------------------------------------- - mulu_64x64 - perform an unsigned 64 bit x 64 - bit multiply and return the full 128 bit result --------------------------------------------------*/ - -#ifdef __x86_64__ -#define mulu_64x64 _mulu_64x64 -inline uint64_t ATTR_FORCE_INLINE -_mulu_64x64(uint64_t a, uint64_t b, uint64_t &hi) -{ - unsigned __int128 const r((unsigned __int128)a * b); - hi = uint64_t(r >> 64); - return uint64_t(r); -} -#endif - - - -/*************************************************************************** - INLINE BIT MANIPULATION FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - count_leading_zeros_32 - return the number of - leading zero bits in a 32-bit value --------------------------------------------------*/ - -#define count_leading_zeros_32 _count_leading_zeros_32 -inline uint8_t ATTR_CONST ATTR_FORCE_INLINE -_count_leading_zeros_32(uint32_t value) -{ - uint32_t result; - __asm__ ( - " bsrl %[value], %[result] ;" - " cmovzl %[bias], %[result] ;" - : [result] "=&r" (result) // result can be in any register - : [value] "rm" (value) // 'value' can be register or memory - , [bias] "rm" (~uint32_t(0)) // 'bias' can be register or memory - : "cc" // clobbers condition codes - ); - return uint8_t(31U - result); -} - - -/*------------------------------------------------- - count_leading_ones_32 - return the number of - leading one bits in a 32-bit value --------------------------------------------------*/ - -#define count_leading_ones_32 _count_leading_ones_32 -inline uint8_t ATTR_CONST ATTR_FORCE_INLINE -_count_leading_ones_32(uint32_t value) -{ - uint32_t result; - __asm__ ( - " bsrl %[value], %[result] ;" - " cmovzl %[bias], %[result] ;" - : [result] "=&r" (result) // result can be in any register - : [value] "rm" (~value) // 'value' can be register or memory - , [bias] "rm" (~uint32_t(0)) // 'bias' can be register or memory - : "cc" // clobbers condition codes - ); - return uint8_t(31U - result); -} - - -/*------------------------------------------------- - count_leading_zeros_64 - return the number of - leading zero bits in a 64-bit value --------------------------------------------------*/ - -#ifdef __x86_64__ -#define count_leading_zeros_64 _count_leading_zeros_64 -inline uint8_t ATTR_CONST ATTR_FORCE_INLINE -_count_leading_zeros_64(uint64_t value) -{ - uint64_t result; - __asm__ ( - " bsrq %[value], %[result] ;" - " cmovzq %[bias], %[result] ;" - : [result] "=&r" (result) // result can be in any register - : [value] "rm" (value) // 'value' can be register or memory - , [bias] "rm" (~uint64_t(0)) // 'bias' can be register or memory - : "cc" // clobbers condition codes - ); - return uint8_t(63U - result); -} -#endif - - -/*------------------------------------------------- - count_leading_ones_64 - return the number of - leading one bits in a 64-bit value --------------------------------------------------*/ - -#ifdef __x86_64__ -#define count_leading_ones_64 _count_leading_ones_64 -inline uint8_t ATTR_CONST ATTR_FORCE_INLINE -_count_leading_ones_64(uint64_t value) -{ - uint64_t result; - __asm__ ( - " bsrq %[value], %[result] ;" - " cmovzq %[bias], %[result] ;" - : [result] "=&r" (result) // result can be in any register - : [value] "rm" (~value) // 'value' can be register or memory - , [bias] "rm" (~uint64_t(0)) // 'bias' can be register or memory - : "cc" // clobbers condition codes - ); - return uint8_t(63U - result); -} -#endif - -#endif // MAME_OSD_EIGCCX86_H diff --git a/waterbox/ares64/ares/thirdparty/mame/osd/eivc.h b/waterbox/ares64/ares/thirdparty/mame/osd/eivc.h deleted file mode 100644 index 2ffd0e7633..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/osd/eivc.h +++ /dev/null @@ -1,94 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -//============================================================ -// -// eivc.h -// -// Inline implementations for MSVC compiler. -// -//============================================================ - -#ifndef MAME_OSD_EIVC_H -#define MAME_OSD_EIVC_H - -#pragma once - -#include -#pragma intrinsic(_BitScanReverse) -#ifdef PTR64 -#pragma intrinsic(_BitScanReverse64) -#endif - - -/*************************************************************************** - INLINE BIT MANIPULATION FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - count_leading_zeros_32 - return the number of - leading zero bits in a 32-bit value --------------------------------------------------*/ - -#ifndef count_leading_zeros_32 -#define count_leading_zeros_32 _count_leading_zeros_32 -__forceinline uint8_t _count_leading_zeros_32(uint32_t value) -{ - unsigned long index; - return _BitScanReverse(&index, value) ? (31U - index) : 32U; -} -#endif - - -/*------------------------------------------------- - count_leading_ones_32 - return the number of - leading one bits in a 32-bit value --------------------------------------------------*/ - -#ifndef count_leading_ones_32 -#define count_leading_ones_32 _count_leading_ones_32 -__forceinline uint8_t _count_leading_ones_32(uint32_t value) -{ - unsigned long index; - return _BitScanReverse(&index, ~value) ? (31U - index) : 32U; -} -#endif - - -/*------------------------------------------------- - count_leading_zeros_64 - return the number of - leading zero bits in a 64-bit value --------------------------------------------------*/ - -#ifndef count_leading_zeros_64 -#define count_leading_zeros_64 _count_leading_zeros_64 -__forceinline uint8_t _count_leading_zeros_64(uint64_t value) -{ - unsigned long index; -#ifdef PTR64 - return _BitScanReverse64(&index, value) ? (63U - index) : 64U; -#else - return _BitScanReverse(&index, uint32_t(value >> 32)) ? (31U - index) : _BitScanReverse(&index, uint32_t(value)) ? (63U - index) : 64U; -#endif -} -#endif - - -/*------------------------------------------------- - count_leading_ones_64 - return the number of - leading one bits in a 64-bit value --------------------------------------------------*/ - -#ifndef count_leading_ones_64 -#define count_leading_ones_64 _count_leading_ones_64 -__forceinline uint8_t _count_leading_ones_64(uint64_t value) -{ - unsigned long index; -#ifdef PTR64 - return _BitScanReverse64(&index, ~value) ? (63U - index) : 64U; -#else - return _BitScanReverse(&index, ~uint32_t(value >> 32)) ? (31U - index) : _BitScanReverse(&index, ~uint32_t(value)) ? (63U - index) : 64U; -#endif -} -#endif - -#endif // MAME_OSD_EIVC_H diff --git a/waterbox/ares64/ares/thirdparty/mame/osd/eivcarm.h b/waterbox/ares64/ares/thirdparty/mame/osd/eivcarm.h deleted file mode 100644 index 5e612cb25f..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/osd/eivcarm.h +++ /dev/null @@ -1,75 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Vas Crabb -//============================================================ -// -// eivcarm.h -// -// ARM/AArch64 inline implementations for MSVC compiler. -// -//============================================================ - -#ifndef MAME_OSD_EIVCARM_H -#define MAME_OSD_EIVCARM_H - -#pragma once - -#include - -#pragma intrinsic(_CountLeadingZeros) -#pragma intrinsic(_CountLeadingZeros64) -#pragma intrinsic(_CountLeadingOnes) -#pragma intrinsic(_CountLeadingOnes64) - - -/*************************************************************************** - INLINE BIT MANIPULATION FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - count_leading_zeros_32 - return the number of - leading zero bits in a 32-bit value --------------------------------------------------*/ - -#define count_leading_zeros_32 _count_leading_zeros_32 -__forceinline uint8_t _count_leading_zeros_32(uint32_t value) -{ - return uint8_t(_CountLeadingZeros(value)); -} - - -/*------------------------------------------------- - count_leading_ones_32 - return the number of - leading one bits in a 32-bit value --------------------------------------------------*/ - -#define count_leading_ones_32 _count_leading_ones_32 -__forceinline uint8_t _count_leading_ones_32(uint32_t value) -{ - return uint8_t(_CountLeadingOnes(value)); -} - - -/*------------------------------------------------- - count_leading_zeros_64 - return the number of - leading zero bits in a 64-bit value --------------------------------------------------*/ - -#define count_leading_zeros_64 _count_leading_zeros_64 -__forceinline uint8_t _count_leading_zeros_64(uint64_t value) -{ - return uint8_t(_CountLeadingZeros64(value)); -} - - -/*------------------------------------------------- - count_leading_ones_64 - return the number of - leading one bits in a 64-bit value --------------------------------------------------*/ - -#define count_leading_ones_64 _count_leading_ones_64 -__forceinline uint8_t _count_leading_ones_64(uint64_t value) -{ - return uint8_t(_CountLeadingOnes64(value)); -} - -#endif // MAME_OSD_EIVCARM_H diff --git a/waterbox/ares64/ares/thirdparty/mame/osd/eivcx86.h b/waterbox/ares64/ares/thirdparty/mame/osd/eivcx86.h deleted file mode 100644 index eb8811ad8b..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/osd/eivcx86.h +++ /dev/null @@ -1,468 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -//============================================================ -// -// eivcx86.h -// -// x86 inline implementations for MSVC compiler. -// -//============================================================ - -#ifndef MAME_OSD_EIVCX86_H -#define MAME_OSD_EIVCX86_H - -#pragma once - -#ifdef PTR64 -#include -#endif - -#include - - -/*************************************************************************** - INLINE MATH FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - mul_32x32 - perform a signed 32 bit x 32 bit - multiply and return the full 64 bit result --------------------------------------------------*/ - -#ifndef PTR64 -#define mul_32x32 _mul_32x32 -inline int64_t _mul_32x32(int32_t a, int32_t b) -{ - // in theory this should work, but it is untested - __asm - { - mov eax,a - imul b - // leave results in edx:eax - } -} -#endif - - -/*------------------------------------------------- - mulu_32x32 - perform an unsigned 32 bit x - 32 bit multiply and return the full 64 bit - result --------------------------------------------------*/ - -#ifndef PTR64 -#define mulu_32x32 _mulu_32x32 -inline uint64_t _mulu_32x32(uint32_t a, uint32_t b) -{ - // in theory this should work, but it is untested - __asm - { - mov eax,a - mul b - // leave results in edx:eax - } -} -#endif - - -/*------------------------------------------------- - mul_32x32_hi - perform a signed 32 bit x 32 bit - multiply and return the upper 32 bits of the - result --------------------------------------------------*/ - -#ifndef PTR64 -#define mul_32x32_hi _mul_32x32_hi -inline int32_t _mul_32x32_hi(int32_t a, int32_t b) -{ - int32_t result; - - __asm - { - mov eax,a - imul b - mov result,edx - } - - return result; -} -#endif - - -/*------------------------------------------------- - mulu_32x32_hi - perform an unsigned 32 bit x - 32 bit multiply and return the upper 32 bits - of the result --------------------------------------------------*/ - -#ifndef PTR64 -#define mulu_32x32_hi _mulu_32x32_hi -inline uint32_t _mulu_32x32_hi(uint32_t a, uint32_t b) -{ - int32_t result; - - __asm - { - mov eax,a - mul b - mov result,edx - } - - return result; -} -#endif - - -/*------------------------------------------------- - mul_32x32_shift - perform a signed 32 bit x - 32 bit multiply and shift the result by the - given number of bits before truncating the - result to 32 bits --------------------------------------------------*/ - -#ifndef PTR64 -#define mul_32x32_shift _mul_32x32_shift -static inline int32_t _mul_32x32_shift(int32_t a, int32_t b, uint8_t shift) -{ - int32_t result; - - __asm - { - mov eax,a - imul b - mov cl,shift - shrd eax,edx,cl - mov result,eax - } - - return result; -} -#endif - - -/*------------------------------------------------- - mulu_32x32_shift - perform an unsigned 32 bit x - 32 bit multiply and shift the result by the - given number of bits before truncating the - result to 32 bits --------------------------------------------------*/ - -#ifndef PTR64 -#define mulu_32x32_shift _mulu_32x32_shift -inline uint32_t _mulu_32x32_shift(uint32_t a, uint32_t b, uint8_t shift) -{ - int32_t result; - - __asm - { - mov eax,a - mul b - mov cl,shift - shrd eax,edx,cl - mov result,eax - } - - return result; -} -#endif - - -/*------------------------------------------------- - div_64x32 - perform a signed 64 bit x 32 bit - divide and return the 32 bit quotient --------------------------------------------------*/ - -#ifndef PTR64 -#define div_64x32 _div_64x32 -inline int32_t _div_64x32(int64_t a, int32_t b) -{ - int32_t result; - int32_t alow = a; - int32_t ahigh = a >> 32; - - __asm - { - mov eax,alow - mov edx,ahigh - idiv b - mov result,eax - } - - return result; -} -#endif - - -/*------------------------------------------------- - divu_64x32 - perform an unsigned 64 bit x 32 bit - divide and return the 32 bit quotient --------------------------------------------------*/ - -#ifndef PTR64 -#define divu_64x32 _divu_64x32 -inline uint32_t _divu_64x32(uint64_t a, uint32_t b) -{ - uint32_t result; - uint32_t alow = a; - uint32_t ahigh = a >> 32; - - __asm - { - mov eax,alow - mov edx,ahigh - div b - mov result,eax - } - - return result; -} -#endif - - -/*------------------------------------------------- - div_64x32_rem - perform a signed 64 bit x 32 - bit divide and return the 32 bit quotient and - 32 bit remainder --------------------------------------------------*/ - -#ifndef PTR64 -#define div_64x32_rem _div_64x32_rem -inline int32_t _div_64x32_rem(int64_t a, int32_t b, int32_t &remainder) -{ - int32_t result; - int32_t alow = a; - int32_t ahigh = a >> 32; - int32_t rem; - - __asm - { - mov eax,alow - mov edx,ahigh - idiv b - mov result,eax - mov rem,edx - } - - remainder = rem; - return result; -} -#endif - - -/*------------------------------------------------- - divu_64x32_rem - perform an unsigned 64 bit x - 32 bit divide and return the 32 bit quotient - and 32 bit remainder --------------------------------------------------*/ - -#ifndef PTR64 -#define divu_64x32_rem _divu_64x32_rem -inline uint32_t _divu_64x32_rem(uint64_t a, uint32_t b, uint32_t &remainder) -{ - uint32_t result; - uint32_t alow = a; - uint32_t ahigh = a >> 32; - uint32_t rem; - - __asm - { - mov eax,alow - mov edx,ahigh - div b - mov result,eax - mov rem,edx - } - - remainder = rem; - return result; -} -#endif - - -/*------------------------------------------------- - div_32x32_shift - perform a signed divide of - two 32 bit values, shifting the first before - division, and returning the 32 bit quotient --------------------------------------------------*/ - -#ifndef PTR64 -#define div_32x32_shift _div_32x32_shift -inline int32_t _div_32x32_shift(int32_t a, int32_t b, uint8_t shift) -{ - int32_t result; - - __asm - { - mov eax,a - cdq - mov cl,shift - shld edx,eax,cl - shl eax,cl - idiv b - mov result,eax - } - - return result; -} -#endif - - -/*------------------------------------------------- - divu_32x32_shift - perform an unsigned divide of - two 32 bit values, shifting the first before - division, and returning the 32 bit quotient --------------------------------------------------*/ - -#ifndef PTR64 -#define divu_32x32_shift _divu_32x32_shift -inline uint32_t _divu_32x32_shift(uint32_t a, uint32_t b, uint8_t shift) -{ - uint32_t result; - - __asm - { - mov eax,a - xor edx,edx - mov cl,shift - shld edx,eax,cl - shl eax,cl - div b - mov result,eax - } - - return result; -} -#endif - - -/*------------------------------------------------- - mod_64x32 - perform a signed 64 bit x 32 bit - divide and return the 32 bit remainder --------------------------------------------------*/ - -#ifndef PTR64 -#define mod_64x32 _mod_64x32 -static inline int32_t _mod_64x32(int64_t a, int32_t b) -{ - int32_t result; - int32_t alow = a; - int32_t ahigh = a >> 32; - - __asm - { - mov eax,alow - mov edx,ahigh - idiv b - mov result,edx - } - - return result; -} -#endif - - -/*------------------------------------------------- - modu_64x32 - perform an unsigned 64 bit x 32 bit - divide and return the 32 bit remainder --------------------------------------------------*/ - -#ifndef PTR64 -#define modu_64x32 _modu_64x32 -inline uint32_t _modu_64x32(uint64_t a, uint32_t b) -{ - uint32_t result; - uint32_t alow = a; - uint32_t ahigh = a >> 32; - - __asm - { - mov eax,alow - mov edx,ahigh - div b - mov result,edx - } - - return result; -} -#endif - - -/*------------------------------------------------- - recip_approx - compute an approximate floating - point reciprocal --------------------------------------------------*/ - -#ifdef PTR64 -#define recip_approx _recip_approx -inline float _recip_approx(float z) -{ - __m128 const mz = _mm_set_ss(z); - __m128 const mooz = _mm_rcp_ss(mz); - float ooz; - _mm_store_ss(&ooz, mooz); - return ooz; -} -#endif - - -/*------------------------------------------------- - mul_64x64 - perform a signed 64 bit x 64 bit - multiply and return the full 128 bit result --------------------------------------------------*/ - -#ifdef PTR64 -#define mul_64x64 _mul_64x64 -__forceinline int64_t _mul_64x64(int64_t a, int64_t b, int64_t &hi) -{ - return _mul128(a, b, &hi); -} -#endif - - -/*------------------------------------------------- - mulu_64x64 - perform an unsigned 64 bit x 64 - bit multiply and return the full 128 bit result --------------------------------------------------*/ - -#ifdef PTR64 -#define mulu_64x64 _mulu_64x64 -__forceinline int64_t _mulu_64x64(uint64_t a, uint64_t b, uint64_t &hi) -{ - return _umul128(a, b, &hi); -} -#endif - - -/*------------------------------------------------- - addu_32x32_co - perform an unsigned 32 bit + 32 - bit addition and return the result with carry - out --------------------------------------------------*/ - -#define addu_32x32_co _addu_32x32_co -__forceinline bool _addu_32x32_co(uint32_t a, uint32_t b, uint32_t &sum) -{ - return _addcarry_u32(0, a, b, &sum); -} - - -/*------------------------------------------------- - addu_64x64_co - perform an unsigned 64 bit + 64 - bit addition and return the result with carry - out --------------------------------------------------*/ - -#define addu_64x64_co _addu_64x64_co -__forceinline bool _addu_64x64_co(uint64_t a, uint64_t b, uint64_t &sum) -{ -#ifdef PTR64 - return _addcarry_u64(0, a, b, &sum); -#else - uint32_t l, h; - bool const result = _addcarry_u32(_addcarry_u32(0, uint32_t(a), uint32_t(b), &l), uint32_t(a >> 32), uint32_t(b >> 32), &h); - sum = (uint64_t(h) << 32) | l; - return result; -#endif -} - -#endif // MAME_OSD_EIVCX86_H diff --git a/waterbox/ares64/ares/thirdparty/mame/osd/eminline.h b/waterbox/ares64/ares/thirdparty/mame/osd/eminline.h deleted file mode 100644 index 02bd22b3fd..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/osd/eminline.h +++ /dev/null @@ -1,495 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/*************************************************************************** - - eminline.h - - Definitions for inline functions that can be overridden by OSD- - specific code. - -***************************************************************************/ - -#ifndef MAME_OSD_EMINLINE_H -#define MAME_OSD_EMINLINE_H - -#pragma once - -#include "osdcomm.h" -#include "osdcore.h" - -#if !defined(MAME_NOASM) - -#if defined(__GNUC__) - -#if defined(__i386__) || defined(__x86_64__) -#include "eigccx86.h" -#elif defined(__ppc__) || defined (__PPC__) || defined(__ppc64__) || defined(__PPC64__) -#include "eigccppc.h" -#elif defined(__arm__) || defined(__aarch64__) -#include "eigccarm.h" -#endif - -#include "eigcc.h" - -#elif defined(_MSC_VER) - -#if defined(_M_IX86) || defined(_M_X64) -#include "eivcx86.h" -#elif defined(_M_ARM) || defined(_M_ARM64) -#include "eivcarm.h" -#endif - -#include "eivc.h" - -#endif - -#endif // !defined(MAME_NOASM) - - -/*************************************************************************** - INLINE MATH FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - mul_32x32 - perform a signed 32 bit x 32 bit - multiply and return the full 64 bit result --------------------------------------------------*/ - -#ifndef mul_32x32 -constexpr int64_t mul_32x32(int32_t a, int32_t b) -{ - return int64_t(a) * int64_t(b); -} -#endif - - -/*------------------------------------------------- - mulu_32x32 - perform an unsigned 32 bit x - 32 bit multiply and return the full 64 bit - result --------------------------------------------------*/ - -#ifndef mulu_32x32 -constexpr uint64_t mulu_32x32(uint32_t a, uint32_t b) -{ - return uint64_t(a) * uint64_t(b); -} -#endif - - -/*------------------------------------------------- - mul_32x32_hi - perform a signed 32 bit x 32 bit - multiply and return the upper 32 bits of the - result --------------------------------------------------*/ - -#ifndef mul_32x32_hi -constexpr int32_t mul_32x32_hi(int32_t a, int32_t b) -{ - return uint32_t((int64_t(a) * int64_t(b)) >> 32); -} -#endif - - -/*------------------------------------------------- - mulu_32x32_hi - perform an unsigned 32 bit x - 32 bit multiply and return the upper 32 bits - of the result --------------------------------------------------*/ - -#ifndef mulu_32x32_hi -constexpr uint32_t mulu_32x32_hi(uint32_t a, uint32_t b) -{ - return uint32_t((uint64_t(a) * uint64_t(b)) >> 32); -} -#endif - - -/*------------------------------------------------- - mul_32x32_shift - perform a signed 32 bit x - 32 bit multiply and shift the result by the - given number of bits before truncating the - result to 32 bits --------------------------------------------------*/ - -#ifndef mul_32x32_shift -constexpr int32_t mul_32x32_shift(int32_t a, int32_t b, uint8_t shift) -{ - return int32_t((int64_t(a) * int64_t(b)) >> shift); -} -#endif - - -/*------------------------------------------------- - mulu_32x32_shift - perform an unsigned 32 bit x - 32 bit multiply and shift the result by the - given number of bits before truncating the - result to 32 bits --------------------------------------------------*/ - -#ifndef mulu_32x32_shift -constexpr uint32_t mulu_32x32_shift(uint32_t a, uint32_t b, uint8_t shift) -{ - return uint32_t((uint64_t(a) * uint64_t(b)) >> shift); -} -#endif - - -/*------------------------------------------------- - div_64x32 - perform a signed 64 bit x 32 bit - divide and return the 32 bit quotient --------------------------------------------------*/ - -#ifndef div_64x32 -constexpr int32_t div_64x32(int64_t a, int32_t b) -{ - return a / int64_t(b); -} -#endif - - -/*------------------------------------------------- - divu_64x32 - perform an unsigned 64 bit x 32 bit - divide and return the 32 bit quotient --------------------------------------------------*/ - -#ifndef divu_64x32 -constexpr uint32_t divu_64x32(uint64_t a, uint32_t b) -{ - return a / uint64_t(b); -} -#endif - - -/*------------------------------------------------- - div_64x32_rem - perform a signed 64 bit x 32 - bit divide and return the 32 bit quotient and - 32 bit remainder --------------------------------------------------*/ - -#ifndef div_64x32_rem -inline int32_t div_64x32_rem(int64_t a, int32_t b, int32_t &remainder) -{ - int32_t const res(div_64x32(a, b)); - remainder = a - (int64_t(b) * res); - return res; -} -#endif - - -/*------------------------------------------------- - divu_64x32_rem - perform an unsigned 64 bit x - 32 bit divide and return the 32 bit quotient - and 32 bit remainder --------------------------------------------------*/ - -#ifndef divu_64x32_rem -inline uint32_t divu_64x32_rem(uint64_t a, uint32_t b, uint32_t &remainder) -{ - uint32_t const res(divu_64x32(a, b)); - remainder = a - (uint64_t(b) * res); - return res; -} -#endif - - -/*------------------------------------------------- - div_32x32_shift - perform a signed divide of - two 32 bit values, shifting the first before - division, and returning the 32 bit quotient --------------------------------------------------*/ - -#ifndef div_32x32_shift -constexpr int32_t div_32x32_shift(int32_t a, int32_t b, uint8_t shift) -{ - return (int64_t(a) << shift) / int64_t(b); -} -#endif - - -/*------------------------------------------------- - divu_32x32_shift - perform an unsigned divide of - two 32 bit values, shifting the first before - division, and returning the 32 bit quotient --------------------------------------------------*/ - -#ifndef divu_32x32_shift -constexpr uint32_t divu_32x32_shift(uint32_t a, uint32_t b, uint8_t shift) -{ - return (uint64_t(a) << shift) / uint64_t(b); -} -#endif - - -/*------------------------------------------------- - mod_64x32 - perform a signed 64 bit x 32 bit - divide and return the 32 bit remainder --------------------------------------------------*/ - -#ifndef mod_64x32 -constexpr int32_t mod_64x32(int64_t a, int32_t b) -{ - return a - (b * div_64x32(a, b)); -} -#endif - - -/*------------------------------------------------- - modu_64x32 - perform an unsigned 64 bit x 32 bit - divide and return the 32 bit remainder --------------------------------------------------*/ - -#ifndef modu_64x32 -constexpr uint32_t modu_64x32(uint64_t a, uint32_t b) -{ - return a - (b * divu_64x32(a, b)); -} -#endif - - -/*------------------------------------------------- - recip_approx - compute an approximate floating - point reciprocal --------------------------------------------------*/ - -#ifndef recip_approx -constexpr float recip_approx(float value) -{ - return 1.0f / value; -} -#endif - - -/*------------------------------------------------- - mul_64x64 - perform a signed 64 bit x 64 bit - multiply and return the full 128 bit result --------------------------------------------------*/ - -#ifndef mul_64x64 -inline int64_t mul_64x64(int64_t a, int64_t b, int64_t &hi) -{ - uint64_t const a_hi = uint64_t(a) >> 32; - uint64_t const b_hi = uint64_t(b) >> 32; - uint64_t const a_lo = uint32_t(uint64_t(a)); - uint64_t const b_lo = uint32_t(uint64_t(b)); - - uint64_t const ab_lo = a_lo * b_lo; - uint64_t const ab_m1 = a_hi * b_lo; - uint64_t const ab_m2 = a_lo * b_hi; - uint64_t const ab_hi = a_hi * b_hi; - uint64_t const carry = ((ab_lo >> 32) + uint32_t(ab_m1) + uint32_t(ab_m2)) >> 32; - - hi = ab_hi + (ab_m1 >> 32) + (ab_m2 >> 32) + carry; - - // adjust for sign - if (a < 0) - hi -= b; - if (b < 0) - hi -= a; - - return ab_lo + (ab_m1 << 32) + (ab_m2 << 32); -} -#endif - - -/*------------------------------------------------- - mulu_64x64 - perform an unsigned 64 bit x 64 - bit multiply and return the full 128 bit result --------------------------------------------------*/ - -#ifndef mulu_64x64 -inline uint64_t mulu_64x64(uint64_t a, uint64_t b, uint64_t &hi) -{ - uint64_t const a_hi = uint32_t(a >> 32); - uint64_t const b_hi = uint32_t(b >> 32); - uint64_t const a_lo = uint32_t(a); - uint64_t const b_lo = uint32_t(b); - - uint64_t const ab_lo = a_lo * b_lo; - uint64_t const ab_m1 = a_hi * b_lo; - uint64_t const ab_m2 = a_lo * b_hi; - uint64_t const ab_hi = a_hi * b_hi; - uint64_t const carry = ((ab_lo >> 32) + uint32_t(ab_m1) + uint32_t(ab_m2)) >> 32; - - hi = ab_hi + (ab_m1 >> 32) + (ab_m2 >> 32) + carry; - - return ab_lo + (ab_m1 << 32) + (ab_m2 << 32); -} -#endif - - -/*------------------------------------------------- - addu_32x32_co - perform an unsigned 32 bit + 32 - bit addition and return the result with carry - out --------------------------------------------------*/ - -#ifndef addu_32x32_co -inline bool addu_32x32_co(uint32_t a, uint32_t b, uint32_t &sum) -{ - sum = a + b; - return (a > sum) || (b > sum); -} -#endif - - -/*------------------------------------------------- - addu_64x64_co - perform an unsigned 64 bit + 64 - bit addition and return the result with carry - out --------------------------------------------------*/ - -#ifndef addu_64x64_co -inline bool addu_64x64_co(uint64_t a, uint64_t b, uint64_t &sum) -{ - sum = a + b; - return (a > sum) || (b > sum); -} -#endif - - - -/*************************************************************************** - INLINE BIT MANIPULATION FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - count_leading_zeros_32 - return the number of - leading zero bits in a 32-bit value --------------------------------------------------*/ - -#ifndef count_leading_zeros_32 -inline uint8_t count_leading_zeros_32(uint32_t val) -{ - if (!val) return 32U; - uint8_t count; - for (count = 0; int32_t(val) >= 0; count++) val <<= 1; - return count; -} -#endif - - -/*------------------------------------------------- - count_leading_ones_32 - return the number of - leading one bits in a 32-bit value --------------------------------------------------*/ - -#ifndef count_leading_ones_32 -inline uint8_t count_leading_ones_32(uint32_t val) -{ - uint8_t count; - for (count = 0; int32_t(val) < 0; count++) val <<= 1; - return count; -} -#endif - - -/*------------------------------------------------- - count_leading_zeros_64 - return the number of - leading zero bits in a 64-bit value --------------------------------------------------*/ - -#ifndef count_leading_zeros_64 -inline uint8_t count_leading_zeros_64(uint64_t val) -{ - if (!val) return 64U; - uint8_t count; - for (count = 0; int64_t(val) >= 0; count++) val <<= 1; - return count; -} -#endif - - -/*------------------------------------------------- - count_leading_ones_64 - return the number of - leading one bits in a 64-bit value --------------------------------------------------*/ - -#ifndef count_leading_ones_64 -inline uint8_t count_leading_ones_64(uint64_t val) -{ - uint8_t count; - for (count = 0; int64_t(val) < 0; count++) val <<= 1; - return count; -} -#endif - - -/*------------------------------------------------- - population_count_32 - return the number of - one bits in a 32-bit value --------------------------------------------------*/ - -#ifndef population_count_32 -inline unsigned population_count_32(uint32_t val) -{ -#if defined(__NetBSD__) - return popcount32(val); -#else - // optimal Hamming weight assuming fast 32*32->32 - constexpr uint32_t m1(0x55555555); - constexpr uint32_t m2(0x33333333); - constexpr uint32_t m4(0x0f0f0f0f); - constexpr uint32_t h01(0x01010101); - val -= (val >> 1) & m1; - val = (val & m2) + ((val >> 2) & m2); - val = (val + (val >> 4)) & m4; - return unsigned((val * h01) >> 24); -#endif -} -#endif - - -/*------------------------------------------------- - population_count_64 - return the number of - one bits in a 64-bit value --------------------------------------------------*/ - -#ifndef population_count_64 -inline unsigned population_count_64(uint64_t val) -{ -#if defined(__NetBSD__) - return popcount64(val); -#else - // guess that architectures with 64-bit pointers have 64-bit multiplier - if (sizeof(void *) >= sizeof(uint64_t)) - { - // optimal Hamming weight assuming fast 64*64->64 - constexpr uint64_t m1(0x5555555555555555); - constexpr uint64_t m2(0x3333333333333333); - constexpr uint64_t m4(0x0f0f0f0f0f0f0f0f); - constexpr uint64_t h01(0x0101010101010101); - val -= (val >> 1) & m1; - val = (val & m2) + ((val >> 2) & m2); - val = (val + (val >> 4)) & m4; - return unsigned((val * h01) >> 56); - } - else - { - // fall back to two 32-bit operations to avoid slow multiply - return population_count_32(uint32_t(val)) + population_count_32(uint32_t(val >> 32)); - } -#endif -} -#endif - - -/*************************************************************************** - INLINE TIMING FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - get_profile_ticks - return a tick counter - from the processor that can be used for - profiling. It does not need to run at any - particular rate. --------------------------------------------------*/ - -#ifndef get_profile_ticks -inline int64_t get_profile_ticks() -{ - return osd_ticks(); -} -#endif - -#endif // MAME_OSD_EMINLINE_H diff --git a/waterbox/ares64/ares/thirdparty/mame/osd/osdcomm.h b/waterbox/ares64/ares/thirdparty/mame/osd/osdcomm.h deleted file mode 100644 index 75370f1b81..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/osd/osdcomm.h +++ /dev/null @@ -1,119 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/*************************************************************************** - - osdcomm.h - - Common definitions shared by the OSD layer. This includes the most - fundamental integral types as well as compiler-specific tweaks. - -***************************************************************************/ -#ifndef MAME_OSD_OSDCOMM_H -#define MAME_OSD_OSDCOMM_H - -#pragma once - -#include -#include -#include - -#include - - -/*************************************************************************** - COMPILER-SPECIFIC NASTINESS -***************************************************************************/ - -// The Win32 port requires this constant for variable arg routines. -#ifndef CLIB_DECL -#define CLIB_DECL -#endif - - -// Some optimizations/warnings cleanups for GCC -#if defined(__GNUC__) -#define ATTR_PRINTF(x,y) __attribute__((format(printf, x, y))) -#define ATTR_CONST __attribute__((const)) -#define ATTR_FORCE_INLINE __attribute__((always_inline)) -#define ATTR_HOT __attribute__((hot)) -#define ATTR_COLD __attribute__((cold)) -#define UNEXPECTED(exp) __builtin_expect(!!(exp), 0) -#define EXPECTED(exp) __builtin_expect(!!(exp), 1) -#define RESTRICT __restrict__ -#else -#define ATTR_PRINTF(x,y) -#define ATTR_CONST -#define ATTR_FORCE_INLINE __forceinline -#define ATTR_HOT -#define ATTR_COLD -#define UNEXPECTED(exp) (exp) -#define EXPECTED(exp) (exp) -#define RESTRICT -#endif - - - -/*************************************************************************** - FUNDAMENTAL TYPES -***************************************************************************/ - -namespace osd { - -using u8 = std::uint8_t; -using u16 = std::uint16_t; -using u32 = std::uint32_t; -using u64 = std::uint64_t; - -using s8 = std::int8_t; -using s16 = std::int16_t; -using s32 = std::int32_t; -using s64 = std::int64_t; - -} // namespace OSD - -/*************************************************************************** - FUNDAMENTAL MACROS -***************************************************************************/ - -// Concatenate/extract 32-bit halves of 64-bit values -constexpr uint64_t concat_64(uint32_t hi, uint32_t lo) { return (uint64_t(hi) << 32) | uint32_t(lo); } -constexpr uint32_t extract_64hi(uint64_t val) { return uint32_t(val >> 32); } -constexpr uint32_t extract_64lo(uint64_t val) { return uint32_t(val); } - -// Macros for normalizing data into big or little endian formats -constexpr uint16_t swapendian_int16(uint16_t val) { return (val << 8) | (val >> 8); } - -constexpr uint32_t swapendian_int32_partial16(uint32_t val) { return ((val << 8) & 0xFF00FF00U) | ((val >> 8) & 0x00FF00FFU); } -constexpr uint32_t swapendian_int32(uint32_t val) { return (swapendian_int32_partial16(val) << 16) | (swapendian_int32_partial16(val) >> 16); } - -constexpr uint64_t swapendian_int64_partial16(uint64_t val) { return ((val << 8) & 0xFF00FF00FF00FF00U) | ((val >> 8) & 0x00FF00FF00FF00FFU); } -constexpr uint64_t swapendian_int64_partial32(uint64_t val) { return ((swapendian_int64_partial16(val) << 16) & 0xFFFF0000FFFF0000U) | ((swapendian_int64_partial16(val) >> 16) & 0x0000FFFF0000FFFFU); } -constexpr uint64_t swapendian_int64(uint64_t val) { return (swapendian_int64_partial32(val) << 32) | (swapendian_int64_partial32(val) >> 32); } - -#ifdef LSB_FIRST -constexpr uint16_t big_endianize_int16(uint16_t x) { return swapendian_int16(x); } -constexpr uint32_t big_endianize_int32(uint32_t x) { return swapendian_int32(x); } -constexpr uint64_t big_endianize_int64(uint64_t x) { return swapendian_int64(x); } -constexpr uint16_t little_endianize_int16(uint16_t x) { return x; } -constexpr uint32_t little_endianize_int32(uint32_t x) { return x; } -constexpr uint64_t little_endianize_int64(uint64_t x) { return x; } -#else -constexpr uint16_t big_endianize_int16(uint16_t x) { return x; } -constexpr uint32_t big_endianize_int32(uint32_t x) { return x; } -constexpr uint64_t big_endianize_int64(uint64_t x) { return x; } -constexpr uint16_t little_endianize_int16(uint16_t x) { return swapendian_int16(x); } -constexpr uint32_t little_endianize_int32(uint32_t x) { return swapendian_int32(x); } -constexpr uint64_t little_endianize_int64(uint64_t x) { return swapendian_int64(x); } -#endif // LSB_FIRST - -#ifdef _MSC_VER -using ssize_t = std::make_signed_t; -#endif - -#ifdef __GNUC__ -#ifndef alloca -#define alloca(size) __builtin_alloca(size) -#endif -#endif - -#endif // MAME_OSD_OSDCOMM_H diff --git a/waterbox/ares64/ares/thirdparty/mame/osd/osdcore.cpp b/waterbox/ares64/ares/thirdparty/mame/osd/osdcore.cpp deleted file mode 100644 index fc73218ff2..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/osd/osdcore.cpp +++ /dev/null @@ -1,223 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles - -#include "osdcore.h" -#include -#include - -#if defined(SDLMAME_ANDROID) -#include -#endif - -#ifdef _WIN32 -#include -#include -#include -#if !defined(MAME_RDP) -#include "strconv.h" -#endif -#endif - -static const int MAXSTACK = 10; -static osd_output *m_stack[MAXSTACK]; -static int m_ptr = -1; - -/*------------------------------------------------- - osd_output --------------------------------------------------*/ - -void osd_output::push(osd_output *delegate) -{ - if (m_ptr < MAXSTACK - 1) - { - delegate->m_chain = (m_ptr >= 0 ? m_stack[m_ptr] : nullptr); - m_ptr++; - m_stack[m_ptr] = delegate; - } -} - -void osd_output::pop(osd_output *delegate) -{ - int f = -1; - for (int i = 0; i <= m_ptr; i++) - if (m_stack[i] == delegate) - { - f = i; - break; - } - if (f >= 0) - { - if (f < m_ptr) - m_stack[f+1]->m_chain = m_stack[f]->m_chain; - m_ptr--; - for (int i = f; i <= m_ptr; i++) - m_stack[i] = m_stack[i+1]; - } -} - - -/*************************************************************************** - OUTPUT MANAGEMENT -***************************************************************************/ - -/*------------------------------------------------- - osd_vprintf_error - output an error to the - appropriate callback --------------------------------------------------*/ - -void osd_vprintf_error(util::format_argument_pack const &args) -{ -#if defined(SDLMAME_ANDROID) - __android_log_write(ANDROID_LOG_ERROR, "%s", util::string_format(args).c_str()); -#else - if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_ERROR, args); -#endif -} - - -/*------------------------------------------------- - osd_vprintf_warning - output a warning to the - appropriate callback --------------------------------------------------*/ - -void osd_vprintf_warning(util::format_argument_pack const &args) -{ -#if defined(SDLMAME_ANDROID) - __android_log_write(ANDROID_LOG_WARN, "%s", util::string_format(args).c_str()); -#else - if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_WARNING, args); -#endif -} - - -/*------------------------------------------------- - osd_vprintf_info - output info text to the - appropriate callback --------------------------------------------------*/ - -void osd_vprintf_info(util::format_argument_pack const &args) -{ -#if defined(SDLMAME_ANDROID) - __android_log_write(ANDROID_LOG_INFO, "%s", util::string_format(args).c_str()); -#else - if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_INFO, args); -#endif -} - - -/*------------------------------------------------- - osd_vprintf_verbose - output verbose text to - the appropriate callback --------------------------------------------------*/ - -void osd_vprintf_verbose(util::format_argument_pack const &args) -{ -#if defined(SDLMAME_ANDROID) - __android_log_write( ANDROID_LOG_VERBOSE, "%s", util::string_format(args).c_str()); -#else - if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_VERBOSE, args); -#endif -} - - -/*------------------------------------------------- - osd_vprintf_debug - output debug text to the - appropriate callback --------------------------------------------------*/ - -void osd_vprintf_debug(util::format_argument_pack const &args) -{ -#if defined(SDLMAME_ANDROID) - __android_log_write(ANDROID_LOG_DEBUG, "%s", util::string_format(args).c_str()); -#else - if (m_ptr >= 0) m_stack[m_ptr]->output_callback(OSD_OUTPUT_CHANNEL_DEBUG, args); -#endif -} - - -//============================================================ -// osd_ticks -//============================================================ - -osd_ticks_t osd_ticks() -{ -#ifdef _WIN32 - LARGE_INTEGER val; - QueryPerformanceCounter(&val); - return val.QuadPart; -#else - return std::chrono::high_resolution_clock::now().time_since_epoch().count(); -#endif -} - - -//============================================================ -// osd_ticks_per_second -//============================================================ - -osd_ticks_t osd_ticks_per_second() -{ -#ifdef _WIN32 - LARGE_INTEGER val; - QueryPerformanceFrequency(&val); - return val.QuadPart; -#else - return std::chrono::high_resolution_clock::period::den / std::chrono::high_resolution_clock::period::num; -#endif -} - -//============================================================ -// osd_sleep -//============================================================ - -void osd_sleep(osd_ticks_t duration) -{ -#ifdef _WIN32 -// sleep_for appears to oversleep on Windows with gcc 8 - Sleep(duration / (osd_ticks_per_second() / 1000)); -#else - std::this_thread::sleep_for(std::chrono::high_resolution_clock::duration(duration)); -#endif -} - - -#if !defined(MAME_RDP) -//============================================================ -// osd_get_command_line - returns command line arguments -// in an std::vector in UTF-8 -// -// The real purpose of this call is to hide details necessary -// on Windows (provided that one wants to avoid using wmain) -//============================================================ - -std::vector osd_get_command_line(int argc, char *argv[]) -{ - std::vector results; -#ifdef _WIN32 - { - // Get the command line from Windows - int count; - LPWSTR *wide_args = CommandLineToArgvW(GetCommandLineW(), &count); - - // Convert the returned command line arguments to UTF8 std::vector - results.reserve(count); - for (int i = 0; i < count; i++) - { - std::string arg = osd::text::from_wstring(wide_args[i]); - results.push_back(std::move(arg)); - } - - LocalFree(wide_args); - } -#else // !_WIN32 - { - // for non Windows platforms, we are assuming that arguments are - // already UTF-8; we just need to convert to std::vector - results.reserve(argc); - for (int i = 0; i < argc; i++) - results.emplace_back(argv[i]); - } -#endif // _WIN32 - return results; -} -#endif diff --git a/waterbox/ares64/ares/thirdparty/mame/osd/osdcore.h b/waterbox/ares64/ares/thirdparty/mame/osd/osdcore.h deleted file mode 100644 index a7f652470d..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/osd/osdcore.h +++ /dev/null @@ -1,676 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/// \file -/// \brief Core OS-dependent code interface -/// -/// The prototypes in this file describe the interfaces that the MAME -/// core and various tools rely on to interact with the outside world. -/// They are broken out into several categories. -#ifndef MAME_OSD_OSDCORE_H -#define MAME_OSD_OSDCORE_H - -#pragma once - - -#include "osdcomm.h" - -#include "strformat.h" - -#include -#include -#include -#include -#include -#include - - -/// \brief Get environment variable value -/// -/// \param [in] name Name of the environment variable as a -/// NUL-terminated string. -/// \return Pointer to environment variable value as a NUL-terminated -/// string if found, or nullptr if not found. -const char *osd_getenv(const char *name); - - -/// \brief Get current process ID -/// -/// \return The process ID of the current process. -int osd_getpid(); - - -/*----------------------------------------------------------------------------- - osd_uchar_from_osdchar: convert the given character or sequence of - characters from the OS-default encoding to a Unicode character - - Parameters: - - uchar - pointer to a uint32_t to receive the resulting unicode - character - - osdchar - pointer to one or more chars that are in the OS-default - encoding - - count - number of characters provided in the OS-default encoding - - Return value: - - The number of characters required to form a Unicode character. ------------------------------------------------------------------------------*/ -int osd_uchar_from_osdchar(char32_t *uchar, const char *osdchar, size_t count); - - - -/*************************************************************************** - TIMING INTERFACES -***************************************************************************/ - -/* a osd_ticks_t is a 64-bit unsigned integer that is used as a core type in timing interfaces */ -typedef uint64_t osd_ticks_t; - - -/*----------------------------------------------------------------------------- - osd_ticks: return the current running tick counter - - Parameters: - - None - - Return value: - - an osd_ticks_t value which represents the current tick counter - - Notes: - - The resolution of this counter should be 1ms or better for accurate - performance. It is also important that the source of this timer be - accurate. It is ok if this call is not ultra-fast, since it is - primarily used for once/frame synchronization. ------------------------------------------------------------------------------*/ -osd_ticks_t osd_ticks(); - - -/*----------------------------------------------------------------------------- - osd_ticks_per_second: return the number of ticks per second - - Parameters: - - None - - Return value: - - an osd_ticks_t value which represents the number of ticks per - second ------------------------------------------------------------------------------*/ -osd_ticks_t osd_ticks_per_second(); - - -/*----------------------------------------------------------------------------- - osd_sleep: sleep for the specified time interval - - Parameters: - - duration - an osd_ticks_t value that specifies how long we should - sleep - - Return value: - - None - - Notes: - - The OSD layer should try to sleep for as close to the specified - duration as possible, or less. This is used as a mechanism to - "give back" unneeded time to other programs running in the system. - On a simple, non multitasking system, this routine can be a no-op. - If there is significant volatility in the amount of time that the - sleep occurs for, the OSD layer should strive to sleep for less time - than specified rather than sleeping too long. ------------------------------------------------------------------------------*/ -void osd_sleep(osd_ticks_t duration); - -/*************************************************************************** - WORK ITEM INTERFACES -***************************************************************************/ - -/* this is the maximum number of supported threads for a single work queue */ -/* threadid values are expected to range from 0..WORK_MAX_THREADS-1 */ -#define WORK_MAX_THREADS 16 - -/* these flags can be set when creating a queue to give hints to the code about - how to configure the queue */ -#define WORK_QUEUE_FLAG_IO 0x0001 -#define WORK_QUEUE_FLAG_MULTI 0x0002 -#define WORK_QUEUE_FLAG_HIGH_FREQ 0x0004 - -/* these flags can be set when queueing a work item to indicate how to handle - its deconstruction */ -#define WORK_ITEM_FLAG_AUTO_RELEASE 0x0001 - -/* osd_work_queue is an opaque type which represents a queue of work items */ -struct osd_work_queue; - -/* osd_work_item is an opaque type which represents a single work item */ -struct osd_work_item; - -/* osd_work_callback is a callback function that does work */ -typedef void *(*osd_work_callback)(void *param, int threadid); - - -/*----------------------------------------------------------------------------- - osd_work_queue_alloc: create a new work queue - - Parameters: - - flags - one or more of the WORK_QUEUE_FLAG_* values ORed together: - - WORK_QUEUE_FLAG_IO - indicates that the work queue will do some - I/O; this may be a useful hint so that threads are created - even on single-processor systems since I/O can often be - overlapped with other work - - WORK_QUEUE_FLAG_MULTI - indicates that the work queue should - take advantage of as many processors as it can; items queued - here are assumed to be fully independent or shared - - WORK_QUEUE_FLAG_HIGH_FREQ - indicates that items are expected - to be queued at high frequency and acted upon quickly; in - general, this implies doing some spin-waiting internally - before falling back to OS-specific synchronization - - Return value: - - A pointer to an allocated osd_work_queue object. - - Notes: - - A work queue abstracts the notion of how potentially threaded work - can be performed. If no threading support is available, it is a - simple matter to execute the work items as they are queued. ------------------------------------------------------------------------------*/ -osd_work_queue *osd_work_queue_alloc(int flags); - - -/*----------------------------------------------------------------------------- - osd_work_queue_items: return the number of pending items in the queue - - Parameters: - - queue - pointer to an osd_work_queue that was previously created via - osd_work_queue_alloc - - Return value: - - The number of incomplete items remaining in the queue. ------------------------------------------------------------------------------*/ -int osd_work_queue_items(osd_work_queue *queue); - - -/*----------------------------------------------------------------------------- - osd_work_queue_wait: wait for the queue to be empty - - Parameters: - - queue - pointer to an osd_work_queue that was previously created via - osd_work_queue_alloc - - timeout - a timeout value in osd_ticks_per_second() - - Return value: - - true if the queue is empty; false if the wait timed out before the - queue was emptied. ------------------------------------------------------------------------------*/ -bool osd_work_queue_wait(osd_work_queue *queue, osd_ticks_t timeout); - - -/*----------------------------------------------------------------------------- - osd_work_queue_free: free a work queue, waiting for all items to complete - - Parameters: - - queue - pointer to an osd_work_queue that was previously created via - osd_work_queue_alloc - - Return value: - - None. ------------------------------------------------------------------------------*/ -void osd_work_queue_free(osd_work_queue *queue); - - -/*----------------------------------------------------------------------------- - osd_work_item_queue_multiple: queue a set of work items - - Parameters: - - queue - pointer to an osd_work_queue that was previously created via - osd_work_queue_alloc - - callback - pointer to a function that will do the work - - numitems - number of work items to queue - - param - a void * parameter that can be used to pass data to the - function - - paramstep - the number of bytes to increment param by for each item - queued; for example, if you have an array of work_unit objects, - you can point param to the base of the array and set paramstep to - sizeof(work_unit) - - flags - one or more of the WORK_ITEM_FLAG_* values ORed together: - - WORK_ITEM_FLAG_AUTO_RELEASE - indicates that the work item - should be automatically freed when it is complete - - Return value: - - A pointer to the final allocated osd_work_item in the list. - - Notes: - - On single-threaded systems, this function may actually execute the - work item immediately before returning. ------------------------------------------------------------------------------*/ -osd_work_item *osd_work_item_queue_multiple(osd_work_queue *queue, osd_work_callback callback, int32_t numitems, void *parambase, int32_t paramstep, uint32_t flags); - - -/* inline helper to queue a single work item using the same interface */ -static inline osd_work_item *osd_work_item_queue(osd_work_queue *queue, osd_work_callback callback, void *param, uint32_t flags) -{ - return osd_work_item_queue_multiple(queue, callback, 1, param, 0, flags); -} - - -/*----------------------------------------------------------------------------- - osd_work_item_wait: wait for a work item to complete - - Parameters: - - item - pointer to an osd_work_item that was previously returned from - osd_work_item_queue - - timeout - a timeout value in osd_ticks_per_second() - - Return value: - - true if the item completed; false if the wait timed out before the - item completed. ------------------------------------------------------------------------------*/ -bool osd_work_item_wait(osd_work_item *item, osd_ticks_t timeout); - - -/*----------------------------------------------------------------------------- - osd_work_item_result: get the result of a work item - - Parameters: - - item - pointer to an osd_work_item that was previously returned from - osd_work_item_queue - - Return value: - - A void * that represents the work item's result. ------------------------------------------------------------------------------*/ -void *osd_work_item_result(osd_work_item *item); - - -/*----------------------------------------------------------------------------- - osd_work_item_release: release the memory allocated to a work item - - Parameters: - - item - pointer to an osd_work_item that was previously returned from - osd_work_item_queue - - Return value: - - None. - - Notes: - - The osd_work_item exists until explicitly released, even if it has - long since completed. It is the queuer's responsibility to release - any work items it has queued. ------------------------------------------------------------------------------*/ -void osd_work_item_release(osd_work_item *item); - - - -/*************************************************************************** - MISCELLANEOUS INTERFACES -***************************************************************************/ - -/// \brief Break into host debugger if attached -/// -/// This function is called when a fatal error occurs. If a debugger is -/// attached, it should break and display the specified message. -/// \param [in] message Message to output to the debugger as a -/// NUL-terminated string. -void osd_break_into_debugger(const char *message); - - -/// \brief Get clipboard text -/// -/// Gets current clipboard content as UTF-8 text. Returns an empty -/// string if the clipboard contents cannot be converted to plain text. -/// \return Clipboard contents or an empty string. -std::string osd_get_clipboard_text(); - - -/*************************************************************************** - MIDI I/O INTERFACES -***************************************************************************/ - -class osd_midi_device -{ -public: - virtual ~osd_midi_device() { } - // free result with osd_close_midi_channel() - virtual bool open_input(const char *devname) = 0; - // free result with osd_close_midi_channel() - virtual bool open_output(const char *devname) = 0; - virtual void close() = 0; - virtual bool poll() = 0; - virtual int read(uint8_t *pOut) = 0; - virtual void write(uint8_t data) = 0; -}; - -//FIXME: really needed here? -void osd_list_network_adapters(); - - -/*************************************************************************** - UNCATEGORIZED INTERFACES -***************************************************************************/ - -/*----------------------------------------------------------------------------- - osd_subst_env: substitute environment variables with values - - Parameters: - - dst - result pointer - src - source string - ------------------------------------------------------------------------------*/ -void osd_subst_env(std::string &dst, std::string const &src); - -class osd_gpu -{ -public: - osd_gpu() { } - virtual ~osd_gpu() { } - - typedef uint64_t handle_t; - - class vertex_decl - { - public: - enum attr_type : uint32_t - { - FLOAT32, - FLOAT16, - UINT32, - UINT16, - UINT8, - - MAX_TYPES - }; - - static constexpr size_t TYPE_SIZES[MAX_TYPES] = { 4, 2, 4, 2, 1 }; - - static constexpr uint32_t MAX_COLORS = 2; - static constexpr uint32_t MAX_TEXCOORDS = 8; - - enum attr_usage : uint32_t - { - POSITION, - COLOR, - TEXCOORD = COLOR + MAX_COLORS, - NORMAL = TEXCOORD + MAX_TEXCOORDS, - BINORMAL, - TANGENT, - - MAX_ATTRS - }; - - class attr_entry - { - public: - attr_entry() : m_usage(POSITION), m_type(FLOAT32), m_count(3), m_size(12) { } - attr_entry(attr_usage usage, attr_type type, size_t count) : m_usage(usage), m_type(type), m_count(count), m_size(TYPE_SIZES[type] * count) { } - - attr_usage usage() const { return m_usage; } - attr_type type() const { return m_type; } - size_t count() const { return m_count; } - size_t size() const { return m_size; } - - private: - attr_usage m_usage; - attr_type m_type; - size_t m_count; - size_t m_size; - }; - - vertex_decl() - : m_entry_count(0) - , m_size(0) - { - } - - vertex_decl & add_attr(attr_usage usage, attr_type type, size_t count) - { - m_entries[m_entry_count] = attr_entry(usage, type, count); - m_size += m_entries[m_entry_count].size(); - m_entry_count++; - return *this; - } - - size_t entry_count() const { return m_entry_count; } - size_t size() const { return m_size; } - const attr_entry &entry(const uint32_t index) const { return m_entries[index]; } - - protected: - attr_entry m_entries[MAX_ATTRS]; - size_t m_entry_count; - size_t m_size; - }; - - class vertex_buffer_interface - { - public: - vertex_buffer_interface(vertex_decl &decl, uint32_t flags) - : m_decl(decl) - , m_flags(flags) - { - } - virtual ~vertex_buffer_interface() {} - - const vertex_decl &decl() const { return m_decl; } - uint32_t flags() const { return m_flags; } - handle_t handle() { return m_handle; } - - virtual size_t count() const = 0; - virtual size_t size() const = 0; - virtual void upload() = 0; - - protected: - const vertex_decl &m_decl; - const uint32_t m_flags; - handle_t m_handle; - }; - - class static_vertex_buffer_interface : public vertex_buffer_interface - { - public: - enum vertex_buffer_flags : uint32_t - { - RETAIN_ON_CPU = 0x00000001 - }; - - static_vertex_buffer_interface(vertex_decl &decl, size_t count, uint32_t flags) - : vertex_buffer_interface(decl, flags) - , m_count(count) - , m_size(decl.size() * count) - { - } - - virtual ~static_vertex_buffer_interface() - { - if (m_data) - delete [] m_data; - } - - size_t count() const override { return m_count; } - size_t size() const override { return m_size; } - - void set_data(void *data) - { - allocate_if_needed(); - memcpy(m_data, data, m_size); - } - - protected: - void allocate_if_needed() - { - if ((m_flags & RETAIN_ON_CPU) != 0 && m_data == nullptr) - m_data = new uint8_t[m_size]; - } - - const size_t m_count; - const size_t m_size; - uint8_t *m_data; - }; - - virtual void bind_buffer(vertex_buffer_interface *vb) = 0; - virtual void unbind_buffer(vertex_buffer_interface *vb) = 0; -}; - - -/// \defgroup osd_printf Diagnostic output functions -/// \{ - -// output channels -enum osd_output_channel -{ - OSD_OUTPUT_CHANNEL_ERROR, - OSD_OUTPUT_CHANNEL_WARNING, - OSD_OUTPUT_CHANNEL_INFO, - OSD_OUTPUT_CHANNEL_DEBUG, - OSD_OUTPUT_CHANNEL_VERBOSE, - OSD_OUTPUT_CHANNEL_LOG, - OSD_OUTPUT_CHANNEL_COUNT -}; - -class osd_output -{ -public: - osd_output() { } - virtual ~osd_output() { } - - virtual void output_callback(osd_output_channel channel, util::format_argument_pack const &args) = 0; - - static void push(osd_output *delegate); - static void pop(osd_output *delegate); - -protected: - - void chain_output(osd_output_channel channel, util::format_argument_pack const &args) const - { - if (m_chain) - m_chain->output_callback(channel, args); - } - -private: - osd_output *m_chain = nullptr; -}; - -void osd_vprintf_error(util::format_argument_pack const &args); -void osd_vprintf_warning(util::format_argument_pack const &args); -void osd_vprintf_info(util::format_argument_pack const &args); -void osd_vprintf_verbose(util::format_argument_pack const &args); -void osd_vprintf_debug(util::format_argument_pack const &args); - -/// \brief Print error message -/// -/// By default, error messages are sent to standard error. The relaxed -/// format rules used by util::string_format apply. -/// \param [in] fmt Message format string. -/// \param [in] args Optional message format arguments. -/// \sa util::string_format -template void osd_printf_error(Format &&fmt, Params &&...args) -{ - return osd_vprintf_error(util::make_format_argument_pack(std::forward(fmt), std::forward(args)...)); -} - -/// \brief Print warning message -/// -/// By default, warning messages are sent to standard error. The -/// relaxed format rules used by util::string_format apply. -/// \param [in] fmt Message format string. -/// \param [in] args Optional message format arguments. -/// \sa util::string_format -template void osd_printf_warning(Format &&fmt, Params &&...args) -{ - return osd_vprintf_warning(util::make_format_argument_pack(std::forward(fmt), std::forward(args)...)); -} - -/// \brief Print informational message -/// -/// By default, informational messages are sent to standard output. -/// The relaxed format rules used by util::string_format apply. -/// \param [in] fmt Message format string. -/// \param [in] args Optional message format arguments. -/// \sa util::string_format -template void osd_printf_info(Format &&fmt, Params &&...args) -{ - return osd_vprintf_info(util::make_format_argument_pack(std::forward(fmt), std::forward(args)...)); -} - -/// \brief Print verbose diagnostic message -/// -/// Verbose diagnostic messages are disabled by default. If enabled, -/// they are sent to standard output by default. The relaxed format -/// rules used by util::string_format apply. Note that the format -/// string and arguments will always be evaluated, even if verbose -/// diagnostic messages are disabled. -/// \param [in] fmt Message format string. -/// \param [in] args Optional message format arguments. -/// \sa util::string_format -template void osd_printf_verbose(Format &&fmt, Params &&...args) -{ - return osd_vprintf_verbose(util::make_format_argument_pack(std::forward(fmt), std::forward(args)...)); -} - -/// \brief Print debug message -/// -/// By default, debug messages are sent to standard output for debug -/// builds only. The relaxed format rules used by util::string_format -/// apply. Note that the format string and arguments will always be -/// evaluated, even if debug messages are disabled. -/// \param [in] fmt Message format string. -/// \param [in] args Optional message format arguments. -/// \sa util::string_format -template void osd_printf_debug(Format &&fmt, Params &&...args) -{ - return osd_vprintf_debug(util::make_format_argument_pack(std::forward(fmt), std::forward(args)...)); -} - -/// \} - - -// returns command line arguments as an std::vector in UTF-8 -std::vector osd_get_command_line(int argc, char *argv[]); - -/* discourage the use of printf directly */ -/* sadly, can't do this because of the ATTR_PRINTF under GCC */ -/* -#undef printf -#define printf !MUST_USE_osd_printf_*_CALLS_WITHIN_THE_CORE! -*/ - -// specifies "aggressive focus" - should MAME capture input for any windows co-habiting a MAME window? -void osd_set_aggressive_input_focus(bool aggressive_focus); - -#endif // MAME_OSD_OSDCORE_H diff --git a/waterbox/ares64/ares/thirdparty/mame/osd/osdfile.h b/waterbox/ares64/ares/thirdparty/mame/osd/osdfile.h deleted file mode 100644 index bc3efbde80..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/osd/osdfile.h +++ /dev/null @@ -1,287 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/// \file -/// \brief Core OS-dependent file interface -/// -/// The prototypes in this file describe the interfaces that the MAME -/// core and various tools rely on to interact with the outside world. -/// They are broken out into several categories. - -#ifndef MAME_OSD_OSDFILE_H -#define MAME_OSD_OSDFILE_H - -#pragma once - -#include -#include -#include -#include -#include -#include - - -/*************************************************************************** - FILE I/O INTERFACES -***************************************************************************/ - -/* Make sure we have a path separator (default to /) */ -#ifndef PATH_SEPARATOR -#if defined(_WIN32) -#define PATH_SEPARATOR "\\" -#else -#define PATH_SEPARATOR "/" -#endif -#endif - -/// \defgroup openflags File open flags -/// \{ - -/// Open file for reading. -constexpr uint32_t OPEN_FLAG_READ = 0x0001; - -/// Open file for writing. -constexpr uint32_t OPEN_FLAG_WRITE = 0x0002; - -/// Create the file, or truncate it if it exists. -constexpr uint32_t OPEN_FLAG_CREATE = 0x0004; - -/// Create non-existent directories in the path. -constexpr uint32_t OPEN_FLAG_CREATE_PATHS = 0x0008; - -/// Do not decompress into memory on open. -constexpr uint32_t OPEN_FLAG_NO_PRELOAD = 0x0010; - -/// \} - - -/// \brief Interface to file-like resources -/// -/// This interface is used to access file-like and stream-like -/// resources. Examples include plain files, TCP socket, named pipes, -/// pseudo-terminals, and compressed archive members. -class osd_file -{ -public: - /// \brief Smart pointer to a file handle - typedef std::unique_ptr ptr; - - /// \brief Open a new file handle - /// - /// This function is called by core_fopen and several other places - /// in the core to access files. These functions will construct - /// paths by concatenating various search paths held in the - /// options.c options database with partial paths specified by the - /// core. The core assumes that the path separator is the first - /// character of the string PATH_SEPARATOR, but does not interpret - /// any path separators in the search paths, so if you use a - /// different path separator in a search path, you may get a mixture - /// of PATH_SEPARATORs (from the core) and alternate path separators - /// (specified by users and placed into the options database). - /// \param [in] path Path to the file to open. - /// \param [in] openflags Combination of #OPEN_FLAG_READ, - /// #OPEN_FLAG_WRITE, #OPEN_FLAG_CREATE and - /// #OPEN_FLAG_CREATE_PATHS specifying the requested access mode - /// and open behaviour. - /// \param [out] file Receives the file handle if the operation - /// succeeds. Not valid if the operation fails. - /// \param [out] filesize Receives the size of the opened file if - /// the operation succeeded. Not valid if the operation failed. - /// Will be zero for stream-like objects (e.g. TCP sockets or - /// named pipes). - /// \return Result of the operation. - static std::error_condition open(std::string const &path, std::uint32_t openflags, ptr &file, std::uint64_t &filesize) noexcept; - - /// \brief Create a new pseudo-terminal (PTY) pair - /// - /// \param [out] file Receives the handle of the master side of the - /// pseudo-terminal if the operation succeeds. Not valid if the - /// operation fails. - /// \param [out] name Receives the name of the slave side of the - /// pseudo-terminal if the operation succeeds. Not valid if the - /// operation fails. - /// \return Result of the operation. - static std::error_condition openpty(ptr &file, std::string &name) noexcept; - - /// \brief Close an open file - virtual ~osd_file() { } - - /// \brief Read from an open file - /// - /// Read data from an open file at specified offset. Note that the - /// seek and read are not guaranteed to be atomic, which may cause - /// issues in multi-threaded applications. - /// \param [out] buffer Pointer to memory that will receive the data - /// read. - /// \param [in] offset Byte offset within the file to read at, - /// relative to the start of the file. Ignored for stream-like - /// objects (e.g. TCP sockets or named pipes). - /// \param [in] length Number of bytes to read. Fewer bytes may be - /// read if the end of file is reached, or if no data is - /// available. - /// \param [out] actual Receives the number of bytes read if the - /// operation succeeds. Not valid if the operation fails. - /// \return Result of the operation. - virtual std::error_condition read(void *buffer, std::uint64_t offset, std::uint32_t length, std::uint32_t &actual) noexcept = 0; - - /// \brief Write to an open file - /// - /// Write data to an open file at specified offset. Note that the - /// seek and write are not guaranteed to be atomic, which may cause - /// issues in multi-threaded applications. - /// \param [in] buffer Pointer to memory containing data to write. - /// \param [in] offset Byte offset within the file to write at, - /// relative to the start of the file. Ignored for stream-like - /// objects (e.g. TCP sockets or named pipes). - /// \param [in] length Number of bytes to write. - /// \param [out] actual Receives the number of bytes written if the - /// operation succeeds. Not valid if the operation fails. - /// \return Result of the operation. - virtual std::error_condition write(void const *buffer, std::uint64_t offset, std::uint32_t length, std::uint32_t &actual) noexcept = 0; - - /// \brief Change the size of an open file - /// - /// \param [in] offset Desired size of the file. - /// \return Result of the operation. - virtual std::error_condition truncate(std::uint64_t offset) noexcept = 0; - - /// \brief Flush file buffers - /// - /// This flushes any data cached by the application, but does not - /// guarantee that all prior writes have reached persistent storage. - /// \return Result of the operation. - virtual std::error_condition flush() noexcept = 0; - - /// \brief Delete a file - /// - /// \param [in] filename Path to the file to delete. - /// \return Result of the operation. - static std::error_condition remove(std::string const &filename) noexcept; -}; - - -/// \brief Describe geometry of physical drive -/// -/// If the given path points to a physical drive, return the geometry of -/// that drive. -/// -/// \param [in] filename Pointer to a path which might describe a -/// physical drive. -/// \param [out] cylinders Pointer to a uint32_t to receive the number of -/// cylinders of the physical drive. -/// \param [out] heads Pointer to a uint32_t to receive the number of -/// heads per cylinder of the physical drive. -/// \param [out] sectors Pointer to a uint32_t to receive the number of -/// sectors per cylinder of the physical drive. -/// \param [out] bps Pointer to a uint32_t to receive the number of -/// bytes per sector of the physical drive. -/// \return true if the filename points to a physical drive and if the -/// values pointed to by cylinders, heads, sectors, and bps are valid; -/// false in any other case -bool osd_get_physical_drive_geometry(const char *filename, uint32_t *cylinders, uint32_t *heads, uint32_t *sectors, uint32_t *bps) noexcept; - - -/// \brief Is the given character legal for filenames? -/// -/// \param [in] uchar The character to check. -/// \return Whether this character is legal in a filename. -bool osd_is_valid_filename_char(char32_t uchar) noexcept; - - -/// \brief Is the given character legal for paths? -/// -/// \param [in] uchar The character to check. -/// \return Whether this character is legal in a file path. -bool osd_is_valid_filepath_char(char32_t uchar) noexcept; - - -/*************************************************************************** - DIRECTORY INTERFACES -***************************************************************************/ - -namespace osd -{ - // directory is an opaque type which represents an open directory - class directory - { - public: - typedef std::unique_ptr ptr; - - // osd::directory::entry contains basic information about a file when iterating through - // a directory - class entry - { - public: - enum class entry_type - { - NONE, - FILE, - DIR, - OTHER - }; - - const char * name; // name of the entry - entry_type type; // type of the entry - std::uint64_t size; // size of the entry - std::chrono::system_clock::time_point last_modified; // last modified time - }; - - /// \brief Open a directory for iteration. - /// - /// \param [in] dirname Path to the directory in question. - /// \return Upon success, a directory pointer which contains opaque - /// data necessary to traverse the directory; on failure, nullptr. - static ptr open(std::string const &dirname); - - /// \brief Close an open directory. - virtual ~directory() { } - - /// \brief Return information about the next entry in the directory. - /// - /// \return A constant pointer to an entry representing the current - /// item in the directory, or nullptr, indicating that no more - /// entries are present. - virtual const entry *read() = 0; - }; -}; - - -/// \brief Return a directory entry for a path. -/// -/// \param [in] path The path in question. -/// \return An allocated pointer to an osd::directory::entry representing -/// info on the path; even if the file does not exist. -std::unique_ptr osd_stat(std::string const &path); - - -/*************************************************************************** - PATH INTERFACES -***************************************************************************/ - -/// \brief Returns whether the specified path is absolute. -/// -/// \param [in] path The path in question. -/// \return true if the path is absolute, false otherwise. -bool osd_is_absolute_path(const std::string &path) noexcept; - - -/// \brief Retrieves the full path. -/// \param [in] path The path in question. -/// \param [out] dst Reference to receive new path. -/// \return File error. -std::error_condition osd_get_full_path(std::string &dst, std::string const &path) noexcept; - - -/// \brief Retrieves the volume name. -/// -/// \param [in] idx Index number of volume. -/// \return Volume name or empty string of out of range. -std::string osd_get_volume_name(int idx); - - -/// \brief Retrieves volume names. -/// -/// \return Names of all mounted volumes. -std::vector osd_get_volume_names(); - - -#endif // MAME_OSD_OSDFILE_H diff --git a/waterbox/ares64/ares/thirdparty/mame/osd/osdsync.cpp b/waterbox/ares64/ares/thirdparty/mame/osd/osdsync.cpp deleted file mode 100644 index a81e6b06a1..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/osd/osdsync.cpp +++ /dev/null @@ -1,823 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -//============================================================ -// -// osdsync.c - OSD core work item functions -// -//============================================================ -#if defined(OSD_WINDOWS) || defined(SDLMAME_WIN32) -// standard windows headers -#include -#include -#include -#include - -#ifdef __GNUC__ -#include -#endif -#endif -#include -#include -#include -#include -#include -// MAME headers -#include "osdcore.h" -#include "osdsync.h" - -#include "eminline.h" - -#if defined(SDLMAME_LINUX) || defined(SDLMAME_BSD) || defined(SDLMAME_HAIKU) || defined(SDLMAME_EMSCRIPTEN) || defined(SDLMAME_MACOSX) -#include -#endif - -#if defined(MAME_RDP) -#define osd_getenv getenv -#endif - -//============================================================ -// DEBUGGING -//============================================================ - -#define KEEP_STATISTICS (0) - -//============================================================ -// PARAMETERS -//============================================================ - -#define ENV_PROCESSORS "OSDPROCESSORS" -#define ENV_WORKQUEUEMAXTHREADS "OSDWORKQUEUEMAXTHREADS" - -#define SPIN_LOOP_TIME (osd_ticks_per_second() / 10000) - -//============================================================ -// MACROS -//============================================================ - -#if KEEP_STATISTICS -#define add_to_stat(v,x) do { (v) += (x); } while (0) -#define begin_timing(v) do { (v) -= get_profile_ticks(); } while (0) -#define end_timing(v) do { (v) += get_profile_ticks(); } while (0) -#else -#define add_to_stat(v,x) do { } while (0) -#define begin_timing(v) do { } while (0) -#define end_timing(v) do { } while (0) -#endif - -template -static void spin_while(const volatile _AtomType * volatile atom, const _MainType val, const osd_ticks_t timeout, const int invert = 0) -{ - osd_ticks_t stopspin = osd_ticks() + timeout; - - do { - int spin = 10000; - while (--spin) - { - if ((*atom != val) ^ invert) - return; - } - } while (((*atom == val) ^ invert) && osd_ticks() < stopspin); -} - -template -static void spin_while_not(const volatile _AtomType * volatile atom, const _MainType val, const osd_ticks_t timeout) -{ - spin_while<_AtomType, _MainType>(atom, val, timeout, 1); -} - -//============================================================ -// osd_num_processors -//============================================================ - -int osd_get_num_processors() -{ -#if defined(SDLMAME_EMSCRIPTEN) - // multithreading is not supported at this time - return 1; -#else - // max out at 4 for now since scaling above that seems to do poorly - return std::min(std::thread::hardware_concurrency(), 4U); -#endif -} - -//============================================================ -// TYPE DEFINITIONS -//============================================================ - -struct work_thread_info -{ - work_thread_info(uint32_t aid, osd_work_queue &aqueue) - : queue(aqueue) - , handle(nullptr) - , wakeevent(false, false) // auto-reset, not signalled - , active(0) - , id(aid) -#if KEEP_STATISTICS - , itemsdone(0) - , actruntime(0) - , runtime(0) - , spintime(0) - , waittime(0) -#endif - { - } - osd_work_queue & queue; // pointer back to the queue - std::thread * handle; // handle to the thread - osd_event wakeevent; // wake event for the thread - std::atomic active; // are we actively processing work? - uint32_t id; - -#if KEEP_STATISTICS - int32_t itemsdone; - osd_ticks_t actruntime; - osd_ticks_t runtime; - osd_ticks_t spintime; - osd_ticks_t waittime; -#endif -}; - - -struct osd_work_queue -{ - osd_work_queue() - : list(nullptr) - , tailptr(nullptr) - , free(nullptr) - , items(0) - , livethreads(0) - , waiting(0) - , exiting(0) - , threads(0) - , flags(0) - , doneevent(true, true) // manual reset, signalled -#if KEEP_STATISTICS - , itemsqueued(0) - , setevents(0) - , extraitems(0) - , spinloops(0) -#endif - { - } - - std::mutex lock; // lock for protecting the queue - std::atomic list; // list of items in the queue - osd_work_item ** volatile tailptr; // pointer to the tail pointer of work items in the queue - std::atomic free; // free list of work items - std::atomic items; // items in the queue - std::atomic livethreads; // number of live threads - std::atomic waiting; // is someone waiting on the queue to complete? - std::atomic exiting; // should the threads exit on their next opportunity? - uint32_t threads; // number of threads in this queue - uint32_t flags; // creation flags - std::vector thread; // array of thread information - osd_event doneevent; // event signalled when work is complete - -#if KEEP_STATISTICS - std::atomic itemsqueued; // total items queued - std::atomic setevents; // number of times we called SetEvent - std::atomic extraitems; // how many extra items we got after the first in the queue loop - std::atomic spinloops; // how many times spinning bought us more items -#endif -}; - - -struct osd_work_item -{ - osd_work_item(osd_work_queue &aqueue) - : next(nullptr) - , queue(aqueue) - , callback(nullptr) - , param(nullptr) - , result(nullptr) - , event(nullptr) // manual reset, not signalled - , flags(0) - , done(false) - { - } - - osd_work_item * next; // pointer to next item - osd_work_queue & queue; // pointer back to the owning queue - osd_work_callback callback; // callback function - void * param; // callback parameter - void * result; // callback result - osd_event * event; // event signalled when complete - uint32_t flags; // creation flags - std::atomic done; // is the item done? -}; - -//============================================================ -// GLOBAL VARIABLES -//============================================================ - -int osd_num_processors = 0; - -//============================================================ -// FUNCTION PROTOTYPES -//============================================================ - -static int effective_num_processors(); -static void * worker_thread_entry(void *param); -static void worker_thread_process(osd_work_queue *queue, work_thread_info *thread); -static bool queue_has_list_items(osd_work_queue *queue); - -//============================================================ -// osd_thread_adjust_priority -//============================================================ - -int thread_adjust_priority(std::thread *thread, int adjust) -{ -#if defined(OSD_WINDOWS) || defined(SDLMAME_WIN32) - if (adjust) - SetThreadPriority((HANDLE)thread->native_handle(), THREAD_PRIORITY_ABOVE_NORMAL); - else - SetThreadPriority((HANDLE)thread->native_handle(), GetThreadPriority(GetCurrentThread())); -#endif -#if defined(SDLMAME_LINUX) || defined(SDLMAME_BSD) || defined(SDLMAME_HAIKU) || defined(SDLMAME_DARWIN) - struct sched_param sched; - int policy; - - if (pthread_getschedparam(thread->native_handle(), &policy, &sched) == 0) - { - sched.sched_priority += adjust; - if (pthread_setschedparam(thread->native_handle(), policy, &sched) == 0) - return true; - else - return false; - } -#endif - return true; -} - -//============================================================ -// osd_work_queue_alloc -//============================================================ - -osd_work_queue *osd_work_queue_alloc(int flags) -{ - int threadnum; - int numprocs = effective_num_processors(); - osd_work_queue *queue; - int osdthreadnum = 0; - int allocthreadnum; - const char *osdworkqueuemaxthreads = osd_getenv(ENV_WORKQUEUEMAXTHREADS); - - // allocate a new queue - queue = new osd_work_queue(); - - // initialize basic queue members - queue->tailptr = (osd_work_item **)&queue->list; - queue->flags = flags; - - // determine how many threads to create... - // on a single-CPU system, create 1 thread for I/O queues, and 0 threads for everything else - if (numprocs == 1) - threadnum = (flags & WORK_QUEUE_FLAG_IO) ? 1 : 0; - // on an n-CPU system, create n-1 threads for multi queues, and 1 thread for everything else - else - threadnum = (flags & WORK_QUEUE_FLAG_MULTI) ? (numprocs - 1) : 1; - - if (osdworkqueuemaxthreads != nullptr && sscanf(osdworkqueuemaxthreads, "%d", &osdthreadnum) == 1 && threadnum > osdthreadnum) - threadnum = osdthreadnum; - -#if defined(SDLMAME_EMSCRIPTEN) - // threads are not supported at all - threadnum = 0; -#endif - - // clamp to the maximum - queue->threads = std::min(threadnum, WORK_MAX_THREADS); - - // allocate memory for thread array (+1 to count the calling thread if WORK_QUEUE_FLAG_MULTI) - if (flags & WORK_QUEUE_FLAG_MULTI) - allocthreadnum = queue->threads + 1; - else - allocthreadnum = queue->threads; - -#if KEEP_STATISTICS - printf("osdprocs: %d effecprocs: %d threads: %d allocthreads: %d osdthreads: %d maxthreads: %d queuethreads: %d\n", osd_num_processors, numprocs, threadnum, allocthreadnum, osdthreadnum, WORK_MAX_THREADS, queue->threads); -#endif - - for (threadnum = 0; threadnum < allocthreadnum; threadnum++) - queue->thread.push_back(new work_thread_info(threadnum, *queue)); - - // iterate over threads - for (threadnum = 0; threadnum < queue->threads; threadnum++) - { - work_thread_info *thread = queue->thread[threadnum]; - - // create the thread - thread->handle = new std::thread(worker_thread_entry, thread); - if (thread->handle == nullptr) - goto error; - - // set its priority: I/O threads get high priority because they are assumed to be - // blocked most of the time; other threads just match the creator's priority - if (flags & WORK_QUEUE_FLAG_IO) - thread_adjust_priority(thread->handle, 1); - else - thread_adjust_priority(thread->handle, 0); - } - - // start a timer going for "waittime" on the main thread - if (flags & WORK_QUEUE_FLAG_MULTI) - { - begin_timing(queue->thread[queue->threads]->waittime); - } - return queue; - -error: - osd_work_queue_free(queue); - return nullptr; -} - - -//============================================================ -// osd_work_queue_items -//============================================================ - -int osd_work_queue_items(osd_work_queue *queue) -{ - // return the number of items currently in the queue - return queue->items; -} - - -//============================================================ -// osd_work_queue_wait -//============================================================ - -bool osd_work_queue_wait(osd_work_queue *queue, osd_ticks_t timeout) -{ - // if no threads, no waiting - if (queue->threads == 0) - return true; - - // if no items, we're done - if (queue->items == 0) - return true; - - // if this is a multi queue, help out rather than doing nothing - if (queue->flags & WORK_QUEUE_FLAG_MULTI) - { - work_thread_info *thread = queue->thread[queue->threads]; - - end_timing(thread->waittime); - - // process what we can as a worker thread - worker_thread_process(queue, thread); - - // if we're a high frequency queue, spin until done - if (queue->flags & WORK_QUEUE_FLAG_HIGH_FREQ && queue->items != 0) - { - // spin until we're done - begin_timing(thread->spintime); - spin_while_not,int>(&queue->items, 0, timeout); - end_timing(thread->spintime); - - begin_timing(thread->waittime); - return (queue->items == 0); - } - begin_timing(thread->waittime); - } - - // reset our done event and double-check the items before waiting - queue->doneevent.reset(); - queue->waiting = true; - if (queue->items != 0) - queue->doneevent.wait(timeout); - queue->waiting = false; - - // return true if we actually hit 0 - return (queue->items == 0); -} - - -//============================================================ -// osd_work_queue_free -//============================================================ - -void osd_work_queue_free(osd_work_queue *queue) -{ - // stop the timer for "waittime" on the main thread - if (queue->flags & WORK_QUEUE_FLAG_MULTI) - { - end_timing(queue->thread[queue->threads]->waittime); - } - - // signal all the threads to exit - queue->exiting = true; - for (int threadnum = 0; threadnum < queue->threads; threadnum++) - { - work_thread_info *thread = queue->thread[threadnum]; - thread->wakeevent.set(); - } - - // wait for all the threads to go away - for (int threadnum = 0; threadnum < queue->threads; threadnum++) - { - work_thread_info *thread = queue->thread[threadnum]; - - // block on the thread going away, then close the handle - if (thread->handle != nullptr) - { - thread->handle->join(); - delete thread->handle; - } - - } - -#if KEEP_STATISTICS - // output per-thread statistics - for (work_thread_info *thread : queue->thread) - { - osd_ticks_t total = thread->runtime + thread->waittime + thread->spintime; - printf("Thread %d: items=%9d run=%5.2f%% (%5.2f%%) spin=%5.2f%% wait/other=%5.2f%% total=%9d\n", - thread->id, thread->itemsdone, - (double)thread->runtime * 100.0 / (double)total, - (double)thread->actruntime * 100.0 / (double)total, - (double)thread->spintime * 100.0 / (double)total, - (double)thread->waittime * 100.0 / (double)total, - (uint32_t) total); - } -#endif - - // free the list - for (auto & th : queue->thread) - delete th; - queue->thread.clear(); - - // free all items in the free list - while (queue->free.load() != nullptr) - { - auto *item = (osd_work_item *)queue->free; - queue->free = item->next; - delete item->event; - delete item; - } - - // free all items in the active list - while (queue->list.load() != nullptr) - { - auto *item = (osd_work_item *)queue->list; - queue->list = item->next; - delete item->event; - delete item; - } - -#if KEEP_STATISTICS - printf("Items queued = %9d\n", queue->itemsqueued.load()); - printf("SetEvent calls = %9d\n", queue->setevents.load()); - printf("Extra items = %9d\n", queue->extraitems.load()); - printf("Spin loops = %9d\n", queue->spinloops.load()); -#endif - - // free the queue itself - delete queue; -} - - -//============================================================ -// osd_work_item_queue_multiple -//============================================================ - -osd_work_item *osd_work_item_queue_multiple(osd_work_queue *queue, osd_work_callback callback, int32_t numitems, void *parambase, int32_t paramstep, uint32_t flags) -{ - osd_work_item *itemlist = nullptr, *lastitem = nullptr; - osd_work_item **item_tailptr = &itemlist; - int itemnum; - - // loop over items, building up a local list of work - for (itemnum = 0; itemnum < numitems; itemnum++) - { - osd_work_item *item; - - // first allocate a new work item; try the free list first - { - std::lock_guard lock(queue->lock); - do - { - item = (osd_work_item *)queue->free; - } while (item != nullptr && !queue->free.compare_exchange_weak(item, item->next, std::memory_order_release, std::memory_order_relaxed)); - } - - // if nothing, allocate something new - if (item == nullptr) - { - // allocate the item - item = new osd_work_item(*queue); - if (item == nullptr) - return nullptr; - } - else - { - item->done = false; // needs to be set this way to prevent data race/usage of uninitialized memory on Linux - } - - // fill in the basics - item->next = nullptr; - item->callback = callback; - item->param = parambase; - item->result = nullptr; - item->flags = flags; - - // advance to the next - lastitem = item; - *item_tailptr = item; - item_tailptr = &item->next; - parambase = (uint8_t *)parambase + paramstep; - } - - // enqueue the whole thing within the critical section - { - std::lock_guard lock(queue->lock); - *queue->tailptr = itemlist; - queue->tailptr = item_tailptr; - } - - // increment the number of items in the queue - queue->items += numitems; - add_to_stat(queue->itemsqueued, numitems); - - // look for free threads to do the work - if (queue->livethreads < queue->threads) - { - int threadnum; - - // iterate over all the threads - for (threadnum = 0; threadnum < queue->threads; threadnum++) - { - work_thread_info *thread = queue->thread[threadnum]; - - // if this thread is not active, wake him up - if (!thread->active) - { - thread->wakeevent.set(); - add_to_stat(queue->setevents, 1); - - // for non-shared, the first one we find is good enough - if (--numitems == 0) - break; - } - } - } - - // if no threads, run the queue now on this thread - if (queue->threads == 0) - { - end_timing(queue->thread[0]->waittime); - worker_thread_process(queue, queue->thread[0]); - begin_timing(queue->thread[0]->waittime); - } - // only return the item if it won't get released automatically - return (flags & WORK_ITEM_FLAG_AUTO_RELEASE) ? nullptr : lastitem; -} - - -//============================================================ -// osd_work_item_wait -//============================================================ - -bool osd_work_item_wait(osd_work_item *item, osd_ticks_t timeout) -{ - // if we're done already, just return - if (item->done) - return true; - - // if we don't have an event, create one - if (item->event == nullptr) - { - std::lock_guard lock(item->queue.lock); - item->event = new osd_event(true, false); // manual reset, not signalled - } - else - item->event->reset(); - - // if we don't have an event, we need to spin (shouldn't ever really happen) - if (item->event == nullptr) - { - // TODO: do we need to measure the spin time here as well? and how can we do it? - spin_while,int>(&item->done, 0, timeout); - } - - // otherwise, block on the event until done - else if (!item->done) - item->event->wait(timeout); - - // return true if the refcount actually hit 0 - return item->done; -} - - -//============================================================ -// osd_work_item_result -//============================================================ - -void *osd_work_item_result(osd_work_item *item) -{ - return item->result; -} - - -//============================================================ -// osd_work_item_release -//============================================================ - -void osd_work_item_release(osd_work_item *item) -{ - osd_work_item *next; - - // make sure we're done first - osd_work_item_wait(item, 100 * osd_ticks_per_second()); - - // add us to the free list on our queue - std::lock_guard lock(item->queue.lock); - do - { - next = (osd_work_item *) item->queue.free; - item->next = next; - } while (!item->queue.free.compare_exchange_weak(next, item, std::memory_order_release, std::memory_order_relaxed)); -} - - -//============================================================ -// effective_num_processors -//============================================================ - -static int effective_num_processors() -{ - int physprocs = osd_get_num_processors(); - - // osd_num_processors == 0 for 'auto' - if (osd_num_processors > 0) - { - return std::min(4 * physprocs, osd_num_processors); - } - else - { - int numprocs = 0; - - // if the OSDPROCESSORS environment variable is set, use that value if valid - // note that we permit more than the real number of processors for testing - const char *procsoverride = osd_getenv(ENV_PROCESSORS); - if (procsoverride != nullptr && sscanf(procsoverride, "%d", &numprocs) == 1 && numprocs > 0) - return std::min(4 * physprocs, numprocs); - - // otherwise, return the info from the system - return physprocs; - } -} - - -//============================================================ -// worker_thread_entry -//============================================================ - -static void *worker_thread_entry(void *param) -{ - auto *thread = (work_thread_info *)param; - osd_work_queue &queue = thread->queue; - - // loop until we exit - for ( ;; ) - { - // block waiting for work or exit - // bail on exit, and only wait if there are no pending items in queue - if (queue.exiting) - break; - - if (!queue_has_list_items(&queue)) - { - begin_timing(thread->waittime); - thread->wakeevent.wait( OSD_EVENT_WAIT_INFINITE); - end_timing(thread->waittime); - } - - if (queue.exiting) - break; - - // indicate that we are live - thread->active = true; - ++queue.livethreads; - - // process work items - for ( ;; ) - { - // process as much as we can - worker_thread_process(&queue, thread); - - // if we're a high frequency queue, spin for a while before giving up - if (queue.flags & WORK_QUEUE_FLAG_HIGH_FREQ && queue.list.load() == nullptr) - { - // spin for a while looking for more work - begin_timing(thread->spintime); - spin_while, osd_work_item *>(&queue.list, (osd_work_item *)nullptr, SPIN_LOOP_TIME); - end_timing(thread->spintime); - } - - // if nothing more, release the processor - if (!queue_has_list_items(&queue)) - break; - add_to_stat(queue.spinloops, 1); - } - - // decrement the live thread count - thread->active = false; - --queue.livethreads; - } - - return nullptr; -} - - -//============================================================ -// worker_thread_process -//============================================================ - -static void worker_thread_process(osd_work_queue *queue, work_thread_info *thread) -{ - int threadid = thread->id; - - begin_timing(thread->runtime); - - // loop until everything is processed - while (true) - { - osd_work_item *item = nullptr; - - bool end_loop = false; - - // use a critical section to synchronize the removal of items - { - std::lock_guard lock(queue->lock); - - if (queue->list.load() == nullptr) - { - end_loop = true; - } - else - { - // pull the item from the queue - item = (osd_work_item *)queue->list; - if (item != nullptr) - { - queue->list = item->next; - if (queue->list.load() == nullptr) - queue->tailptr = (osd_work_item **)&queue->list; - } - } - } - - if (end_loop) - break; - - // process non-NULL items - if (item != nullptr) - { - // call the callback and stash the result - begin_timing(thread->actruntime); - item->result = (*item->callback)(item->param, threadid); - end_timing(thread->actruntime); - - // decrement the item count after we are done - --queue->items; - item->done = true; - add_to_stat(thread->itemsdone, 1); - - // if it's an auto-release item, release it - if (item->flags & WORK_ITEM_FLAG_AUTO_RELEASE) - osd_work_item_release(item); - - // set the result and signal the event - else - { - std::lock_guard lock(queue->lock); - - if (item->event != nullptr) - { - item->event->set(); - add_to_stat(item->queue.setevents, 1); - } - } - - // if we removed an item and there's still work to do, bump the stats - if (queue_has_list_items(queue)) - add_to_stat(queue->extraitems, 1); - } - } - - // we don't need to set the doneevent for multi queues because they spin - if (queue->waiting) - { - queue->doneevent.set(); - add_to_stat(queue->setevents, 1); - } - - end_timing(thread->runtime); -} - -bool queue_has_list_items(osd_work_queue *queue) -{ - std::lock_guard lock(queue->lock); - bool has_list_items = (queue->list.load() != nullptr); - return has_list_items; -} diff --git a/waterbox/ares64/ares/thirdparty/mame/osd/osdsync.h b/waterbox/ares64/ares/thirdparty/mame/osd/osdsync.h deleted file mode 100644 index 3a286b60af..0000000000 --- a/waterbox/ares64/ares/thirdparty/mame/osd/osdsync.h +++ /dev/null @@ -1,167 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Olivier Galibert, R. Belmont -//============================================================ -// -// osdsync.h - Core synchronization functions -// -//============================================================ -#ifndef MAME_OSD_OSDSYNC_H -#define MAME_OSD_OSDSYNC_H - -#pragma once - -// C++ headers -#include -#include -#include - -#include "osdcomm.h" - -/*************************************************************************** - SYNCHRONIZATION INTERFACES - Events -***************************************************************************/ - -#define OSD_EVENT_WAIT_INFINITE (~(osd_ticks_t)0) - -/* osd_event is an opaque type which represents a setable/resettable event */ - -class osd_event -{ -public: - /*----------------------------------------------------------------------------- - constructor: allocate a new event - - Parameters: - - manualreset - boolean. If true, the event will be automatically set - to non-signalled after a thread successfully waited for - it. - initialstate - boolean. If true, the event is signalled initially. - - Return value: - - A pointer to the allocated event. - -----------------------------------------------------------------------------*/ - osd_event(int manualreset, int initialstate) - { - m_signalled = initialstate; - m_autoreset = !manualreset; - } - - ~osd_event() - { - } - - /*----------------------------------------------------------------------------- - wait: wait for an event to be signalled - If the event is in signalled state, the - function returns immediately. If not it will wait for the event - to become signalled. - - Parameters: - - timeout - timeout in osd_ticks - - Return value: - - true: The event was signalled - false: A timeout occurred - -----------------------------------------------------------------------------*/ - - bool wait(osd_ticks_t timeout) - { - if (timeout == OSD_EVENT_WAIT_INFINITE) - timeout = osd_ticks_per_second() * (osd_ticks_t)10000; - - std::unique_lock lock(m_mutex); - if (!timeout) - { - if (!m_signalled) - { - return false; - } - } - else - { - if (!m_signalled) - { - uint64_t msec = timeout * 1000 / osd_ticks_per_second(); - - do { - if (m_cond.wait_for(lock, std::chrono::milliseconds(msec)) == std::cv_status::timeout) - { - if (!m_signalled) - { - return false; - } - else - break; - } else - break; - - } while (true); - } - } - - if (m_autoreset) - m_signalled = 0; - - return true; - } - - /*----------------------------------------------------------------------------- - osd_event_reset: reset an event to non-signalled state - - Parameters: - - None - - Return value: - - None - -----------------------------------------------------------------------------*/ - void reset() - { - m_mutex.lock(); - m_signalled = false; - m_mutex.unlock(); - } - - /*----------------------------------------------------------------------------- - osd_event_set: set an event to signalled state - - Parameters: - - None - - Return value: - - None - - Notes: - - All threads waiting for the event will be signalled. - -----------------------------------------------------------------------------*/ - void set() - { - m_mutex.lock(); - if (m_signalled == false) - { - m_signalled = true; - if (m_autoreset) - m_cond.notify_one(); - else - m_cond.notify_all(); - } - m_mutex.unlock(); - } - -private: - std::mutex m_mutex; - std::condition_variable m_cond; - std::atomic m_autoreset; - std::atomic m_signalled; - -}; - -#endif // MAME_OSD_OSDSYNC_H diff --git a/waterbox/melon/melonDS b/waterbox/melon/melonDS index 7e45e3582b..70e45e69f4 160000 --- a/waterbox/melon/melonDS +++ b/waterbox/melon/melonDS @@ -1 +1 @@ -Subproject commit 7e45e3582be653db468293189d63349c2632c3cb +Subproject commit 70e45e69f466fb6750abc786200cf027ade11867

    -|%FC;dE+c7PuOZ{BDyK+0Ub4BqD=J_u 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�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