Commit Graph

729 Commits

Author SHA1 Message Date
David Guillen Fandos a5c82bccd0 Update the winobj render logic 2023-07-31 22:27:12 +02:00
David Guillen Fandos e6cde3e981 Further breakdown function modes for speed 2023-07-31 20:17:36 +02:00
David Guillen Fandos 8622c43d48 Implement sprite limit
Accounts for number of cycles per scanline and stops pushing objects
that go over the limit. Reversed processing from high to low priority
and drawing from low to high.
2023-07-31 20:14:27 +02:00
David Guillen Fandos 54484ff131 Refactor sprite rendering 2023-07-31 00:35:11 +02:00
David Guillen Fandos 361f106393 Clean up a bit more and refactor optimizations.
This should also cover the affine case which was left out.
2023-07-30 23:41:46 +02:00
David Guillen Fandos 82cb11990f Improve blending code when no st-objs are visible 2023-07-30 21:26:19 +02:00
David Guillen Fandos 4349668315 Fix ST-OBJ blending
This uses an extra bit and does proper color stacking when needed to
ensure we render things correctly when ST-objects are visible.
Fixes most games that had coloring issues finally :)
2023-07-30 18:01:47 +02:00
David Guillen Fandos 8a50e2bcf1 More clean up and code rearrange 2023-07-30 00:51:31 +02:00
David Guillen Fandos b0bbe36c08 Improve windowing render functions. 2023-07-29 23:19:12 +02:00
David Guillen Fandos fbfae2e6f4 Minor cleanup 2023-07-29 22:38:16 +02:00
David Guillen Fandos a5429384fe Add missing register 2023-07-29 20:51:47 +02:00
David Guillen Fandos b026ea626a Disable optimization when there are some ST objects on the line 2023-07-29 17:20:35 +02:00
David Guillen Fandos fef2b89e87 Backport VRAM mirroring issues for OBJ rendering
When using a big sprite with a tile at the end of the 32KB VRAM block it
might end up reading past the 32KB block. This is not an "issue" since
the VRAM wraps around within the 32KB block.
2023-07-29 16:53:50 +02:00
David Guillen Fandos c6b2f315c5 Fix tile offset mask for 8bpp/2D mode 2023-07-29 16:35:08 +02:00
David Guillen Fandos 75a302d1d2 Merge video0/affine fixes from master 2023-07-29 15:47:47 +02:00
David Guillen Fandos 9a48e3a231 Update copyright and remove unused stuff 2023-07-29 01:08:55 +02:00
David Guillen Fandos c68b734bfb Some more cleanup 2023-07-29 01:06:51 +02:00
David Guillen Fandos ef7e0bbe37 Remove last macros, fix sprite alpha blending
Fixes many games, might break one or two in some weird cases.
Needs some cleanup, and bitmap support for color effects
2023-07-29 00:51:07 +02:00
David Guillen Fandos 1ee50ada80 Reimplement sprite copy-mode for obj-based windowing
Seems it fixes a couple of visual issues in games too.
Might need to re-check that we do not overdraw too much to avoid
performance issues.
2023-07-28 19:35:33 +02:00
David Guillen Fandos 85beb230f1 Partial object rendering rewrite
A couple of modes still missing but mostly done. Pixel-exact
compatibility for this change too.
2023-07-27 23:51:24 +02:00
David Guillen Fandos d6a02ff1df Reimplement blending routines 2023-07-25 23:37:02 +02:00
David Guillen Fandos 543ba652ba Rewrite layer rendering logic for tiled modes.
Bitmap mode does not really support this yet, therefore color effects
are not being rendered.
2023-07-25 23:36:56 +02:00
David Guillen Fandos 7b3c092584 Simplify color modes (there's only three really). 2023-07-21 21:11:08 +02:00
David Guillen Fandos 99a9b1d9b7 Unused macros cleanup 2023-07-21 19:56:01 +02:00
David Guillen Fandos c5108b78eb Rewrite bitmap rendering routines 2023-07-21 19:15:05 +02:00
David Guillen Fandos 11f56eb1d1 Implement text background affine rendering 2023-07-20 23:28:25 +02:00
David Guillen Fandos c2964e386a Replace all other tiled renderers.
Alhpa blending and other color effects are merged into a single function
2023-07-19 20:30:52 +02:00
David Guillen Fandos dc4c312ca7 Rewrite tile rendering base functions 2023-07-18 23:04:56 +02:00
David Guillen Fandos b88f0c0135 Rewrite window code without macros 2023-07-14 22:39:47 +02:00
David Guillen Fandos 97435283d2 Branch video to be a CXX source file.
Purposely disable all CXX linking to ensure the binary remains the same
2023-07-14 20:16:37 +02:00
David Guillen Fandos 1d972ec7ff Improve GBC sound by fixing its deferred rendering
This fixes many games that use the PSG, particuarly the noise generator.
It is very noticeable in explosion/collision sounds with Sonic and Kirby
games, where the noise channel is rapidly tweaked.
2023-07-14 00:37:33 +02:00
David Guillen Fandos 2391496432 Some video cleanups for better readability 2023-07-11 23:11:27 +02:00
David Guillen Fandos f5490a1996 Reduce video tracking vars
No need for full int, byte will do.
2023-07-09 23:05:49 +02:00
David Guillen Fandos 7f07da9ade Make sound control deterministic by having proper reset 2023-06-12 20:24:18 +02:00
David Guillen Fandos 34eb7a3bf3 Fix reset() issue with dynarec flushing
On a reset bios_swi_entrypoint can end up pointing to code over the
watermark, due to block_lookup_address_arm looking up the function
instead of translating it.
Fix it by making flush and init different functions (albeit similar).

Tested by running and resetting games automatically, causing ~10% of
games to crash.
2023-06-09 20:21:35 +02:00
David Guillen Fandos 84c347edad [interp] Improve interpreter timings and honor WAITCNT
This fixes a few games and makes the interpreter faster (since it
doesn't run an overclocked CPU anymore).
2023-06-07 19:40:27 +02:00
David Guillen Fandos c9c88f3560 [interp] Simplify memory bindings a bit 2023-06-07 12:50:17 +02:00
David Guillen Fandos f15d08f1f9 Fix Mode4 transparency
This fix exists in TempGBA/ReGBA, thanks to andymcca for finding it
2023-06-03 11:29:02 +02:00
LibretroAdmin a9376c8603
Merge pull request #211 from warmenhoven/dev/warmenhoven/tvos
Fix tvos build
2023-05-28 05:57:09 +02:00
Eric Warmenhoven 61ca45147e Fix tvos build 2023-05-27 14:39:14 -04:00
David Guillen Fandos f4e65d15c0 [arm/arm64] Fix OAM/VRAM byte writes
Forgot to add byte-doubling codepath for byte writes. This is correctly
implemented in x86 and MIPS.
2023-04-26 00:29:38 +02:00
David Guillen Fandos 872a22ae51 [mips] Correct GP restore to a more accurate location 2023-04-24 20:52:14 +02:00
David Guillen Fandos eb50c15b1c Remove CHANGED_PC_STATUS, simplify update flow 2023-04-24 20:24:03 +02:00
David Guillen Fandos 64b19d1301 Improve and simplify 16 bit I/O writes too 2023-04-21 22:21:01 +02:00
David Guillen Fandos a53399af58 Simplify I/O byte writes
Can easily be mapped to 16 bit writes.
2023-04-21 21:44:34 +02:00
David Guillen Fandos 2d28451f6c Fix SWI branch mismatch
The mismatch causes one-of errors for instruction 0F000000 (swieq 0)
which results in all sorts of funny errors (branches to bad addresses).
Fixes a couple of games.
2023-04-20 21:08:49 +02:00
David Guillen Fandos 8c6ff8d358 Simplify I/O writes further
Improve FIFO writes, make them a bit faster
2023-04-20 00:52:30 +02:00
David Guillen Fandos 6bf53cf3db Minor I/O write improvements 2023-04-19 23:22:18 +02:00
David Guillen Fandos 6eb1071dec Wrap I/O register reads
This can cause issues in big-endian platforms otherwise
2023-04-19 20:03:11 +02:00
David Guillen Fandos 413157dedd Fix timer bug regression, introduced at 0bc2a11
Thanks andy for finding the fix!
2023-04-19 20:00:28 +02:00