chore: Run npm audit fix in web/ - #23742
Merged
Merged
Conversation
torokati44
commented
May 18, 2026
Member
Author
|
(tested locally, the deprecation warning under Node 26 is gone with this) |
Member
Author
|
The tsx bump got merged as part of #23748, so I repurposed the PR to just audit fixes. |
tsx to 4.22.2 in web/npm audit fix in web/
danielhjacobs
approved these changes
May 19, 2026
Bumping `brace-expansion` to `5.0.6` and `ws` to `8.20.1`.
torokati44
enabled auto-merge (rebase)
May 19, 2026 14:36
Hancock33
added a commit
to Hancock33/batocera.piboy
that referenced
this pull request
May 23, 2026
----------------------------------------------------------------------------------- eden.mk 2a66b40267db6ebcea0cd36a7111abcf85af876f # Version: Commits on May 20, 2026 ----------------------------------------------------------------------------------- [common/cpu_detect] Remove SSE/SSE2/FMA4/AVX_VNNI detection (#3979) -------------------------------------------------------------------------------------- flycast.mk f3047b2ef12d9e77a661826d663a46beffdc927f # Version: Commits on May 20, 2026 -------------------------------------------------------------------------------------- Virtual-On: Oratorio Tangram (JP) widescreen cheat, ---------------------------------------------------- pcsx2.mk v2.7.356 # Version: Commits on May 19, 2026 ---------------------------------------------------- - [GS/HW: Add AA1 triangle corner caps and edge extrapolation.](PCSX2/pcsx2#14439) , ------------------------------------------------------------------------------------- ppsspp.mk 4e109dd6ae34cbcb39751bb7647d345569700161 # Version: Commits on May 20, 2026 ------------------------------------------------------------------------------------- Merge pull request #21710 from warmenhoven/warmenhoven/pr/libretro-build-fix fix libretro build, ------------------------------------------------------------------------------------ rpcs3.mk 6a2ad0a0aa17c994ae95f492bfd27a2a2b3c2b0f # Version: Commits on May 18, 2026 ------------------------------------------------------------------------------------ sys_usbd: enable windows hotplug, ----------------------------------------------------- ryujinx.mk 1.3.298 # Version: Commits on May 20, 2026 ----------------------------------------------------- 1.3.298 -------------------------------------------------------------------------------------- shadps4.mk f95edd27e0dde1ea26e94152ac3c6c12ed42ffaf # Version: Commits on May 20, 2026 -------------------------------------------------------------------------------------- major skill issue (#4451), -------------------------------------------------------------------------------------- tsugaru.mk 83d42379af74e72877863333958234248762c66e # Version: Commits on May 20, 2026 -------------------------------------------------------------------------------------- FLDCW handles exception., ------------------------------------------------- vice.mk r46110 # Version: Commits on May 19, 2026 ------------------------------------------------- null --------------------------------------------------- xemu.mk v0.8.135 # Version: Commits on May 18, 2026 --------------------------------------------------- meson: Bump SPIRV-Reflect to vulkan-sdk-1.4.350.0, ------------------------------------------------------------------------------------------- xenia-canary.mk a11908fa76eecef7ae7405e0e3ca8f25e622fc81 # Version: Commits on May 19, 2026 ------------------------------------------------------------------------------------------- [XAM] Enable storing IPTV name. Still needs to be exposed in UI (optional), ----------------------------------------------------------------------------------------- xenia-edge.mk eee166febd27dfdffc556c4474e1aa49f2b4ccc5 # Version: Commits on May 20, 2026 ----------------------------------------------------------------------------------------- Merge tag 'f88bfbe' into edge, --------------------------------------------------------------- ruffle.mk nightly-2026-05-20 # Version: Commits on May 20, 2026 --------------------------------------------------------------- ## What's Changed * chore: Bump the npm-minor group in /web with 7 updates by @dependabot[bot] in ruffle-rs/ruffle#23748 * chore: Bump enumset to 1.1.13 by @torokati44 in ruffle-rs/ruffle#23753 * chore: Bump cssnano to 8.0.1 and cssnano-preset-advanced to 8.0.1 in /web by @torokati44 in ruffle-rs/ruffle#23752 * chore: Run `npm audit fix` in web/ by @torokati44 in ruffle-rs/ruffle#23742 **Full Changelog**: ruffle-rs/ruffle@nightly-2026-05-19...nightly-2026-05-20, ----------------------------------------------------------------------------------------- rpi-eeprom.mk c5ea2eb4dc4de9700d4102cbb5517efb3c1eced6 # Version: Commits on May 20, 2026 ----------------------------------------------------------------------------------------- pieeprom-2026-05-20: recovery: 2712: reboot order and reboot arg option (latest) * recovery: 2712: reboot order and reboot arg option Add support for set_reboot_order and set_reboot_arg1 in recovery config.txt, so that recovery.bin can set them when it has been loaded over rpiboot., ------------------------------------------------------------------------------------ rtw88.mk 74e7d03cec5b278a0475b30e80cb8af204ba2c2b # Version: Commits on May 20, 2026 ------------------------------------------------------------------------------------ Delete the alt_rtl8821ce driver Larry added it so some users could test it, but it's probably not needed anymore. If anyone does need it, we can resurrect it in a separate repository. lwfinger/rtw88#98 (comment) Recently a vulnerability was discovered in rtw_mp_efuse_set(). Ping-Ke requested we either delete the driver or apply their fix. https://lore.kernel.org/linux-wireless/1d0efa51a4214ee8b65d7f3ff9d52097@realtek.com/ Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>, ------------------------------------------------------------------------------------------ fallout2-ce.mk 06d7f0972801e9a2c0511255af32ada3b2733ebc # Version: Commits on May 20, 2026 ------------------------------------------------------------------------------------------ Implement HOOK_USESKILL, HOOK_USESKILLON (#456) * Implement HOOK_USESKILL, HOOK_USESKILLON * make comment more accurate, --------------------------------------------------------------------------------------- openjazz.mk 0100d5eeb171a243d374d3780a6da8dbc4aa8f4c # Version: Commits on May 20, 2026 --------------------------------------------------------------------------------------- feat: Show key names in configuration Add initial support for joysticks/gamepads, but not used yet, ------------------------------------------------ vcmi.mk 1.7.4 # Version: Commits on May 20, 2026 ------------------------------------------------ Note: saved games from 1.6 release can be loaded in 1.7 ### Changelog - Player Changelog: [1.7.3 -> 1.7.4](https://github.com/vcmi/vcmi/blob/master/ChangeLog.md#173---174) - Full Changelog: https://github.com/vcmi/vcmi/compare/1.7.3..1.7.4 ### Additional builds <!-- - Android release will be available on Google Play shortly --> <!-- - Linux release will be available on Flathub shortly --> <!-- - Ubuntu release will be available on VCMI PPA shortly --> <!-- - Android release is available on [Google Play](https://play.google.com/store/apps/details?id=is.xyz.vcmi) --> <!-- - Linux release is available on [Flathub](https://flathub.org/apps/eu.vcmi.VCMI) --> <!-- - Ubuntu release is available on [VCMI PPA](https://launchpad.net/~vcmi/+archive/ubuntu/ppa) --> - Android release is available on [Google Play](https://play.google.com/store/apps/details?id=is.xyz.vcmi) - iOS release is available on [TestFlight](https://testflight.apple.com/join/pJWHSbmu) (AppStore version coming soon) - Linux release is available on [Flathub](https://flathub.org/apps/eu.vcmi.VCMI) - Ubuntu release is available on [VCMI PPA](https://launchpad.net/~vcmi/+archive/ubuntu/ppa) - macOS release can be installed via Homebrew: `brew install --cask vcmi` (official) or `brew install --cask vcmi/vcmi/vcmi` (from our tap), ------------------------------------------------------------------------------------------------- shadps4-qtlauncher.mk 790d5ad23b132d657f701f8cdd4715c6807a80d0 # Version: Commits on May 20, 2026 ------------------------------------------------------------------------------------------------- audio settings: do not save translated strings to config file that crash games (#357) * fix translated UI text saving to config * fixup * clang * audio selection per game setting * revert * fix openal settings on open, ------------------------------------------------ d7vk.mk v1.10 # Version: Commits on May 19, 2026 ------------------------------------------------ Even the major 2D improvements in v1.9 weren't nearly enough for some games, so in v1.10 we've managed to squeeze a bit more performance in 2D heavy titles by skipping data copies on surfaces which would have been overwritten anyway. Sounds logical and easy enough, but believe me when I say that dealing with the myriad of corner cases DDraw has to offer and figuring out when it is safe to skip an operation is hardly an easy task. I was even a bit too optimistic at first and @CkNoSFeRaTU had to pull me back to reality, but thankfully most of my optimizations have survived the test of time. It's not anything nearly as groundbreaking as the jump between v1.8 and v1.9, but it's still something, especially in the worst possible situations, such as the inventory screen in _Omikron: The Nomad Soul_: | Omikron: The Nomad Soul v1.9 | Omikron: The Nomad Soul v1.10 | |-------|---------| | <img width=\640\ height=\480\ alt=\Omikron_v19\ src=\https://github.com/user-attachments/assets/07025cc0-8f45-4a39-847a-66fa3e16bfd9\ /> | <img width=\640\ height=\480\ alt=\Omikron_v110\ src=\https://github.com/user-attachments/assets/642c9426-1771-426a-8c5a-7a97e0900b64\ />| ## Swapchain fixes and front buffer emulation In addition to performance improvements, v1.10 also addresses various flickering issues we've had due to an oversight in our back buffer mapping logic. The new approach should also provide a bit less input latency than before, not that it is generally of much concern with these early titles anyway. While improving things in that department, it also became apparent we were not meeting an expectation of DDraw swapchains, namely that a permanent front buffer should always retain the on screen data, and serve as a source or destination for blits. It became apparent some games were missing backgrounds during pause menus which relied on this effect, but since DXVK's D3D9 backend does not cater for this situation we had to get a bit creative and emulate our way around it. As all good things in life, this doesn't come for free though, and implies an additional image copy, but we do need to resort to it on occasion, to ensure things are displayed as expected. An obvious example is the in-game pause screen of _Warhammer: Dark Omen_: | Warhammer: Dark Omen v1.9 | Warhammer: Dark Omen v1.10 | |-------|---------| | <img width=\640\ height=\480\ alt=\DO_V19\ src=\https://github.com/user-attachments/assets/abd00501-e0ef-4f22-978e-8fdeaf7b32b1\ /> |<img width=\640\ height=\480\ alt=\DO_v110\ src=\https://github.com/user-attachments/assets/9f12e26c-3632-4ec3-8e53-5409cef30e36\ />| Fixes/additions: - Improved the performance of 2D heavy scenarios by skipping D3D9 image downloads of surfaces which would be overwritten during DDraw blits. This provides minor improvements is most 2D heavy games, and more impactful ones on occasion, such as in _Omikron: The Nomad Soul_ and _SCP – Containment Breach_. - Implemented front buffer emulation, fixing missing backgrounds and camera effects in: _Escape from Monkey Island_, _Evolva_, _Black & White_, _Tomb Raider: The Last Revelation_, _Tomb Raider Chronicles_, _Star Wars: Episode I - The Phantom Menace_, _Descent: FreeSpace_, _FreeSpace 2_, _Warhammer: Dark Omen_ and _Interstate '76_. - Thanks to @CkNoSFeRaTU, added a workaround to prevent startup crashes in _Interstate '76_ and _Interstate '76: Nitro Pack_, making both games fully playable in D3D(5) mode. - Also thanks to @CkNoSFeRaTU, added a workaround to fix missing geometry in _COPS 2170: The Power of Law_. - Added a workaround to fix a black screen in the _Eschalon: Book I_ launcher (which uses D3D7). - Also thanks to some investigative work by @CkNoSFeRaTU, added a workaround to restore projected shadows in _Expendable_. - Fixed a regression introduced in v1.9 which could cause rendering issues with mixed D3D3-D3D5 device use. - Thanks to @CkNoSFeRaTU, identified and implemented a workaround to fix window creation behavior in _Star Trek: The Next Generation - Klingon Honor Guard_, which is now fully playable. Other early / D3D6 Unreal Engine titles may be positively impacted. - Fixed a rare texture upload quirk which caused minor rendering artifacts in _Z.A.R_. - Fixed various issues which prevented _Powerslide_ both from starting at all and rendering correctly (also thanks to @CkNoSFeRaTU for fixing a minor execute buffer oversight). - Cleaned up logging and reduced our dependency on proxied D3D objects coming from the underlying DDraw implementation, which somewhat improves overall CPU bound performance and reduces memory overhead. ## A short rant on the scalability of ancient D3D games on modern systems/GPUs Not long ago, I ran across a forum comment expressing surprise at how poorly some of the showcased games performed and asking something in the lines of (and I'm paraphrasing): \Shouldn't these ancient games run at 50.000 FPS on modern GPUs?\. The short answer to that is: \it's complicated.\ You see, there are two categories of ancient D3D games: - **a)** Games developed by people who understood that in order to implement efficient 3D rendering you have to respect some basic etiquette, not stall the GPU or move data around needlessly - **b)** Everything else Perhaps I'm a bit too harsh here, since it's true most games at the time were targeting and happy with 20-30 FPS on the hardware of their age, so doing things that would absolutely penalize performance on modern hardware like locking the back buffers repeatedly to blit (yes, _blit_, not _render_) one line of text at a time was not that great of a concern. Games in category **b)** will most definitely not run \at 50.000 FPS\ on any GPU, no matter how modern, simply because they were designed in a different time and played by very different rules. The good news, however, is that there are also quite a lot of category **a)** games out there which scale just fine on modern hardware and you can play them @8k without issues if you want, at least in theory. DDraw could never display anything above 2048x2048, as a reminder, and we honor that limit, though some patches/mods may work around it. The bottom line is: don't expect *every* ancient game to scale properly, not with any wrapper or even on modern Windows, because it's not really the norm, rather the happy exception of what is a very cursed set of D3D APIs with a whole lot of DDraw (2D) baggage dragging them down. In most cases, playing these type of games at their original intended resolutions will provide the best experience (and it also comes with a bonus etro\ feel of pixel gazing). I hope some of the newly supported titles in this release bring back good memories of the olden days, at least to some people. Until next time, I leave you with a bit of trivia from my favorite vehicular combat game: did you know _Interstate '76_ includes [radio poetry recitals](https://drive.proton.me/urls/XJ2ESFKTHR#3bUqfthWH2WU)?, ---------------------------------------------------------------------------------------- retroarch.mk 67bffed83e16250a32b6c87f5b18af4b30538657 # Version: Commits on May 20, 2026 ---------------------------------------------------------------------------------------- Revert unloop: refactor menu pacing decisions into a bitmask dispatcher\ This reverts commit 46f8b65aa8819ab79defb7a990bc672519d4db57., --------------------------------------------------------------------------------------------- easyrpg-player.mk 9a8e2ff633527412fdc7d6f29606e59d39488c32 # Version: Commits on May 20, 2026 --------------------------------------------------------------------------------------------- Merge pull request #3543 from Ghabry/sdl3 SDL3: Make it the default, further Emscripten & Android fixes, ------------------------------------------------------------------------------------- liblcf.mk 666e6c023696d4a45a67dd9ba879dbff7b0f69f3 # Version: Commits on May 20, 2026 ------------------------------------------------------------------------------------- Merge pull request #509 from Ghabry/issue-505 Fix incorrect UTF-8 -> 1252 conversion when using liblcf without ICU, ---------------------------------------------------------------------------------------- doomretro.mk 894c676d9f3a9319e792d8337f0a186abd030375 # Version: Commits on May 20, 2026 ---------------------------------------------------------------------------------------- Don't free SDL graphics on quit, -------------------------------------------------------------------------------------- yquake2.mk c4abbf53de924abd54cea033dd5883ef9605e892 # Version: Commits on May 19, 2026 -------------------------------------------------------------------------------------- soft: fix incorrect cherrypick in 521495fb, ------------------------------------------------------------------------------------------ xash3d-fwgs.mk 4c2302ec6ca25c2b9ac8592cf45a5d209b886b0b # Version: Commits on May 19, 2026 ------------------------------------------------------------------------------------------ engine: pass customization file fragments into IsSafeFileToDownload This function already validates customization filenames., ----------------------------------------------------------------------------------------------------- libretro-beetle-saturn.mk 88db90b6b8d5b98d23fd9db8ea008cb68be4b224 # Version: Commits on May 19, 2026 ----------------------------------------------------------------------------------------------------- libretro: restore 59.82650314089141 NTSC fps; document why it's not MAME's Reverts the constant change from 7d69396. That commit pointed the libretro NTSC refresh report at MAME's 59.764802 Hz on the reasoning that MAME / arcadeitalia / mdk.cab / datomatic all display 59.764802 for saturnjp and every stv romset, so beetle ought to agree. The flaw: it introduced a 0.1% report-vs-internal skew that beetle had never had. The pre-existing 59.82650314089141 is not arbitrary; it matches beetle's actual emulated frame rate to within 0.0007% (integer-rounding precision on MasterClock vs the exact 8x NTSC subcarrier x 61). Reporting MAME's number while continuing to emulate at 59.8261 internally means the libretro frontend believes one frame is 16.730 ms while the SCSP produces 16.715 ms of audio per frame -- a constant ~0.1% audio clock drift the resampler swallows silently but that is, mechanically, new drift the core did not have. The 59.764802 figure is downstream of a MAME screen-device simplification: saturn.cpp / stv.cpp both call set_raw with MASTER_CLOCK_320/8 regardless of whether dotsel selects the 320- or 352-dot active region, so MAME's screen pixel clock is pinned to the 320 crystal in both modes. Real Saturn hardware uses the PLL 315-5746 to switch the pixel-generating crystal on dotsel, and 352-dot mode runs off MASTER_CLOCK_352 (= 8x NTSC subcarrier), which is exactly what beetle's MasterClock-and-divisor chain models. Beetle is the strictly more hardware-accurate of the two here. Adopting MAME's number meant trading off Saturn-hardware fidelity for agreement with a known third-party approximation -- the wrong direction for an emulator core. Restore the literal 59.82650314089141. Wrap the else branch in braces and add a long comment block at the constant explaining (a) the derivation from MasterClock / cur_clock_div / HTimings / VTimings, (b) the 320-vs-352 internal-rate coincidence (the divisor 61|65 and line-length 455|427 switches cancel exactly), (c) why this is not MAME's 59.764802 and what the report/internal skew would cost. The comment is there so the next person noticing the discrepancy doesn't re-attempt the same patch and re-introduce the same skew. Also restore the \~180 frames at NTSC's 59.83 Hz\ backup-save- batching comment that 7d69396 retouched to 59.76 -- it's just a sanity check that 180 frames is roughly 3 seconds, but it reads consistently with the restored constant. The 7d69396 commit message also overclaimed \every other Saturn emulator that reports MAME's value already has the same skew\ -- that was speculation without verification and shouldn't have shipped., ----------------------------------------------------------------------------------------------- libretro-bluemsx.mk b76f27959a32e18aa04c619273152178fd0cf03b # Version: Commits on May 20, 2026 ----------------------------------------------------------------------------------------------- RomMapper: drop the last three sscanf() calls This file is not currently in Makefile.common and its public functions (romMapperGetDiskInfo / romMapperGetCasInfo / romMapperRomFromFile) have no callers, but the sscanf() calls were still hanging around in the tree. Replace all three with scan_hex() from Src/Utils/ScanParse for consistency with c7a1867 / 0d98df9. The original passed (int*) to sscanf %x, which expects (unsigned int*) - strict UB by the standard, harmless in practice on all targets where int and unsigned int share a representation. The replacement uses UInt32 directly (matching the type of the 'crc' value being compared against) so the implicit signed/unsigned compare is gone too., --------------------------------------------------------------------------------------------------- libretro-dosbox-pure.mk 9c5c68f446204b09b12f3f1936072e56d91476c0 # Version: Commits on May 20, 2026 --------------------------------------------------------------------------------------------------- Support for dynamic VHD disk images Installing an operating system will also automatically create dynamic VHD files from now on (which initially is just a few megabytes and grows as needed), ----------------------------------------------------------------------------------------------- libretro-easyrpg.mk 9a8e2ff633527412fdc7d6f29606e59d39488c32 # Version: Commits on May 20, 2026 ----------------------------------------------------------------------------------------------- Merge pull request #3543 from Ghabry/sdl3 SDL3: Make it the default, further Emscripten & Android fixes, --------------------------------------------------------------------------------------------- libretro-fbneo.mk 11cb0bba3575d59a0eb6998bbdcbd009e6169176 # Version: Commits on May 20, 2026 --------------------------------------------------------------------------------------------- (libretro) update files, ----------------------------------------------------------------------------------------------- libretro-flycast.mk f3047b2ef12d9e77a661826d663a46beffdc927f # Version: Commits on May 20, 2026 ----------------------------------------------------------------------------------------------- Virtual-On: Oratorio Tangram (JP) widescreen cheat, -------------------------------------------------------------------------------------------------- libretro-gearcoleco.mk e1a991d096e215736c0b4abc4768563b9e9f9cf7 # Version: Commits on May 20, 2026 -------------------------------------------------------------------------------------------------- Show database match status in ROM info, ------------------------------------------------------------------------------------------------- libretro-geargrafx.mk 1cf8c4e7a6680123c573be10da2f434944f14620 # Version: Commits on May 20, 2026 ------------------------------------------------------------------------------------------------- Show database match status in ROM info, -------------------------------------------------------------------------------------------------- libretro-gearsystem.mk afdfd1ec449409bace5b9fbe24b60d0090336192 # Version: Commits on May 20, 2026 -------------------------------------------------------------------------------------------------- Show database match status in ROM info, ----------------------------------------------------------------------------------------------------- libretro-mame2003-plus.mk 30f9b3fad906830db5dd653b04081b44c63895fa # Version: Commits on May 20, 2026 ----------------------------------------------------------------------------------------------------- Merge pull request #2021 from GoodLuckTrying/master Adjust ROM REGION_GFX3 addresses for makknightc & makknightg files, -------------------------------------------------------------------------------------------------------- libretro-mupen64plus-next.mk 98c1b0d877542b01314b3b04272282ba223b65b3 # Version: Commits on Dec 15, 2025 -------------------------------------------------------------------------------------------------------- Add webOS to Makefile / CI, ---------------------------------------------------------------------------------------------- libretro-ppsspp.mk 4e109dd6ae34cbcb39751bb7647d345569700161 # Version: Commits on May 20, 2026 ---------------------------------------------------------------------------------------------- Merge pull request #21710 from warmenhoven/warmenhoven/pr/libretro-build-fix fix libretro build, ---------------------------------------------------------------------------------------------- libretro-prboom.mk 648223372e24773821a2041e0c39728f723badf4 # Version: Commits on May 20, 2026 ---------------------------------------------------------------------------------------------- d_main, libretro: capture wipe-start screen from previous-frame snapshot Fixes issue #183. Loading a level under libretro direct-render shows distorted columns at the end of the screen-melt: the wipe animates from garbage downward instead of from the previous frame, and the residual 'old screen sliding off' bands at the bottom show whatever was in the frontend's recycled buffer rather than the title screen / intermission the user just left. Cause. Under direct-render, every I_StartDisplay swaps screens[0].data to a fresh buffer the frontend hands us via GET_CURRENT_SOFTWARE_FRAMEBUFFER. That buffer has never been written by us; the previous frame's pixels are in some other physical buffer the frontend has already rotated away from. D_Display calls wipe_StartScreen RIGHT AFTER I_StartDisplay returns and copies screens[0] (= fresh, unwritten FB) into wipe_scr_start. The melt then animates from junk. Reproduced with a 3-FB-rotating libretro host that fills each fresh FB with a magenta sentinel before handing it out. The captured frame on the wipe-start frame is 100% sentinel; the sentinel pixel count decays linearly over the next ~40 frames as the wipe progresses, with hundreds still leaking through on the 'first frame after the wipe' the user reports. Fix. Two coordinated changes: - libretro.c I_FinishUpdate's direct-render branch now copies direct_fb_data into screen_buf before unbinding. screen_buf is the persistent heap allocation that screens[0].data snaps back to between frames. Without this snapshot, under direct-render screen_buf is never written -- the renderer bypasses it on every frame. Cost: ~128 KB read + 128 KB write per frame, ~4.5 MB/s at 35 Hz, well inside cache. - d_main.c D_Display now runs wipe_StartScreen BEFORE I_StartDisplay rather than after. At this point screens[0] .data is still screen_buf (the previous I_FinishUpdate restored it), and screen_buf now holds the snapshotted previous frame. V_CopyRect from screens[0] therefore reads the actual previous-frame pixels. The fallback (non-direct-render) path is unaffected. There screens[0].data is screen_buf at all times and screen_buf is the actual render target across frames, so reading screens[0] either before or after I_StartDisplay returns the same content. Verified end-to-end with a libretro host that implements GET_CURRENT_SOFTWARE_FRAMEBUFFER, rotates between 3 physical framebuffers, and fills each fresh FB with a 0xF81F (magenta) sentinel: before: after: frame 31: 64000/64000 sentinels frame 31: 0 frame 50: 45104 sentinels frame 50: 0 frame 70: 494 sentinels frame 70: 0 Wipe visually melts from the title screen to the new level correctly. No regression on TNT / Doom 2 / chex.wad direct loads, m3u playlists, or the SIGIL + DOOM.WAD steering path., ------------------------------------------------------------------------------------------- libretro-ps2.mk 9ba54f89bb4ca78069bd2e049966fdb96cdeeab8 # Version: Commits on May 20, 2026 ------------------------------------------------------------------------------------------- Remove unwired hardware interrupt handlers These four interrupt handlers are defined but never reached — no direct caller, no scheduler/event-table registration (verified against the EE TESTINT dispatch in R5900.cpp and the IOP event tables), no address taken, and not produced by any token-pasting macro: - EEsif2Interrupt (sif2.cpp): the EE interrupt test wires SIF0 and SIF1 via TESTINT(DMAC_SIF0/SIF1, ...) but there is no TESTINT(DMAC_SIF2, ...), so this handler is never invoked. - usbIrq (IopIrq.cpp): would schedule IopEvt_USB, but nothing calls it; the USB IRQ path is not wired up. - psxDma4Interrupt / psxDma7Interrupt (IopDma.cpp): legacy async DMA completion handlers, superseded by the synchronous completion in psxDmaGeneric (which calls psxDmaInterrupt directly). Each can be restored if the corresponding path is ever wired up., ---------------------------------------------------------------------------------------------- libretro-stella.mk 0fb27a35e4bcaed78dc2157eff51be674f93d6dc # Version: Commits on May 20, 2026 ---------------------------------------------------------------------------------------------- Updated cart header files with more detailed comments about their schemes., --------------------------------------------------------------------------------------------------- libretro-swanstation.mk 62697276b95848bd35b9c7b81daab899a98e0789 # Version: Commits on May 20, 2026 --------------------------------------------------------------------------------------------------- core/d3d12: resolve adaptive downsampling and enable it Add DownsampleFramebufferAdaptive and route DownsampleFramebuffer to it when the mode is Adaptive (box otherwise). The resolve mirrors the D3D11/Vulkan path: copy the source sub-rect into mip 0, build the energy pyramid up the mips (first pass at level 1, mid pass after, reading mip[n-1] while writing mip[n]), blur the lowest mip into the weight texture, then composite the colour pyramid by the weight into the display texture at the view offset. Per-mip reads/writes use the hand-built per-subresource views and barriers from the foundation commit; the SmoothingUBO is pushed as root constants per level. Set m_supports_adaptive_downsampling so GetDownsampleMode stops degrading a user's Adaptive selection to Box. The composite lands at (left, top) in the display texture, which the host-display view-rect blit already handles, so no flicker regression. Falls back to presenting the source rect directly if any adaptive PSO is null, matching the box-filter guard.,
Hancock33
added a commit
to Hancock33/batocera.piboy
that referenced
this pull request
Jun 14, 2026
----------------------------------------------------------------------------------- cemu.mk fe70fdcfe5ced5a4032b7c4561f7cad6f011314b # Version: Commits on Jun 13, 2026 ----------------------------------------------------------------------------------- debugger: Don't clear register views when continuing to run code, ------------------------------------------------------------------------------------------ duckstation.mk cfde5bf5c3418d3ae4be566dc21dca467da1c5b5 # Version: Commits on Jun 07, 2026 ------------------------------------------------------------------------------------------ Achievements: Move achievement pinning to database, -------------------------------------------------------------------------------------- openmsx.mk 3a40a511c97cbf42f86aa90394a4fe07ad455cd3 # Version: Commits on Jun 13, 2026 -------------------------------------------------------------------------------------- corrections and additions to the romdb, ---------------------------------------------------- pcsx2.mk v2.7.416 # Version: Commits on Jun 13, 2026 ---------------------------------------------------- - [Misc: clean up COM code](PCSX2/pcsx2#14562) , ------------------------------------------------------------------------------------- ppsspp.mk 14dc5a51560628581c023235e9d35ec28fb14b6a # Version: Commits on Jun 14, 2026 ------------------------------------------------------------------------------------- Merge pull request #21825 from hrydgard/ridge-racer-sprite Fix the ugly line on Ridge Racer lens flares, ------------------------------------------------------------------------------------ rpcs3.mk 4fed5e7b88d78c03359009377b740a3c826505a7 # Version: Commits on Jun 14, 2026 ------------------------------------------------------------------------------------ Fix iso integrity log message, ----------------------------------------------------------------------------------- ymir.mk bca07409fdd89d5e136356a063da71d9874d3424 # Version: Commits on Jun 13, 2026 ----------------------------------------------------------------------------------- feat(sys): Use GCD to ensure SH2 overclocking doesnt introduce slight clock errors to other components, ------------------------------------------------------------------------------------- ikemen.mk c42967d13e5b229f7dcf9450f471fd2a15d5858f # Version: Commits on Jun 13, 2026 ------------------------------------------------------------------------------------- Merge pull request #3705 from SuperFromND/bgdef-modelrotate feat: `modelrotate` for 3D BGDefs, --------------------------------------------------- ruffle.mk v0.3.0 # Version: Commits on Jun 14, 2026 --------------------------------------------------- ## What's Changed * avm2: Fixes to Error's prototype by @Lord-McSweeney in ruffle-rs/ruffle#23719 * aur: Update maintainers for ruffle-nightly-bin by @kjarosh in ruffle-rs/ruffle#23727 * Add testutils CLI by @Dinnerbone in ruffle-rs/ruffle#23677 * ci: Use correct npm dist-tag for nightly and stable releases by @kjarosh in ruffle-rs/ruffle#23728 * desktop: Add Rust stack trace to panic reports by @kjarosh in ruffle-rs/ruffle#23714 * avm2: Fix new Video(0, 0) to use default size by @1bugproof in ruffle-rs/ruffle#23708 * avm2: Stop assuming Object is an enum by @SuchAFuriousDeath in ruffle-rs/ruffle#23725 * Enable jpegxr on Linux Nightlies by @Fancy2209 in ruffle-rs/ruffle#23741 * avm1: Fix behavior of `Sound` ownership by @ChrisCPI in ruffle-rs/ruffle#23733 * chore: Bump the npm-minor group in /web with 7 updates by @dependabot[bot] in ruffle-rs/ruffle#23748 * chore: Bump enumset to 1.1.13 by @torokati44 in ruffle-rs/ruffle#23753 * chore: Bump cssnano to 8.0.1 and cssnano-preset-advanced to 8.0.1 in /web by @torokati44 in ruffle-rs/ruffle#23752 * chore: Run `npm audit fix` in web/ by @torokati44 in ruffle-rs/ruffle#23742 * video/vp6: Init nihav decoder with encoded size, not display size by @SuchAFuriousDeath in ruffle-rs/ruffle#23665 * web/audio: Pin AudioContext to 44.1 kHz by @SuchAFuriousDeath in ruffle-rs/ruffle#23701 * web: Fix MVP wasm build by explicitly disabling post-MVP features by @SuchAFuriousDeath in ruffle-rs/ruffle#23756 * avm2: Set dobj as transformed_by_script on transform `colorTransform` and `matrix` setters by @ChrisCPI in ruffle-rs/ruffle#23759 * avm2: Return ArgumentError instead of panicking on invalid ShaderJob target by @SuchAFuriousDeath in ruffle-rs/ruffle#23763 * chore: Migrate to current Node.js 26 from 25 for testing by @torokati44 in ruffle-rs/ruffle#23661 * avm2: Print full error details when logging caught error by @Lord-McSweeney in ruffle-rs/ruffle#23726 * avm2: Remove mostly unused `crate::avm2::string` by @Lord-McSweeney in ruffle-rs/ruffle#23773 * wstr: Remove unsafe usage from str_eq by @kjarosh in ruffle-rs/ruffle#23774 * desktop: Remove fontconfig from Windows and add fontconfig-dlopen by @kjarosh in ruffle-rs/ruffle#23768 * chore: Bump nihav-vp6 to latest git master by @torokati44 in ruffle-rs/ruffle#23765 * chore: Bump eslint-plugin-jsdoc from 62.9.0 to 63.0.0 in /web by @dependabot[bot] in ruffle-rs/ruffle#23781 * chore: Bump the npm-minor group across 1 directory with 7 updates by @dependabot[bot] in ruffle-rs/ruffle#23779 * chore: Fix a bunch of typos (mostly in comments) by @torokati44 in ruffle-rs/ruffle#23782 * chore: Bump qs and express in /web by @dependabot[bot] in ruffle-rs/ruffle#23784 * avm2: Fix stack trace for context3DCreated event handler by @Lord-McSweeney in ruffle-rs/ruffle#23745 * avm2: Verify that lazy namespace is actually a Namespace in the verifier by @Lord-McSweeney in ruffle-rs/ruffle#23777 * tests: Begin adding test coverage for signatures of flash.events classes by @Lord-McSweeney in ruffle-rs/ruffle#23786 * ci: Generate AVM2 report only for nightlies by @kjarosh in ruffle-rs/ruffle#23787 * avm1: Clear stack only between frames by @kjarosh in ruffle-rs/ruffle#23795 * avm1: Introduce AVM1 playerglobal by @Dinnerbone in ruffle-rs/ruffle#23730 * core: Fix movie clip looping by @kjarosh in ruffle-rs/ruffle#23802 * tests: Add --skip-no-player to testutils execute by @kjarosh in ruffle-rs/ruffle#23805 * tests: Trace warnings if enabled when executing tests by @kjarosh in ruffle-rs/ruffle#23804 * avm1: Do not trace an error on with(undefined)/with(null) by @kjarosh in ruffle-rs/ruffle#23809 * core: Normalize \blank\ target to \_blank\ in getURL/navigateToURL by @SuchAFuriousDeath in ruffle-rs/ruffle#23792 * avm1: Remove magic properties and this from SWF4 by @kjarosh in ruffle-rs/ruffle#23806 * avm2: Implement a number of missing `flash.events` classes by @Lord-McSweeney in ruffle-rs/ruffle#23812 * tests: Use FP's output in avm2/graphics_draw_triangles by @kjarosh in ruffle-rs/ruffle#23818 * chore: Bump josStorer/get-current-time from 2.1.2 to 2.1.3 by @dependabot[bot] in ruffle-rs/ruffle#23820 * chore: Bump the npm-minor group in /web with 2 updates by @dependabot[bot] in ruffle-rs/ruffle#23822 * chore: Bump the cargo-minor group with 3 updates by @dependabot[bot] in ruffle-rs/ruffle#23823 * chore: Bump webdriverio package family to 9.27.2 in web/ by @torokati44 in ruffle-rs/ruffle#23828 * avm2: More fixes to signatures of `flash.events` classes by @Lord-McSweeney in ruffle-rs/ruffle#23833 * avm1: Support property syntax in delete2 by @kjarosh in ruffle-rs/ruffle#23834 * 🤖 core: Move flash.text.engine TextLine onto its own DisplayObject by @doctorpangloss in ruffle-rs/ruffle#23817 * core: Extract run_file_dialog helper to reduce boilerplate in file dialog loaders by @SuchAFuriousDeath in ruffle-rs/ruffle#23831 * core/render: Add support for loading JPEGXR images by @ChrisCPI in ruffle-rs/ruffle#23789 * tests: Add asc compiler for compiling AVM2 tests by @kjarosh in ruffle-rs/ruffle#23794 * chore: Bump tmp from 0.2.5 to 0.2.7 in /web by @dependabot[bot] in ruffle-rs/ruffle#23843 * refactor: Enum-map related improvements by @SuchAFuriousDeath in ruffle-rs/ruffle#23846 * wgpu: Yeet the copy_srgb shader and pipeline by @SuchAFuriousDeath in ruffle-rs/ruffle#23827 * tests: Add a failing visual test for scale_rotation_cache by @torokati44 in ruffle-rs/ruffle#23796 * avm2: Minor performance improvements by @Lord-McSweeney in ruffle-rs/ruffle#23840 * core: Include `ruffle_render/jpegxr` in `jpegxr` feature by @ChrisCPI in ruffle-rs/ruffle#23852 * chore: Clippy beta fixes by @danielhjacobs in ruffle-rs/ruffle#23762 * ci: Enable fontconfig-dlopen in the macOS Rust tester job by @torokati44 in ruffle-rs/ruffle#23855 * core: Make loaded image MovieClips work the way SWF >= 5 movies do wrt. scale and rotation caching by @torokati44 in ruffle-rs/ruffle#23838 * avm2: Refactor draw_triangles_internal by @SuchAFuriousDeath in ruffle-rs/ruffle#23761 * core: Rework infrastructure around the FileDialogResult trait by @SuchAFuriousDeath in ruffle-rs/ruffle#23844 * text: Prevent measuring text twice during layout by @kjarosh in ruffle-rs/ruffle#23862 * core: Simplify code in MovieClip.event_dispatch by @kjarosh in ruffle-rs/ruffle#23867 * swf: Add support for PlaceObject/allEventFlags by @kjarosh in ruffle-rs/ruffle#23868 * wstr: Implement Pattern for owned [u8; N] and [u16; N] arrays by @SuchAFuriousDeath in ruffle-rs/ruffle#23858 * ci: Don't enable fontconfig-dlopen in the macOS Rust tester job by @torokati44 in ruffle-rs/ruffle#23873 * ci: Enable full LTO for releases by @kjarosh in ruffle-rs/ruffle#23863 * web: Polyfill document.embeds to return ruffle-embeds too by @danielhjacobs in ruffle-rs/ruffle#22449 * web: Support named access on document.embeds by @danielhjacobs in ruffle-rs/ruffle#23878 * core: Add MultiFileDialogResult and display_file_open_dialog_multiple by @SuchAFuriousDeath in ruffle-rs/ruffle#23866 * avm2: Add type enum for error 2006 by @ChrisCPI in ruffle-rs/ruffle#23883 * chore: Bump the npm-minor group in /web with 11 updates by @dependabot[bot] in ruffle-rs/ruffle#23885 * chore: Bump zbus, zvariant, toml crates by @torokati44 in ruffle-rs/ruffle#23887 * chore: Bump the cargo-minor group across 1 directory with 6 updates by @dependabot[bot] in ruffle-rs/ruffle#23886 * chore: Cargo.lock maintenance by @torokati44 in ruffle-rs/ruffle#23888 * core: Do not dispatch clip events not present in allEventFlags by @kjarosh in ruffle-rs/ruffle#23869 * Fix panic on writeback from empty CPU dirty region (prevalent in Earn to Die) by @n-raine in ruffle-rs/ruffle#23898 * avm2: Implement most of the version gating for `flash.events` classes by @Lord-McSweeney in ruffle-rs/ruffle#23836 * avm2: More minor crossbridge performance improvements by @Lord-McSweeney in ruffle-rs/ruffle#23849 * tests: add `known_failure` support to audio assertions by @moulins in ruffle-rs/ruffle#23861 * avm2: Fix setProgramConstantsFromByteArray implementation by @SuchAFuriousDeath in ruffle-rs/ruffle#23901 * frontend-utils: Use native TLS instead of rustls by @kjarosh in ruffle-rs/ruffle#23894 * chore: Bump openssl from 0.10.73 to 0.10.80 by @dependabot[bot] in ruffle-rs/ruffle#23902 * chore: Additional Rust dependency version bumps by @torokati44 in ruffle-rs/ruffle#23903 * avm1: Match Flash broadcaster prototype enumeration order by @SuchAFuriousDeath in ruffle-rs/ruffle#23892 * avm1: Stub several classes and properties by @SuchAFuriousDeath in ruffle-rs/ruffle#23899 * avm1: Define `constructor` as own property on system class objects by @SuchAFuriousDeath in ruffle-rs/ruffle#23893 * avm2: Add a field to ops instead of adding separate integral variants by @Lord-McSweeney in ruffle-rs/ruffle#23923 * chore: Bump the npm-minor group in /web with 6 updates by @dependabot[bot] in ruffle-rs/ruffle#23925 * avm1: Xmlsocket connect null fix by @SuchAFuriousDeath in ruffle-rs/ruffle#23931 * Slice logic cleanup, take 2 by @moulins in ruffle-rs/ruffle#23676 * core: Make use of `istr!` macro in several places by @SuchAFuriousDeath in ruffle-rs/ruffle#23935 * core: Remove unnecessary `dyn` usage by @SuchAFuriousDeath in ruffle-rs/ruffle#23936 * core: Use __jcvt() intrinsic on AArch64 for f64→i32 conversion by @SuchAFuriousDeath in ruffle-rs/ruffle#23937 * chore: Bump shell-quote from 1.8.3 to 1.8.4 in /web by @dependabot[bot] in ruffle-rs/ruffle#23941 * frontend-utils: Allow switching reqwest back to rustls by @torokati44 in ruffle-rs/ruffle#23947 * avm1: Remove \Target not found\ trace by @kjarosh in ruffle-rs/ruffle#23946 * avm2: Fix serializing invalid Date objects by @Lord-McSweeney in ruffle-rs/ruffle#23951 * swf: Seek to glyph shape offsets when reading DefineFont2/3 by @kjarosh in ruffle-rs/ruffle#23949 * + libssl-dev, openssl-devel by @sombraguerrero in ruffle-rs/ruffle#23953 * avm1: Support SWF4 target paths properly by @kjarosh in ruffle-rs/ruffle#23948 * chore: Bump WebdriverIO to 9.28.0 in web/ by @torokati44 in ruffle-rs/ruffle#23954 * swf: Fix underflow on keyPress clip action without key code by @kjarosh in ruffle-rs/ruffle#23958 * swf: Fix overflow while reading convolution filter by @kjarosh in ruffle-rs/ruffle#23961 * swf: Fix underflow/OOM errors when decompressing by @kjarosh in ruffle-rs/ruffle#23962 * core: Add AvmString::split_dependent by @SuchAFuriousDeath in ruffle-rs/ruffle#23955 * swf: Fix potential OOM in DefineSceneAndFrameLabelData by @kjarosh in ruffle-rs/ruffle#23960 * avm1: Fix SetTarget2 movie clip selection by @kjarosh in ruffle-rs/ruffle#23964 * chore: Update translations from Crowdin by @kjarosh in ruffle-rs/ruffle#23967 * avm1: Handle edge values in setProperty() by @kjarosh in ruffle-rs/ruffle#23966 * avm2: Simplify AMF serialization logic by @Lord-McSweeney in ruffle-rs/ruffle#23956 * avm2: Remove redundant method `PropertyMap::insert_with_namespace` by @Lord-McSweeney in ruffle-rs/ruffle#23969 * chore: Bump esbuild from 0.28.0 to 0.28.1 in /web by @dependabot[bot] in ruffle-rs/ruffle#23968 * chore: Update translations from Crowdin by @kjarosh in ruffle-rs/ruffle#23970 * refactor: Use api-report as dependency and move stub-report to tools/ by @kjarosh in ruffle-rs/ruffle#23922 * avm1/avm2: Add AMF NetConnection Array serialization known failures by @danielhjacobs in ruffle-rs/ruffle#23957 * tests: Add avm1/set_target_2_swf5 test by @kjarosh in ruffle-rs/ruffle#23965 ## New Contributors * @doctorpangloss made their first contribution in ruffle-rs/ruffle#23817 **Full Changelog**: ruffle-rs/ruffle@v0.2.0...v0.3.0, --------------------------------------------------------------------------------------- thextech.mk db3a01db31435fc4524bb42ab81d99b3f6aa0807 # Version: Commits on Jun 14, 2026 --------------------------------------------------------------------------------------- changelog.txt: move MDX to 1.3.7.3 changelog, ------------------------------------------------------------------------------------------- jazz2-native.mk a09fd6b6e54c42c9e5c622704b14a6ae32e06d1c # Version: Commits on Jun 13, 2026 ------------------------------------------------------------------------------------------- Tilemap draw call aggregation, improved player color customization, ----------------------------------------------------- ledspicer.mk 0.7.6 # Version: Commits on Jun 14, 2026 ----------------------------------------------------- LEDSpicer v0.7.6 - Release Notes Release Date June 14, 2026 Overview This release focuses on critical stability improvements and bug fixes for crafted profile handling and memory management. � Bug Fixes Crafted Profile System Fixed use-after-free crash when loading the same crafted profile twice Improved profile caching - Crafted profiles are now properly cached by game name instead of being rebuilt on every request Fixed profile stack history - FinishLastProfile now correctly steps back one profile at a time through the history stack Flag Handling Corrected FORCE_RELOAD flag - Profile reload now properly ignores cache and rebuilds in place Corrected REPLACE flag - Profile replacement logic now works correctly on the craft/load path � Changes Configuration Updates Configuration values now use proper boolean capitalization (True/False instead of true/false) Enhanced configuration defaults in ledspicer.conf Code Quality Refactored profile management to eliminate redundant cache operations Improved memory management with proper reference counting for replaced profiles Enhanced logging for better debugging of profile lifecycle Documentation & Branding Updated README with improved project description and branding Enhanced feature list and typical use cases documentation Updated copyright year to 2026 CI/CD Updated GitHub Actions checkout action from v4 to v6 Package Updates Updated version across all package managers (Debian, RPM, Arch) 🔧 Technical Details Changed default platform parameter handling in craftProfile() Introduced replaceProfileReferences() for cleaner memory management Optimized cache key handling for platform templates vs. crafted profiles ---------------------------------------------------------------------------------------- retroarch.mk 2669eaad7b4318c415028e3d2feaf9d7f092885e # Version: Commits on Jun 14, 2026 ---------------------------------------------------------------------------------------- Fetch translations from Crowdin, ---------------------------------------------------------------------------------------- doomretro.mk e011e4abf085fbbf5d7c9ba862bab40f48543bed # Version: Commits on Jun 14, 2026 ---------------------------------------------------------------------------------------- Fix double use of uppercase(), -------------------------------------------------------------------------------------- yquake2.mk dcda9144d34a5d76ff462675ff05d8acde30ecfe # Version: Commits on Jun 13, 2026 -------------------------------------------------------------------------------------- models: fix MDR uncompressed-frame heap overflow from byte/float count mix-up, ------------------------------------------------------------------------------------------ xash3d-fwgs.mk 1e31fbcd513bdabd557a098fcdd06fa2037cd99e # Version: Commits on Jun 14, 2026 ------------------------------------------------------------------------------------------ ref: shut up DecalShoot about decals must hit mod_brush This is an annoying message that's caused by the game code. Decals, without custom renderer, cannot be rendered on non-brush entities, and everybody knows that anyway., ------------------------------------------------------------------------------------------------------- libretro-beetle-pce-fast.mk 718dd0abb9ffcd95308ae79594e86d15148d7a2f # Version: Commits on Jun 14, 2026 ------------------------------------------------------------------------------------------------------- libretro: add zero-copy software-framebuffer direct render path Use RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER so the VDC can render straight into the frontend's (often GPU-mapped) framebuffer, removing the surface->frontend copy that video_cb otherwise performs. The renderer already writes through a single MDFN_Surface target whose pixels/pitch it dereferences at render time (target = surface->pixels + (frame_counter-14)*surface->pitch, all Mix*/Draw* honour surface->pitch), so the direct path needs no renderer changes: in retro_run, before Emulate, request a framebuffer; if granted, repoint surf->pixels/pitch at it for the frame, render, ship video_cb from there with the framebuffer's pitch, then restore the persistent fallback surface. Why this is safe: - The VDC renderer is write-only on the target surface (verified: every reference is a store), so an uncached framebuffer (no RETRO_MEMORY_TYPE_CACHED) is fine; access_flags is WRITE only. - We do NOT rely on persistent buffer contents: for every scanline in the shipped rect [DisplayRect.y, +h) the renderer writes the whole line (Mix + DrawOverscan sides, or a full DrawOverscan in burst/blank), so a frontend that rotates buffers per frame yields no garbage. - Only used when the granted buffer is RGB565 (our native output), large enough (>= FB_WIDTH x FB_HEIGHT), and has an even byte pitch; otherwise the calloc'd fallback surface is used unchanged. - Frameskip frames don't request a buffer (video_cb(NULL,...) as before). - If the frontend doesn't implement the call, the result is latched off (fb_direct_supported) so we probe only once. surf->pixels/pitch are always restored after the frame, so the fallback surface is intact whenever a frame declines the framebuffer. Pitch is taken from the framebuffer (bytes -> uint16), not assumed to be FB_WIDTH. (The old psp_hw_render branch rendered its SW path into its own surface and used the PSP GU for HW; it predates this env call, so there was no code to port - only the confirmation that the renderer funnels through one retargetable surface pointer, which makes this drop-in.) Verified: full clean build (make -j4, exit 0, .so, 0 warnings); libretro.c passes -std=gnu89 -Werror=declaration-after-statement., -------------------------------------------------------------------------------------------------- libretro-beetle-psx.mk d460f8342060526678e7fd8222048324c2a80d86 # Version: Commits on Jun 14, 2026 -------------------------------------------------------------------------------------------------- gpu: SSE2-direct Gouraud RGB lane build in DrawSpanVec_NT (no stack roundtrip) Replaces the scalar-loop-then-_mm_loadu_si128 Gouraud channel build with direct SSE2 lane construction. The original for (l = 0; l < step; l++) { R8[l] = (uint16_t)CHAN(cr, dr, l); G8[l] = (uint16_t)CHAN(cg, dg, l); B8[l] = (uint16_t)CHAN(cb, db, l); } R = _mm_loadu_si128((const __m128i*)R8); /* + G, B */ lowered under gcc 13 -O3 to per-lane leal (cr + dr*l) into GPRs, store to stack at R8[l], movd back to xmm, punpck-chains. This shape was the dominant spill source in the GOURAUD-on (G1) non-textured (T0) hot loops -- in the unpatched gpu.s, the .L31928 family contained loops with 97-116 xmm operations and 38-39 stack writes each, across every T0 + (BMopaque | BMavg | BMaddq | BMadd) blend specialization. The contributing mechanism: the per-lane GPR live ranges produced by the scalar loop straddle the dense SIMD blend body that follows, so the register allocator chooses to materialize each lane's GPR result on the stack before reloading into xmm. Replacing the loop with straight SSE2 ops (vbase broadcast + step vectors + paddd + psrld + packssdw) keeps the channel intermediates xmm-resident across the entire blend body. Approach: lane l holds ((base + d*l) >> 24). d2..d7 are produced via paired adds (cheaper than the imuls gcc would pick for d * l, and the 32-bit lanes have plenty of headroom -- worst-case dr*7 has fewer than 25 bits given the Gouraud range). After the >> 24 shift each lane is <= 255, so the final packs_epi32 down to u16x8 cannot saturate. setr_epi32 calls fold to a single mov-from-rodata when dr/dg/db are constant per span (the common case at the polygon level), and to a small insert chain otherwise. Spill counts (gcc 13.3, -O3, x86_64): function before after G_Command_DrawPolygon_NV4_G1_T0_BMopaque* spills=39 spills=0 G_Command_DrawPolygon_NV4_G1_T0_BMavg* spills=39 spills=0 G_Command_DrawPolygon_NV4_G1_T0_BMaddq* spills=39 spills=0 G_Command_DrawPolygon_NV4_G1_T0_BMadd* spills=39 spills=0 G_Command_DrawPolygon_NV4_G1_T0_BMsub* spills=39 spills=0 The remaining spill leaders shift to the T1 (textured) variants at xmm=16 spills=28-30; those follow the same scalar-then-pack pattern on UV coordinates and are a separate follow-up. End-to-end bench (x86_64 Linux, gcc 13.3, full DrawSpanVec_NT BMopaque path -- Gouraud build + dither-off + pack RGB565 + bg load + write-back, 100000 spans x 320 pixels): -O3: 21.0 -> 14.8 ms (1.42x) 1520 -> 2165 Mpix/s -O2: 21.9 -> 15.8 ms (1.39x) 1455 -> 2028 Mpix/s Bit-exact across 500000 random Gouraud lane verifications (dr range 10..24 bits, both step=4 and step=8, plus edge cases at dr=0 and dr=0xFFFFFFFF) and 200 random spans rendered into VRAM. The NEON / scalar path is unchanged. On NEON, the original `vld1q_u16(R8)` plus per-lane access via vget_lane_u8 lowers to direct register extracts without the stack roundtrip the SSE2 path saw, so the same gcc lowering bug doesn't apply. ARMv7 NEON specifically may need its own audit but the codegen on AArch64 doesn't show comparable spill density., ---------------------------------------------------------------------------------------------- libretro-fake08.mk 814991a2571ad3970e386cef48f3b148aa1c27b9 # Version: Commits on Jun 13, 2026 ---------------------------------------------------------------------------------------------- Merge pull request #267 from ysamlan/fix-vibrato-modulation Fix vibrato effect: correct sawtooth to triangle wave modulation, ------------------------------------------------------------------------------------------------ libretro-gambatte.mk e99e1bd9b91de67ac12c77c3679c85447c26e8c8 # Version: Commits on Jun 14, 2026 ------------------------------------------------------------------------------------------------ ppu: extend BG palette expansion to the CGB fast path Follow-up to a991736 (\ppu: precomputed BG palette expansion for DMG fast path\). That commit treated only doFullTilesUnrolledDmg; the CGB renderer at doFullTilesUnrolledCgb had the same eight-dependent- load gather shape but with per-tile palette selection driven by the attribute byte (bgPalette + (nattrib & 7) * 4) and was deferred pending an L1-pressure measurement against the [8][256][4] table. Microbench result: the working set was a non-issue. Even with all 8 palettes cycling per tile (worst case -- every attribute byte different), the 32 KiB total table is L1-friendly because the access pattern (16 bytes per palette per tile) hits the same line repeatedly within a tile. Typical CGB scenes use only a few palettes per frame, making the hot working set much smaller than the full table. Microbench (full do-while incl. ntileword and nattrib recompute, 5000 frames x 144 lines x 20 tiles, x86_64 gcc 13.3 -O3): Scenario A: 1 palette used (typical): old: 53.0 ms (272 Mtiles/s) -> new: 27.5 ms (523 Mtiles/s) 1.93x Scenario B: 8 palettes cycling (worst-case for L1): old: 53.0 ms (272 Mtiles/s) -> new: 27.2 ms (529 Mtiles/s) 1.95x Bit-exact across 50000 random trials. Implementation: - bgPaletteExpanded changes shape from [256][4] to [8][256][4]. Size goes from 4 KiB to 32 KiB (u32 build) / from 2 KiB to 16 KiB (VIDEO_RGB565 / VIDEO_ABGR1555 build). The DMG renderer indexes the [0] slot; the CGB renderer indexes [nattrib & 7]. - refreshBgPaletteExpansion gains a unsigned palette_id argument. DMG-mode callers pass 0; the CGB hooks pass the slot affected by the BCPD write (index >> 3). Refreshing one palette costs 256 iterations of the 4-lane inner expansion -- about 1024 stores -- so per-palette refresh keeps writes proportional to the work the palette change actually invalidated. - refreshPalettes (the bulk-reload path used by loadState, swapToDMG, the colour-correction setters) rebuilds all 8 slots in CGB mode and just slot 0 in DMG mode. doCgbBgColorChange (the one-entry-at-a-time BCPD path) rebuilds the affected slot. dmgBgPaletteChange (BGP register) rebuilds slot 0. These are the only paths that write ppu.bgPalette in the codebase. Codegen (gcc 13.3 -O3, x86_64): both inner loops now have the same shape -- the do-while body lowers to four movdqu pairs per unrolled iteration (gcc unrolls by 2, processing 16 pixels per loop body), plus the nattrib/ntileword recompute scalar tail. The CGB path's 32 KiB worst case is still smaller than every modern L1d (x86 32-48 KiB, ARM Cortex-A53/A72 32 KiB), and the typical hot working set is one or two 4 KiB slots., -------------------------------------------------------------------------------------------------- libretro-gearcoleco.mk e6c987725eb2ac6dc0edc85b0dea30fdc7e938d7 # Version: Commits on Jun 14, 2026 -------------------------------------------------------------------------------------------------- Update readme, ------------------------------------------------------------------------------------------------- libretro-geargrafx.mk 31e8fb7d94e4e4b723790fbd19a02760df5ac816 # Version: Commits on Jun 14, 2026 ------------------------------------------------------------------------------------------------- Update readme, -------------------------------------------------------------------------------------------------- libretro-gearsystem.mk a4f2cf7fdcb946ca3d150206c1b3e426fabd59c1 # Version: Commits on Jun 14, 2026 -------------------------------------------------------------------------------------------------- Update readme, --------------------------------------------------------------------------------------------- libretro-opera.mk 64f35570aad94992f1122a810af6cc932862505a # Version: Commits on Jun 14, 2026 --------------------------------------------------------------------------------------------- MADAM: ignore bottom 2 bits in CCB processing The bottom two bits of the address bus aren't even wired up to MADAM. Most titles use properly aligned addresses but not all. This patch ensures the pointers read from the CCB and the CCB address itself are masked to align them to word boundry. Fixes Ballz and possibly other titles that had unaligned addresses., ---------------------------------------------------------------------------------------------------- libretro-parallel-n64.mk 2eff7ef440c8411d6b8670ea32d9b5a40492db12 # Version: Commits on Jun 13, 2026 ---------------------------------------------------------------------------------------------------- libretro: only auto-force HLE graphics when the RSP plugin is on auto The core forced the GFX task through the HLE emitter whenever the active video plugin was not the one paired with the build's native low-level path (angrylion for the threaded software build, parallel for the Vulkan build). That override ran unconditionally, so selecting the cxd4 RSP explicitly while using a different video plugin silently executed the HLE display-list emitter instead of the requested low-level microcode, contradicting the user's choice and making the two paths impossible to compare. Gate the override on the RSP plugin being left on \auto\: an explicit cxd4 or parallel selection is now honoured as low-level, while auto keeps the previous convenience fallback., ---------------------------------------------------------------------------------------------- libretro-ppsspp.mk 14dc5a51560628581c023235e9d35ec28fb14b6a # Version: Commits on Jun 14, 2026 ---------------------------------------------------------------------------------------------- Merge pull request #21825 from hrydgard/ridge-racer-sprite Fix the ugly line on Ridge Racer lens flares, ---------------------------------------------------------------------------------------------- libretro-prboom.mk 84cd28bd2d58bbfc8a2e48997862fefcac132c6e # Version: Commits on Jun 14, 2026 ---------------------------------------------------------------------------------------------- Revert the above-eye 3D-floor water chain (translucent ceiling approach) This reverts the four-commit chain that drew a swimmable water surface seen across an opening from below it: 1ae278f draw above-eye 3D-floor water as a translucent ceiling plane bb17de3 tint the submerged volume for above-eye 3D-floor water 554a06b blend 3D-floor water at the map's alpha instead of fixed 50/50 4327cc2 give 3D-floor water a solid colour when its flat is a bare marker The approach is structurally wrong and cannot be salvaged by tuning. It draws the water as a single flat screen-space translucent span. But the far wall of the flooded room spans from its floor (~z -16) to its ceiling (z 448) within one screen column, and only the part below the surface (z 138) is underwater. A flat span cannot express 'underwater up to the waterline, air above it' when the far geometry crosses the surface mid-column, so the tint covers far above the real water line regardless of clamp direction or alpha. The result reads as a blue sheet hung over the top of the opening, not a water surface -- visibly worse than drawing nothing. Correct 3D-floor water needs the surface clipped as a true horizontal plane against the per-column far geometry (a real waterline), which is a substantial renderer feature, not a span tweak. Reverting until that exists rather than shipping a broken effect. Restores the exact pre-chain state (bb842a3); vanilla demo hash unchanged (ab8eb93a72c8a66b)., ------------------------------------------------------------------------------------------- libretro-ps2.mk 9b74364f0111b2159a47b8a3b12adbb2e255604f # Version: Commits on Jun 14, 2026 ------------------------------------------------------------------------------------------- common/GS: load and run on Windows 8 by resolving placeholder APIs at runtime The fastmem area (HostSys.cpp) and the GS local-memory mirror (GS.cpp) called VirtualAlloc2 / MapViewOfFile3 / UnmapViewOfFile2 directly. These are Windows 10 1803+ exports, so as ordinary imports they land in the DLL's import table and the loader cannot resolve the module on Windows 8 / 8.1 - the whole core fails to load before any code runs, even though both subsystems can operate without those APIs. Resolve the three placeholder APIs once via GetProcAddress from kernelbase.dll (added as PCSX2_HasPlaceholderAPIs in RedtapeWindows.h) so they stay out of the import table, and branch on availability: - HostSys fastmem: if the APIs are missing, Create() returns null and vtlb_Core_Alloc falls back to no-fastmem mode (the same path already taken when a 4 GB region can't be placed). Map()/Unmap() call through the resolved pointers, which are guaranteed present because the area only exists when Create() found all three. - GS wrapped memory: GSLocalMemory cannot tolerate a null mapping (it memsets the buffer immediately), so a Win8 fallback is provided that reserves a contiguous repeat*size hole, releases it, and maps the file view into each slot with MapViewOfFileEx (available since Windows 2000). A flag records which path was used so the matching teardown runs in GSFreeWrappedMemory. On Windows 10+ the resolver finds all three APIs on first use and the existing placeholder workflow runs exactly as before - only the otherwise-unreachable absence path is new - so behavior there is unchanged. No effect on non-Windows builds. NOTE: unverified on a real Windows toolchain. The added code was compile-checked against a Windows target with MinGW (typedefs, call shapes and control flow), but the full core was not built and this has not been run on Windows 8 or Windows 10. Needs a Win10 SDK build and a runtime check on both before merging., --------------------------------------------------------------------------------------------------- libretro-snes9x-next.mk 305ab6f1ab2c8dd03a70659a43001ec39bf9ac23 # Version: Commits on Jun 14, 2026 --------------------------------------------------------------------------------------------------- tile: register-only palette gather in TILE_ROW_PRE_SSE2 (no stack roundtrip) Replaces the storel-to-stack + 8 byte-loads + align-load palette gather with pextrw to GPR + pinsrw straight back into xmm. Touches the central TILE_ROW_PRE_SSE2 macro (six callers across the math-variant n1x1 helpers) and the open-coded SSE2 path in tile_draw_row_nomath_n1x1. Found via autovec-aware codegen audit: gcc 13 -O3 lowers _mm_storel_epi64((__m128i *)pix_buf, pix); col_buf[0] = palette[pix_buf[0]]; ... [eight byte indices] ... col_buf[7] = palette[pix_buf[7]]; into SEVEN redundant 16-byte stack stores of `pix` plus eight movzbl loads at distinct offsets. SLP analysis treats each byte-load as needing its own non-aliasing copy of the source vector, so the spill multiplier is one-store-per-byte-load. Reading the indices through pextrw goes register-only, and pinsrw places the gathered colors directly in xmm so the subsequent mask/blend uses no scratchpad either. Spill counts in the generated assembly (gcc 13.3 -O3 -msse2): function before after DrawTile16_Normal1x1 spills=14 spills=0 DrawTile16Add_Normal1x1 spills=15 spills=0 DrawTile16Sub_Normal1x1 spills=14 spills=0 DrawTile16SubF1_2_Normal1x1 spills=14 spills=0 The max-spill loop in tile.c (.L20167, xmm=94 spills=15) is gone; the worst residual loop now has 7 spills, mean dropped from ~14 to ~3. Microbench (x86_64 Linux, gcc 13.3, full per-row helper -- mask, db, gather, store): -O3: 150.3 -> 137.4 ms (1.094x speedup) 213 -> 233 Mrows/s -O2: 149.6 -> 137.1 ms (1.091x speedup) 214 -> 234 Mrows/s Bit-exact against the scalar reference over 200000 random trials, and across 4000 row calls in the bench harness. PIX_BUF / COL_BUF stay on the macro parameter list so the six callers compile unchanged; the unused stack arrays are DCE'd at -O2/-O3. The parallel NEON path (TILE_ROW_PRE_NEON, NEON branch of tile_draw_row_nomath_n1x1) is unchanged -- on NEON, vget_lane_u8 extracts directly into a GPR without a stack roundtrip, so the same gcc lowering bug doesn't apply; a NEON-side audit can come separately., ---------------------------------------------------------------------------------------------- libretro-stella.mk 6fcd49280bf923e171cfe87183d97ec20ce2fc99 # Version: Commits on Jun 13, 2026 ---------------------------------------------------------------------------------------------- added cassette icons for MP3/WAV files, --------------------------------------------------------------------------------------------------- libretro-swanstation.mk 93b213d805591c4f1488339c4a16f0b4cb68d44a # Version: Commits on Jun 14, 2026 --------------------------------------------------------------------------------------------------- gpu_sw: SSE2/NEON kernels for CopyOutRow16<RGBA8> and <BGRA8> The two desktop-output specialisations of CopyOutRow16 -- RGBA8 and BGRA8, used whenever the host display path is a 32bpp framebuffer (the common case on Windows/Linux/macOS GL/Vulkan backends) -- were the only ones left without a SIMD kernel. The RGBA5551 and RGB565 variants for mobile/GLES targets already had SSE2 and NEON paths. Each 16-bit MASB1555 source pixel expands to a 32-bit ARGB pixel with the same per-channel scaling pattern as the existing kernels (<<3 on each 5-bit channel; bit 15 expanded to 0x00/0xFF for RGBA, hard-coded to 0xFF for BGRA, matching the scalar VRAM16ToOutput specialisations bit for bit). The kernels process 8 pixels per iteration: r8 = (v & 0x1F) << 3 g8 = ((v >> 5) & 0x1F) << 3 b8 = ((v >> 10) & 0x1F) << 3 a_hi = (v >>arith 15) << 8 // 0xFF00 if STP bit set else 0 pair_lo = r8 | (g8 << 8) // R in low byte, G in high pair_hi = b8 | a_hi // B in low byte, A in high store unpacklo(pair_lo, pair_hi) store unpackhi(pair_lo, pair_hi) The 16-lane interleave on SSE2 (punpcklwd/punpckhwd) produces u32 lanes in little-endian R|G|B|A order, which is the RGBA8 byte layout. BGRA8 just swaps the channel pairing (B|G in pair_lo, R|A in pair_hi) and uses a constant alpha vector since BGRA8's VRAM16ToOutput hard-codes alpha = 0xFF. The NEON path uses vst2q_u16 to do the same interleave: storing {r|g, b|a} produces the [r|g, b|a, r|g, b|a, ...] u16 sequence which reads as [R|G|B|A, R|G|B|A, ...] in u32. Tail pixels (width % 8) keep the scalar VRAM16ToOutput call exactly as the RGBA5551 and RGB565 kernels do. Microbench (x86_64 Linux, gcc 13.3, full 640-pixel row, 500K iters): RGBA8: -O3: 148 -> 75 ms (1.97x) 2161 -> 4247 Mpix/s -O2: 351 -> 74 ms (4.74x) 911 -> 4317 Mpix/s BGRA8: -O3: 119 -> 66 ms (1.80x) 2683 -> 4827 Mpix/s -O2: 299 -> 64 ms (4.68x) 1070 -> 5004 Mpix/s Bit-exact across 33000 trials over widths 0..32 (exercising the scalar tail at every remainder), input pixels drawn from the full 65536 u16 range., ------------------------------------------------------------------------------------------------ libretro-tyrquake.mk 5e10328faf30161923fa0f918792fbeb7772ef5b # Version: Commits on Jun 14, 2026 ------------------------------------------------------------------------------------------------ r_aclip: batch clipped fan into a single D_PolysetDraw dispatch R_AliasClipTriangle clips an alias triangle against the frustum planes via Sutherland-Hodgman, producing a polygon of up to 7 vertices, then triangulates it as a fan around vertex 0. The old code emitted one D_PolysetDraw call per fan triangle, with the source carrying a 'FIXME: do all at once as trifan?' note above the loop. All fan triangles already share the same pfinalverts buffer (R_AliasClipTriangle's stack-local fv[pingpong]) and the same facesfront flag (inherited from the input triangle), so batching is mechanical: build a mtriangle_t array on the stack with vertindex[0..2] = (0, t+1, t+2) for t in [0, k-3], set numtriangles = k - 2, and dispatch once. mtri_fan[5] covers the worst-case fan size: a 3-vertex triangle clipped against 4 frustum planes (left, right, top, bottom) grows to at most 3 + 4 = 7 vertices, yielding a 5-triangle fan. Z-clip is handled separately upstream and never inflates the polygon past the per-plane growth of the XY clips. Performance impact on the SW path is modest (per-call D_PolysetDraw overhead is small after the static-spans change in the previous commit), but the structural change matters for two reasons. First, the GPU compute path in D_PolysetDraw (Phase 5b-06: the g_rhi->dispatch_3d_alias short-circuit) is dispatch-heavy -- one GPU submit per fan triangle on a partially-clipped entity is exactly what the unclipped batching in R_AliasPreparePoints (commit message at r_alias.c:477) was written to avoid. Bringing the clipped path under the same batching treatment closes the remaining per-triangle-dispatch hole. Second, the loop is now straight-line code with no global-state mutation inside the body (no per-iter writes to r_affinetridesc.ptriangles or to a shared mtri scratch), which simplifies reasoning about the rasterizer's preconditions when reading this code. Bit-identical output: the fan triangles are generated in the same order ((0,1,2), (0,2,3), (0,3,4), ...) and consumed by D_DrawNonSubdiv / D_DrawSubdiv in the same order (their inner loops iterate 0..numtriangles-1 with the same per-tri math), so the resulting pixel emissions are unchanged. Builds clean on x86_64, aarch64, and armv7 NEON crosses.,
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This should clear up the warnings appearing in #23661.
The relevant fix is claimed to be in
tsx4.21.1 - but let's assume it's also in4.22.2. It wouldn't make sense for it not to...The second commit was just a tag-along.
Testing
How can we test this PR?
npm run buildinweb/, see whetherDeprecationWarning: module.register()is deprecated.` appears.Checklist